📘 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 0x7bb94de2d180>
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 0x7bb94d4b5ec0>
[Item(key='Dove', value=<list object at 0x7bb94d4b7580>),
Item(key='Hen', value=<list object at 0x7bb94d4b78c0>),
Item(key='Duck', value=<list object at 0x7bb94d4b7900>),
Item(key='Goose', value=<list object at 0x7bb94d4b7940>),
Item(key='Owl', value=<list object at 0x7bb94d4b7980>),
Item(key='Hawk', value=<list object at 0x7bb94d4b79c0>),
Item(key='Eagle', value=<list object at 0x7bb94d4b7a00>),
Item(key='Fox', value=<list object at 0x7bb94d4b7a40>),
Item(key='Dog', value=<list object at 0x7bb94d4b7a80>),
Item(key='Wolf', value=<list object at 0x7bb94d4b7ac0>),
Item(key='Cat', value=<list object at 0x7bb94d4b7b00>),
Item(key='Tiger', value=<list object at 0x7bb94d4b7b40>),
Item(key='Lion', value=<list object at 0x7bb94d4b7b80>),
Item(key='Horse', value=<list object at 0x7bb94d4b7bc0>),
Item(key='Zebra', value=<list object at 0x7bb94d4b7c00>),
Item(key='Cow', value=<list object at 0x7bb94d4b7c40>)]
<galactic.algebras.concept.core.Intent object at 0x7bb94d4da840>
[]
<galactic.algebras.concept.core.Extent object at 0x7bb94d4dbac0>
[]
<galactic.algebras.concept.core.Intent object at 0x7bb95f4a5bc0>
[<function small at 0x7bb94d47f6a0>,
<function medium at 0x7bb94d4c4ae0>,
<function big at 0x7bb94d4c4c20>,
<function twolegs at 0x7bb94d4c4fe0>,
<function fourlegs at 0x7bb94d4c53a0>,
<function hair at 0x7bb94d4c5760>,
<function feathers at 0x7bb94d4b3600>,
<function fly at 0x7bb94d4c5e40>,
<function swim at 0x7bb94d4c6200>,
<function run at 0x7bb94d4c65c0>,
<function hunt at 0x7bb94d4c6980>,
<function mane at 0x7bb94d4c6d40>,
<function hooves at 0x7bb94d4c7100>]
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 0x7bb94d4f0380>
[Item(key='Wolf', value=<list object at 0x7bb94d4b7ac0>),
Item(key='Lion', value=<list object at 0x7bb94d4b7b80>)]
<galactic.algebras.concept.core.Intent object at 0x7bb94d4d8dc0>
[<function fourlegs at 0x7bb94d4c53a0>,
<function hair at 0x7bb94d4c5760>,
<function run at 0x7bb94d4c65c0>,
<function hunt at 0x7bb94d4c6980>,
<function mane at 0x7bb94d4c6d40>]
<galactic.algebras.concept.core.Extent object at 0x7bb94d4f11c0>
[Item(key='Fox', value=<list object at 0x7bb94d4b7a40>),
Item(key='Dog', value=<list object at 0x7bb94d4b7a80>),
Item(key='Wolf', value=<list object at 0x7bb94d4b7ac0>),
Item(key='Cat', value=<list object at 0x7bb94d4b7b00>),
Item(key='Tiger', value=<list object at 0x7bb94d4b7b40>),
Item(key='Lion', value=<list object at 0x7bb94d4b7b80>),
Item(key='Horse', value=<list object at 0x7bb94d4b7bc0>),
Item(key='Zebra', value=<list object at 0x7bb94d4b7c00>)]
<galactic.algebras.concept.core.Intent object at 0x7bb94d4f0280>
[<function fourlegs at 0x7bb94d4c53a0>,
<function hair at 0x7bb94d4c5760>,
<function run at 0x7bb94d4c65c0>]
True
True
True