📘 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 0x71890be56700>
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 0x71890be45940>
[Item(key='Dove', value=<tuple object at 0x7189209c9990>),
Item(key='Hen', value=<tuple object at 0x718920a06900>),
Item(key='Duck', value=<tuple object at 0x71890be88c70>),
Item(key='Goose', value=<tuple object at 0x71890be88c70>),
Item(key='Owl', value=<tuple object at 0x71890be88cc0>),
Item(key='Hawk', value=<tuple object at 0x71890be88cc0>),
Item(key='Eagle', value=<tuple object at 0x71890be88d10>),
Item(key='Fox', value=<tuple object at 0x71890be88d60>),
Item(key='Dog', value=<tuple object at 0x718920ea33d0>),
Item(key='Wolf', value=<tuple object at 0x718920998b80>),
Item(key='Cat', value=<tuple object at 0x71890be88db0>),
Item(key='Tiger', value=<tuple object at 0x71890be88e00>),
Item(key='Lion', value=<tuple object at 0x71890be51a80>),
Item(key='Horse', value=<tuple object at 0x71890be533a0>),
Item(key='Zebra', value=<tuple object at 0x71890be533a0>),
Item(key='Cow', value=<tuple object at 0x718922f54040>)]
<galactic.algebras.concept.core.Intent object at 0x71890bea2f00>
[]
<galactic.algebras.concept.core.Extent object at 0x71890bea3f40>
[]
<galactic.algebras.concept.core.Intent object at 0x71890be54540>
[<function small at 0x71890be74900>,
<function medium at 0x71890be76160>,
<function big at 0x71890be762a0>,
<function twolegs at 0x71890be76660>,
<function fourlegs at 0x71890be76a20>,
<function hair at 0x71890be76de0>,
<function feathers at 0x71890be75e40>,
<function fly at 0x71890be774c0>,
<function swim at 0x71890be77880>,
<function run at 0x71890be77c40>,
<function hunt at 0x71890be98040>,
<function mane at 0x71890be98400>,
<function hooves at 0x71890be987c0>]
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 0x71890beac6c0>
[Item(key='Wolf', value=<tuple object at 0x718920998b80>),
Item(key='Lion', value=<tuple object at 0x71890be51a80>)]
<galactic.algebras.concept.core.Intent object at 0x71890beac5c0>
[<function fourlegs at 0x71890be76a20>,
<function hair at 0x71890be76de0>,
<function run at 0x71890be77c40>,
<function hunt at 0x71890be98040>,
<function mane at 0x71890be98400>]
<galactic.algebras.concept.core.Extent object at 0x71890bead500>
[Item(key='Fox', value=<tuple object at 0x71890be88d60>),
Item(key='Dog', value=<tuple object at 0x718920ea33d0>),
Item(key='Wolf', value=<tuple object at 0x718920998b80>),
Item(key='Cat', value=<tuple object at 0x71890be88db0>),
Item(key='Tiger', value=<tuple object at 0x71890be88e00>),
Item(key='Lion', value=<tuple object at 0x71890be51a80>),
Item(key='Horse', value=<tuple object at 0x71890be533a0>),
Item(key='Zebra', value=<tuple object at 0x71890be533a0>)]
<galactic.algebras.concept.core.Intent object at 0x71890beac580>
[<function fourlegs at 0x71890be76a20>,
<function hair at 0x71890be76de0>,
<function run at 0x71890be77c40>]
True
True
True