# Merkmalexploration

Die Merkmalexploration ist ein interaktiver Algorithmus der Formalen Begriffsanalyse zum Finden von Implikationen zwischen Merkmalen von Daten. Der Algorithmus berechnet eine vollständige und minimale Stammbasis, aus der alle im untersuchten Gebiet geltenden Implikationen gefolgert werden können.

## Idee

Ziel der Merkmalexploration ist es, alle möglichen Merkmalkombinationen in einem speziellen Sachbereich zu beschreiben, d. h. die Merkmallogik zu finden. Dieser Sachbereich ist durch einen formalen Kontext gegeben, der grundlegenden Datenstruktur der Formalen Begriffsanalyse. In dieser Kreuztabelle sind Beziehungen zwischen Gegenständen und Merkmalen verzeichnet. Mit Hilfe von Implikationen – in einer Erweiterung auch Klauseln – werden Abhängigkeiten und Zusammenhänge seitens der Merkmale erklärt.
Die Hauptaufgabe ist es eine Stammbasis zu bestimmen. Dabei geht man von einer Sammlung von Beispielen aus, die in einem Teilkontext gegeben sind. Der Algorithmus schlägt in einer eindeutig bestimmten Reihenfolge einem Experten (oder einem unterstützenden Programm) im Teilkontext geltende Implikationen vor. Akzeptiert der Experte diese, werden sie in die Stammbasis aufgenommen. Im anderen Fall muss der Experte ein Gegenbeispiel liefern, d. h. eine neue Zeile des Kontexts. So können selbst unendliche Mengen von Objekten (bei endlicher Merkmalmenge) untersucht werden.
Es ist auch möglich, für einen gegebenen Datensatz automatisch die Stammbasis zu berechnen; dann werden alle vorgeschlagenen Implikationen akzeptiert.

## Mathematische Grundlagen
### Pseudohüllen

Sei $X\;\mapsto \;X''$ ein Hüllenoperator auf der (endlichen) Merkmalsmenge M. Eine Teilmenge $P\;\subseteq \;M$ heißt Pseudohülle genau dann wenn sie die folgenden Bedingungen erfüllt:
* $P\;\neq \;P''$,
* $P$ enthält die Hülle $Q''$ jeder Pseudohülle $Q$, die echte Teilmenge von $P$ ist.

### Implikationen und Stammbasis

Eine Implikation auf einer Menge M ist ein Paar von Teilmengen von M. Notation: $A\;\rightarrow \;B$.
Eine Teilmenge $T\;\subseteq \;M$ respektiert eine Implikation $A\;\rightarrow \;B$, wenn $A\;\not \subseteq \;T$ oder $B\;\subseteq \;T$ gilt.
$A\;\rightarrow \;B$ gilt in einem formalen Kontext $(G,\;M,\;I)$, wenn jeder Gegenstandsinhalt $g'$ (also jede Zeile des Kontexts) die Implikation respektiert.
Eine Implikation $A\;\rightarrow \;B$ folgt aus einer Menge ${\mathcal {L}}$ von Implikationen per Definition genau dann, wenn $A\;\rightarrow \;B$ in jedem formalen Kontext gilt, in dem auch jede Implikation aus ${\mathcal {L}}$ gültig ist.
Betrachtet man die Menge aller Implikationen, die auf einem Kontext gelten, stellt sich die Frage, ob es eine Teilmenge ${\mathcal {L}}$ gibt, die alle diese Implikationen repräsentiert. Eine solche Basis muss folgende Bedingungen erfüllen:
* Jede Implikation aus ${\mathcal {L}}$ gilt im formalen Kontext (Korrektheit).
* Jede Implikation, die im Kontext gilt, folgt aus ${\mathcal {L}}$ (Vollständigkeit).
* Keine Implikation $A\rightarrow B\in {\mathcal {L}}$ folgt aus den übrigen Implikationen, also aus ${\mathcal {L}}\setminus \{A\rightarrow B\}$ (Irredundanz).
Vincent Duquenne und Jean-Louis Guigues haben gezeigt, dass für endliche Merkmalmengen eine solche Basis existiert. Sie ist sogar eindeutig bestimmbar und von minimaler Kardinalität unter allen möglichen Implikationenbasen. Hierfür gibt es verschiedene Bezeichnungen: Stammbasis, kanonische Basis oder auch D-G-Basis.
Die Stammbasis eines formalen Kontextes $(G,\;M,\;I)$ ist die Menge der Implikationen $\left\{P\mapsto P''\mid P{\text{ ist Pseudoinhalt von }}(G,M,I)\right\}$.

## Beispiel

* Der Ausgangspunkt ist ein meist unvollständiger oder auch leerer Teilkontext.
* Der Algorithmus schlägt im Teilkontext geltende Implikationen $P\;\longrightarrow \;P''$ vor. Der Experte kann sie akzeptieren oder ein Gegenbeispiel angeben:
* ce → pa, cv, cs: akzeptiert
* cs → pa: akzeptiert
* pa, cv, cs → ce: akzeptiert
* ov, cv → pa, cs, ce: Gegenbeispiel – neuer Gegenstand mit Merkmalen ov und cv
* ov, pa, cs → cv, ce: Gegenbeispiel – neuer Gegenstand mit Merkmalen ov, pa und cs
* ov, pa, cv → cs, ce: akzeptiert
* di, cv → alle Merkmale (widersprüchliche Prämisse, die entsprechende Gegenstandsmenge ist leer): akzeptiert
* di, pa, cs → alle Merkmale: akzeptiert
* di, ov → alle Merkmale: akzeptiert
* Die vom Experten akzeptierten Implikationen bilden die Stammbasis.
* Die Begriffsinhalte des erweiterten Kontexts und damit der Begriffsverband sind durch diese eindeutig bestimmt.

## Exploration mit Hintergrundwissen

Die Stammbasis zum nebenstehenden Beispiel ist
* $P^{-}\longrightarrow \;G^{-}$
* $T^{-}\longrightarrow \;G^{-}$
* $G^{-}P^{+}\longrightarrow \;T^{-}$
* $G^{-}T^{+}\longrightarrow \;P^{-}$
* $T^{+}P^{+}\longrightarrow \;G^{+}$
* $G^{+}\longrightarrow \;T^{+}P^{+}$
* $G^{-}T^{-}P^{+}P^{-}\longrightarrow \;\bot$
* $G^{-}T^{-}T^{+}P^{-}\longrightarrow \;\bot$
Dies ist allerdings eine etwas komplizierte Form, die einfache Äquivalenz auszudrücken:
          $G^{+}\longleftrightarrow \;T^{+}P^{+}$
Nur diese beiden Implikationen erhält man als Stammbasis, wenn man die Negation der Merkmale bestanden / nicht bestanden durch die Implikation $G^{+}\wedge \;G^{-}\longrightarrow \;\bot$ sowie die Vollständigkeit der Information durch die Klausel $\top \multimap \;G^{+}\vee G^{-}$ dem Algorithmus als Startwissen übergibt, analog für die anderen Merkmale P und T.
Verfügt man also über Hintergrundwissen, kann die Merkmalexploration abgekürzt und die Stammbasis verkleinert werden. So kann etwa eine Menge ${\mathcal {L}}$ von kumulierten Klauseln $\bigwedge A\rightarrow \bigvee \bigwedge _{i\in I}B_{i},\;A,\;B_{i}\;\in \;M$ verwendet werden, die ausdrucksstärker als Implikationen sind. Die Stammbasis besteht dann aus einer Menge von Implikationen ${\mathcal {B}}$ jeweils mit Prämissen P, die unter dem Hintergrundwissen abgeschlossen sind, also alle Merkmale enthalten, die durch das Hintergrundwissen gefordert sind. Für Implikationen als Hintergrundwissen bedeutet das eine wiederholte Anwendung des wie folgt definierten ${\mathcal {L}}$-Operators auf P:
          $X^{\mathcal {L}}:=X\cup \bigcup \{B\subseteq M\mid A\subseteq X,A\rightarrow B\in {\mathcal {L}}\}$
Die gültigen Implikationen des zugrunde liegenden Kontexts können dann aus ${\mathcal {L}}\cup {\mathcal {B}}$ gefolgert werden. Diese Stammbasis bezüglich eines durch das Hintergrundwissen definierten „relativen Testkontexts“ ist allerdings nicht in jedem Fall eindeutig bestimmt.

## Anwendungsgebiete

Mit Hilfe der Merkmalexploration lassen sich Datensätze auf Vollständigkeit überprüfen, Funktionale Abhängigkeiten sowie Assoziationsregeln finden und in kompakter Form darstellen, oder in Beschreibungslogiken ausgedrückte Wissensbasen vervollständigen. Eine Anwendung in der Systembiologie zielt mittels Integration von Wissen und experimentellen Daten auf Prozessregeln für genregulatorische und andere Netzwerke. In der Mathematik dient die Merkmalexploration dem Strukturieren von Beweisen.

## Software

* Concept Explorer: Einfach zu bedienendes, grafisches Java-Programm mit den wichtigsten Funktionen, einschließlich Erzeugen eines Begriffsverbands. Die Eingabe von Hintergrund-Implikationen beim Aufruf aus einem eigenen Java-Programm ist möglich.
* Conexp-ng: Erweiterbare Java-Neuimplementierung von Concept Explorer.
* Conexp-clj: Neuimplementierung im Java-basierten Lisp-Dialekt Clojure. Insbesondere für Kommandozeilen-Aufruf und skriptbasierte Programmierung geeignet, mit erweiterten Möglichkeiten wie Luxenburger-Basen, Kontext-Automorphismen (Symmetrien der Merkmale), Fuzzy-FCA oder einer Schnittstelle zum Computeralgebra-System Sage.
* ConImp: Für Linux und DOS/Windows, kommandozeilenbasiert, beschränkt auf formale Kontexte mit 256 Gegenständen, jedoch mit erweiterten Optionen wie Eingabe von Hintergrund- und unvollständigem Wissen. Hintergrundwissen verändert dort – im Unterschied zum oben beschriebenen und in conexp-clj implementierten Ansatz – den Algorithmus nicht, sondern es werden vorgeschlagene Implikationen durch Folgern aus einer Menge von Hintergrund-Implikationen entschieden, nicht durch den Experten.