🐍 Entropy-based measure

🐍 Entropy-based measure#

[1]:
from galactic.algebras.concept.core import ItemUniverse
from galactic.algebras.convex.characteristics.core import Component, Number, String
from galactic.algebras.convex.descriptions.category.basic.core import (
    CategoryDescription,
)
from galactic.algebras.convex.descriptions.core import (
    Concept,
    Context,
    GaloisConnection,
    PredicateUniverse,
)
from galactic.algebras.convex.descriptions.numerical.hull.core import (
    NumericalDescription,
)
from galactic.algebras.convex.measures.entropy.core import Entropy

Preparing the context#

[2]:
dataset = [
    {},
    {"class": "class2", "data": 2},
    {"class": "class1", "data": 3},
    {"class": "class2", "data": 4},
    {"class": "class1", "data": 5},
    {"class": "class1", "data": 6},
]
klass = String(components=(Component(expr="class"),), name="class")
data = Number(components=(Component(expr="data"),), name="data")
context = Context(
    ItemUniverse(dataset),
    PredicateUniverse(
        descriptions=(
            CategoryDescription(space=(klass,)),
            NumericalDescription(space=(data,)),
        ),
    ),
)
connection = GaloisConnection(context)
top = Concept(connection)

Computing the entropy-based measure#

[3]:
sub = Concept(
    connection,
    items=[
        context.domain[3],
        context.domain[4],
        context.domain[5],
    ],
)
entropy = Entropy(category=klass)
print(entropy(sub, top))

sub = Concept(
    connection,
    items=[
        context.domain[1],
    ],
)
entropy = Entropy(category=klass)
print(entropy(sub, top))
0.026080219007006855
0.21998160765551011