📘 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 0x7d2d403fe980>
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 0x7d2d405e3400>
[Item(key='Dove', value=<list object at 0x7d2d40369780>),
Item(key='Hen', value=<list object at 0x7d2d40385940>),
Item(key='Duck', value=<list object at 0x7d2d40385980>),
Item(key='Goose', value=<list object at 0x7d2d403859c0>),
Item(key='Owl', value=<list object at 0x7d2d40385a00>),
Item(key='Hawk', value=<list object at 0x7d2d40385a40>),
Item(key='Eagle', value=<list object at 0x7d2d40385a80>),
Item(key='Fox', value=<list object at 0x7d2d40385ac0>),
Item(key='Dog', value=<list object at 0x7d2d40385b00>),
Item(key='Wolf', value=<list object at 0x7d2d40385b40>),
Item(key='Cat', value=<list object at 0x7d2d40385b80>),
Item(key='Tiger', value=<list object at 0x7d2d40385bc0>),
Item(key='Lion', value=<list object at 0x7d2d40385c00>),
Item(key='Horse', value=<list object at 0x7d2d40385c40>),
Item(key='Zebra', value=<list object at 0x7d2d40385c80>),
Item(key='Cow', value=<list object at 0x7d2d40385cc0>)]
<galactic.algebras.concept.core.Intent object at 0x7d2d403a0280>
[]
<galactic.algebras.concept.core.Extent object at 0x7d2d405a7c00>
[]
<galactic.algebras.concept.core.Intent object at 0x7d2d40387a80>
[<function small at 0x7d2d40376660>,
<function medium at 0x7d2d40377e20>,
<function big at 0x7d2d40377f60>,
<function twolegs at 0x7d2d40390360>,
<function fourlegs at 0x7d2d40390720>,
<function hair at 0x7d2d40390ae0>,
<function feathers at 0x7d2d40377b00>,
<function fly at 0x7d2d403911c0>,
<function swim at 0x7d2d40391580>,
<function run at 0x7d2d40391940>,
<function hunt at 0x7d2d40391d00>,
<function mane at 0x7d2d403920c0>,
<function hooves at 0x7d2d40392480>]
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 0x7d2d403ada40>
[Item(key='Wolf', value=<list object at 0x7d2d40385b40>),
Item(key='Lion', value=<list object at 0x7d2d40385c00>)]
<galactic.algebras.concept.core.Intent object at 0x7d2d403ad800>
[<function fourlegs at 0x7d2d40390720>,
<function hair at 0x7d2d40390ae0>,
<function run at 0x7d2d40391940>,
<function hunt at 0x7d2d40391d00>,
<function mane at 0x7d2d403920c0>]
<galactic.algebras.concept.core.Extent object at 0x7d2d403adb00>
[Item(key='Fox', value=<list object at 0x7d2d40385ac0>),
Item(key='Dog', value=<list object at 0x7d2d40385b00>),
Item(key='Wolf', value=<list object at 0x7d2d40385b40>),
Item(key='Cat', value=<list object at 0x7d2d40385b80>),
Item(key='Tiger', value=<list object at 0x7d2d40385bc0>),
Item(key='Lion', value=<list object at 0x7d2d40385c00>),
Item(key='Horse', value=<list object at 0x7d2d40385c40>),
Item(key='Zebra', value=<list object at 0x7d2d40385c80>)]
<galactic.algebras.concept.core.Intent object at 0x7d2d405d2780>
[<function fourlegs at 0x7d2d40390720>,
<function hair at 0x7d2d40390ae0>,
<function run at 0x7d2d40391940>]
True
True
True