📘 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 0x771ca424ddc0>
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 0x771ca406e240>
[Item(key='Dove', value=<tuple object at 0x771ca439da30>),
Item(key='Hen', value=<tuple object at 0x771ca43bc380>),
Item(key='Duck', value=<tuple object at 0x771ca4067f10>),
Item(key='Goose', value=<tuple object at 0x771ca4067f10>),
Item(key='Owl', value=<tuple object at 0x771ca4067f60>),
Item(key='Hawk', value=<tuple object at 0x771ca4067f60>),
Item(key='Eagle', value=<tuple object at 0x771ca4067fb0>),
Item(key='Fox', value=<tuple object at 0x771ca409c040>),
Item(key='Dog', value=<tuple object at 0x771ca439db20>),
Item(key='Wolf', value=<tuple object at 0x771ca43806a0>),
Item(key='Cat', value=<tuple object at 0x771ca409c090>),
Item(key='Tiger', value=<tuple object at 0x771ca409c0e0>),
Item(key='Lion', value=<tuple object at 0x771ca4069180>),
Item(key='Horse', value=<tuple object at 0x771ca406a7a0>),
Item(key='Zebra', value=<tuple object at 0x771ca406a7a0>),
Item(key='Cow', value=<tuple object at 0x771cad2cab10>)]
<galactic.algebras.concept.core.Intent object at 0x771ca40ad0c0>
[]
<galactic.algebras.concept.core.Extent object at 0x771ca40ad000>
[]
<galactic.algebras.concept.core.Intent object at 0x771ca40a8640>
[<function small at 0x771ca40804a0>,
<function medium at 0x771ca4081b20>,
<function big at 0x771ca4081c60>,
<function twolegs at 0x771ca4082020>,
<function fourlegs at 0x771ca40823e0>,
<function hair at 0x771ca40827a0>,
<function feathers at 0x771ca4081800>,
<function fly at 0x771ca4082e80>,
<function swim at 0x771ca4083240>,
<function run at 0x771ca4083600>,
<function hunt at 0x771ca40839c0>,
<function mane at 0x771ca4083d80>,
<function hooves at 0x771ca40a4180>]
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 0x771ca40c18c0>
[Item(key='Wolf', value=<tuple object at 0x771ca43806a0>),
Item(key='Lion', value=<tuple object at 0x771ca4069180>)]
<galactic.algebras.concept.core.Intent object at 0x771ca40c1b40>
[<function fourlegs at 0x771ca40823e0>,
<function hair at 0x771ca40827a0>,
<function run at 0x771ca4083600>,
<function hunt at 0x771ca40839c0>,
<function mane at 0x771ca4083d80>]
<galactic.algebras.concept.core.Extent object at 0x771ca40c1880>
[Item(key='Fox', value=<tuple object at 0x771ca409c040>),
Item(key='Dog', value=<tuple object at 0x771ca439db20>),
Item(key='Wolf', value=<tuple object at 0x771ca43806a0>),
Item(key='Cat', value=<tuple object at 0x771ca409c090>),
Item(key='Tiger', value=<tuple object at 0x771ca409c0e0>),
Item(key='Lion', value=<tuple object at 0x771ca4069180>),
Item(key='Horse', value=<tuple object at 0x771ca406a7a0>),
Item(key='Zebra', value=<tuple object at 0x771ca406a7a0>)]
<galactic.algebras.concept.core.Intent object at 0x771ca40c1a00>
[<function fourlegs at 0x771ca40823e0>,
<function hair at 0x771ca40827a0>,
<function run at 0x771ca4083600>]
True
True
True