📘 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 0x7473ff620d00>
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 0x7473fecd1300>
[Item(key='Dove', value=<list object at 0x7473fecb6c80>),
Item(key='Hen', value=<list object at 0x7473fecb6fc0>),
Item(key='Duck', value=<list object at 0x7473fecb7000>),
Item(key='Goose', value=<list object at 0x7473fecb7040>),
Item(key='Owl', value=<list object at 0x7473fecb7080>),
Item(key='Hawk', value=<list object at 0x7473fecb70c0>),
Item(key='Eagle', value=<list object at 0x7473fecb7100>),
Item(key='Fox', value=<list object at 0x7473fecb7140>),
Item(key='Dog', value=<list object at 0x7473fecb7180>),
Item(key='Wolf', value=<list object at 0x7473fecb71c0>),
Item(key='Cat', value=<list object at 0x7473fecb7200>),
Item(key='Tiger', value=<list object at 0x7473fecb7240>),
Item(key='Lion', value=<list object at 0x7473fecb7280>),
Item(key='Horse', value=<list object at 0x7473fecb72c0>),
Item(key='Zebra', value=<list object at 0x7473fecb7300>),
Item(key='Cow', value=<list object at 0x7473fecb7340>)]
<galactic.algebras.concept.core.Intent object at 0x7473fecdaa00>
[]
<galactic.algebras.concept.core.Extent object at 0x7473ff612e80>
[]
<galactic.algebras.concept.core.Intent object at 0x7473fecd1380>
[<function small at 0x7473fec871a0>,
<function medium at 0x7473fecc85e0>,
<function big at 0x7473fecc8720>,
<function twolegs at 0x7473fecc8ae0>,
<function fourlegs at 0x7473fecc8ea0>,
<function hair at 0x7473fecc9260>,
<function feathers at 0x7473fecb3100>,
<function fly at 0x7473fecc9940>,
<function swim at 0x7473fecc9d00>,
<function run at 0x7473fecca0c0>,
<function hunt at 0x7473fecca480>,
<function mane at 0x7473fecca840>,
<function hooves at 0x7473feccac00>]
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 0x7473fece9c80>
[Item(key='Wolf', value=<list object at 0x7473fecb71c0>),
Item(key='Lion', value=<list object at 0x7473fecb7280>)]
<galactic.algebras.concept.core.Intent object at 0x7473fecdb180>
[<function fourlegs at 0x7473fecc8ea0>,
<function hair at 0x7473fecc9260>,
<function run at 0x7473fecca0c0>,
<function hunt at 0x7473fecca480>,
<function mane at 0x7473fecca840>]
<galactic.algebras.concept.core.Extent object at 0x7473fece9ac0>
[Item(key='Fox', value=<list object at 0x7473fecb7140>),
Item(key='Dog', value=<list object at 0x7473fecb7180>),
Item(key='Wolf', value=<list object at 0x7473fecb71c0>),
Item(key='Cat', value=<list object at 0x7473fecb7200>),
Item(key='Tiger', value=<list object at 0x7473fecb7240>),
Item(key='Lion', value=<list object at 0x7473fecb7280>),
Item(key='Horse', value=<list object at 0x7473fecb72c0>),
Item(key='Zebra', value=<list object at 0x7473fecb7300>)]
<galactic.algebras.concept.core.Intent object at 0x7473fecea0c0>
[<function fourlegs at 0x7473fecc8ea0>,
<function hair at 0x7473fecc9260>,
<function run at 0x7473fecca0c0>]
True
True
True