📘 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 0x7904d012ea80>
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 0x7904d00efd80>
[Item(key='Dove', value=<list object at 0x7904c1584780>),
Item(key='Hen', value=<list object at 0x7904c15a0b00>),
Item(key='Duck', value=<list object at 0x7904c15a0b40>),
Item(key='Goose', value=<list object at 0x7904c15a0b80>),
Item(key='Owl', value=<list object at 0x7904c15a0bc0>),
Item(key='Hawk', value=<list object at 0x7904c15a0c00>),
Item(key='Eagle', value=<list object at 0x7904c15a0c40>),
Item(key='Fox', value=<list object at 0x7904c15a0c80>),
Item(key='Dog', value=<list object at 0x7904c15a0cc0>),
Item(key='Wolf', value=<list object at 0x7904c15a0d00>),
Item(key='Cat', value=<list object at 0x7904c15a0d40>),
Item(key='Tiger', value=<list object at 0x7904c15a0d80>),
Item(key='Lion', value=<list object at 0x7904c15a0dc0>),
Item(key='Horse', value=<list object at 0x7904c15a0e00>),
Item(key='Zebra', value=<list object at 0x7904c15a0e40>),
Item(key='Cow', value=<list object at 0x7904c15a0e80>)]
<galactic.algebras.concept.core.Intent object at 0x7904c15af480>
[]
<galactic.algebras.concept.core.Extent object at 0x7904c15b8780>
[]
<galactic.algebras.concept.core.Intent object at 0x7904c1587840>
[<function small at 0x7904c158c2c0>,
<function medium at 0x7904c158da80>,
<function big at 0x7904c158dbc0>,
<function twolegs at 0x7904c158df80>,
<function fourlegs at 0x7904c158e340>,
<function hair at 0x7904c158e700>,
<function feathers at 0x7904c158d760>,
<function fly at 0x7904c158ede0>,
<function swim at 0x7904c158f1a0>,
<function run at 0x7904c158f560>,
<function hunt at 0x7904c158f920>,
<function mane at 0x7904c158fce0>,
<function hooves at 0x7904c15a80e0>]
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 0x7904c15bd600>
[Item(key='Wolf', value=<list object at 0x7904c15a0d00>),
Item(key='Lion', value=<list object at 0x7904c15a0dc0>)]
<galactic.algebras.concept.core.Intent object at 0x7904c15bd640>
[<function fourlegs at 0x7904c158e340>,
<function hair at 0x7904c158e700>,
<function run at 0x7904c158f560>,
<function hunt at 0x7904c158f920>,
<function mane at 0x7904c158fce0>]
<galactic.algebras.concept.core.Extent object at 0x7904c15bc880>
[Item(key='Fox', value=<list object at 0x7904c15a0c80>),
Item(key='Dog', value=<list object at 0x7904c15a0cc0>),
Item(key='Wolf', value=<list object at 0x7904c15a0d00>),
Item(key='Cat', value=<list object at 0x7904c15a0d40>),
Item(key='Tiger', value=<list object at 0x7904c15a0d80>),
Item(key='Lion', value=<list object at 0x7904c15a0dc0>),
Item(key='Horse', value=<list object at 0x7904c15a0e00>),
Item(key='Zebra', value=<list object at 0x7904c15a0e40>)]
<galactic.algebras.concept.core.Intent object at 0x7904d0106300>
[<function fourlegs at 0x7904c158e340>,
<function hair at 0x7904c158e700>,
<function run at 0x7904c158f560>]
True
True
True