📘 Formal concepts#
Formal concepts are the building blocks of formal concept analysis (FCA), representing
the relationships between a set of items and their attributes. In the GALACTIC
framework, formal concepts are implemented using the
Concept class of the
galactic.algebras.concept.core module, which allows for the creation,
manipulation, and analysis of these concepts within a given antitone Galois connection.
Creating concepts#
The constructor of the Concept class takes
an instance of the
GaloisConnection class as input,
which defines the context in which the concepts are formed and optionnally an iterable
of items or attributes to initialize the concept. When neither items nor attributes
are provided, the concept is initialized as the top concept (with full extent and
smallest intent).
from galactic.algebras.concept.core import (
Concept,
GaloisConnection,
create_context_from_dataset
)
from galactic.algebras.concept.examples.animals.core import ANIMAL_ATTRS, ANIMAL_DATA
context = create_context_from_dataset(ANIMAL_DATA, ANIMAL_ATTRS)
connection = GaloisConnection(context)
top = Concept(connection)
top
bottom = Concept(connection, items=[])
bottom
<galactic.algebras.concept.core.Concept object at 0x77220275e240>
The extent and intent of the concept can be accessed using the
extent and
intent attributes, respectively.
They are closed sets of items and attributes within the context of the antitone
Galois connection.
<galactic.algebras.concept.core.Extent object at 0x7722023a7ac0>
[Item(key='Dove', value=<list object at 0x77220221d300>),
Item(key='Hen', value=<list object at 0x77220221d640>),
Item(key='Duck', value=<list object at 0x77220221d340>),
Item(key='Goose', value=<list object at 0x77220221d680>),
Item(key='Owl', value=<list object at 0x77220221d6c0>),
Item(key='Hawk', value=<list object at 0x77220221d700>),
Item(key='Eagle', value=<list object at 0x77220221d740>),
Item(key='Fox', value=<list object at 0x77220221d780>),
Item(key='Dog', value=<list object at 0x77220221d7c0>),
Item(key='Wolf', value=<list object at 0x77220221d800>),
Item(key='Cat', value=<list object at 0x77220221d840>),
Item(key='Tiger', value=<list object at 0x77220221d880>),
Item(key='Lion', value=<list object at 0x77220221d8c0>),
Item(key='Horse', value=<list object at 0x77220221d900>),
Item(key='Zebra', value=<list object at 0x77220221d940>),
Item(key='Cow', value=<list object at 0x77220221d980>)]
<galactic.algebras.concept.core.Intent object at 0x772203637600>
[]
<galactic.algebras.concept.core.Extent object at 0x77220273d740>
[]
<galactic.algebras.concept.core.Intent object at 0x7722023f7380>
[<function small at 0x77220272f7e0>,
<function medium at 0x77220243fd80>,
<function big at 0x77220243fec0>,
<function twolegs at 0x7722022282c0>,
<function fourlegs at 0x772202228680>,
<function hair at 0x772202228a40>,
<function feathers at 0x77220243e8e0>,
<function fly at 0x772202229120>,
<function swim at 0x7722022294e0>,
<function run at 0x7722022298a0>,
<function hunt at 0x772202229c60>,
<function mane at 0x77220222a020>,
<function hooves at 0x77220222a3e0>]
Operating on concepts#
The Concept class implements the
Element protocol of the
galactic.algebras.lattice.core module, which
also provides methods to create concepts using the join (\(\vee\)) or
meet (\(\wedge\)) operators.
concept_1 = Concept(
connection,
items=[
context.domain.item(key='Cat'),
context.domain.item(key='Wolf'),
],
)
concept_2 = Concept(
connection,
attrs=[
context.co_domain.attr(name='mane'),
],
)
join = concept_1 | concept_2
meet = concept_1 & concept_2
display(meet.extent, list(meet.extent))
display(meet.intent, list(meet.intent))
display(join.extent, list(join.extent))
display(join.intent, list(join.intent))
display(meet <= join, meet.extent <= join.extent, meet.intent >= join.intent)
<galactic.algebras.concept.core.Extent object at 0x7722022412c0>
[Item(key='Wolf', value=<list object at 0x77220221d800>),
Item(key='Lion', value=<list object at 0x77220221d8c0>)]
<galactic.algebras.concept.core.Intent object at 0x772202238580>
[<function fourlegs at 0x772202228680>,
<function hair at 0x772202228a40>,
<function run at 0x7722022298a0>,
<function hunt at 0x772202229c60>,
<function mane at 0x77220222a020>]
<galactic.algebras.concept.core.Extent object at 0x772202422440>
[Item(key='Fox', value=<list object at 0x77220221d780>),
Item(key='Dog', value=<list object at 0x77220221d7c0>),
Item(key='Wolf', value=<list object at 0x77220221d800>),
Item(key='Cat', value=<list object at 0x77220221d840>),
Item(key='Tiger', value=<list object at 0x77220221d880>),
Item(key='Lion', value=<list object at 0x77220221d8c0>),
Item(key='Horse', value=<list object at 0x77220221d900>),
Item(key='Zebra', value=<list object at 0x77220221d940>)]
<galactic.algebras.concept.core.Intent object at 0x772202240d00>
[<function fourlegs at 0x772202228680>,
<function hair at 0x772202228a40>,
<function run at 0x7722022298a0>]
True
True
True