MLF - jvr.at

Transcrição

MLF - jvr.at
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Bakkalaureatsarbeit
Datamining
mit
Machine Learning Framework
(MLF)
Richard Springle
Jürgen Repolusk
unter der Leitung von Dr. Rudolf Seising
Institut für Medizinische Computerwissenschaften
Abteilung für Medizinische Expertenund Wissensbasierte Systeme
-1-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Mathematica ® ist ein eingetragenes Warenzeichen von © Wolfram Research Inc.
Windows © ist ein eingetragenes Warenzeichen der © Microsoft Coropration
Linux ist ein eingetragenes Warenzeichen von Linus Torvalds
Oracle ® ist ein eingetragenes Warenzeichen der © Oracle Corporation
MLF - machine learning framework © ist ein eingetragenes Warenzeichen
der Uni Software Plus GmbH
Dieses Dokument unterliegt der GNU GFDL (General Free Documentation Licence)
GNU Free Documentation License
Version 1.2, November 2002
Copyright (C) 2000 - 2003 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Version 1.5.8
-2-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Inhaltsverzeichnis
• 1 Einleitung.....................................................................................................................5
• 2 Über Mathematica....................................................................................................10
• 3 Fuzzy-Logik...............................................................................................................12
• 3.1 Definitionen.........................................................................................................12
3.1.1 Scharfe Mengen...............................................................................................12
3.1.2 Unscharfe Mengen...........................................................................................13
3.1.3 Linguistische Variablen...................................................................................14
3.1.4 Fuzzy-Operatoren............................................................................................15
3.1.5 Fuzzy-Relationen.............................................................................................16
3.1.6 Fuzzifizierung..................................................................................................17
3.1.7 Defuzzifizierung..............................................................................................20
• 4 Machine Learning Framework (MLF)...................................................................23
• 5 Mathematica und MLF unter Linux.......................................................................24
• 6 Supervised Learning mit MLF................................................................................25
• 6.1 Einführung...........................................................................................................25
6.1.1 FS-ID3 (Fuzzy-Set Instruction of Decission Trees).......................................27
6.1.2 FS-FOIL..........................................................................................................29
• 6.2 Vorgehensweise beim „Supervised Learning“....................................................31
6.2.1 Anlegen der Daten bzw. eines Datenobjektes.................................................33
6.2.2 Attribut-Matrix Plott des Datenobjektes.........................................................39
6.2.3 Grafische Skizzierung der Attribut-Matrix.....................................................44
6.2.4 Definition von Fuzzy-Sets...............................................................................47
6.2.5 Grafische Skizzierung der Attribut-Matrix mit Einbeziehung von Fuzzy-Sets .
50
6.2.6 Erzeugung eines „Decision-Trees“ .................................................................53
6.2.7 Auswertung der Ergebnisse.............................................................................57
6.2.8 Erzeugen und testen einer Regelbasis ............................................................60
Optimieren von Regelbasen (FS-RENO).................................................................69
• 6.3 Fazit.....................................................................................................................70
• 7 Unsupervised Learning mit MLF............................................................................72
• 7.1 Einführung zur Cluster-Analyse..........................................................................72
7.1.1 Ähnlichkeits- und Distanzmaße......................................................................73
7.1.2 Clusteranalytische Verfahren..........................................................................74
• 7.2 SOM (Kohonen maps).........................................................................................76
7.2.1 Grundsätzlich Arbeitsweise einer SOM..........................................................76
7.2.2 Beispiel für SOM mit Mathematica & MLF...................................................77
• 7.3 Fuzzy K-Means (clustering)................................................................................82
• 7.4 WARD (crisp clustering).....................................................................................82
7.4.1 Beispiel für WARD (crisp clustering).............................................................83
-3-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
• 7.5 Clusterberechnung mit verschiedenen Methoden...............................................89
• 7.6 Fazit.....................................................................................................................91
• 8 Kurzreferenz..............................................................................................................93
• 9 Literaturhinweise....................................................................................................101
-4-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
1 Einleitung
Dies ist ein Bericht über ein Projekt im Bakkalaureatsstudium mit folgender
Aufgabenstellung, bei der drei primäre Ziele erreicht werden sollten:
-
Ermittlung der Nutzbarkeit des Tool MLF (Machine Learning Framework) der
Firma SCCH (Software Competence Center Hagenberg) in medizinischen
Bereichen.
Betrachtung der Arbeitsweise von MLF und dessen Möglichkeiten Fuzzy-Logik
zu verwenden.
Testen der Benutzerfreundlichkeit für den Benutzer.
Daraus ergeben sich folgende sekundäre Ziele:
-
Anwendung von MLF auf ein konkretes Beispiel.
Verfügbarkeit von MLF auf verschiedenen Systemplattformen (Windows/Linux).
Betrachtung der Integrierbarkeit von MLF in den medizinischen Arbeitsalltag.
Kurze Beschreibung des Lösungsweges und der Ergebnisse:
MLF ist eine Implementierung der Datamining-Methode, das heißt der Bearbeitung einer
Menge von Daten und der Extrahierung von Erkenntnissen durch verschiedene
Algorithmen, die Zusammenhänge zwischen den einzelnen Daten darstellen.
MLF wurde als Template, sprich Paket, für Mathematica1 entwickelt. MLF selbst wurde
in C++ geschrieben, die Operationen und Funktionen derer es sich bedient wurden in der
Syntax von Mathematica verfasst und in eigenen Bibliotheken gesammelt. Das
Datamining kann in folgende vier Arbeitsschritte aufgeteilt werden;
•
Im ersten Teilschritt werden alle Daten, welche nicht für ein mögliches Ergebnis
relevant sind aus der Datenmenge entfernt.
•
Im zweiten Arbeitsschritt werden die übrig gebliebenen Daten entsprechend den
Voraussetzungen für den dritten Teilschritt gelichtet, das heißt die Daten werden so
behandelt, daß sie in einer Form vorliegen, die der gewünschte Algorithmus
verarbeiten kann.
•
Im dritten Teilschritt werden die vorbehandelten Daten durch einen Algorithmus
verarbeitet. Diese Algorithmen haben als Eingabe die Datenmenge, die als Ergebnis
1
Mathematica ist eine Software der Firma Wolfram Research zur Verarbeitung/Bearbeitung/Lösung
von komplexen mathematischen Problemen.
-5-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
vom letzten Teilschritt vorliegen, und liefern als Ausgabe entweder Regelbasen in
Form von aussagelogischen Prädikaten oder Entscheidungsbäume bestehend aus
Blättern, Kanten und Knoten.
•
Im letzten Schritt werden die Ergebnisse der Algorithmen vom Benutzer begutachtet
und bewertet.
MLF wurde derart entwickelt, daß es bereits sehr früh in den Prozess des „Datamining“
eingreift. Unter dem Tool MLF stehen dem Anwender zwei Vorgehensweisen zur
Verfügung.
•
„Supervised Learning“ ist ab der Bearbeitung der Daten, also dem zweiten Teilschritt
des „Datamining“, anwendbar.
•
„Unsupervised Learning“ ab der Extrahierung der Daten, also dem ersten Teilschritt
des „Datamining“.
„Supervised Learning“ eignet sich zur Bearbeitung von Daten die bereits vom Benutzer
gesichtet und bearbeitet wurden. Daher setzt diese Vorgehensweise eine genaue
Zielsetzung der Ergebnisse voraus. Ebenfalls von Vorteil sind mögliche Vermutungen
über die Zusammenhänge zwischen den Daten.
„Unsupervised Learning“ verlangt vom Anwender keine Vorbehandlung der Daten. Da
jedoch der Rechenaufwand für „Unsupervised Learning“ exponentiell ansteigt, bedeutet
das, daß große Datenmengen mit dieser Methode zwar verarbeitbar sind, dies aber aus
kapazitätsgründen nicht empfehlenswert ist.
„Unsupervised Learning“ wurde als vorangestellter Arbeitsschritt zum „Supervised
Learning“ konzipiert. Das bedeutet daß die möglichen Ergebnisse beider
Vorgehensweisen diesselben sind, wobei unter „Supervised Learning“ ein Teilschritt
eingespart werden kann.
Als mögliches Ergebnis können entweder Regelbasen oder Entscheidungsbäume erstellt
werden, optional können auch bereits existierende Regelbasen optimiert werden.
„Supervised Learning“ bedient sich der folgenden Algorithmen:
•
•
•
•
FS-ID3 (Erstellung von Entscheidungsbäumen),
FS-Foil (Erstellung von Regelbasen),
FS-Miner (Erlernung von Fuzzy-Regeln) und des
FS-Reno (Optimierung von Fuzzy-Controllern).
„Unsupervised Learning“ verwendet die folgenden Algorithmen:
•
SOM („Self organized maps“, Kohonen Netzwerk),
-6-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
•
•
Fuzzy K-Means und den
WARD (Clustering durch Minimierung der Fehlerquadratsumme).
Daraus ergibt sich, daß das Tool MLF durch seine Eigenschaften beschränkt für die
Anwendung auf medizinische Daten geeignet ist. Sobald die Daten vorverarbeitet wurden
und es nicht mehr notwendig ist, das „Unsupervised Learning“ durchzuführen, ist die
Verarbeitungsdauer übersehbar. Ist die Datenmenge jedoch sehr groß und nicht
vorbehandelt so wird es dadurch notwendig, „Unsupervised Learning“ durchzuführen.
Dadurch steigt der Rechenaufwand dermaßen an, dass die Auswertung der Daten zu viel
Zeit benötigen würde.
Die Benutzung von Fuzzy-Logik bedeutet, dass die verwendete Art der Fuzzifizierung
und der Defuzzifierung und sogar eigene definierte Fuzzy-Sets angegeben werden
können. Da eigene Fuzzy-Sets definiert werden können, ist es möglich die Entstehung
von Regelbasen oder Entscheidungsbäumen direkt vom Benutzer beeinflussen zu lassen
und nicht nur durch die Veränderung der Datenmenge, welche dem verwendeten
Algorithmus gegeben werden.
Das heißt, daß MLF Fuzzy-Logik benutzt, wenn es Vorteile bietet.
Die Benutzerfreundlichkeit von MLF wird sehr stark dadurch beeinflußt, daß es eine
Erweiterung zu Mathematica ist. Dabei mußten sich die Entwickler von MLF an die
Syntax der Funktionen und Arbeitsweisen von Mathematica halten. Deswegen gestaltet
sich unter MLF die Arbeit gleich wie unter Mathematica. Folglich sind die einzelnen
Verarbeitungsschritte, die zu einem gewünschten Ergebnis führen, von der richtigen
Anwendung einer Menge von Operationen und Funktionen abhängig. Somit besitzt die
Arbeit unter MLF einen ähnlichen Charakter wie die der Benutzung einer
Programmiersprache. Dies mag zwar im ersten Augenblick abschreckend wirken, ist aber
eigentlich ein Vorteil, da somit der Kreativität des Benutzer fast keine Grenzen gesetzt
sind. In der Regel sieht die Benutzung von MLF folgendermaßen aus: Nach dem Laden
des Paketes MLF für Mathematica stehen dem Benutzer alle Operationen und Funktionen
die er benötigen könnte zur Verfügung. Selbst eine Hilfefunktion und Tutorials sind unter
Mathematica für MLF abrufbereit. Somit ist die Arbeit im ersten Moment ungewohnt,
aber durchaus erlernbar und auch benutzerfreundlich.
Um die Funktionalität von MLF nachzuweisen, sollte die Verarbeitung eines
medizinischen Beispiels mit der dazugehörigen Dokumentation der Arbeitsschritte
erfolgen. Leider jedoch wurden keine brauchbaren medizinischen Daten zur Verfügung
gestellt, denn die verfügbaren medizinischen Daten waren entweder in einer komplexen
Datenstruktur verpackt oder ohne die Dokumentation dazu vorhanden. Somit stand die
Verarbeitung der Daten in keinem vernünftigen Verhältnis zum Nutzen, oder aber der
Zusammenhang zwischen den Attributen der Daten war zu klar, um Regeln direkt aus
den Daten heraus zu lesen. Deswegen war es am Sinnvollsten, aussagekräftige
Beispieldaten, welche direkt von MLF mitgeliefert werden, zu verwenden.
-7-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
In der Dokumentation der Verarbeitung der Beispieldaten in MLF sind folgende
Verarbeitungsschritte festgehalten:
•
•
•
•
Aufbereitung der Datenmenge,
Verwendung von Funktionen bzw. Operationen,
Output von MLF,
Referenz der verwendeten Funktions- und Operationsaufrufe.
„Supervised Learning“ und „Unsupervised Learning“ beziehen sich auf verschiedene
Beispieldaten. Der Grund dafür liegt darin, dass sich beide Verfahren dadurch
unterscheiden, dass sie einerseits vollständige Datensätze („Supervised Learning“),
andererseits unvollständige Datensätze („Unsupervised Learning“) verarbeiten.
Die Verfügbarkeit von MLF auf verschiedenen Plattformen ist nicht gegeben. Die zu dem
Tool MLF mitgelieferte Installationsroutine bedient einzig und alleine Windowsbenutzer. (Somit unterstützt MLF ursprünglich nur Windows Plattformen.) Da jedoch
MLF eine Erweiterung zu Mathematica ist und auf dessen Kernel, Routinen Operationen
etc. zurückgreift, genügt es, einen passenden Emulator für die gewünschte Plattform zu
finden oder zu entwickeln, welche in diesem Fall eine Emulation für Windows bietet. Da
für fast alle Plattformen eine solche Emulation existiert, kann MLF unter sehr vielen
Betriebssystemen genutzt werden. Die Arbeitsgeschwindigkeit von MLF leidet zwar
unter einer Emulation für Windows, da der Rechenaufwand bei vielen Arbeitsschritten
von MLF enorm ist, trotzdem wird so die Verfügbarkeit und Einsetzbarkeit von MLF
erhöht.
Wie für die Benutzerfreundlichkeit ist auch die Integrierbarkeit von MLF in den
normalen Arbeitsalltag dadurch bestimmt, dass die in MLF verwendeten Funktionen und
Operationen denen in einer funktionalen Programmiersprache verwendeten Bibliothek
gleichen. Durch die Bearbeitung der Beispieldaten ergab sich dies sehr deutlich.
MLF benötigt mit seiner abstrakten Bedienungsumgebung eine gewisse
Einarbeitungszeit, da die Syntax der Operationen und Funktionen, wie bereits erwähnt,
sehr gewöhnungsbedürftig ist. Durch den Dialog zwischen dem Benutzer und MLF, der
sehr technisch gehalten sein muss, fällt der Umgang mit MLF Informatikern und anderen
Technikern am Anfang bestimmt leichter, als Wissenschaftlern anderer Disziplinen.
Trotzdem ist der Umgang selbsterklärend und fügt sich daher in den Arbeitsalltag nach
einer kurzen Einarbeitungszeit, poblemlos ein.
-8-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Zusammenfassend ist zu sagen, daß bei der Anwendung von MLF auf konkrete
Datensätze wie den Celipert- und Toxoplasmose-Daten folgende Probleme auftraten:
•
•
Die Celipert-Daten waren einerseits nicht dokumentiert, andererseits zu unvollständig.
Die Toxoplasmosedaten waren zu einfach strukturiert um daraus verborgene
Zusammenhänge zu erfassen.
Daraus ergab sich, dass das Tool MLF für die Verwendung im medizinischen Bereich nur
unter bestimmten Bedingungen anwendbar ist:
•
•
•
Das Datenmaterial soll möglichst vollständig sein.
Die Daten sollen gut dokumentiert sein.
Qualitative Daten sind wichtiger als quantitative Daten.
Zusätzlich
verlangt
MLF
vom
Benutzer,
bedingt
durch
den
programmiersprachenähnlichen Aufbau, ein hohes Maß an Abstraktionsfähigkeit.
Hinzu kommt, dass der Anwender eine relative genaue Vorstellung über die
Zusammenhänge zwischen den Attributen der Daten haben sollte. MLF sucht zwar
danach, aber der Rechenaufwand und somit der Zeitaufwand sinken erheblich, wenn
gezielt gesucht werden kann.
-9-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
2 Über Mathematica
Mathematica ist ein umfangreiches Computeralgebrasystem, das über den Aufruf von
Funktionen und Operationen bedient werden kann. Mathematica besteht aus zwei
Komponenten:
•
•
dem Frontend für die Kommunikation mit dem Anwender und die Darstellung der
Ein- und Ausgaben in mathematischer Notation bzw. für die grafische Ein- und
Ausgabe
dem Kernel, der die eigentlichen Rechnungen durchführt.
Für umfangreiche Berechnungen kann der Kernel auch ohne die grafische Oberfläche des
Frontends benutzt werden. Mathematica ist nach der Installation sofort einsatzbereit. Alle
Funktionen von Mathematica besitzen die gleiche Syntax und sind ausführlich im
Hilfesystem beschrieben. Dieses System ist zudem nicht statisch, sondern so dynamisch,
daß es möglich ist, direkt aus der Hilfe heraus dem Kernel Rechenaufgaben zu
übergeben.
Mathematica ist kein proprietäres, sondern ein nach allen Seiten offenes und
standardisiertes System, das sich nahezu beliebig anpassen lässt. Es besteht aus mehreren
plattformunabhängigen Komponenten, die für den Nutzer meistens unsichtbar im
Hintergrund die Arbeit verrichten:
•
•
•
•
•
•
Der mathematische Kernel (sozusagen das Wissensbuch der Mathematik).
Das plattformunabhängige "Notebookinterface" (die Benutzeroberfläche: identisch für
Windows, Macintosh, Linux, Unix).
MathLink, das Kommunikationsprotokoll zwischen Kernel und der
Benutzeroberfläche.
MathML zur Darstellung von Formeln im WWW.
J/Link, die Schnittstelle zu Java.
MathLM, die Lizenzmanagersoftware zur Kontrolle und Steuerung der Zugriffe.
Aufgrund der offenen Standards ist es möglich, den mathematischen Kernel an nahezu
jede andere Software oder Benutzeroberfläche anzudocken. So sind zum Beispiel
Zusatzmodule zur direkten Anbindung an Microsoft Excel, Microsoft Access, Origin,
LabView, Oracle verfügbar (Machine Learning Framework ist auch eines dieser
Zusatzmodule). Selbst dem Internet gegenüber zeigt sich der Kernel via J/Link offen und
kann als webMathematica die unternehmensweite Mathematiklösung oder einfach die
Black-Box im Hintergrund von Internet-basierten Analysen und Grafen sein.
Und reicht die Leistung eines Computers einmal nicht aus, wird durch den Einsatz des
Zusatzmodules "Parallel Computing Toolkit" die dem Kernel übergebene Rechenaufgabe
auf mehrere unterschiedliche Systeme aufgeteilt (Stichwort: Verteilte Systeme).
-10-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Die Mathematik gibt Antwort auf entscheidende Probleme diverser Bereiche des
Ingenieuralltags, von der Physik über die Anwendung in der Medizin bis zur
Finanzwirtschaft. Antworten, die mit gesundem Menschenverstand allein oft nicht zu
finden sind. Wirkliche Probleme weisen nicht nur vier oder fünf Parameter auf, sondern
im Extremfall hunderte. Hierbei sind elektronische Helfer, die uns das Expertenwissen
schnell und zuverlässig liefern, notwendig. Mathematica ist einer dieser elektronischen
Helfer.
Als Alternative zu herkömmlichen, rein numerischen Methoden wie Finiten Elementen
gewinnt die Computer-Algebragestützte Simulation in zahlreichen Gebieten an
Bedeutung. Mathematica beherrscht beide Methoden und erlaubt den direkten Vergleich
der Ansätze in einem System.
Aus diesem Grund hat sich Mathematica in den letzten Jahren aus dem universitären und
wissenschaftlichen Bereich kommend, mehr und mehr in der industriellen Ingenieurstätigkeit etabliert.
Spezialisten rund um den Globus komprimieren ihr Expertenwissen zu kommerziellen
Anwendungspaketen - entworfen und programmiert in Mathematica - und bieten dieses
Know-How als Zusatzmodule an. Hier sind einige Beispiele davon:
•
•
•
•
•
•
•
•
•
Control Systems Professional
Experimental Data Analyst
Fuzzy-Logik
Technical Trader
Scientific Astronomer, Optica
Industrial Thermics
Operations Research
MathTensor
usw.
In unserem Fall der Anwendung im medizinischen Bereich, ist vor allem der Punkt
Fuzzy-Logik von großer Bedeutung. Das “Machine Learning Framework (MLF)” fällt in
diese Kategorie und ist deswegen auch von besonderem Interesse für die medizinische
Informatik.
-11-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
3 Fuzzy-Logik
Die Entwicklung der Fuzzy-Logik geht auf Lotfi A. Zadeh zurück, der sich vor ca. 25
Jahren mit diesen Ansätzen beschäftigte. Zadeh hat für diesen neuen Ansatz der Logik
die so genannten Fuzzy-Sets eingeführt, um nicht exakte und unvollständige Datensätze
(von daher der Begriff „fuzzy“), wie sie in der Wirklichkeit nur allzu oft auftreten,
mathematisch beschreiben und weiterverarbeiten zu können. Unter anderem hat sich
diese Theorie sowohl in der Mustererkennung, Entscheidungstheorie und
Regelungstechnik als auch in der Medizin als sehr nützlich erwiesen. In Japan trat man
dieser neuen Theorie relativ aufgeschlossen gegenüber, in Europa hingegen traf man
nahezu über 20 Jahre hinweg auf Zurückhaltung und Distanzierung. Somit blieb man im
westlichen Kulturkreis der klassischen zweiwertigen Logik für lange Zeit fest und
unveränderlich verhaftet. Erst in den letzten Jahren begann ein Umdenken hin zur FuzzyLogik.
3.1 Definitionen
3.1.1 Scharfe Mengen
Eine Menge wird dadurch definiert, dass alle ihre Elemente wohlunterschieden werden.
Definiert man noch zusätzlich eine Abbildung, die alle Elemente der Menge bezüglich
einer Eigenschaft auf die Werte Null oder Eins abbildet, erhält man zwei scharfe
Mengen. Somit ist eine scharfe Menge dadurch ausgezeichnet, dass alle ihre Elemente
eine gewisse Eigenschaft besitzen.
Die charakteristische Funktion für die scharfe Menge ist folgendermaßen definiert:
µA  x : X  {0,1}
µA  x =1 für x∈ A
µA  x =0 für x ∉ A
-12-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Hier als Beispiel die Darstellung der Temperatur durch eine charakteristische Funktion µ
für eine scharfe Menge:
3.1.2 Unscharfe Mengen
Eine unscharfe Menge kann man nur dadurch erhalten, daß man für die
Zugehörigkeitsfunktion nicht nur die diskreten Werte Null und Eins zulässt, sondern auch
beliebige reelle Werte dazwischen. Dadurch wird es möglich, einen Übergang zwischen
„zugehörig“ und „nicht zugehörig“ festzulegen. Mathematisch gesehen sieht dies
folgendermaßen aus:
Gegeben sei der Merkmalsraum X und die Teilmenge A von X:
A⊆ X
Weiters sei folgende Zugehörigkeitsfunktion definiert:
µA  x : X [0,1]
Somit wird durch diese Funktion jedem Element x aus A ein Zugehörigkeitsgrad µA(x)
aus dem Intervall [0,1] zugewiesen. Die so entstandene Menge A wird als unscharfe
beziehungsweise als Fuzzy-Menge bezeichnet.
-13-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Hier als Beispiel die Darstellung der Temperatur durch eine Zugehörigkeitsfunktion µ für
eine unscharfe Menge:
3.1.3 Linguistische Variablen
Es sollte nun gezeigt werden, wie Variablen durch eine Zugehörigkeitsfunktion µ(x)
dargestellt werden können. Dazu bedient man sich der Fuzzy-Sets. Diese werden durch
Zugehörigkeitsfunktionen beschrieben. Mathematisch kann ein Fuzzy-Set
folgendermaßen beschrieben werden:
A={ x , µA  x ∣x ∈ X }
µA(x), die Zugehörigkeitsfunktion die x in A in die Menge X auf den Zugehörigkeitsraum
abbildet. Der Bereich der Zugehörigkeitsfunktion ist eine Untermenge der reellen Zahlen
mit endlicher Obergrenze und der Untergrenze Null.
Linguistische Variablen sind nichts anderes als die Zusammenfassung von ganzen Sätzen
von Fuzzy-Mengen, die ein und diesselbe Kenngröße charakterisieren, die dann zu einer
linguistischen Variable zusammengefasst werden können. Konkret ist eine linguistische
Variable ein Mengensystem folgender Art:
VL = {A, X, G, B}
wobei:
• G eine Menge von syntaxtischen Regeln ist, die die linguistische Diskretisierung von
-14-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
•
•
•
VL bestimmt.
Die Menge A aus der Menge G resultierende Terme beinhaltet.
X ist die physikalisch relevante Grundmenge.
Die Menge B inkludiert die semantischen Regeln, welche jedem Term seine
physikalische Bedeutung über die Grundmenge X zuordnet.
3.1.4 Fuzzy-Operatoren
Mit Hilfe der Fuzzy-Operatoren lassen sich Fuzzy-Sets der gleichen Grundmenge
miteinander verknüpfen. Die wichtigsten Verknüpfungsarten sind OR, AND und NOT.
•
AND Operator
Für die AND-Verknüpfung zweier Fuzzy-Sets wird der Minimum Operator verwendet,
definiert durch den Durchschnitt zweier unscharfer Mengen:
A∧B≡µA∩B  x =min µA  x  , µB  x , x∈ X
-15-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
•
OR Operator
Für die Oder-Verknüpfung zweier Fuzzy-Sets wird der Maximum Operator verwendet.
Definiert durch die Vereinigung zweier unscharfer Mengen:
A∨B≡µA∪B  x =max µA  x  , µB  x  , x∈ X
•
NOT Operator
Für das Komplement einer unscharfen Menge A wird die Negation verwendet:
¬A≡µ¬A  x =1−µA  x  , x ∈ X
3.1.5 Fuzzy-Relationen
Die bisherigen Verknüpfungen zielten lediglich auf Fuzzy-Mengen der selben
Grundmenge ab. Nun soll dazu übergegangen werden Fuzzy-Sets unterschiedlicher
Grundmengen zueinander in Relation zu setzen. Dies bewerkstelligt man unter
Zuhilfenahme des kartesischen Produkts, wobei Regeln der Form
IF p THEN c
modelliert werden. Eine Regel, die auch als Implikation bezeichnet wird, besteht aus
einer Prämisse p und einer Konklusion c. Geht man davon aus, dass die Prämisse p durch
-16-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
das Fuzzy-Set X1 und die Konklusion c durch das Fuzzy-Set X2 beschrieben ist, so
definiert das kartesische Produkt eine unscharfe Ausgangsmenge X.
pc
p∈ X 1
c∈ X 2
3.1.6 Fuzzifizierung
Mittels der Fuzzyfizierung werden die Zugehörigkeitswerte aller linguistischen
Elementaraussagen bestimmt, die die Ein- und Ausgangsgrößen des Fuzzy-Reglers
betreffen. Die Anzahl der linguistischen Terme sowie auch der Grad der Überlappungen
der einzelnen unscharfen Mengen ist vom jeweiligen Anwendungsfall abhängig. Meist
unterliegt dies der Entscheidung des Entwicklers beziehungsweise des Anwenders.
Regelbasis
Die Regelbasis enthält die sogenannten Produktionsregeln. Darin befindet sich das
Expertenwissen zur Regelung des Prozesses. Diese Regelbasis für eine Anzahl von k
Produktionsregeln (R1, R2,... Rk) kann allgemein folgendermaßen beschrieben werden:
Rk: IF pk THEN ck
Rk
pk
ck
Produktionsregel
Prämissen als Funktion der Eingangsgröße
Konklusionen als Aussagen
Beispiel für die Steuerung eines Ventils für die Wasserzufuhr einer Badewanne:
IF (Temperatur = heiß AND Gradient = hoch) OR Temperatur=sehr heiß THEN
Ventilstellung = ganz zu
Die in der Regelbasis enthaltenen Regeln sollten das Ergebnis der eingehenden
Systemanalyse eines Prozesses sein und nach Möglichkeit widerspruchsfrei und
vollständig sein. Mit einer solchen Regelbasis ist es also möglich, Entscheidungen
anhand von Eingangsgrößen zu treffen. Oft ist es sehr hilfreich, sich eine solche
Regelbasis als Tabelle zu visualisieren.
-17-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Hier ist ein Beispiel für eine Visualisierung in Form einer Tabelle:
AND
Gradient
Temperatur
negativ
null
positiv
sehr kalt
ganz offen
ganz offen
offen
kalt
ganz offen
offen
offen
warm
mittel
mittel
zu
heiß
zu
zu
ganz zu
sehr heiß
zu
ganz zu
ganz zu
Inferenz
Unter Inferenz versteht man die Auswertung der Regeln einer Regelbasis und die
anschließende Zusammenfassung der daraus abzuleitenden Handlungsanweisungen als
Grundlage für eine zu implementierende Entscheidungsstrategie. Man sollte hierbei
beachten, daß man quasi völlig freie Hand bei der Auswahl der Strategie hat.
Die Auswertung der Regeln laufen nach folgendem Schema ab:
•
Ermittlung der aktiven Regeln: Es werden zu Beginn jene Regeln aus der Regelbasis
in Betracht genommen, deren Prämissen einen Erfülltheitsgrad größer als Null
aufweisen.
•
Ermittlung der einzelnen Ausgangs- und Fuzzy-Mengen. Dafür wird zuerst für jede
aktive Regel der Wahrheitswert der Prämisse bestimmt. Dieser Wert gibt an, zu
welchen Grad die Regel erfüllt ist. In der Abhängigkeit der gewählten
Entscheidungsstrategie liefert die Implikation nun unterschiedliche
Zugehörigkeitsmaße.
Entscheidungsstrategien:
MAX-MIN-Inferenz:
Dieses von Zadeh und Mamdani entworfene Schema ist das wohl verbreitestete
überhaupt. Dabei wird der OR-Verknüpfung der max-Operator; der AND- und der
Implikation-Verknüpfung der min-Operator zugewiesen.
-18-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
OR
AND
Implikation
max
min
min
Beispielbild zur MAX-MIN-Inferenz:
MAX-PROD-Inferenz
Bei dieser Inferenz werden für AND und OR die gleichen Operatoren wie bei der MAXMIN-Inferenz verwendet. Jedoch wird für die Implikation statt eines min-Operators der
Produkt-Operator (.) verwendet.
OR
AND
Implikation
max
min
(.)
-19-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Beispielbild zu MAX-PROD-Inferenz:
3.1.7 Defuzzifizierung
Unter Defuzzifizierung versteht man die Ermittlung eines scharfen Wertes aus einer
unscharfen Menge. Übliche Methoden zur Defuzzifizierung sind:
Maximum Height
Diese Methode liefert als Ausgangsgröße uS den Wert, für den die
Zugehörigkeitsfunktionen der Ausgangsmenge U ihr Maximum erreichen.
µU u S =max µU u
Der Vorteil darin liegt in der einfachen Berechnung von uS aus µU. Zu Problemen kann es
jedoch kommen, wenn in µU(u) mehrere Maxima auftreten.
-20-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Hier dazu Beispielbild:
Mean of Maximum
Hier wird der Maximum-Mittelwert berechnet. Die Mean of Maximum Methode liefert als
Ausgangsgröße uS das arithmetische Mittel aller Werte, für die die
Zugehörigkeitsfunktion µU(u) maximal ist. Hierbei können Probleme entstehen, wenn im
µU Verlauf mehrere plateauartige Verläufe vorhanden sind, auf denen überall der
Maximalwert gegeben ist.
Beispiel:
-21-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Center of Gravity
Die sogenannte Schwerpunktsmethode liefert als Ausgangsgröße uS, die u Komponente
des Schwerpunkts der Fläche unter dem µ(u) Grafen. Hierbei wird die
Zugehörigkeitsfunktion als Fläche aufgefasst. Die scharfe Ausgangsgröße uS erhält man
durch die Berechnung der Komponente u des Flächenschwerpunkts unter dem Grafen µ
(u).
Die Formel dafür lautet:
uS =
∫ u⋅µu u⋅du
u
∫ µu u⋅du
u
Der Vorteil in dieser Methode liegt darin, daß der gesamte Verlauf der
Zugehörigkeitsfunktion in die Berechnung des scharfen Wertes miteinbezogen wird.
Aber auch bei dieser Methode kann ein Problem auftreten, denn der Zugehörigkeitswert
kann unter Umständen sehr klein sein.
Beispiel:
-22-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
4 Machine Learning Framework (MLF)
Machine Learning Framework (MLF) ist ein AddOn für Mathematica, welches es
ermöglicht, eine Menge von Algorithmen für maschinelles Lernen auf Daten
anzuwenden.
Fuzzy-basierende Lernmethoden gehören dazu. MLF wurde vom Software Competence
Center Hagenberg GmbH (www.scch.at) entwickelt und wird von der Firma Uni
Software Plus GmbH (www.unisoftwareplus.com) vertrieben. Ein Teil der
Implementation von MLF wurde in C++, der andere in Mathematica, durchgeführt. MLF
sollte laut Herstellerangaben unter allen Microsoft Windows-Systemen lauffähig sein.
Lernalgorithmen von MLF:
Supervised Learning:
•
FS-ID3 (fuzzy decision trees)
•
FS-FOIL (fuzzy rule learning)
•
FS-MINER (fuzzy rule learning)
•
RENO (optimizing for fuzzy controllers)
Unsupervised Lerning:
•
SOM (Kohonen maps)
•
Fuzzy K-Means (clustering)
•
WARD (crisp clustering)
Zusätzliche Features:
•
Advanced scatter plots
•
Parallel coordinates visualization
•
Fuzzy-Logik (using different types of fuzzy-sets and t-normes)
•
Fuzzy-Inference (Mandani, Sugeno, Tagaki-Sugeno-Kang)
Die Software kann von http://www.unisoftwareplus.com/products/MLF/ heruntergeladen
werden. Um MLF zu installieren, ist es notwendig, daß Mathematica bereits auf dem
Rechner vorinstalliert wurde. Beim ersten Start des MLF AddOns ist die Eingabe eines
„Licence Keys“ erforderlich, der direkt von der Firma SCCH angefordert werden muss.
-23-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
5 Mathematica und MLF unter Linux
Wenn man das MLF-Tool unter Linux benutzen will, so ist es notwendig zuerst
Mathematica mit der Windows Emulation Wine (http://www.winehq.com/ ) unter Linux
zu installieren. Wichtig ist, dass nicht die Linux Installation von Mathematica ausgeführt
wird, da MLF sonst nicht ausführbar wird. Das ist zwar ein wenig umständlich, aber nicht
anders möglich, da momentan noch kein direkter Support von MLF unter Linux
vorhanden ist.
Nach beziehungsweise während des Installationsprozesses kann es vorkommen (wenn
man noch keine Windows Fonts für Wine installiert hat), daß an dem User-Interface von
Mathematica kryptische, sinnlose Zeichenketten ausgegeben werden. Um die ausgebenen
Zeichen richtig darstellen zu können, müssen die Schriftsätze einer vorhandenen
Windows-Installation (in C:\Windows\Fonts\ ) in das Fonts-Verzeichnis der WineWindows-Partition kopiert werden.
(zum Beispiel in: ~/.wine/fake_windows/Windows/Fonts/ ) Wenn keine existierende
Windows Installation vorhanden ist, ist es möglich, eine Sammlung von Fonts von
folgender Internetseite herunterzuladen: http://corefonts.sourceforge.net/ .
Nachdem alle Schriftsätze installiert wurden und alle Zeichen korrekt dargestellt sind,
folgt die übliche Registrierung von Mathematica beim ersten Start des Programms.
Erst nachdem Mathematica installiert wurde, kann MLF unter Wine integriert werden.
(downloadbar von: http://www.unisoftwareplus.com/products/MLF/download.html )
Der Installationsvorgang sollte ohne Komplikationen ablaufen und nach seinem
Abschluß sollte MLF unter Mathematica aufrufbar sein. Wie unter MS Windows wird
MLF mit dem Befehl Needs ['MLF'] geladen. Die Verarbeitungsgeschwindigkeit von
MLF leidet trotz der Emulation nur geringfügig und sollte im Arbeitsbetrieb nicht
auffallen.
-24-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
6 Supervised Learning mit MLF
Anfang der 70er Jahre des 20. Jahrhunderts entstand der Wunsch, die menschliche
Eigenschaft des Lernens und die Fähigkeit des Interpretierens maschinell nachzubilden.
Unter der wissenschaftlichen Disziplin des „Data Minings“ werden alle Theorien,
Algorithmen und Erkenntnisse zusammengefasst, welche sich mit dieser Aufgabe
beschäftigen.
Die Ergebnisse auf diesem Gebiet sind heute schon so weit fortgeschritten, dass „Data
Mining“ seit mehr als 10 Jahren industriell eingesetzt wird.
Die Anwendungen sind vielfältig, sie reichen von der Suche nach Verhaltensmustern von
Kunden eines Einkaufszentrum bis zur Auffindung von Regeln bzw. Zusammenhängen
zwischen Datensätzen von einmal aufgezeichneten Daten.
Für die Medizin ist gerade der zweite Punkt des Findens von Regeln besonders
interessant, denn dort gibt es auch noch heute Krankheiten, für welche es keine korrekten
Diagnoseregeln gibt, jedoch ausreichend unaufgearbeitetes Dokumentationsmaterial.
Außerdem mehrt sich der Wunsch, den Arzt in seiner Arbeit mit „Expertensystemen“ zu
unterstützen, um ihn somit von Routinearbeit zu befreien.
Jedes Expertensystem benötigt eine Regelbasis, mit welcher aus einer Menge von
Inputwerten ein Outputwert generiert wird. Der Output stellt eine Entscheidung dar, die
als eine Diagnose interpretiert werden kann.
Unter einer Regelbasis ist zu verstehen, dass es sich dabei um eine Vorschrift (einer Art
von Algorithmus) handelt, welche einen genau definierten Input an Attributen mit genau
definiertem Wertebereich beinhaltet und basierend darauf auf ein bestimmtes
„Zielattribut“ zu schließen vermag.
Außerdem gibt es in der Medizin genügend Dokumentationen, welche ausreichend
Informationen enthalten, um zu versuchen, aus ihnen neues Wissen durch „Data Mining“
zu gewinnen.
Abschließend folgt daraus, dass „Data Mining“ eine geeignete Vorgehensweise ist, um
vorhandene Datenbanken in der Medizin aufzuarbeiten und vor allem sinnvoll zu nutzen.
6.1 Einführung
„Data Mining“ gliedert sich grob in drei Abschnitte. Im ersten Abschnitt werden die
Daten aufbereitet.
Als erster Schritt wird unnötiger „Datenmüll“ erkannt und entfernt, das heisst es werden
alle Attribute und deren Ausprägungen in den vorhandenen Daten entfernt, die in keiner
zu vermuteten Beziehung zum Zielattribut stehen. Damit wird versucht unnötiger
Rechenaufwand zu vermeiden.
Danach müssen die Daten in verarbeitungsfreundliche Form gebracht werden, was
beudetet das Konvertierungen auf den bereits aussortierten Daten durchgeführt werden
-25-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
müssen, um diese für die Verarbeitung mit den verschiedensten Algorithmen
vorzubereiten.
Im zweiten Abschnitt wird versucht, aus den aufbereiteten Daten „neues Wissen“ zu
extrahieren. Für diesen Zweck existieren je nach Bedarf und Aufgabenstellung „DataMining-Algorithmen“ die auf die Daten angewandt werden können.
Im dritten und letzten Schritt wird das somit generierte Wissen auf dessen
„Sinnhaftigkeit“ hin betrachtet, bewertet und interpretiert.
Das Template „MLF“ für Mathematica, bietet einerseits die Methode des „Unsupervised
Learnings“ und andererseits die Methode des „Supervised Learnings“, um „Data Mining“
auf beziehungsweise bei Daten anzuwenden.
„Unsupervised Learning“ optimiert bzw.verbessert die Qualität gegebener Daten oder es
ergänzt fehlende Merkmalsausprägungen zu einem Datensatz, sofern dies überhaupt
möglich ist.
„Unsupervised Learning“ greift ab dem ersten Schritt des „Data Minings“ ein. Das
Ergebnis dieser Methode sind aufbereitete Daten (bzw. selbstorganisierende
Datenstrukturen), welche als Input für die Vorgangsweise des „Supervised Learnings“
benutzt werden können.
„Supervised Learning“ verlangt hingegen bereits aufbereitete Daten als Eingabe für die in
dieser Methode verwendeten Algorithmen. Der Einsatz dieses Verfahrens ist auch erst ab
dem dritten Teilschritt von „Data Mining“ (Anwendung von Algorithmen) gedacht. Als
Ergebnis liefert „Supervised Learning“ im Gegenzug zu „Unsupervised Learning“
wahlweise Entscheidungsbäume oder Regelbasen. (Wahlweise kann auch eine
Optimierung von Fuzzy-Controllern bzw. Regelwerken vorgenommen werden).
Als Ergebnis haben beide Methoden dasselbe Ziel der Generierung von neuem Wissen
aus bestehenden Daten.
Insgesamt ist zu vermerken, dass „Unsupervised Learning“ für die Bearbeitung von
„rohen Daten“ und „Supervised Learning“ für die Bearbeitung von bereits
aufgearbeiteten Daten geeignet ist.
Dieses Kapitel beschäftigt sich mit allen relevanten Teilen und Aspekten des
„Supervised Learnings“. Im Anschluß daran wird „Unsupervised Learning“ vorgestellt
und in all seinen Facetten diskutiert.
„Supervised Learning“ setzt nicht, wie durch die vorigen Angaben zu vermuten wäre, bei
dem Anwender ein „extrem“ genaues Bewusstsein über die möglichen Zusammenhänge
zwischen den Attributen seiner Daten voraus. Jedoch ist dies für einen schnelleren
Fortschritt der Arbeit sehr empfehlenswert. Eine Vermutung genügt, um für das
„Supervised Learning“ alle Angaben machen zu können, die für die Durchführung dieser
Methodik benötigt werden.
„Supervised Learning“ bietet dem Benutzer eine Vielfalt von Eingriffsmöglichkeiten, die,
falls dieser es wünscht, genutzt werden können. Oft können durch ein paar manuelle
Veränderungen (z.B Änderung von Fuzzy-Sets) die Ergebnisse verbessert werden
beziehungsweise es kann dem Rechner viel Arbeit abgenommen werden. Dadurch ist
-26-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
auch gewährleistet, das der Kreativität des Benutzers keine Grenzen gesetzt sind.
Für das „Supervised Learning“ wurden insgesamt vier Algorithmen implementiert:
•
•
•
•
FS-ID3,
FS-FOIL,
FS-MINER (Entwicklung der Firma SCCH)
RENO (Entwicklung der Firma SCCH)
Die Algorithmen, FS-Miner und RENO wurden von der Firma SCCH entwickelt, somit
ist die genaue Vorgehensweise nur der Firma selbst bekannt ist. FS-MINER
ermöglicht das Erlernen von Fuzzy-Regeln und RENO optimiert Fuzzy-Controler.
6.1.1 FS-ID3 (Fuzzy-Set Instruction of Decission Trees)
Der Algorithmus FS-ID3 wurde von J. Quinlan 1979 in seiner Grundform formuliert.
Wie der Name bereits vermuten läßt, erstellt der Algorithmus einen Entscheidungsbaum
für die Klassifizierung einer Datenmenge bezüglich eines Attributes .
Im Entscheidungsbaum sind die Knoten die Attribute, (deren Werte für die Bestimmung
des Ziellattributes hergenommen werden), die Kanten die dazugehörigen
Merkmalsausprägungen und die Blätter die Entscheidungsklassen (die
Merkmalsausprägungen zu dem Zielattribut).
Daraus folgt, dass mit der Anzahl der Attribute und der dazugehörigen
Merkmalsausprägungen auch die Regeln unweigerlich komplexer werden.
Im Entscheidungsbaum ist jeder mögliche Pfad eine Regel. Diese Regeln können
aussagelogisch (daher auch fuzzyfizierbar) dargestellt werden, wobei jeder Pfad von der
Wurzel zu einem Blatt einer Konjunktion entspricht (alle Kanten die von einem Knoten
zu einem gleichen anderen Knoten führen, werden durch Fuzzy-Sets zusammengefaßt).
Alle Pfade, die zur selben Klasse führen, werden disjunktiv zusammengefasst und die
Klassen am Blattknoten werden zu einer Konklusion. (Die Konjunktionen entlang eines
Pfades werden dadurch zu Vorbedingungen.)
-27-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Aussagenlogische Verknüpfungen erstellt aus einem Entscheidungsbaum:
Die genaue Formulierung und Vorgehensweise des Algorithmus lautet:
Gegeben: Menge klassifizierter Beispiele E
Algorithmus: createTree (E)
-28-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
IF E = {}
THEN RETURN Blattknoten, der mit einer “geeigneten” Klasse markiert ist
IF alle Beispiele in E gehören zur selben Klasse C
THEN RETURN Blattknoten der mit C markiert ist
SELEKTIERE eine EFFIZIENTES Attribut A mit dem Wertebereich {w1,...,wn}
PARTITIONIERE E in E1,...,En abhängig von den Wertausprägungen von A
BERECHNE rekursive: T1:= createTree(E1) ,..., Tn:= createTree(En)
RETURN Baum mit Wurzel A und den mit w1,...,wn markierten
Kanten zu den Unterbäumen T1,...,Tn
Die Eigenschaften des Algorithmus sind folgende:
•
•
•
Es gibt nur endliche Wertebereiche (das heißt symbolische „diskrete“ Attribute)
Bei leeren Beispielmengen wird die Klasse mit der größten Häufigkeit im
Vorgängerknoten zugeordnet.
Die Attributauswahl geschieht aufgrund von „Informationsgewinn“
Da FS-ID3 eine heuristische Methode ist um einen Entscheidungsbaum zu konstruieren,
ist seine Effizienz in der Praxis nicht immer optimal, da jedoch das Problem der
Konstruktion an und für sich ein NP-vollständiges ist, stellt der Algorithmus eine gute
Annäherung an eine optimale Lösung und Laufzeit dar.
6.1.2 FS-FOIL
Der Algorithmus FS –FOIL wurde 1990 ebenfalls von J. Quinlain formuliert. Genauso
wie der FS-ID3 Algorithmus hat er Informationsgewinn zum Ziel.
Anders als der FS-ID3 sucht er nach einer Menge von Hornklauseln (Regeln), die
Prädikate (die Konzepte) beschreiben.
Die Hornlogik basiert auf der Prädikatenlogik, wobei eine „Hornklausel“ (oder einfach
nur Klausel) aus Literalen mit höchstens einem negierten Literal besteht, Klauseln mit
keinem negierten Literal werden Fakten genannt.
Der Algorithmus geht dabei so vor, daß er die Definition des Prädikates erlernt (Hillclimbing-Suche), das heißt er „erlernt“ startend von einem leeren Klauselrumpf durch
schrittweises Hinzufügen von Literalen die passenden Regeln. Somit erlernt der
Algorithmus sowohl aus positiven (Grundatomformel mit Prädikat P) wie auch aus
negativen Beispielen (negierte Grundatomformel mit Prädikat P), wobei das Ziel lautet,
Klauseln zu finden, welche alle negativen „Beispiele“ (Eingangsattributwertepaare)
ausschließen und möglichst viele positive Beispiele einschließen. Damit wird erreicht,
dass die vom Algorithmus „erlernte“ Klauselmenge nur Fakten enthält und diese somit
korrekte Aussagen über die Eingabewerte treffen (bzw. korrekte Zuordnungen der
-29-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Eingangswerte zu den Merkmalsausprägungen des Zielattributes tätigen).
Beispiel:
Der Algorithmus ist folgendermaßen definiert:
Gegeben:
– zu lernendes Prädikat P(X1,...,Xn)
– Pos: Menge der positiven Beispiele (als Tupel notiert)
– Neg: Menge der negativen Beispiele (als Tupel notiert)
– BK: Hintergrundtheorie (endliche Menge von Fakten)
Algorithmus:
K := {}; (* zu lernende Klauselmenge *)
WHILE Pos ≠ {} DO
Pre := Lerne_Klauselrumpf
K := K ?{P(X1,...,Xn) :- Pre}
Pos := Pos \ { Menge der positiven Beispiele die Pre erfüllen }
Algorithmus: Lerne_Klauselrumpf
Pre := ()
Old := {X1,...,Xn} (* Menge der Variablen *)
WHILE Neg ≠ {} DO
-30-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
FOR EACH Prädikat Q aus BK ?{P}
DO
Lit := Menge alle Literale mit Prädikat Q in denen nur Variablen
vorkommen wobei mindestens eine Variable aus Old ist.
FOR EACH Lit DO
Berechne den Informationsgewinn für L
Wähle L mit größtem Informationsgewinn aus
Pre := Pre L
Old := Old Menge der Variablen aus L
Pos := Menge aller Erweiterungen von Beispielen aus Pos die L erfüllen
Neg := Menge aller Erweiterungen von Beispielen aus Neg die L erfüllen
RETURN Pre
Die Eigenschaften des FS-FOIL Algorithmus sind:
•
•
Fs-Foil bietet eine mächtige Beschreibungsmöglichkeit für Konzepte. Es ist eine
Erstellung einer sehr genauen Wissensbasis möglich.
kann Hintergrundwissen (Paare von Attributen und Werten) optimal verarbeiten.
Die Nachteile des FS-Foil Algorithmus liegen in seiner Laufzeit, denn die Größe der zu
betrachtenden Literale steigt exponentiell mit der Menge der Prädikate und trotz der „hillclimbing-Vorgehensweise“ des Algorithmus besteht immer noch eine hohe Komplexität,
jedoch sind diese Nachteile bei allen Algorithmen zur Lösung von NP-vollständigen
Probleme in der Regel zu finden.
6.2 Vorgehensweise beim „Supervised Learning“
Um Algorithmen beim „Supervised Learning“ optimal einsetzen zu können, ist
diesbezüglich eine komplizierte Syntax zur Benutzung notwendig. Deswegen ist im
Gesamten gesehen die Syntax von MLF sehr umfangreich und ähnelt der einer
funktionalen Programmiersprache. Zur verwendeten Syntax ist noch zu erwähnen, dass
sie sich an der von Mathematica aufbaut und sich somit nahtlos in den Arbeitsfluss von
Mathematica einfügt.
Grundsätzlich lässt sich die Vorgehensweise im „Supervised Learning“ wie folgt
skizzieren:
1.) Anlegung der Daten bzw. eines Datenobjektes.
2.) Optionale grafische Darstellung des Datenobjektes durch einer Attribut-MatrixPlot in verschiedenen Darstellungsweisen (2 oder mehrdimensional).
-31-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
3.) Optionale grafische Skizzierung ausgewählter Dimensionen der Attribut-Matrix
in verschiedenen Darstellungsweisen.
4.) Optionale Definition von Fuzzy-Sets.
5.) Optionale Darstellung der Attribut-Matrix mit Einbeziehung der Fuzzy-Sets in
verschiedenen Darstellungsweisen.
6.) Erzeugung eines „Decision Trees“ (FS-ID3)
7.) Vergleich der originalen Daten und der Ergebnisse des Entscheidungsbaums
8.) Erzeugung und Testung einer Regelbasis (FS-FOIL oder FS-MINER).
9.) Optimieren von Regelbasen (FS-RENO)
Die Angabe der optionalen Schritte ist für das Optimieren und dem Finden von richtigen
und vor allem sinngebenden Regelbasen (sowie Entscheidungsbäumen) unumgänglich,
aber für den rein technischen Weg nicht notwendig.
Diese Schritte sollten also nicht einfach ignoriert, sondern wenn nötig ausgeführt werden.
Im folgenden werden die einzelnen Schritte genauer erläutert und anhand eines sich
aufbauenden Beispiels dargestellt. Die Daten des Beispiels beinhalten eine Menge an
Datensätze, die eine Beschreibung der Pflanzenfamilie „Iris“ und ihrer Unterarten
beinhaltet. Als Attribute enthalten die Daten Breite und Länge der Blüten und Blätter
sowie den Namen der Unterart. Im Kapitel „Unsupervised Learning“ wird ein weiteres
Beispiel bearbeitet.
Die Daten aus den Beispielen sowohl von „Supervised“ als auch „Unsupervised
Learning“ stammen von mitgelieferten Datensätzen aus dem Tutorial für MLF.
Warum keine medizinischen Daten verwendet wurden ist aus der Einleitung und dem
Fazit zu entnehmen.
Bei den Beispielen (sowohl für das „Supervised“ als auch für das „Unsupervised
Learning“) werden verschiedene Operationen und Funktionen verwendet, die einerseits
von MLF und andererseits von Mathematica implementiert bereitgestellt werden.
Für die richtige Verwendung der Operationen und Funktionen ist es aber auch notwendig
die Syntax der verwendeten Funktionen bzw. Routinen soweit als notwendig zu erklären
und darzustellen.
Die Darstellung der Syntax findet in den folgenden Beispielen statt, im Anhang befindet
sich eine Zusammenfassung der verwendeten Funktionen und Operationen und deren
Syntax unter dem Abschnitt „Kurzreferenz“.
Für weitere Fragen bzgl. der Operationen steht auch die „Offline-Hilfe“ von Mathematica
unter der Rubrik „add-ons“ im Unterkapitel „Machine-Learning-Framework“ zur
Verfügung. Es sei noch erwähnt, dass das Hauptaugenmerk bei den Beispielen auf der
Vorgehensweise liegt und nicht auf dem richtigen Gebrauch der Operationen und
Funktionen. Deswegen wird die Syntax nur soweit als ausreichend erklärt und aufgeführt,
da sie den Sinn nicht weiter vertiefen kann und somit nicht zum weiteren Verständnis
beitragen und somit ablenken würde.
-32-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
6.2.1 Anlegen der Daten bzw. eines Datenobjektes
Da Mathematica in seiner Funktionalität sehr umfangreich ist und somit schon viele
Bereiche der Mathematik und Anforderungen der Benutzer selbst abdeckt, ist auch die
Verwaltung und Organisation der Daten selbst ein Kompromiss.
Das heißt die Verwaltung der Daten und der Datenobjekte ist nur die kleinstmögliche
Schnittmenge der Anforderungen der implementierten Algorithmen und Funktionen.
Folglich ist die Verwaltung von Speicher und Ressourcen in Mathematica nicht für große
Datenmengen ausgelegt und wurde deshalb in MLF durch eine eigene neue
Speicherverwaltung der Daten und Datenobjekte ersetzt.
In MLF existieren 3 Typen, die „Basic Datatypes“, die „Operations“ und die
„Algorithmen“.
Unter dem Typus „Basic Datatypes“ befinden sich die „numerischen Wertebereiche
(Natürliche Zahlen, Reelle Zahlen etc.) sowie „logische Wertebereiche“ (wahr, falsch,
auch Fuzzy-Sets) und der Typus „Data Set“, welcher eine Mischung der logischen und
der numerischen Typen ist. Für jeden in MLF integrierten Datentyp existieren
Konstruktoren, mit welchen man Objekte des gewünschten Typus als Variable anlegen
und auch wieder zerstören kann. Es ist ebenso möglich, einem Ausdruck (jeder Ausdruck
entspricht einem Typen) einen Namen zuzuweisen, um ihn somit zu speichern.
In MLF werden auch Operationen (auch Funktionen genannt) als Objekte betrachtet,
wobei die Operationen immer Objekte der „Basic Datatypes“ manipulieren und
bearbeiten. Deswegen besitzen alle Operationen eine genau festgelegte Syntax und
erledigen auch nur bestimmte Aufgaben.
Auch Algorithmen werden als Objekte aufgefasst. Die in MLF integrierten Algorithmen
setzen sich aus den in MLF und Mathematica definierten Operationen und „Basic
Datatypes“ zusammen und repräsentieren den wichtigen Kern von MLF.
Die Algorithmen sind deswegen der Kern von MLF, da sie die Hauptaufgaben der
Berechnung übernehmen und somit die Aufgaben des Benutzers abarbeiten.
Um Berechnungen unter MLF mit den implementierten Algorithmen durchführen zu
können, müssen die entsprechenden Datenobjekte für die Algorithmen angelegt
beziehungsweise erstellt werden (Um welchen Typus es sich beim Datenobjekt handelt,
ist aus der Syntax des jeweiligen Algorithmus erkennbar).
Hierfür kann das Datenobjekt entweder selbst angelegt oder importiert werden, wobei für
den Benutzer der Import der Daten als Tabelle oder dergleichen am sinnhaftesten ist, da
die meisten Daten in Form von Tabellen vorliegen oder in relationalen Datenbanken
gespeichert sind und somit schnell für MLF verfügbar gemacht werden können. Wenn
-33-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
die Daten nicht importiert werden, müssen sie manuell eingegeben werden, was bei mehr
als 15 Datensätzen nicht mehr zu empfehlen ist.
Um die Vorgehensweise besser zu erklären, wird wie bereits angekündigt ein Beispiel
eingeführt. Für tiefergreifende Erklärungen zur Syntax beziehungsweise zum Aufbau der
Operationen wird nochmals auf den Abschnitt „Kurzreferenz“ im Anhang verwiesen, wo
aufbauend und chronologisch der Abfolge der Beispiele folgend die genaue Notation der
Verwendungsweise der wichtigsten Funktionen und Algorithmen mit allen optionalen
Angaben dargestellt wird.
Zu Beginn muss ein Datenobjekt angelegt werden, welches entsprechend den eigenen
Vorstellungen und der Natur der Daten („das heißt wie die Daten vorliegen“) einen
bestimmten Typus besitzt.
Dafür muss eine Variable erstellt werden, die das Datenobjekt namentlich repräsentiert.
Auf diesen Variablennamen arbeiten auch alle in MLF implementierten Algorithmen.
Sobald einer Funktion oder Operation (somit auch einem Algorithmus) ein
Variablenname angegeben wird, wird ihm das passende Datenobjekt dazu übergeben.
Im Falle eines Datenobjektes mit Inhalt einer Tabelle (bzw. Im Falle von Datensätzen
allgemein), besteht das Datenobjekt wieder aus einer Vielzahl von Datenobjekten, welche
den Typus eines der „Basic Datatypes“ besitzt.
Unter dem Begriff Typus ist zu verstehen, dass es eine Implementierung gibt, die einem
mathematischen Modell (bzw. Vorstellung) in der reellen Welt entspricht (z.B.: die
reellen Zahlen.) Um mit diesen Modellen arbeiten zu können sind die dazu passenden
Operationen ebenfalls in Mathematica definiert.
Diese Menge von Operationen werden in Mathematica als Objekte angesehen, wie schon
eingangs erwähnt. Dadurch bekommt der Begriff des Objektes, betrachtet aus der Welt
der objektorientierten Programmierung, eine andere Bedeutung.
Der Begriff des Objektes ist nicht nur als „Datenstruktur“ interpretierbar, sondern er
bedeutet gleichsam, daß alles, was in Mathematica berechnet wird, als Objekt angesehen
werden kann.
Daraus folgt, dass sowohl der Input als auch der Output von Operationen und
Algorithmen Objekte sind und dadurch der Output eines Algorithmus der Input eines
anderen sein kann (sofern die geforderten Typen übereinstimmen)
Um beim Beispiel zu bleiben, muss im ersten Schritt angegeben werden, welche Pakete
bzw. Templates für den „Mathematica-Kernel“ benötigt werden, damit er die folgenden
MLF-spezifischen Datentypen, Operationen und Algorithmen interpretieren kann.
Dafür müssen folgende Codezeilen dem Mathematica-Kernel durch gleichzeitiges
Drücken der Tasten „Shift“ und „Enter“ übergeben werden.
Alle Operationen, die der Kernel ausführen soll, müssen ihm mit dieser Prozedur
übergeben werden. Es ist aber möglich, nicht jeden einzelnen Befehl so ausführen zu
lassen, sondern mehrere Befehle zu sammeln, und sie erst dann dem Kernel zu
übergeben.
Um das Beispiel grafisch aufarbeiten zu können, muß ein Grafikpaket hinzugeladen
-34-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
werden, ebenso natürlich das Template MLF:
Needs["Graphics`Graphics`"] Needs["MLF`"]
„Needs“ ist der Befehl, der den Kernel anweist, die benötigten Files hochzuladen, welche
notwendig sind um die kommenden Angaben von Operationen und gegebenenfalls Typen
interpretieren zu können. Die Grundform der Befehlszeile sieht folgendermaßen aus:
Needs ["context`", "file"]
wobei [“context`“] den passenden Kontext angibt und, soweit dem Kernel dieser bekannt
ist, auch ausreicht, es sei den, es überlappen sich Namensbereiche bzw. Kontextangaben.
Falls Überlappungen bestehen, sorgt die Angabe des zweiten Parameters [„…file“] für
Klarheit, die den Dateinamen des „zu ladenden“ Paketes bzw. Bibliothek für den
Mathematica-Kernel angibt.
Damit wurde dem Mathematica-Kernel mitgeteilt, dass er einerseits alle Operationen und
notwendigen Algorithmen für den Kontext „Graphics“ aus dem Paket „Graphics“ laden
soll.
Um alle MLF spezifischen Operationen, Datentypen und Algorithmen für den
Mathematica Kernel verständlich zu machen, muss natürlich auch das Paket „MLF“
hochgeladen werden.
Durch das Installationsprogramm sollte eigentlich die MLF Bibliothek am richtigen Platz
installiert worden sein, so dass es Mathematica anfinden und laden kann.
Falls es diesbezüglich Probleme gibt, kann der Befehl
Links[]
darüber Aufschluss geben, welche Pakete in den Mathematica-Kernel aktuell
eingebunden beziehungsweise geladen sind. Die grafische Ausgabe sollte in etwa so
aussehen:
{LinkObject[47b,1,1], LinkObject
[C:\PathtoMathematica\AddOns\Applications\MLF\MLF.exe,2,2]}
Damit sollte sichergestellt sein, dass der Mathematica-Kernel, welcher eigentlich ein
„spezialisierter“ Compiler ist, die Typangaben und Operationsaufrufe korrekt und richtig
ausführen kann.
Somit ist die richtige Umgebung zur Erzeugung geeigneter Datenobjekte geschaffen
worden, damit man die geeigneten Datenobjekte erzeugen kann. Um die gewünschten
Daten in den Kernel zu laden, gibt es, wie bereits erwähnt, zwei Möglichkeiten:
-35-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Einerseits sind sie per Hand einzugeben, andererseits aus einem „File“ zu importieren.
Daten aus einem „File“ zu importieren ist besonders interessant bei Datensätzen, welche
in Datenbanken jeglicher Art gespeichert sind. Dabei ist Mathematica selbst sehr
vielseitig, da es sehr viele Formate unterstützt. Um bei dem Beispiel zu bleiben, muss
zunächst das entsprechende „File“ in den Mathematica-Kernel hochgeladen werden.
Damit das File von Mathematica gefunden werden kann, existiert eine Datei namens
„../data“ im Verzeichnis „MLF“. Alle dort befindlichen Datenfiles müssen nur mit ihrem
Namen und ihrer Dateiextension, sprich Dateitypangabe (z.B. *.txt), hochgeladen
werden, ohne den genauen Pfad zur Datei angeben zu müssen. Das Verzeichnis „.../data“
befindet sich unter:
„Laufwerksbuchstabe:\Pfad_zu_Mathematica_und_Version\AddOns\Applications\MLF\
Data“
Die Befehlszeile für das Beispiel lautet:
dataRaw=Import["iris.txt","Table"];
Damit wird das File „iris.txt“ in den Kernel importiert. Die Angabe der Option „Table“
ist optional und kann weggelassen werden, sofern es sich um ein Mathematica-Format
handelt, sonst muss der Typ angegeben werden.
Da die Daten des Beispiels in keinem Mathematica-Format vorliegen, sondern in einer
Tabelle, muss die „Import“-Operation von Mathematica angewiesen werden, dass sie das
File namens „iris.txt“ als Tabelle interpretieren soll.
Das importierte File soll unter dem Namen „dataRaw“ dem Mathematica-Kernel bekannt
sein.
Dies alleine reicht noch nicht aus, um die Daten bearbeiten zu können oder besser gesagt
interpretieren zu können.
Um dies tun zu können, muss dem Kernel ebenso mitgeteilt werden, wo er die Attribute
und die Ausprägungen zu den Attributen finden kann.
Dafür werden wieder Variablen angelegt, welche dieses Mal aber als Inhalt einerseits die
Merkmale andererseits die Ausprägungen dazu besitzen.
Um eine Variable anzulegen, die als Inhalt nur die Merkmalsarten besitzt, muss die im
Beispiel erste Zeile aus dem importierten File, also dem Datenobjekt „dataRaw“,
ausgelesen und einer Variablen zugewiesen werden.
Dafür sorgt die Angabe und Übergabe an den Mathematica-Kernel:
headers=First@dataRaw;
Mit dieser Befehlszeile wird vom Datenobjekt „dataRaw“ die erste Zeile ausgelesen.
Dies geschieht mittels der Operation „First“, welche die erste Zeile eines angegebenen
Datenobjektes (eigentlich eines Ausdruckes) ausliest und zurückgibt.
Angewandt wird diese Operation auf das Datenobjekt „dataRaw“ durch den ApplyOperator „@“ (, der die Schreibweise „Apply[function_name, expr]“ abkürzt auf die
-36-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Form „function_name@expression“).
Dem so ausgewerteten Ausdruck „First@dataRaw“ wird dann durch den Zuweisungsoperator „=“ der Name „headers“ zugewiesen.
Somit enthält das Datenobjekt „header “ die Merkmale der Beispielsdaten.
Im nächsten Schritt müssen die eigentlichen Daten, also die Merkmalsausprägungen zu
den Merkmalen, auch in einem Datenobjekt verpackt werden.
Dafür bietet sich die gleiche Vorgehensweise, an wie sie schon bei den Merkmalen
(„headers“) zum Ziel führte:
data=Rest@dataRaw;
Es werden wieder aus dem Datenobjekt „dataRaw“, dieses Mal aber mit der Operation
„Rest“, welche das gleiche „Verhalten“ wie die Operation „First“ besitzt, nur eben statt
der ersten Zeile den Rest ausgibt, die gewünschten Daten „herausgefiltert“ und dem
gewünschte Datenobjekt zugewiesen. In diesen Fall werden sie dem Datenobjekt mit
Namen „data“ zugewiesen.
Mittels der so definierten Datenobjekte ist es nun möglich ein Datenobjekt zu erstellen,
welches die bereits angelegten Objekte beinhaltet. Dieses Datenobjekt dient in weiterer
Folge als Grundlage für alle weiteren Verarbeitungsschritte und Berechnungen. Um nun
dieses Datenobjekt anzulegen, genügt die folgende Befehlszeile:
IrisData=Def["IrisData",DataSet[data,headers]];
In dieser Befehlszeile wird ein Datenobjekt mit dem Typ „DataSet“ kreiert:
DataSet[data, headers] Die Syntax für diese Operation, die eigentlich ein Konstruktor ist, lautet DataSet
[dataMatrix,opts].
Das heißt, die Operation „Dataset[]“ benötigt eine Matrix bestehend aus
Merkmalsausprägungen und optionalen Angaben. Unter die optionalen Angaben fallen
auch die Merkmale, welche bereits in dem Datenobjekt „headers“ aus dem File „iris.txt“
angelegt wurden.
Die Matrix der Merkmalsausprägungen beinhaltet die eigentlichen Daten und diese
befinden sich für das Beispiel schon im Datenobjekt „data“.
Im nächsten Schritt wird das eigentliche Datenobjekt, aus welchem die Informationen für
die Berechnungen stammen, angelegt. Dafür ist die Operation „Def“, ebenfalls ein
Konstruktor, verantwortlich, die aus dem Paket „MLF“ stammt, das eingangs in den
Kernel geladen wurde.
Def["IrisData",DataSet[data,headers]];
Als Input verlangt die Operation „Def []“ einen Namen für das Datenobjekt, welches
-37-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
angelegt werden soll, für das Beispiel wäre dies der Name „IrisData“.
Das „Datenobjekt“, das als Input für die Operation „Def[]“ dienen soll, stammt von der
Operation „DataSet[]“, welche als verschachtelter Operationsaufruf anstelle des
Datenobjektes steht.
Das heißt, das Datenobjekt, welches als Input für die Operation „Def[]“ dient, hätte
durchaus schon vorher deklariert und definiert werden können. Aber diese
„Schreibweise“ ist eleganter und vor allem prägnanter.
Abschließend wird mittels des Zuweisungsoperators der Name „IrisData“ dem erzeugten
Objekt aus der Operation „Def[]“ (respektive der Operation „DataSet[]“) zugewiesen.
Um das Erzeugen und Aufbereiten der Daten für den Mathematica-Kernel abschließen zu
können, sollten alle nicht mehr benötigten Datenobjekte gelöscht werden.
Es sei ausdrücklich darauf hingewiesen, dass dieser Schritt optional ist und eigentlich in
keiner Weise die Auswertung der Daten beeinflusst. Jedoch ist es angesichts dessen, dass
die zu bearbeiteten Datenmengen „sehr groß“ werden können, ratsam, die nicht
benötigten Datenobjekte zu löschen um somit Ressourcen nicht unnotwendigerweise zu
belegen.
Um beim Beispiel zu bleiben, können das Datenobjekt „dataRaw“, also das eingelesene
„iris.txt“-File, sowie das Datenobjekt „data“, sprich die extrahierten
Merkmalsausprägungen aus dem Datenobjekt „dataRaw“, gelöscht werden. Die folgende
Befehlszeile gewährleistet dies:
Clear[dataRaw,data];
Das heißt, die alleinige Angabe der Operation „Clear[]“ (Destruktor) und der Name der
Datenobjekte, getrennt durch ein Komma reichen aus.
Somit wäre die Erzeugung der Datenobjekte, welche im ausreichenden Maße für den
Mathematica Kernel aufbereitet sind, und eine passende Arbeitsumgebung für MLF
vorhanden.
-38-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
6.2.2 Attribut-Matrix Plott des Datenobjektes
Als Nächstes können die möglichen Merkmalsausprägungen des Zielattributes
ausgegeben werden. Dadurch ist es möglich, sich ein Bild über das Zielattribut zu
machen, beziehungsweise welche Entscheidungen die „zu entstehende“ Regelbasis
leisten sollte.
Um die Ausgabe der Merkmalsausprägungen des Zielattributes bewerkstelligen zu
können werden drei Funktionen benötigt, die im folgenden beschrieben werden.
Wie in den vorigen Abschnitten beschrieben greifen sie ineinander und verwenden das
Ergebnis einer vorherigen Operation als ihrem eigenen Input.
Zuerst muss das Datenobjekt, welche das Zielattribut und die Merkmalsausprägungen
besitzt, angegeben werden. Danach sollten aus dem Datenobjekt die richtige Spalte
ausgesucht und alle möglichen Prädikate extrahiert werden.
Für diese Aufgabe existiert bereits eine Funktion namens:
CreatePredicates [dataSet,rows,nrSets,opts].
Diese Operation erstellt aus einem Datenobjekt unter der Angabe des gewünschten
Merkmales des Objektes alle möglichen Prädikate.
In dem Beispiel heißt das Datenobjekt „IrisData“, und die fünfte Spalte ist das
gewünschte Zielattribut, das durch die anderen Attribute beziehungsweise eine
Regelbasis ausgedrückt werden soll.
Somit wäre der gesamte Ausdruck für die Extrahierung aller Ausprägungen des
Zielattributes:
CreatePredicatesIs[IrisData,5]
Damit alle Merkmalsausprägungen grafisch ausgegeben werden können, müssen sie
zuerst „geplotet“ werden. Beim Ploten2 wird aus den Prädikaten ein Plot erzeugt, welcher
unter der Angabe von verschieden Parametern, das Zielattribut beschreibt.
Wie schon erwähnt, dient die Funktion „CreatePredicatesIs[]“ als Input für die nächste
Operation, die den Plot vornimmt. Ihr Name ist:
PlotClassLegend [goalVars, options]
Die „Zielvariablen“ (Merkmalsausprägungen des Zielattributes)wurden bereits aus dem
Datenobjekt „IrisData“ herausgelesen und stehen somit zur Verfügung.
Unter den Optionen fällt die Angabe der Größe des Plots, also der Breite und der Höhe,
2 Plot = Grafik, in der gewünschte Objekte dargestellt werden (im weiteren Verlauf
häufig eine Grafik, in der alle Merkmalsausprägungen der Datensätze auf Achsen vorher
bestimmter Attribute eingetragen werden (jede Achse steht für ein Attribut))
-39-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
sowie der Menge an „Merkmalsausprägungen, also ob alle Zielvariablen oder nicht in
den Plot aufgenommen werden sollen.
Für den Plot der Merkmalsausprägungen macht es Sinn, die Größe der Einträge des
Datenobjekts „IrisData“ auf 15 mm beschränken zu lassen, ebenso ist es sinnhaft, alle
Einträge ausgeben zu lassen.
Die Angabe der Option:
PlotRange ­>All
legt fest, dass alle Zielvariablen geplottet werden und die Angabe der Option:
AspectRatio ­> 0.15
bedingt, dass die geplotteten Zielvariablen durch 15 mm getrennt sind.
Ein Beistrich zwischen den Angaben der Optionen für die Operation „PlotClassLegend[]“
ist zwingend erforderlich, denn sonst erzeugt man einen „Syntax-Error“, welcher dadurch
entsteht, dass für den Mathematica Kernel „PlotRange -> ...“ und „AspectRatio ->..“
ohne Beistrich getrennt eine „Option“ wäre, und zwar „PlotRange -> … AspectRatio ->
…“ und nicht zwei, denn und diese Option existiert nicht.
Gesamt gesehen erzeugt die Angabe der Operation „PlotClassLegend[]“ mit den
gewünschten Parametern für das Beispiel den geforderten Plot. Die Angabe der
Operation für den Kernel sieht so aus:
PlotClassLegend[CreatePredicatesIs[IrisData,5]],PlotRange ­> All,AspectRatio ­> 0.15
Jetzt muss der Plot nur mehr grafisch ausgegeben werden, damit man ein Ergebnis des
bisherigen Aufwandes sehen kann.
Die Operation „Show[]“ kann diese Aufgabe übernehmen:
Show[graphics, options]
Die Angabe von Parametern wird bei diesem Beispiel nicht benötigt und kann
dementsprechend weggelassen werden.
Die Operation „Show[]“ benötigt allerdings ein Objekt des Typs „Graphics“ als Input.
Folglich muss der Plot zu dem Typ „Graphics“ konvertiert werden.
Die Funktion „Graphics[]“:
Graphics[primitives, options]
übernimmt die Konvertierung, welche im eigentlichen Sinne keine ist. Der Typ
„Graphics“ repräsentiert nämlich in Mathematica ein zu „zeichnendes Objekt“, welches
auf einer Menge von „primitves“, also „Grundarten“, basieren muss. In Mathematica
wäre zum Beispiel der Kreis ein solches „primitive“, durch „MLF“ wurde diese Menge
erweitert, sodaß auch „PlotclassLegend[]“ dazuzählt.
Eine mögliche optionale Angabe wäre zum Beispiel die Angabe der
„Achsenbenennungen“.
-40-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Graphics[PlotClassLegend[CreatePredicatesIs[IrisData,5]],PlotRange ­> All, AspectRatio ­>
0.15]
Die obere Angabe der Operation „Graphics[]“ mit diesen Input generiert das fertige
„Graphic-Datenobjekt“, welches die gewünschten Zielvariablen und Parameter enthält.
Dieses „Graphic-Datenobjekt“ muss nur mehr dargestellt werden. Wie bereits erwähnt,
übernimmt die Operation „Show[]“ diese Aufgabe und gibt das „Graphic-Datenobjekt“
auf den Bildschirm aus.
Die „Show[]“ Operation muss mittels „Apply“ Operators (@) auf das „GraphicDatenobjekt“ angewandt werden.
Die folgende Befehlszeile enthält alle Angaben für den Mathematica-Kernel, damit er die
von Beginn an angestrebte Aufgabe des grafischen Darstellens aller
Merkmalsausprägungen des Zielattributes realisieren kann:
Show@Graphics[PlotClassLegend[CreatePredicatesIs[IrisData,5]],PlotRange ­> All ,
AspectRatio ­>0.15];
Nach Ausführung dieser Anweisung sieht der Output wie folgt aus, wobei den
geplotteten Zielvariablen auch Farben von Mathematica zur leichteren Identifizierung
zugeordnet werden.
class_Is _Iris - setosa
class_Is _Iris - versicol
class_Is _Iris - virginica
Weiters ist es sinnvoll, die Attribute und ihre Ausprägungen gegeneinander zu ploten,
sprich eine „Attribut-Matrix“ zu erzeugen und sie grafisch ausgeben zu lassen.
Der Sinn liegt darin, dass dadurch leichter ersichtlich wird, inwiefern gewisse Attribute
das Zielattribut erklären können, sprich inwieweit sich die Merkmalsausprägungen bei
den einzelnen Attributen bezüglich der Zugehörigkeit zu den Zielvariablen manifestieren.
Dies wird dann ersichtlich, wenn sich beim Plot „regelrechte“ Gruppen von
gleichfärbigen Merkmalsausprägungen bei der Grafik bilden (,sofern die
Merkmalsausprägungen die gleichen Farben haben, gehören sie zu Datensätzen, die die
gleiche Merkmalsausprägung wie das Zielattribut besitzen.)
Dieser Schritt ist mehr oder weniger optional, denn wenn bereits bei der Sichtung der
Daten bezüglich des Zielattributes eine klare Klassifizierung anhand der Ausprägungen
der anderen Attribute feststellbar ist, kann dieser Verarbeitungschritt übersprungen
werden.
In den meisten Fällen wird dies in den Ausgangsdaten nicht ersichtlich sein, und man
benötigt eine „bessere“ Darstellung dessen in grafischer Form. Diese „bessere“
Darstellung ist der Plot der „Attribut-Matrix“.
-41-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Die Vorgangsweise ist bei diesem Schritt relativ simpel, denn die Benennung des
richtigen Datenobjektes, die Angabe aller benötigter Parameter wie zum Beispiel der
Zielvariable und die grafische Ausgabe reichen dafür vollkommen aus.
Da es sich um einen Plot handelt, wird eine Operation benötigt, die eine „AttributMatrix“
überhaupt plotten kann.
Diese Operation wird von MLF eingeführt und heißt „PlotAttributeMatrix []. Der Syntax
sieht wie folgt aus:
PlotAttributeMatrix [data,options];
Als Eingabe verwendet diese Operation ein Datenobjekt, welches Merkmale und die dazu
passenden Merkmalsausprägungen besitzt.
Das am Anfang angelegte Datenobjekt „IrisData“ wurde bereits so aufbereitet, dass in der
ersten Zeile die Namen der Merkmale stehen und in den Reihen darunter deren
Ausprägungen.
Somit reicht die Angabe des Datenobjektes „IrisData“ vollkommen aus, es muss keine
Aufarbeitung oder Extrahierung der Daten mehr vorgenommen werden.
Einzig die Angabe der Zielvariable, besser gesagt die Definition welche der Attribute des
Datenobjektes „IrisData“ die Zielvariable ist, wird benötigt mit der folgenden
Optionsangabe erledigt:
Goal ­> 5
Weiters ist die Angabe der Punktgröße des Plottes sinnhaft, da der Standardwert sehr
klein eingestellt ist und somit eine optische Unterscheidung schwerfallen kann.
Für das Beispiel wäre eine Größe von 3 bis 4 mm ausreichend, um die Grafik
aussagekräftig zu gestalten.
Mit der Optionsangabe:
PointSize ­> 0.03
wird die Größenangabe vorgenommen.
Der gesamte Ausdruck zur Generierung eines „Attribut-Matrix-Plotes“ für das Beispiel
hat die folgende Form:
PlotAttributeMatrix[IrisData,Goal ­> 5,PointSize ­> 0.03]
Damit dieser Ausdruck grafisch dargestellt werden kann, kann man wiederum die „Show
[]“ Operation benutzen.
Mittels des „Apply-Operators“ (@), angewandt auf den Ausdruck zur Generierung des
Plottes der „Attribut-Matrix“ des Datenobjektes „IrisData“, wird eine Grafik erzeugt,
welche die Daten grafisch darstellt:
Show[PlotAttributeMatrix[IrisData,Goal ­> 5,PointSize ­> 0.03]];
-42-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Das Ergebnis der Auswertung der Anweisung durch Mathematica erzeugt für das
Beispiel folgende Grafik:
sepal_length
sepal_width
petal_length
petal_width
class
In dem Matrix-Attribut-Plot ist ersichtlich, dass durch die Attribute 3 und 4 die
Zielvariable, welche im Datenobjekt die Nummer 5 ist, „ausdrückbar“ ist.
Unter „ausdrückbar“ ist zu verstehen, dass eine Klassifizierung, sprich eine Zuordnung
der möglichen Merkmalsausprägungen der Zielvariable anhand der
Merkmalsausprägungen der anderen Attribute, besser gesagt anhand dessen
Ausprägungen, möglich ist.
Da die Grafik doch sehr klein ist und auch nur der Übersicht dient, wäre es sehr sinnvoll,
nur bestimmte Attribute gegeneinander zu plotten.
Dies ist ohne weiteres in Mathematica möglich und führt zu Schritt drei in der am Anfang
eingeführten Vorgehensweise von „Supervised Learning“.
-43-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
6.2.3 Grafische Skizzierung der Attribut-Matrix
Im letzten Abschnitt wurde ein „Attribut-Matrix-Plot“ generiert und geplotet. Dabei wird
keine Matrix aus einer Menge von Attributen, sondern lediglich zwei Attribute (wenn
erwünscht auch drei oder mehr), gegeneinander geplottet.
Es sind deswegen zwei Attribute, weil die Darstellung in einem kartesischen Diagramm
erfolgt und somit nur zwei Achsen vorhanden sind. Dennoch wird dadurch die Grafik
sehr aussagekräftig. Es könnte auch dreidimensional oder gar mehrdimensional geplottet
werden, dies hängt einerseits davon ab, wie viele Attribute benötigt werden, um die
Zielvariable zu klassifizieren, andererseits davon, wie die Attributmatrix geplottet wurde.
Bei diesem Beispiel ergibt ein Plot von mehr als zwei Dimensionen weniger Sinn, da
bereits zwei Attribute ausreichend sind, das Zielattribut zu beschreiben.
Um einzelne Attribute zu plotten, wurde in MLF eine Operation definiert, die diese
Aufgabe lösen kann.
Die Operation heißt „PlotAttributes[]“ und ihr Syntax lautet wie folgt:
PlotAttributes [data,options];
Als Input verlangt diese Operation ein Datenobjekt, in welchem die Attribute enthalten
sind. Wie bei den vorigen Operationen enthält das Datenobjekt „IrisData“ alle
notwendigen Daten in aufbereiteter Form.
Bei der Operation „PlotAttributes[]“ müssen keine Informationen extrahiert werden, da
alle Merkmalsausprägungen gefordert sind.
Für das Beispiel reicht die Angabe von einigen Parametern aus, um den Plot in
gewünschter Form durchführen zu lassen.
Alls Erstes muss angegeben werden, aus welchen Datenobjekt überhaupt etwas
„herausgelesen“ werden soll. Bei dem Beispiel wäre es das Datenobjekt Namens
„IrisData“ und mit der Angabe von:
IrisData,
an der ersten Stelle des Inputs der Operation „PlotAttributes[]“ wird dies auch erledigt.
Als zweiter Schritt muss der Operation mitgeteilt werden, welche Attribute überhaupt
geplottet werden sollen. Da die Merkmalsausprägungen im Datenobjekt „IrisData“ in
Tabellenform vorliegen, reicht die Angabe der Spalten, in denen sich die
Merkmalsausprägungen zu den Attributen befinden, aus.
Im Beispiel wären dies die Spalten, drei und vier. Durch die Angabe des folgenden
Parameters der Operation „PlotAttributes[]“ wird dies erledigt:
Dims ­> {3,4},
Um festzulegen, welches Attribut überhaupt geplottet werden soll, gibt man bei den
Optionen der Operation „PlotAttributes []“ die folgende Option an:
-44-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Goal ­> 5,
Damit wird sichergestellt, daß gegen das gewünschte Zielattribut geplotet wird, wobei
dieser Parameter teilweise schon in den Operationen der vorigen Arbeitschritte verwendet
wurde.
Abschließend ist es noch sinnvoll, die Ausgabe der Merkmalsausprägungen im Plot zu
verändern. Möglich sind zum Beispiel die Größe der Punkte im Plot, aber auch deren
Farben. Welcher Wert für die Größe der Punkte sinnhaft ist und welcher nicht, hängt sehr
stark von der Menge der Daten ab. Für das Beispiel macht eine Punktgröße von etwa 2
bis 3 mm Sinn. Mit dem folgenden Parameter wird die Größe der Punkte im Plot auf 2,5
mm eingestellt:
PointSize ­> 0.025
Gesamt sieht die Operation für das Ploten aller Merkmalsausprägungen der Merkmale 3
und 4 gegen das Zielattribut 5 wie folgt aus:
PlotAttributes[IrisData, Dims ­> {3,4}, Goal ­> 5, PointSize ­> 0.025 ]
Um dies grafisch darstellen zu können, muss wieder die Operation „Graphics[]“ auf den
Plot angewendet werden. Damit wird erneut ein Objekt generiert, welches überhaupt erst
über die Operation „Show[]“ Verwendung finden kann.
Um dies zu erreichen, wird als „Input-Datenobjekt“ für die Operation „Graphics[]“ der
Ausdruck:
PlotAttributes[IrisData, Dims ­> {3,4}, Goal ­> 5, PointSize ­> 0.025 ]
genutzt. Für das optische Aussehen des Plots wären ein Name für den Plot und
Achsenbeschreibungen von Interesse, außerdem sollten alle Achsen angezeigt und keine
weggeschnitten werden.
Damit alle Achsen angezeigt werden, reicht die Angabe des folgenden Parameters für die
Operation „Graphic[]“ vollkommen aus:
Axes ­> True
Um die Beschriftung der Achsen zu ermöglichen, genügt der folgende Parameter:
AxesLabel ­> headers[[{3,4}]]
wobei dieser Parameter ein Ausdruck ist, in welchem die Namen für die X und die YAchse aus dem Datenobjekt „headers“ (beinhaltet die Namen der Attribute) festgelegt
wird. Der Operator „->“ nimmt die Zuweisung vor und durch die Angabe von:
-45-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
headers[[{3,4}]]
werden das dritte und vierte Element vom Datenobjekt „headers“ angesprochen.
Zum Schluss fehlt nur noch der Name des Plottes, wobei bemerkt sei, dass dies wirklich
nur optional ist und absolut nichts zur Berechnung beiträgt, genauso wie die
Achsennamen des Plottes.
Trotz allem wird der Name des Plots über den gleichen Weg gesetzt, wie die
Achsennamen:
PlotLabel ­> headers[[5]]
Der Zuweisungsoperator „->“ übernimmt die Zuweisung und mit dem Aufruf des
Datenobjektes „headers“ und der Angabe des fünften Elementes wird der Name des
Zielattributes der Variablen „PlotLabel“ zugewiesen.
Der gesamte Ausdruck sieht für dieses Beispiel wie folgt aus:
Graphics[PlotAttributes[IrisData,Dims ­> {3,4},Goal ­> 5,PointSize ­> 0.02]],Axes ­> True,
AxesLabel ­> headers[[{3,4}]],
PlotLabel ­> headers[[5]];
wobei die Funktion „Graphics“ dieses Mal nicht durch den „Apply-Operator“ (@) auf
das von „PlotAttributes[]“ erzeugte Datenobjekt angewandt wird, sondern durch einen
„normalen“ Operationsaufruf der Form „Graphics[…] „ . Verantwortlich dafür ist die
Übersichtlichkeit, da dies in einer solchen Form durch die vielen optionalen
Parameterangaben eindeutiger ist und Fehlinterpretationen des Benutzers bei einer
späteren Durchsicht vorbeugt.
Abschließend muss das so erzeugte „Graphic-Objekt“ nur mehr grafisch ausgegeben
werden. Mit der Operation „Show[]“ wird das erreicht.
Die gesamte Befehlszeile sieht so aus:
Show[Graphics[PlotAttributes[IrisData,Dims ­> {3,4},Goal ­> 5,PointSize ­> 0.02]],Axes ­>
True, AxesLabel ­> headers[[{3,4}]],
PlotLabel ­> headers[[5]]];
-46-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Dadurch wird erreicht, dass ein Plott der Attribute drei und vier gegen das Zielattribut
erzeugt und grafisch ausgegeben wird. Der Output sollte wie folgt aussehen:
petal_width
2.5
class
2
1.5
1
0.5
1
2
3
4
5
6
7
petal_length
6.2.4 Definition von Fuzzy-Sets
Um sich ein Bild machen zu können, wie eine Klassifizierung des Zielattributes (im
Beispiel die Unterart der Pflanze) nicht anhand der klassischen Logik sondern unter
Verwendung der Fuzzy-Logik aussehen würde, muss man geeignete Fuzzy-Sets
definieren.
Die Idee ist folgende: alle Pflanzen, von denen Merkmalsausprägungen zu den
vorgegebenen Attributen ermittelt werden können, anhand der Fuzzy-Sets für die
Attribute drei und vier bezüglich dem Attribut fünf (Zielattribut = Unterart der Plfanze)
zu bewerten.
Die Einteilung erfolgt zuerst in einer Einfärbung aller Merkmalsausprägungen der
Attribute in einem Plot, wie er im Schritt drei erzeugt wurde. Damit wird „ungefähr“
ersichtlich, inwieweit sich die Daten kategorisieren lassen.
Um nun so einen Plot erzeugen zu können müssen zuerst die geeigneten Fuzzy-Sets
erzeugt werden.
Je nachdem wie viele Attribute das Zielattribut „erklären“ sollen, müssen auch FuzzySets angelegt werden.
Für das Beispiel genügen exponentielle Fuzzy-Sets. Die Operation zur Erzeugung eines
Fuzzy-Sets lautet:
FuzzySetExp [center, width];
Die Operation verlangt als Input die Angabe des Zentrums und der Breite des Fuzzy-Sets.
Bei der Betrachtung der Daten für das Beispiel fällt auf, dass für das Attribut drei
(petal_length) die dokumentierten Pflanzen bis zum Wert fünf und ab dem Wert 6 sehr
gut klassifizierbar sind, dazwischen existieren jedoch immer wieder Pflanzen, die nicht
eindeutig einer Menge zugeordnet werden können.
Also muss das „Zentrum“ des neuen Fuzzy-Sets für das Attribut drei (petal_length) bei
-47-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
5,5 cm liegen. Die Breite des Fuzzy-Sets sollte auf beiden Seiten des Zentrums zwischen
0,3 cm und 0,4 cm liegen, denn in diesem Bereich befinden sich Pflanzen mit
Merkmalsausprägungen zum Attribut drei (petal_length), welche nicht eindeutig einer
Merkmalsausprägung vom Zielattribut zu geordnet werden können.
Mittels des Zuweisungsoperator „=“ und der vorigen Angabe eines Namen für das neue
Fuzzy-Set wird es mit dem folgenden Ausdruck als Datenobjekt angelegt:
fuzzysetforcollum3= FuzzySetExp[5.5,0.3];
Für das Attribut vier (petal_width) gilt diesselbe Vorgangsweise.
Beim Attribut vier liegt der für die klassische Logik unentscheidbare Bereich für eine
Zuordnung zu einer Menge im Bereich der Werte 1,65 und 1,85 cm. Daraus folgt, dass
ein exponentielles Fuzzy-Set mit dem Zentrum bei 1,75 cm und einer Breite von 0,05 cm
diesen Bereich abdecken würde. Das Fuzzy-Set für das Attribut vier (petal_width) wird
wieder mit dem Aufruf der Operation „FuzzySetExp[]“ und dem Zuweisungsoperator
„=“ mit einem Namen generiert:
fuzzysetforcollum4 =FuzzySetExp[1.75,0.05];
Optional gibt es auch eine Operation, welche die gewünschten Fuzzy-Sets grafisch
ausgibt, die Operation lautet;
PlotFuzzySet[fuzzy-set, options];
Für beide Fuzzy-Sets erzeugen die folgenden Befehlszeilen,
PlotFuzzySet[fuzzysetforcollum3];
PlotFuzzySet[fuzzysetforcollum4];
einen Output der wie folgt aussieht:
1
0.8
0.6
0.4
0.2
4.5
5.5
6
6.5
-48-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
1
0.8
0.6
0.4
0.2
1.7
1.8
1.9
Weiters muss für jedes Attribut das passende Prädikat aus dem dazugehörenden FuzzySet erzeugt werden. Die Funktion „FColPredIsAl[]“ generiert die passenden Prädikate
anhand der Angabe des Attributes und eines Fuzzy-Sets:
FColPredIsAl[col, fuzzySet]
Mit den folgenden zwei Befehlszeilen werden die passenden Prädikate für die Attribute
drei und vier erzeugt:
fuzzypredicateforcollum3 = FColPredIsAL[3,fuzzysetforcollum3];
fuzzypredicateforcollum4 = FColPredIsAL[4,fuzzysetforcollum4];
Für eine Einteilung der Wertemengen der Attribute drei und vier reichen die Prädikate
nicht aus; sie müssen erst in Beziehung zu einander gebracht werden. Bei diesem
einfachen Beispiel reicht eine Fuzzy-Disjunktion vollkommen aus. Die Operation „FOr
[]“ erzeugt diese Disjunktion für das Beispiel:
FOr[arg1, arg2] oder FOr[arglist]
Aus dem Syntax der Operation folgt, dass man entweder zwei Argumente (eigentlich
Prädikate) an gibt oder gleich eine gesamte Liste davon (dies bekommt erst bei
komplexere Aufgaben eine Bedeutung).
Für das Beispiel wurden bereits die Datenobjekte für die beiden Prädikate der Attribute
drei und vier angelegt. Die Anwendung der Funktion „FOr[]“ auf diese beiden Prädikate:
curSelection=FOr[fuzzypredicateforcollum3, fuzzypredicateforcollum4];
erzeugt die passende Fuzzy-Disjunktion für das Beispiel. Im nächsten Schritt wird diese
Disjunktion auf die vorhanden Daten angewandt. Danach wird ersichtlich, inwieweit eine
Einteilung mit den definierten Fuzzy-Sets möglich ist. Die gesamte Befehlsauflistung für
diesen Verarbeitungsschritt sieht wie folgt aus:
fuzzysetforcollum3= FuzzySetExp[5.5,0.3];
fuzzysetforcollum4 =FuzzySetExp[1.75,0.05];
PlotFuzzySet[fuzzysetforcollum3];
PlotFuzzySet[fuzzysetforcollum4];
-49-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
fuzzypredicateforcollum3 = FColPredIsAL[3,fuzzysetforcollum3];
fuzzypredicateforcollum4 = FColPredIsAL[4,fuzzysetforcollum4];
curSelection=FOr[fuzzypredicateforcollum3, fuzzypredicateforcollum4];
6.2.5 Grafische Skizzierung der Attribut-Matrix mit Einbeziehung
von Fuzzy-Sets
Nach der Definierung der passenden Fuzzy-Sets für die ausgewählten Attribute, (im
Beispiel für die Attribute drei und vier)können diese grafisch geplottet werden, (so wie es
bereits im Schritt drei und vier gehandhabt wurde). Dadurch wird ersichtlich, wie passend
die Fuzzy-Sets definiert wurden und inwiefern sie einer Klassifizierung des Zielattributes
dienlich sind.
Um dieses Vorhaben realisieren zu können, bietet sich einerseits ein Plot für die Attribute
drei und vier an, andererseits ein Matrix-Attribut Plot mit allen Attributen.
Zu einem übersichtlicheren Plot kommt es, wenn man die Fuzzy-Sets in einem Plot für
ausgesuchte Attribute miteinbezieht. Deswegen sollte auch zuerst der Plot für die
ausgesuchten Attribute beschrieben werden. Wie es zu einem solchen Plot kommt wurde
bereits im Schritt vier der Vorgehensweise von „Supervised Learning“ beschrieben,
weswegen dieser Punkt nur sehr kurz behandelt wird.
Wie im Schritt vier beschrieben, müssen wieder Attribute geplotet werden. Die dafür
zuständige Operation lautet wieder:
PlotAttributes [data,options];
Als Input bzw. als Grundlage zur Berechnung des Plotes dient das Datenobjekt
„IrisData“. Die Attribute drei und vier, (also die Spalten drei und vier) sollen geplotet
werden. Anders als im Schritt vier, ist das Ziel des Plots nicht mehr das Zielattribut,
sondern die Fuzzy-Disjunktion, welche die Fuzzy-Sets und das Zielattribut enthalten.
Die Größe der geploteten Merkmalsausprägungen pro Datensatz können bei diesem
Beispiel bei etwa 2,5 mm liegen:
PlotAttributes[IrisData, Dims ­> {3,4},Goal ­> curSelection, PointSize ­> 0.025]
Die Angabe des Namens des Datenobjektes, gefolgt von der Auswahl der Spalten des
Datenobjektes:
Dims ­> {3,4}
und des Zielattributes, im Beispiel die Fuzzy-Disjunktion:
Goal ­> curSelection
-50-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
sowie der Größe der Elemente des Plotes:
PointSize ­> 0.02
erstellen einen Plot, der die zuvor erstellte Fuzzy-Disjunktion enthält und danach auch
plotet.
Jetzt muss nur mehr das „Graphic“ Datenobjekt erzeugt werden, bevor es grafisch
ausgeben werden kann. Dafür reichen wieder die Überlegungen aus, wie die Benennung
der Grafik beziehungsweise der Achsen lauten, und ob alle oder nur einige Achsen
ausgegeben werden sollen.
Für das Beispiel wäre es natürlich wünschenswert, wenn alle möglichen Achsen erzeugt
und ausgegeben werden:
Axes ­> True
Die Achsenbeschriftungen können wieder aus dem Datenobjekt „headers“ herausgelesen
werden. Mittels der Angabe des Datenobjektes und der Auswahl der Elemente drei und
vier sowie der Zuweisung zu den Achsennamen durch den „->“ Operator, wird diese
Aufgabe von Mathematica erledigt:
AxesLabel ­> headers[[{3,4}]]
Es fehlt nur noch der Name der Grafik, welcher einfach durch die Angabe eines Strings
angeführt von „“ und durch den „->“ Operator zu der Variable „PlotLabel“ zugewiesen
werden kann. Die Variable „PlotLabel“ kommt von der Operation „PlotAtributes[…]“
und wird bei dessen Ausführung zu der Grafik zugeordnet:
PlotLabel ­> "Iris flowers"
Um die Grafik auch sehen zu können, muss das generierte „Graphic“ Objekt ausgeben
werden.
Es sei an dieser Stelle vermerkt, daß nicht wirklich ein „Graphic-Objekt“ existiert. Es
wird in Mathematica nur dann ein neues Objekt angelegt, wenn es mit dem
Zuweisungsoperator „=“ einer Variablen, besser gesagt einem Namen zugewiesen wird,
sonst ist es nur ein Ausdruck, welcher beim Aufruf ausgewertet wird. Die Auswertung
findet von Innen nach Außen statt, das heißt der innerste Aufruf einer Operation
beziehungsweise Funktion wird ausgewertet und dient als Input für die „umschließende“
nächste Operation beziehungsweise Funktion. Dadurch ist es möglich, einen sehr
kompakten Code in Mathematica zu schreiben, da das Anlegen von Datenobjekten in den
meisten Fällen weggelassen werden kann, es sei denn diese Art von Ausdruck sollte des
öfteren ausgewertet werden, wie zum Beispiel das Datenobjekt „headers“. Durch solche
Maßnahmen werden sowohl Speicherplatz als auch Rechenzeit gespart.
Um die Grafik ausgeben zu lassen wird wieder die Funktion „Show[]“ verwendet. Diese
-51-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
wird wiederum durch den „Apply-Operator“ auf das “Graphic“ Datenobjekt angewandt
und erzeugt einen grafischen Output des Kernels.
Mit der folgenden Befehlszeile ist der erste Teil des Schrittes fünf abgeschlossen:
Show[Graphics@PlotAttributes[IrisData,Dims ­> {3,4},Goal\[Rule]curSelection, PointSize ­>
0.02], Axes ­> True,AxesLabel ­> headers[[{3,4}]],PlotLabel ­> "Iris flowers"]
Der Output von Mathematica beschreibt auch schon die Erwartungen in die Fuzzy-Sets,
die zuvor generiert wurden und sieht folgendermassen aus:
petal_width
Iris flowers
2.5
2
1.5
1
0.5
1
2
3
4
5
6
7
petal_length
Durch die Grafik wird ersichtlich, dass im Grenzbereich, in dem die klassische Logik
nicht mehr im Stande wäre eine Einteilung zu treffen, die Fuzzyfizierung eine sehr gute
Klassifizierung bietet; nur einige Datensätze sind noch nicht eindeutig einteilbar.
Als nächsten Schritt wäre es vorteilhaft, einen gesamten Matrix-Attribut Plott unter der
Einbeziehung der Fuzzy-Sets zu erstellen.
Dieser Teil des Schrittes vier sei nur sehr kurz umschrieben, da er bereits behandelt
wurde.
Mit der Operation „PlotAttributeMatrix[]“, mit der zusätzlichen Angabe der zu plotenden
Spalten, des Zieles (für das Beispiel die Fuzzy-Disjunktion), der Punktgröße sowie der
Operation „Show[]“ :
Show@PlotAttributeMatrix[IrisData,Dims ­> Range[4],Goal ­> curSelection, PointSize ­>
0.03];
wird ein solcher Matrix-Attribut Plot erzeugt und grafisch ausgegeben:
-52-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
sepal_length
sepal_width
petal_length
petal_width
Dadurch wird ersichtlich, inwieweit eine Einteilung in den Grenzfällen bezüglich aller
Attribute und Datensätze möglich ist. Wenn die Ergebnisse der Datenverarbeitung bis
hierher erfolgreich waren und ebenso zufriedenstellend sind, ist eine weitere
Verarbeitung erfolgsversprechend. Die bisherigen Verarbeitungsschritte dienten
hauptsächlich der näheren Betrachtung der Daten und nicht einer direkten Auswertung
im Sinne von „Data Mining“.
Da die bisherigen Ergebnisse, wie schon erwähnt, erfolgreich waren, kann im nächsten
Schritt für das Beispiel eine Regelbasis erstellt werden.
6.2.6 Erzeugung eines „Decision-Trees“
Da es das Ziel ist, von den Attributen drei und vier auf das Zielattribut zu schließen,
bietet sich ein Entscheidungsbaum an, um dies zu erreichen. Der implementierte FS-ID3Algorithmus ist imstande, einen solchen Entscheidungsbaum zu generieren.
Für das Beispiel wurden die Daten bereits aufgearbeitet und in Datenobjekten angelegt,
damit ist die richtige Arbeitsumgebung für die Algorithmen vorhanden, um mit ihnen
„Data Mining“ durchführen zu können.
Die vorherigen Definitionen von Fuzzy-Sets haben gezeigt, daß eine Klassifizierung
durch sie erfolgsversprechend ist. Die Fuzzy-Sets werden in den FS-ID3-Algorithmus
bzw. den von ihm erstellten Entscheidungsbaum dadurch miteinbezogen, daß die
Entscheidung, zu welchen weiteren Knoten von der Wurzel aus gegangen wird, von
Kanten abhängt. Alle Kanten, die zu einem Knoten führen, können durch Fuzzy-Sets
-53-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
dargestellt werden, dass heißt die geeigneten Fuzzy-Sets geben Auskunft darüber, zu
welchem Knoten beziehungsweise Blatt gegangen wird.
Damit ein geeigneter Entscheidungsbaum generiert werden kann, müssen zuerst die
entsprechenden Prädikate, basierend auf Fuzzy-Sets, für alle Attribute erstellt werden. Es
ist weiters notwendig, Datenobjekte zu erschaffen, welche die passenden Variablen zu
den Prädikaten beinhalten!
Bei der Erstellung der Prädikate gibt es einen Unterschied, der darin liegt, dass die
Attribute eins bis vier numerischer Art sind, das Zielattribut jedoch nicht. Deswegen
werden ihre Prädikate von anderen Operationen erstellt.
Für die Erstellung der Prädikate müssen keine Fuzzy-Sets angegeben werden (können
aber wenn es vom Benutzer gewünscht wird), sie werden automatisch erstellt, und die
Angabe der Attribute reicht aus.
Für die Attribute eins bis vier gibt es die folgende Operation:
CreatePredicates[dataSet,rows,nrSets,opts];
Als Input verlangt diese Operation ein geeignetes Datenobjekt, für das Beispiel wäre es
das Datenobjekt “IrisData”. Weiters verlangt diese Operation die Angabe der Attribute,
die Anzahl der Fuzzy-Sets, die erstellt werden sollen, und noch verschiedene Optionen,
welche sich auf die Fuzzy-Sets beziehen (z.B.: Breite der Fuzzy-Sets).
Im Beispiel wäre das geeignete Datenobjekt „IrisData“. Die Spalten eins bis vier sind die
gewünschten numerischen Attribute und insgesamt sollen fünf Fuzzy-Sets daraus
generiert werden (für jedes Attribut Eines und für die Grenzfälle ebenfalls.)
testPreds=CreatePredicates[IrisData,{1,2,3,4},5];
Passend zu den Prädikaten sollten auch gleich die dazugehörigen Variablen erstellt
werden. Durch die folgende Funktion wird dies erreicht:
DefPredicateVars[predicateList];
Mit der Zuweisung zu einem Namen wird ein solches Datenobjekt angelegt. Die Angabe
der Prädikate als Input für diese Operation genügt, um diese Aufgabe zu erfüllen:
testVars=DefPredicateVars[testPreds];
Wie schon erwähnt unterscheiden sich die Attribute eins bis vier vom Zielattribut fünf.
Für nicht numerische Attribute gibt es die Operation:
CreatePredicatesIs[dataSet, row];
Der Input dieser Operation ist das Datenobjekt „IrisData“, jedoch befindet sich das
Zielattribut in der fünften Spalte. Mit der folgenden Befehlszeile wird das passende
Prädikat für das Zielattribut angelegt:
goalPreds=CreatePredicatesIs[IrisData,5];
Ebenfalls müssen für dieses Prädikat die richtigen Variablen angelegt werden, was die
Funktion „DefPredicateVars[];“ erledigt:
-54-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
goalVars=DefPredicateVars[goalPreds];
Somit sind alle Vorbereitungen getroffen worden, um mit MLF aus den Daten einen
Entscheidungsbaum generieren kann. Wie schon in der Einleitung zu diesem Schritt
erläutert, bietet sich der FS-ID3-Algorithmus an, um einen Entscheidungsbaum zu
erstellen. Die Operation:
CreateID3[dataSet, predicateList, options];
übernimmt diese Aufgabe.
Optional kann für den Algorithmus die zu erstellende „Tiefe“ des Entscheidungsbaumes
angegeben werden.
Für das Beispiel genügen als Angabe die Namen der Variablen, der Prädikate sowie die
Bezeichnung des Datenobjektes:
IrisTree=CreateID3[IrisData,testVars,goalVars];
Mit dieser Befehlszeile generiert MLF aus dem Datenobjekt „IrisData“ unter der
Einbeziehung der Variablen der Prädikate für die Attribute eins bis vier sowie des
Zielattributes einen „fuzzyfizierten“ Entscheidungsbaum.
Optional kann der erstellte Entscheidungsbaum grafisch ausgegeben werden.
Wie schon in den vorigen Schritten wird dafür die Operation „Graphic[]“ für die
Generierung des passenden „Graphic“ Datenobjektes und die Operation „Show[]“ für die
Ausgabe des „Graphic“ Datenobjektes benutzt.
Der Unterschied zu den vorigen grafischen Ausgaben liegt darin, das es eine eigene
Funktion gibt, welche den Plott von einem Entscheidungsbaum erledigt, die mit der
Operation „CreateID3[]“ generiert wurde:
PlotID3[tree, options];
Die Funktion „Graphics[]“ verlangt als Input ein Datenobjekt, damit auch die
Beschriftungen der Blätter des Entscheidungsbaumes grafisch ausgegeben werden
können, muss zusätzlich noch das Datenobjekt mit den Beschriftungen der Blätter
angeben werden. Die Bezeichnung „Beschriftung der Blätter“ ist nicht ganz korrekt, denn
es wird die Legende passend zum Entscheidungsbaum ausgeben und nicht jedes einzelne
Blatt benannt. Die Operation:
PlotClassLegend[goalVars,options];
erstellt eine solche Legende.
Die Angabe des Ausdrucks
{PlotID3[IrisTree],PlotClassLegend[goalVars]}
anstatt der Angabe eines Datenobjektes für die Operation „Graphics[]“ erledigt dies.
Zusätzlich wird durch die Angabe der Optionen „AspectRatio ->…“ die Größe des
Plottes und der Option „Plotrange->…“ die Menge der anzuzeigenden
Merkmalsausprägungen beeinflußt. Gesamt sieht der Input der Funktion „Graphics[]“ wie
-55-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
folgt aus:
Graphics[{PlotID3[IrisTree],PlotClassLegend[goalVars]}, AspectRatio ­> 0.4],PlotRange ­>
All
Darauf angewandt die Operation Show[];
Show [Graphics[{PlotID3[IrisTree],PlotClassLegend[goalVars]}, AspectRatio ­> 0.4],
PlotRange ­> All];
ergibt dann den grafischen Output, welcher den Entscheidungsbaum und die
dazugehörige Legende darstellt.
Der Entscheidungsbaum ist folgendermaßen zu interpretieren: wenn das Attribut
„petal_length“ der Pflanze „mehr“ als 150 mm beträgt, geht es weiter zum nächsten
Knoten (petal_width), sonst hat die Pflanze die Merkmalsausprägung „Iris-versicol“ beim
fünften Attribut. Beim nächsten Knoten stellt sich diese Frage für das Attribut
„pedal_width“, wenn der Wert der Pflanze größer als 100 mm ist, gehört die Pflanze der
Unterart „Iris-virginica“ an, sonst der Klasse „Iris-setosa“. Hier liegt auch die Stärke der
Fuzzy-Logik, denn beim zweiten Knoten („pedal_width“) kann immer noch durch eine
Zugehörigkeitsfunktion ein aussagekräftiger Wert für die Bestimmung der
Klassenzugehörigeit ermittelt werden.
-56-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
6.2.7 Auswertung der Ergebnisse
Damit die Richtigkeit und vor allem die „Funktionalität“ des erstellten
Entscheidungsbaumes garantiert ist, sollte er auch getestet werden. Dafür sollte dem
Entscheidungsbaum eine Datenmenge gegeben und diese anhand des
Entscheidungsbaumes (neu) klassifiziert werden. Dafür bieten sich entweder die
originalen Daten, aus denen der Entscheidungsbaum gebaut wurde, oder andere
Datensätze, welche die gleichen Attribute enthalten, an. Es ist besser, andere Daten zu
verwenden, weil damit garantiert wird, daß es keinen Zusammenhang zwischen den
Daten und den Entscheidungsbaum geben kann. Für die Überprüfung der Funktionsweise
genügen die Originaldaten, wobei jedoch in der Praxis der Schritt zu anderen Daten für
einen Beweis der korrekten Arbeitsweise des erstellten „Entscheidungsbaumes“ besser
ist.
Um nachzuprüfen, wie „korrekt“ der Entscheidungsbaum klassifiziert ist, muss eine
Datenmenge von ihm bewertet werden. Das bedeutet, dass das Zielattribut der Daten für
jeden einzelnen Eintrag ersetzt werden muss durch die Ergebnisse des
Entscheidungsbaumes. Danach wird die so erstellte Datenmenge mit den dafür
zugrundeliegenden Daten verglichen. Dadurch wird ersichtlich, wie viele und vor allem
welche Einträge in den Daten falsch klassifiziert wurden.
Dafür muss zuerst ein neues Datenobjekt angelegt werden. Dieses Datenobjekt soll die
neu klassifizierten Daten beinhalten. In MLF gibt es die Operation:
RecallID3[dataSet, tree, options];
Da für das Beispiel keine Ersatzdatensätze existieren, müssen die originalen Daten
verwendet werden. Das Datenobjekt mit dem originalen Datensatz lautet „IrisData“ und
der FS-ID3 Baum wurde unter dem Namen „IrisTree“ angelegt. Mit dem Aufruf der
Funktion „RecallID3[]“ und dem Zuweisungsoperator „=“ werden alle Dateneinträge des
Datenobjekts bezüglich des Attributes fünf mit dem Entscheidungsbaumes „IrisTree“
neubewertet und als neues Datenobjekt angelegt:
recalledID3=RecallID3[IrisData,IrisTree];
Der Name des neuen Datenobjektes lautet „recalledID3“. Dieses Datenobjekt alleine ist
noch „wertlos“, denn es muss als nächstes mit den ihm zugrunde liegenden originalen
Datenobjekt verglichen werden.
Für solche Vergleiche von Datensätzen existiert die Operation:
CompEvalMatrix[originalClassification, newClassification];
Sie vergleicht die angegebenen Datenmenge und hebt ihre Unterschiede beziehungsweise
Gleichheiten hervor. Für die grafische Ausgabe wird ein Datenobjekt angelegt, welches
den Output der Operation „CompEvalMatrx[];“ beinhaltet. Mit der folgenden
Befehlszeile wird dieses Datenobjekt angelegt:
evalMatrix=CompEvalMatrix[GetData[IrisData,All,5],recalledID3]
-57-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Mittels der Operation „GetData[]“ werden die gewünschten Angaben an die Operation
„CompEvalMatrix[]“ geliefert.
Es gibt nun zwei Arten, wie die Bewertung ausgegeben werden kann, entweder in Form
von einer Matrix oder einer Grafik.
(Die Bewertung in Form einer Matrix ist sehr puristisch, dafür aber sehr aussagekräftig.)
Mit dem „Mapp-All“ Operator (//) wird auf jeden Ausdruck des Objektes, welches die
Bewertung enthält, die Funktion „Matrixform[]“ angewandt. Dadurch wird das
Datenobjekt in die richtige Form gebracht und grafisch ausgegeben:
evalMatrix//MatrixForm
Das „;“ am Ende des Ausdrucks muss weggelassen werden, denn der „//“ Operator
verlangt als Input nur zwei Argumente (einen Ausdruck und eine Operation) und somit
dieses Token3 automatisch impliziert. Die Ausgabe sieht wie folgt aus:
Für eine grafisch „angenehmere“ Ausgabe bietet sich die Operation:
PlotEvalChart3D[evaluationMatrix];
an. Diese Funktion gibt das Datenobjekt, also jenes, welches die Unterschiede zwischen
den Datensätzen beinhaltet, in einer dreidimensionalen Grafik aus. Durch „ApplyOperator“ (@) wird die Operation „PlotEvalChart3D“ auf das Datenobjekt „evalMatrix“
angewandt:
PlotEvalChart3D@evalMatrix;
Das Ergebnis sieht folgendermaßen aus:
3 Token = Zeichen einer attributiven Grammatiken von dem nicht weiter abgeleitet werden kann.
-58-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
1Prediction
2
3
1
0.75
0.5
Percentage
0.25
0
1
2
Class
3
Durch die beiden Ausgaben (Matrix und Grafik) wird ersichtlich, dass ungefähr 88% der
ersten Merkmalsausprägung des Zielattributes (Iris-versicol) richtig erkannt wurden, 100
% der zweiten (Iris-setosa) und wiederum 88% der dritten (Iris-virginica). Das heißt, der
entwickelte Entscheidungsbaum liefert bereits sehr gute Ergebnisse.
Für tiefere Einsichten bietet es sich an, die falsch klassifizierten Einträge der
Datenobjekte ausgeben zu lassen. Dafür gibt es bereits eine Funktion in MLF, die dies
erledigt:
ExtractNonMatchingRecs[dataSet, classPos, evaluationMatrix];
Diese Operation liefert die Einträge, besser gesagt die Nummer derer, welche nicht
übereinstimmten, im Vergleich:
ExtractNonMatchingRecs[IrisData,5,recalledID3]
Als Angabe benötigt die Funktion die originale Datenmenge („IrisData“), das Zielattribut
(die Nummer fünf) nach dem klassifiziert wurde, und dass Datenobjekt, welches die
Bewertung beinhaltet („recalledID3“).
Danach müssen alle Einträge im originalen Datensatz, welche falsch bewertet wurden,
grafisch ausgeben werden. Die Nummern wurden bereits im letzten Verarbeitungsschritt
ermittelt. Jetzt folgt das Heraussuchen der dazupassenden Einträge im Datensatz. Mit der
Operation:
Extract[expr, list];
werden alle Einträge eines Ausdrucks oder Datenobjektes anhand einer Liste ausgeben.
Die Angabe des gesamten Datenobjektes „IrisData“ wäre falsch, da nicht das gesamte
Datenobjekt gebraucht wird, sondern nur bestimmte aus dessen Inhalt. Mit der Funktion
„GetData[]“:
GetData[IrisData]
-59-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
wird der Inhalt vom Datenobjekt „IrisData“ ausgegeben.
Für die grafische Ausgabe muss das Datenobjekt „failedS“ noch in die richtige Form
gebracht werden. Durch den „//“ Operator wird diesesmal die Funktion „Tableform“ auf
das Datenobjekt „failedS“ angewandt. Diese Operation erledigt die grafische Ausgabe,
indem das ihm übergebene Datenobjekt in Form einer Tabelle gebracht und anschließend
auf den Bildschirm ausgegeben wird. Die gesamte Befehlszeile für die Ermittlung und
Ausgabe der im Beispiel falsch klassifizierten Einträge sieht folgendermaßen aus:
failedS=Extract[GetData[IrisData], ExtractNonMatchingRecs[IrisData,5,recalledID3]];
failedS // TableForm
Als Output wird eine Matrix mit den gewünschten Einträgen generiert:
5.9
6.7
6.
7.2
6.3
6.1
3.2
3.
2.2
3.
2.8
2.6
4.8
5.
5.
5.8
5.1
5.6
1.8
1.7
1.5
1.6
1.5
1.4
1.
1.
3.
3.
3.
3.
Anhand dieser Matrix ist es möglich, sich weitere Gedanken darüber zu machen, wie die
Klassifizierung verbessert werden kann, also wie die Fuzzy-Sets neu justiert werden
könnten. Im Beispiel wurde bereits eine Trefferquote von 100% für eine
Merkmalsausprägung und 88% für die restlichen beiden Ausprägungen des Zielattributes
erreicht, was eigentlich ein bereits sehr guter Wert ist.
Es wären noch weitere grafische Analysen der Regelbasis möglich, die aber nur eine
andere Darstellung der bereits erzielten Ergebnisse wären und somit nicht wesentlich
aussagekräftiger sind als die bisher gemachten grafischen Ausgaben.
6.2.8 Erzeugen und testen einer Regelbasis
Wie bereits in der Einführung zu „Supervised Learning“ erläutert ist es in MLF möglich,
eine Regelbasis zu erstellen. Für die Erstellung einer Regelbasis bieten sich einerseits der
FS-Miner, andererseits der FS-FOIL Algorithmus an, wobei die Grundidee für den FSFOIL von J. Quinlay und der des FS-Miner von der Firma SCCH stammte.
Der Unterschied zwischen den beiden Algorithmen FS-MINER und FS-FOIL liegt darin,
dass FS-FOILgeeignet ist, eine Regelbasis zu erstellen, welche alle
Merkmalsausprägungen des Zielattributes zum Zeitpunkt der Erstellung klassifizieren
-60-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
kann. FS-Miner hingegen ist dazu bestimmt, eine Regelbasis für zukünftige weitere
Merkmalsausprägungen des Zielattributes zu erstellen, welche zum Zeitpunkt der
Erstellung der Regelbasis noch nicht bekannt waren. Folglich ist die Frage nach der
Verwendung der Algorithmen, ein Frage der Veränderbarkeit der Daten. Da die erstellten
Regelbasen nur für bereits bekannte Merkmalsausprägungen eine Datenmenge richtig
klassifizieren sollen, generiert der FS-Foil Algorithmus folglich auch sehr kompakte
Regelbasen. FS-Miner hingegen erstellt sehr umfangreiche Regelbasen, und dies bereits
für sehr „kleine“ Datensätze. Jedoch sind gerade in der Medizin aber Regelbasen
interessant, die auch mit „neuen“ Merkmalsausprägungen zurechtkommen. Als Beispiel
wäre eine Regelbasis für Hepatitis zu nennen, die auch mit neuen Unterarten der
Erkrankung zurechtkommen würde.
Für das Beispiel wird die Vorgehensweise für alle zwei Algorithmen erläutert.
Zuerst sei der FS-Foil dargestellt.
Fs-Foil
Zur Generierung einer Regelbasis mit diesem Algorithmus ist kein besonderer Aufwand
zu betreiben. Die Operation:
CreateFOIL[dataSet, predicateList, goalList, options];
benutzt die in MLF implementierte Form des FS-Foil und wendet sie an den angegebenen
Daten an. Als Input verlangt die Operation „CreateFOIL[]“ eine Menge an Daten, aus
denen der Algorithmus die auch anzugebenden Prädikate des Zielattributes und der
restlichen Attribute anwenden kann. Es können auch verschiedene optionale Angaben
getätigt werden, wie genau4 zum Beispiel die Regelbasis klassifiziert werden soll usw.
Für das Beispiel wurden bereits im letzten Schritt, also bei der Erstellung eines
Entscheidungsbaumes, die geeigneten Prädikate angelegt, diese können natürlich
weiterverwendet werden. Somit genügt die Angabe der nächsten Befehlszeile, damit
MLF eine Regelbasis mit dem FS-Foil Algorithmus erstellt:
FoilIrisRules=CreateFOIL[IrisData,testVars,goalVars,MinConf ­> 0.9];
Die Regelbasis wurde im Datenobjekt „FoilIrisRules“ gespeichert und kann jederzeit
wieder abgerufen werden. Mit der Operation:
PrintFOILRules [ruleSet, options];
können die erstellten Regeln grafisch ausgegeben werden. Die alleinige Angabe des
Datenobjektes, welches die Regeln beinhaltet, reicht dafür vollkommen aus, für das
Beispiel ergibt die folgende Befehlszeile:
PrintFOILRules[FoilIrisRules]
4 Alle Regeln welche mit ihrer Entscheidungsrate unter der angegebenen liegen, werden
nicht aufgenommen..
-61-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
den folgenden Ouput:
class_Is_Iris- setosa
class_Is_Iris- versicol
class_Is_Iris- virginica
petal_width_Is_M
petal_width_Is_L
petal_length_Is_VL
petal_width_IsAtLeast_H
Dies ist zwar interessant, aber noch nicht aussagekräftig genug. Deswegen gibt es die
optionale Angabe „Info->True“ für diese Funktion. Damit werden statistische Angaben
für die gefundenen Regeln grafisch mit ausgegeben:
PrintFOILRules[FoilIrisRules, Info ­> True];
Der Output sieht wie folgt für das Beispiel aus:
class_Is_Iris- setosa
35.8838
3.84797
11.6601
0.
45.8838
3.84797
class_Is_Iris- versicol 50.
0.
0.
50.
0.
0.
class_Is_Iris- virginica 46.152
2.4561
46.152
2.4561
14.1162
0.903151
38.3399
1.
4.11624
0.922626
1.
0.333333
1.
0.333333
3.84797
0.949471
3.84797
0.949471
0.239225 petal_width_Is_M
0.0777343 petal_width_Is_L
0.305892 Total
petal_length_Is_VL
Total
0.30768
petal_width_IsAtLeast_H
0.30768
Total
Der grafische Output ist wie folgt zu verstehen:
Zu den Regeln passend stehen in den Spalten immer Angaben zu deren Statistiken
bezüglich ihrer Anwendung auf die Daten5.
In der ersten Spalte steht die „True true – Rate“ in Prozent, also wie viele Einträge des
Datensatzes durch diese Regel zu einer Klasse zugehörig eingestuft wurden und auch
korrekt waren. In der zweiten Spalte steht die „True false – Rate“; sie sagt aus, wie viele
Einträge des Datensatzes durch diese Regel zu einer Klasse als zugehörig eingestuft
wurden und dabei in Wirklichkeit falsch waren.
Die dritte Spalte gibt ebenfalls in Prozent an, wie viele Datensätze durch diese Regel
überhaupt nicht gedeckt wurden.
Die vierte Spalte drückt das „Vertrauen“ in diese Regel aus, sprich wie hoch der
gesammte Prozentsatz der richtig klassifizierten Beispiele war.
Die fünfte Spalte steht für die „Verwendungshäufigkeit“ bezüglich der anderen Regeln.
Mit dieser Ausgabe wird die Durchsicht der erstellten Regelbasis beziehungsweise
einzelner Regeln erheblich vereinfacht, da über den Angaben in der grafischen Ausgabe
gezielt nach den „Schwachstellen“ der Regelbasis gesucht werden kann.
Zur „Kontrolle“ der Regelbasis, also der Probe der Regelbasis, muss wieder ein
geeigneter Datensatz mit der Regelbasis neu bewertet werden.
Dies ist die gleiche Vorgangsweise wie bei der Erstellung eines Entscheidungsbaumes.
5 Gemeint sind die Daten, mit denen die Regelbasis erstellt wurde.
-62-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Zuerst müssen die Daten neu bewertet werden, dann können diese mit den alten
verglichen und zum Schluss die Ergebnisse interpretiert werden.
Wie für den FS-ID3 Algorithmus existiert auch für die Regelbasen, welche mit dem FSFoil Algorithmus erstellt wurden, eine Operation, welche den angegebenen Datensatz neu
bewertet und in einem neuen Datenobjekt anlegt:
RecallFOIL [dataSet, foilRules, options];
Als Input genügt dieser Operation ein Datenobjekt mit dem geeigneten Datensatz und die
entsprechende Regelbasis:
recalledFOIL=RecallFOIL[IrisData,FoilIrisRules];
Die angegebene Befehlszeile legt das Datenobjekt „recalledFOIL“ für das Beispiel an.
Als Nächstes muss die Auswertung erfolgen, das heißt die Originaldaten werden mit den
neubewerteten Daten verglichen und die Ergebnisse wiederum in einer Matrix
gespeichert.
Die Operation „CompEvalMatrix[]“ mit der Angabe:
GetData[IrisData,All,5]
der optionalen Variablen „ALL“ (Ausgabe aller Attribute), dem Zielattribut (fünf) und
der Angabe des Datenobjektes mit den neubewerteten Daten („recalledFOIL“) löst dieses
Problem:
evalMatrix=CompEvalMatrix[GetData[IrisData,All,5],recalledFOIL];
Durch die Anwendung des „MatrixForm“ Operators durch den „//“ Operator auf die
erstellte Ergebnis Matrix:
evalMatrix//MatrixForm
wird der folgende Output erzeugt:
Für eine Ausgabe in Grafikform genügt die Anwendung der
PlotEvalChart3D[evaluationMatrix];
Funktion, um die Ergebnis-matrix grafisch plotten zu lassen:
PlotEvalChart3D@evalMatrix;
-63-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Für das Beispiel wird von Mathematika folgender Ouput erstellt und grafisch geplottet:
1Prediction
2
3
1
0.75
0.5
Percentage
0.25
0
1
2
3
Class
Um eine bessere Ansicht über die „Schwächen“ der Regelbasis zu erhalten, bietet es sich
an, eine Liste zu erstellen, welche alle Datensätze, die bei der Neuklassifizierung mit der
Regelbasis falsch eingeteilten wurden, enthält.
Dazu ist es notwendig, die originalen Daten mit den neubewerteten zu vergleichen. Dafür
bietet sich die folgende Operation an:
ExtractNonMatchingRecs[dataSet, classPos, evaluationMatrix];
Als Input verlangt diese Funktion die originalen Daten sowie das Attribut, nach welchem
die unterschiedlichen Einträge herausgesucht werden sollen sowie den neubewerteten
Datensatz.
Für das Beispiel genügt die folgende Befehlszeile, um diese Aufgabe Mathematica
erledigen zu lassen:
ExtractNonMatchingRecs[IrisData,5,recalledFOIL]
Das ursprüngliche Datenobjekt wurde unter dem Namen „IrisData“ angelegt, das fünfte
Attribut (Zielattribut) wurde neubewertet und der neuklassifizierte Datensatz unter dem
Namen „recalledFOIL“ als Datenobjekt angelegt.
Dies ist für die Ausgabe von nicht klassifizierten Einträgen zu wenig. Damit diese
ausgewählten Einträge auch grafisch ausgegeben werden können, muss ein Datenobjekt
mit den falsch klassifizierten Datensätzen angelegt werden. Mittels des „GetDate[]“
Operators werden alle Einträge des originalen Datensatzes ausgegeben. Alle Einträge der
originalen Daten und die Auswahl aller falsch klassifizierten Einträge des neuen
Datensatzes dienen als Input für die Operation:
Extract[expr, list];
-64-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
wobei dem Output dieser Operation mittels des „Zuweisungsoperators“ (=) ein Namen
zugewiesen wird.
Für das Beispiel drückt die folgende Befehlszeile dies aus:
failedS=Extract[GetData@irisData, ExtractNonMatchingRecs[IrisData,5,recalledFOIL]];
Damit das Datenobjekt in die richtige Form gebracht wird, ist es am effektivsten, den „//“
Operator gepaart mit dem Befehl „Tabelform“ auf das neu angelegte Datenobjekt
anzuwenden:
failedS//TableForm
Als Ergebnis generiert MLF eine Tabelle, welche alle falsch neuklassifizierten Einträge
der ursprünglichen Datenmenge beinhaltet. Anhand dieser Daten ist es sinnvoll, die
Fuzzy-Sets, welche der Regelbasis zugrundeliegen, neu zu definieren beziehungsweise zu
optimieren. Für das Beispiel ergibt sich der folgende Output:
5.9
6.7
6.
7.2
6.3
6.1
3.2
3.
2.2
3.
2.8
2.6
4.8
5.
5.
5.8
5.1
5.6
1.8
1.7
1.5
1.6
1.5
1.4
1.
1.
3.
3.
3.
3.
FS-Miner
Ebenso wie für den FS-FOIL-Algorithmus existiert für den FS-Miner-Algorithmus eine
Funktion, welche diesen auf einen Datensatz anwendet:
CreateMINER[dataSet,predicateList,goalList,options];
Als Input verlangt die Operation einen Datensatz, eine Menge an Prädikaten, (welche die
Fuzzyfizierung darstellen) Zielattribute sowie optionale Angaben für die Suche nach
Regeln.
z.B.: Wie hoch die „True-Positive Rate“ der Regeln für die Aufnahme in die Regelbasis
sein soll.
Der Datensatz wurde bereits am Anfang im Datenobjekt „IrisData“ gespeichert, die
Fuzzy-Prädikate wurden im Datenobjekt „testVars“ angelegt, ebenso wie die
Zielvariablen. Für das Beispiel macht als optionale Angabe ein Wert zwischen 80% und
90% für die „True-Positive Rate“ Sinn.
Somit sollte sichergestellt sein, dass keine „aussagenschwache“ Regeln in die Regelbasis
aufgenommen werden. Für das Beispiel sieht der Ausdruck für die Erstellung der
Regelbasis mit dem FS-Miner Algorithmus wie folgt aus:
CreateMINER[IrisData,testVars,goalVars,MinConf ­> 0.9];
-65-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Mit dem Zuweisungsoperator „=“ wird das Ergebnis dieses Ausdrucks wieder einem
Namen zugewiesen:
MinerIrisRules=CreateMINER[IrisData,testVars,goalVars,MinConf ­> 0.9];
Die Ausgabe der gefunden Regeln übernimmt, wie bei dem FS-ID3-Algorithmus und
dem FS-FOIL-Algorithmus, wieder eine eigene Operation:
PrintMINERRules[ruleSet,options];
Diese Operation gibt einzig die gefundenen Regeln aus, dafür benötigt sie als Input das
Datenobjekt mit der Regelbasis und optionale Angaben über die Menge der
ausgegebenen Regeln. Mit der Angabe „Info -> True“ gibt diese Operation wieder
verschiedene statistische Informationen von den gefundenen Regeln aus (siehe
PrintFOILRules[]):
PrintMINERRules[MinerIrisRules,Info ­> True]
Der Output nach der Auswertung der obigen Funktion für das Beispiel sieht wie folgt
aus:
class_Is_Iris- setosa
class_Is_Iris- versicol
47.5439
36.0829
35.8838
11.4482
37.7614
47.5439
2.
3.31928
2.
0.
0.
3.31928
50.
0.
0.
50.
0.
0.
class_Is_Iris- virginica 29.7032
0.
45.152
2.30407
27.8552
0.
24.1357
0.
47.
2.30407
2.4561
13.9171
14.1162
38.5518
12.2386
2.4561
0.959632
0.915759
0.947207
1.
1.
0.934741
1.
0.333333
1.
0.333333
20.2968
1.
4.84797
0.951448
22.1448
1.
25.8643
1.
3.
0.953268
0.316959
0.240553
0.239225
0.0763215
0.251743
0.316959
0.198021
0.301014
0.185701
0.160904
0.313333
petal_width_IsAtLeast_L
sepal_width_IsAtMost_L
petal_width_Is_M
petal_width_Is_M
petal_width_IsAtLeast_L
Total
petal_width_Is_VL
Total
petal_width_IsAtLeast_M
petal_width_IsAtLeast_M
petal_length_IsAtLeast_H
petal_length_IsAtLeast_H
Total
petal_length_IsAtMost_H
petal_width_IsAtMost_M
petal_length_IsAtMost_H
petal_length_IsAtMost_H
petal_length_IsAtMost_M
petal_length_IsAtLeast_H
petal_length_IsAtLeast_H
petal_width_IsAtLeast_H
petal_width_IsAtLeast_H
petal_width_IsAtMost_M
petal_width_IsAtLeast_L
sepal_width_IsAtLeast_M
petal_width_IsAtMost_M
petal_length_Is_VH
petal_width_IsAtLeast_H
petal_length_Is_VH
petal_width_Is_VH
Die Bedeutung der Spalten ist diesselbe wie für die Operation „PrintFOILRules[]“ (siehe
Punkt „FS-FOIL“).
Für die weitere Durchsicht und Bearbeitung der Regelbasis sollte wiederum ein
Datenobjekt mit einem neubewerteten Datensatz angelegt werden. Für diese Aufgabe
wurde in MLF die Operation:
RecallMINER[dataSet,minerRules,options];
implementiert. Als Input verlangt diese Operation einen Datensatz, von welchem die
Einträge bezüglich des Zielattributes neu bewertet werden können, sowie ein Datenobjekt
mit der von „FS-Miner“ generierten Regelbasis.
recalledMINER=RecallMINER[IrisData,MinerIrisRules]; Das geeignete Datenobjekt mit dem Datensatz ist wiederum „IrisData“ und die
Regelbasis vom „FS-Miner“-Algorithmus wurde unter dem Namen „MinerIrisRules“
angelegt.
-66-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Für die Bewertung der Regelbasis sollte wiederum eine „Bewertungs-Matrix“ erstellt
werden. Ebenso wie für die Algorithmen FS-FOIL und FS-ID3 wird dafür die Operation
„ComEvalMatrix[];“ benutzt. Als Input verlangt diese Operation sowohl den neu
bewerteten als auch den ursprünglichen Datensatz. Mit dem Zuweisungsoperator „=“
wird dem so erstellten Datensatz wieder ein Name zu gewiesen. Für das Beispiel ist die
folgende Befehlszeile ausreichend:
evalMatrix=CompEvalMatrix[GetData[IrisData,All,5],recalledMINER];
Für den Output der alleinigen Daten der “Bewertungs-Matrix” wird wiederum der “//”
Operator gepaart mit dem Befehl “MatrixForm” verwendet:
evalMatrix//MatrixForm
Der Output, welcher für das Beispiel generiert wird, sieht folgendermaßen aus:
Für die Ausgabe einer Grafik des Datenobjektes „evalMatrix“ genügt die Anwendung der
Operation „PlotEvalChart3D[]“ mittels dem Apply-operators (@) auf das passende
Datenobjekt:
PlotEvalChart3D@evalMatrix;
Als Output wird die folgende Grafik generiert:
1Prediction
2
3
1
0.75
0.5
Percentage
0.25
0
1
2
3
Class
-67-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Es empfiehlt sich weiters, die falsch klassifizierten Einträge der originalen Daten plotten
zu lassen. Dafür müssen zuerst alle voneinander unterschiedlichen Einträge der
originalen und neubewerteten Daten herausgefunden werden. Dafür existiert, wie bereits
für den Algorithmus FS-FOIL erläutert, die Funktion „ExtractNonMatchingRecs[]“.
Ihr Input besteht aus der Angabe des originalen sowie des neubewerteten Datenobjektes
(IrisData) und des Zielattributes (fünf):
ExtractNonMatchingRecs[IrisData,5,recalledMINER]
Danach können die somit als „falsch“ klassifizierten Dateneinträge des neubewerteten
Datensatzes aus dem originalen Datenobjekt herausgesucht und in einem neuen
Datenobjekt gespeichert werden.
Die Operation:
Extract[expr, list]:
erledigt dies unter der Angabe aller Einträge der originalen Daten und der Angabe der
„falsch“ klassifizierten des neubewerteten Datensatzes.
Gesamt sieht die Befehlszeile für das Beispiel wie folgt aus:
failedS=Extract[GetData@IrisData, ExtractNonMatchingRecs[IrisData,5,recalledMINER]];
Damit das Datenobjekt “failedS” in tabellarischer Form ausgegeben werden kann, genügt
wiederum der „//” Operator verbunden mit der Angabe des Befehls „Tableform“
failedS//TableForm
Für das Beispiel wird der folgende Output generiert:
5.9
6.7
4.9
6.
6.3
6.1
3.2
3.
2.5
2.2
2.8
2.6
4.8
5.
4.5
5.
5.1
5.6
1.8
1.7
1.7
1.5
1.5
1.4
1.
1.
3.
3.
3.
3.
Der Output enthält die falsch klassifizierten Einträge mit allen Attributen und deren
Merkmalsausprägungen. Somit sollte es für den Benutzer wiederum möglich sein, die der
Regelbasis zugrundeliegenden Fuzzy-Sets so zu verändern, dass auch diese Einträge
korrekt klassifiziert werden.
-68-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Optimieren von Regelbasen (FS-RENO)
Für die Optimierung der im letzten Arbeitsschritt erstellten Regelbasen des letzten
Arbeitsschrittes wurde der FS-RENO-Algorithmus in MLF implementiert. Dieser
Algorithmus optimiert mittels Approximation die ihm übergebende Regelbasis. Der Input
des FS-RENO-Algorithmus ist auf sechs Dimensionen beschränkt (sechs
Eingangsattribute), wobei schon bei weniger als sechs Dimensionen ein riesiger
Rechenaufwand betrieben werden muss;
deswegen auch diese Beschränkung.
Um eine gegebene Regelbasis optimieren zu lassen, müssen ihre Regeln einzeln in einer
Liste gespeichert und in einem Datenobjekt verpackt werden. Der Grund dafür liegt
darin, dass der FS-RENO-Algorithmus jede Regel für dessen Optimierung einzeln
aufrufen muss. Für das Herauslesen der einzelnen Regeln muss kein Script in
Mathematica geschrieben werden, dafür existiert bereits von Mathematica selbst eine
Operation, welche aus einem gegebenen File alle einzelnen Einträge extrahiert:
Flatten[list];
Zur Auswahl stehen einerseits die Regelbasis vom FS-MINER-Algorithmus
(IrisFoilRules), andererseits die Regelbasis des Algorithmus FS-FOIL (IrisMinerRules).
Die oben erwähnte Operation, angewandt auf eine der zuvor generierten Regelbasen,
erzeugt ein Datenobjekt mit den extrahierten Regeln, welchem wiederum ein Name
zugewiesen werden sollte.
Für das Beispiel genügt die folgende Befehlszeile:
FlattedIrisFoilRules = Flatten [IrisFoilRules];
Für die Anwendung des FS-RENO-Algorithmus existiert die Operation:
OptimizeRENO[dataSet, controller, options];
Als Input verlangt diese Operation ein Datenobjekt, welches Daten beinhaltet, an denen
der FS-RENO-Algorithmus die Regeln „trainieren“ kann. Für das Beispiel wäre dies das
Datenobjekt „IrisData“. Als zweiten Input verlangt diese Operation eine Regelbasis,
entweder erstellt vom FS-Miner oder FS-FOIL Algorithmus. Es wäre auch möglich,
selbst eine Regelbasis zu erstellen und diese anzugeben.
Bei dem Beispiel ist es egal, welche Regelbasis genommen wird, deswegen wird die
erstellte Regelbasis vom FS-FOIL-Algorithmus benutzt, der im im Schritt 8. erzeugt
wurde.
Durch die Befehlszeile:
PrintRules[FlattedIrisFoilRules]
mit der Operation „PrintRules[]“ wird der Inhalt des Datenobjektes
„FlattedIrisFoilRules“ grafisch ausgegeben. Dieser Schritt ist optional und dient
hauptsächlich dazu, die Regeln der ursprünglichen Regelbasis mit der optimierten zu
-69-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
vergleichen. Der Output von Mathematica für die Regelbasis des FS-FOIL-Algorithmus
hat das folgende Aussehen:
class_Is_Iris-setosa
petal_witdth_Is_M || petal_width_Is_L
class_Is_Iris-versicol
petal_length_Is_VL
class_Is_Iris-virginica
petal_width_IsAtLeast_H
Durch die Angabe der folgenden Befehlszeile wird die Regelbasis mit der Operation
„OptimizeRENO[]“ optimiert:
optimizedFoilRules = OptimizeReno[FlattedIrisFoilRules];
Um die Veränderung an der Regelbasis ersichtlich zu machen beziehungsweise die
optimierte Regelbasis grafisch ausgeben zu lassen, bietet sich die Operation „PrintRules
[]“ an. Ihr genügt als Input die optimierte Regelbasis (optimizedFoilRules):
PrintRules[optimizedFoilRules]
Als Output generiert Mathematica respektive MLF eine Grafik, welche die optimierten
Regeln beinhaltet:
OptimizeReno[{class_Is_Iris-setosa, {}, petal_width_Is_M || petal_width_Is_L,
class_Is_Iris-versicol, {},petal_length_Is_VL, class_Is_Iris-virginica, {},
petal_width_IsAtLeast_H}]
6.3 Fazit
„Supervised Learning“ ist geeignet, aus einer Menge von Daten neues Wissen in Form
von Regelbasen oder Entscheidungsbäumen zu generieren. Diese Aufgabe beherrscht
MLF hervorragend. Die generierten Entscheidungsbäume sind „anwendungsfähig“, die
Regelbasen sind „aussagekräftig“. Selbst der Rechenaufwand und das
Antwortzeitverhalten des Templates MLF befinden sich in einem moderaten Bereich. Der
einzige Wermutstropfen liegt darin, dass die Daten bereits in aufgearbeiteter Form dem
-70-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
„Supervised Learning“ von MLF übergeben werden müssen. Die Daten roh, ohne voriger
Durchsicht mit den Operationen, Funktionen beziehungsweise Algorithmen vom
„Supervised Learning“ zu bearbeiten, wäre sinnlos. Die Daten in Mathematica in MLF zu
bearbeiten ist nur bis zu einem bestimmten Grad machbar, und geht vom Anlegen von
neuen Datenobjekten bis zum Herauslesen von Spalten oder dergleichen aus bestehenden
Datenobjekten nicht darüber hinaus.
Der Mächtigkeit von „Supervised Learning“ tut dies zwar keinen Abbruch, da sowieso
(allgemein gesehen) im „Data Mining“ einen Schritt zuvor die Daten „durchgesichtet“
wurden. Somit sollten die Daten eigentlich schon in „bearbeiteter“ Form vorliegen.
Weiters ist noch festzuhalten, dass die Qualität der Daten für das „Supervised Learning“
wichtiger ist als die Quantität, somit stößt diese Verarbeitungsmethode von MLF bei
medizinischen Daten schnell an ihre Grenzen.
Alle Datensätze, die für diese Bakkalaureatsarbeit zur Verfügung gestellt wurden, waren
von schlechter Qualität. Entweder fehlte eine Dokumentation oder ein und dasselbe
Attribut wurde verschieden bezeichnet, daß heißt der Aufbereitung der Daten fließt
dadurch ein noch höherer Stellenwert zu. Deswegen gibt es auch die methodische
Zusammenfassung der Vorgehensweise des „Unsupervised Learnings“, welche im
nächsten Abschnitt erklärt werden wird.
Abschließend lässt sich festhalten, dass „Supervised Learning“ vom Tool MLF,
entwickelt von der in Hagenberg ansäßigen Firma „SCCH“ Möglichkeiten bietet, aus
dem in bestehenden medizinischen Datenbanken enthaltenen Daten neues Wissen durch
die Anwendung von fuzzyfizierten Algorithmen zu generieren.
-71-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
7 Unsupervised Learning mit MLF
Beim „Unsupervised Learning“ handelt es sich um ein Analyseverfahren, bei dem das
Ziel nicht vorgegeben ist. Zum Vergleich dazu muss beim „Supervised Learning“ ein
Ziel vorgegeben sein. „Unsupervised Learning“ beschäftigt sich mit dem Clustern von
Daten und dem Finden von Zusammenhängen.
Aus diesem Grund wird das „Unsupervised Learning“ auch oft vor dem „Supervised
Learning“ durchgeführt, um einerseits herauszufinden, bei welchen Daten eine genauere
Analyse interessant sein könnte, und andererseits störende Daten zu beseitigen
(Verringerung der Datenmenge).
Das Prinzip von „Unsupervised Learning“ liegt darin, das nicht etwa auf Grund der
Ausgaben ein Gewicht (gemeint sind die Zusammenhänge) verändert wird, sondern nur
alle Gewichte gleichzeitig. Wenn nun der neue Output besser ist als der alte, werden
diese Gewichte weiter verwendet, andernfalls verworfen. Aus diesem Grund ist es auch
nicht notwendig, ein Ziel vorzugeben, da “Unsupervised Learning” ohne eine Anweisung
auskommt (Vergleich zur dynamischen Programmierung). Ein Nachteil ist sicherlich, daß
diese Lernart vor allem durch die vielen Vergleichsoperationen aufwendiger und damit in
der Verarbeitung langsamer ist als „Supervised Learning“.
MLF beherrscht drei verschiedene Verfahren zur Durchführung von „Unsupervised
Learning“:
•
•
•
SOM (Kohonen maps)
Fuzzy K-Means (clustering)
WARD (crisp clustering)
Es folgt nun eine kurze und überblicksmäßig gehaltene Einführung in die Theorie des
„Unsupervised Learnings“, danach werden die oben angeführten Algorithmen näher
behandelt.
7.1 Einführung zur Cluster-Analyse
Grundsätzlich geht es bei der Clutser-Analyse um die Gruppierung von Objekten einer
Menge, sodass Cluster entstehen, in denen die Ähnlichkeiten zwischen den Objekten
maximal und die Ähnlichkeiten zwischen den Clustern minimal werden.
-72-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
7.1.1 Ähnlichkeits- und Distanzmaße
Intervallsskalierte Merkmale:
Euklidisches Distanzmaß
p
1/2
d ii ' =[ ∑  X ij − X i ' j 2 ]
j
p
Xij
Xi'j
Anzahl der Merkmale
Ausprägung des Objekts i auf dem Merkmal j
Ausprägung des Objektes i' auf dem Merkmal j
Üblicherweise werden die einzelnen Merkmale über die Objekte z-transformiert. Dabei
ist die Wahl der City-Block Metrik (Taxifahrer-Metrik) oft sehr sinnvoll, da in den Daten
häufig „Ausreißerwerte“ (überhöhte Merkmalsdifferenzen) zu finden sind und diese
somit vernachlässigt werden können.
p
1
d ii ' =[ ∑  X ij − X i ' j 1 ]
j
p
Xij
Xi'j
Anzahl der Merkmale
Ausprägung des Objekts i auf dem Merkmal j
Ausprägung des Objektes i' auf dem Merkmal j
Manchmal besteht das Problem, dass die Merkmale der Daten inkorrelieren und somit
das Distanzmaß ungleich beeinflusst wird. Dagegen gibt es jedoch Maßnahmen, die
gegebenenfalls getroffen werden können:
Faktoranalyse
Die Merkmale werden mittels Hauptkomponentenanalyse und Varimaxrotation
faktorenanalysiert. Das Distanzmaß wird dann aufgrund der Faktorenwerte der
interpretierbaren Faktoren berechnet. Inhaltlich und statistisch unbedeutende Faktoren
werden dabei nicht berücksichtigt. Voraussetzung für diese Analyse ist jedoch, dass die
aufgrund der Stichprobe ermittelte Faktorenstruktur auch für die durch die Clusteranalyse
gebildeten Untergruppen gilt.
•
-73-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Resudzakusuerte Variablen
Die gemeinsame Varianz zwischen den Variablen werden „herauspartialisiert“. Jene
Variable, die inhaltlich am Wichtigsten erscheint, geht standardisiert in die Distanzformel
ein. Diese Variable wird aus der zweiten herauspartialisiert. In der Distanzformel werden
dann, statt der ursprünglichen Werte, die standardisierten verwendet. Aus der dritten
Variable werden die Variablen Eins und Zwei herauspartialisiert usw. Hierbei ist es
Voraussetzung, dass auch die weiteren Variablen mehr als nur die Fehlervarianzanteile
beinhalten.
•
Mahalanobis - Distanz
Dieses Distanzmaß entspricht der euklidischen Distanz. Es berechnet über die
Faktorwerte aller Faktoren eine Hauptkomponentenanalyse.
•
7.1.2 Clusteranalytische Verfahren
Hierarchische Verfahren
Bei den hierarchischen Verfahren werden zuerst die paarweisen Distanzen zwischen allen
Objekten berechnet. Danach fusioniert man jene zwei Objekte zu einem Cluster, welche
die kleinste Distanz (entspricht der größten Ähnlichkeit) haben. Dadurch reduziert sich
die Anzahl der möglichen Cluster um eins. Nun werden die Clusterdistanzen der
verbleibenden Cluster erneuet verglichen und wieder jene zwei, die die kleinste Distanz
haben, zusammengefasst. Eine Darstellung dieses Prozesses kann in einem sogenannten
Dendrogramm6 erfolgen, auf das hier nicht näher eingegangen werden sollte. Nachteil
dieses Verfahrens ist, dass nach der Zuordnung eines Objektes zu einem Cluster diese
nicht mehr revidierbar ist. Nach eingehenden Analysen und Testläufen hat sich
herausgestellt, dass mit der sogenannten WARD-Methode für Ähnlichkeitsmaße die
besten Resultate erzielt werden.
Nicht-hierarchische Verfahren
Dabei gibt man die Anzahl der Cluster vor und versucht, die Startgruppierung durch
schrittweises Verschieben der einzelnen Objekte von einem zum anderen Cluster zu
verbessern. Allerdings ist dieses Verfahren bereits bei einer relativ geringen Anzahl von
Objekten sehr rechenaufwendig.
6 Dendrogramm ist ein Baum, der die hierarchische Zerlegung der Datenmenge in immer kleinere
Teilmengen darstellt.
-74-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Kombiniertes Verfahren
Hierbei werden das hierarchische und das nicht-hierarchische Verfahren kombiniert. Man
bestimmt zuerst mittels einer hierarchischen Clusteranalyse die Anzahl der Cluster und
verfeinert diese anschließend mit einem nicht-hirachischen Verfahren.
WARD-Verfahren
Beim WARD-Verfahren werden jene Cluster zusammengelegt, durch deren Fusion die
geringste Erhöhung der gesamten Fehlerquadratsumme ausgelöst wird. Am Anfang der
Fusionierung werden bevorzugt kleinere Cluster in Regionen mit hoher Objektdichte
gebildet. Daraus resultieren annähernd gleich groß gefüllte Cluster.
k-means Verfahren
Es wird eine fixe Anzahl (k) von Clustern vorgegeben. Danach werden die euklidischen
Distanzen zu allen Clusterschwerpunkten gemessen und gegebenfalls die Objekte
entsprechend dazu verschoben. Anschließend werden die Clusterschwerpunkte erneut
berechnet und die Objekt wieder neu angeordnet.
Die Zuordnung eines Objektes zu einem Cluster kann prinzipiell beliebig oft wiederholt
werden. Es wird jedoch grundsätzlich empfohlen, verschiedene Reihenfolgen für die
Objekte zu verwenden. Die Lösung ist jene, die durch verschiedene Startpositionen am
häufigsten bestätigt wurde.
Evaluierung der Cluster-Lösung
Man unterteilt eine Objektmenge zufällig in zwei gleich große Teilmengen A und B.
Danach wird je eine Clusteranalyse auf den Teilmengen durchgeführt, als Ergebnis
sollten dann beide Clusteranalysen übereinstimmen. Man kann das
Übereinstimmungsmaß Kappa durch den Anteil der Übereinstimmungen aller Objekte in
der Diagonalen folgendermaßen berechnen:
k
∑
P 0 −P e
K=
P= i
n
1−P e 0
k
f ii
P e=
∑ fi× f i
i
n2
Aus der Formel ergibt sich das Problem, dass die Art der Clusterbildung manchmal von
einem einzigen Objekt abhängig ist.
-75-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Es folgt eine Darstellungsweise der Methodik des „Unsupervised Learnings“ von MLF,
welches an einem leicht verständlichen Beispiel beschrieben wird.
7.2 SOM (Kohonen maps)
SOM (“Self Organized Maps”) wurden 1982 von Teuvo Kohonen entdeckt. Die
grundlegende Idee der SOM ist es, in die konkurrierende Lernregel ein Maß an
Sensibilität einzubringen, welche die Nachbarschaft beachtet. Damit können vollständig
ungelernte Neuronen vermieden und bestimmte topologische Eigenschaften gesteigert
werden, die in den abzubildenden Eigenschaften bewahrt werden sollten.
Nehmen wir an, ein Eingabemuster hat N Eigenschaften und es wird durch den Vektor x
in einem N-dimensionalen Musterraum dargestellt. Dann sollte ein „Netzwerk“ dieses
Eingabemuster auf einen Ausgaberaum abbilden. Der Ausgaberaum sollte ein ein- oder
zwei-dimensionales Feld von Ausgabeknoten sein, welche eine bestimmte topologische
Ordnung aufweisen. Die Frage ist, wie ein Netzwerk so trainiert werden kann, dass die
ordnenden Beziehungen beinhalten werden können. Kohonen schlug vor, dass
Ausgabeknoten lateral interagieren können, was zu den “Self Organized Maps” (SOM)
führt.
SOM sind folglich nichts anderes als selbstorganisierende Abbildungen von Rn auf eine
regelmäßige zwei-dimensionale Gitterstruktur.
7.2.1 Grundsätzlich Arbeitsweise einer SOM
1. Präsentation der Eingabedaten.
Zufällige Auswahl eines Datensatzes, wobei jedoch zu beachten ist, dass jeder
Datensatz gleich oft an die Reihe kommen sollte.
2. Ermitteln des Bestmatch.
Es wird der Datensatz ausgewählt, der am besten zu dem im vorherigen Punkt
ermittelten Datensatz passt (Bestmatching).
3. Lernen in der Nachbarschaft des Bestmatch.
Der ausgewählte Datensatz wird dem optimalen Datensatz um einen bestimmten Wert
angepasst (zum Beispiel Annäherung um 10%). Es werden auch alle Datensätze, die in
einem bestimmten Radius um den ausgewählten Datensatz liegen, ebenso modifiziert.
4. Ändern des Nachbarschaftsradius und Wiederholung.
Der Nachbarschaftsradius und die Anpassungsrate werden verkleinert und die Punkte
eins bis vier werden solange wiederholt, bis ein sinnvolles Ergebnis vorhanden ist.
-76-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Wie bereits erwähnt, werden Beispieldaten aus dem MLF-Tutorial mit „Unsupervised
Learning“ bearbeitet. Dies soll demonstrieren, wie SOM mittels MLF unter Mathematica
funktionieren.
7.2.2 Beispiel für SOM mit Mathematica & MLF
Zuerst muss einerseits die Grafikbibliothek, und andererseits das MLF AddOn in
Mathematica initialisiert werden. Das geschieht mit der folgenden Befehlssequenz:
Needs["Graphics`Graphics`"]
Needs["MLF`"]
Nach einer Shift-Enter Kombination, sollten beide für das Arbeiten in den MathematicaKernel eingebunden sein. Für die Darstellung der Funktionsweise von SOM's sollten
zufällig generierte Daten ausreichen. Ein von einem Zufallsgenerator erzeugtes Datenfeld
wird in der weiteren Folge durch „Unsupervised Learning“ weiterbearbeitet:
samples = 1000;
dims = 2;
data1 = Table[{Random[]*0.25, Random[]*0.25, 1}, {i, samples*0.25}];
data2 = Table[{0.25 + Random[]*0.4, 0.5 + Random[]*0.5, 2}, {i, samples}];
data3 = Table[{0.75 + Random[]*0.25, Random[], 3}, {i, samples}];
sampleData = DataSet[Join[data1, data2, data3], {"x", "y", "class"}];
Um einen Blick auf das Datenfeld werfen zu können, sollte der nachfolgende Plot-Befehl
genutzt werden:
Show@Graphics[Join[
PlotAttributes[sampleData, Dims ­> {1, 2}, Goal ­> 3, PointSize ­> 0.01]
], Axes ­> True, PlotRange ­> {{0, 1}, {0, 1}}, AspectRatio ­> 1];
Als Ergebnis erscheint eine Grafik auf dem Bildschirm, die in etwa das folgende
Aussehen haben:
-77-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Da nun ein geeigneter Datensatz vorhanden ist und dieser auch schon betrachtet wurde,
kann darauf basierend eine “Self organized map” (SOM) erstellt werden. Dies geschieht
mittels der CreateSOM[] Funktion.
Der CreateSOM[] Befehl sieht folgendermaßen aus:
CreateSOM[<daten>, <optionen>]
• <daten>
•
<optionen>
•
•
•
•
•
Größe der SOM – Matrix:
Maximales Fehlerlevel:
Typ:
Gewichtung der Attribute:
Initialisierung des Zählers:
Size->{x,y}
Errorlevel -> Automatic oder Angabe einer Zahl
Wahlweise “BATCH” oder “ONLINE”
Weights->Automatic oder Weights->{x,y,...}
Count-> Automatic oder Angabe einer Zahl
Bei dem Beispiel empfiehlt es sich, eine 5x5 Matrix mit der Gewichtung auf die Attribute
eins und zwei erstellen zu lassen. Es empfiehlt sich deswegen eine 5x5 Matrix, weil eine
größere Matrix zu rechenintensiv wäre und eine kleinere nicht anschaulich genug für eine
Einführung in SOM's wäre.
som = CreateSOM[
sampleData,
Weights ­> {1, 1, 0},
Size ­> {5, 5},
Errorlevel ­> Automatic,
Type ­> "BATCH"
];
-78-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Als Ergebnis erhält der Benutzer ein SOM Netzwerk mit 25 Knoten, welches mit dem
sogenannten BATCH-Algorithmus trainiert wurde.
Mit der „getData[]“ Operation können die berechneten SOM Vektoren grafisch
ausgegeben werden . Der Output sollte in etwa folgendermaßen aussehen:
In[14] := GetData[som]
Out[14]:= {{0.879765, 0.178109, 3.}, {0.893409, 0.309843, 3.}, {0.870901, 0.488904,
3.}, {0.879876, 0.696028, 3.}, {0.880435, 0.778117, 3.}, {0.876535,
0.147764, 3.}, {0.866258, 0.212901, 3.}, {0.783786, 0.477735,
2.72558}, {0.781696, 0.566048, 2.71146}, {0.820239, 0.777347,
2.80505}, {0.521673, 0.120482, 2.0813}, {0.579746, 0.51168,
2.25559}, {0.587787, 0.572178, 2.25575}, {0.622112, 0.71715,
2.19577}, {0.628701, 0.827512, 2.18681}, {0.124166, 0.127421,
1.}, {0.216377, 0.266915, 1.34211}, {0.434791, 0.615273,
1.99187}, {0.461743, 0.650073, 2.}, {0.47408, 0.849724, 2.}, {0.136915,
0.161205, 1.08425}, {0.28253, 0.481547, 1.7019}, {0.394007, 0.638609,
2.}, {0.413782, 0.799054, 2.}, {0.432252, 0.870749, 2.}}
Um etwas mehr „Übersicht“ über den grafischen Output zu erhalten, bietet es sich an, den
Plott dahingehend zu verändern, dass die Vektoren des SOM in ein kartesisches
Koordinatensystem mit den Daten eingetragen werden:
Show@Graphics[Join[
PlotAttributes[sampleData, Dims ­> {1, 2}, Goal ­> 3, PointSize ­> 0.005],
{GrayLevel[0]}, PlotSOMGrid[som, Dims ­> {1, 2}, Goal ­> 3, PointSize ­> 0.02, Thickness ­> 0.0025]
], Axes ­> True, PlotRange ­> {{0, 1}, {0, 1}}, AspectRatio ­> 1];
Als grafische Ausgabe sollte der Mathematica-Kernel das folgende Bild generieren:
-79-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Für die weitere Verarbeitung müssen die mit der SOM modifizierten Daten aus ihrem
Datenobjekt ausgelesen werden. Dafür bieten sich zwei Funktionen an.
Mit dem „som[]“ Befehl werden alle Daten aus der veränderten Datenmenge augelesen.
Mit der „RecallBM[]“ Funktion werden alle „Best Matches“ (beste Treffer) aus dem
Datensatz ausgegeben. Für die weiteren Arbeitsschritte ist der zweite Befehl der
geeignetere. Folgende Befehlszeile erledigt dies für das Beispiel:
recallData = RecallBM[sampleData, som, NStrength ­> 5.0, NSize ­> 5];
Hier ist der RecallBM[] noch einmal ein wenig genauer erklärt:
-80-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
RecallBM[<datensatz>,<cluster>, <optionen>]
•
<datensatz>
•
<cluster>
•
<optionen>
•
•
•
Gewichtung:
Größe der Nachbarschaft:
Beeinflussung der Nachbarschaftsknoten:
Weights->Automatic oder Zahl
Nsize->Zahl
Nstrength->Zahl
Durch den folgenden Plot, in welchen aus dem bearbeiteten Datensatz alle „Best
Matches“ herausgefiltert wurden, sollte die Ausprägungen der Datensätze sichtbar
werden:
Show@Graphics[Join[
PlotAttributes[recallData, Dims ­> {1, 2}, Goal ­> 3, PointSize ­> 0.005],
{GrayLevel[0]}, PlotSOMGrid[som, Dims ­> {1, 2}, Goal ­> 3, PointSize ­> 0.02, Thickness ­> 0.0025]
], Axes ­> True, PlotRange ­> {{0, 1}, {0, 1}}, AspectRatio ­> 1];
Der grafische Output:
-81-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Anhand der Grafik ist ersichtlich, dass die erstellte “Self organized map” (SOM) das
Datenfeld beinhaltet. An den Ecken des Netzes ist eine höhere Dichte der Daten zu
erkennen. Dieser Effekt ist dadurch zu erklären, dass die Punkte, die zuerst außerhalb des
Netzes lagen, ins Netz abgebildet (“gemapped”) wurden.
7.3 Fuzzy K-Means (clustering)
Bei der Fuzzy K-Means-Methode handelt es sich um ein Clustering Verfahren, welches
die Möglichkeit bietet, die Zahl der Cluster frei zu wählen und jeden Vektor des zu
clusternden Datensatzes mit einer benennbaren Wahrscheinlichkeit (Nprototyp , den
sogenannten Prototypen) zu versehen. Der Fuzzy K-Means-Algorithmus sucht dabei nach
kreis- bzw. kugelförmigen Clustern im Merkmalsraum, welche die folgende Gleichung
minimieren:
U = Zugehörigkeitswahrscheinlichkeiten
V = Prototypen
dik = Distanz des k-ten Datenvektors zum i-ten Cluster
Der Exponent m in dieser Gleichung wird als „Fuzzyfizierer“ bezeichnet und gibt an,
wie stark der Zugehörigkeitsgrad des k-ten Datenvektors zu den einzelnen Clustern
"verwischt" wird (blured).
Aus dieser Gleichung geht ebenfalls hervor, dass es sich beim Fuzzy K-MeansAlgorithmus um ein Verfahren handelt, welches nach der "Batch-Methode" lernt. Die
Batch-Methode trainiert vollständig auf eine endliche Datenmenge. (z.B. trainiere
wiederholt auf 10 Episoden bis zur Konvergenz). Damit ist der Einsatz auf relativ kleine
Datensätze beschränkt, da sonst die benötigte Zeit zum Auffinden der Prototypen
unverhältnismäßig hoch werden würde. In der Regel muss mit der Terminierung des
Verfahrens in einem lokalen Minimum gerechnet werden. Somit ist die Initialisierung der
Prototypen ein sehr kritischer Punkt, welcher mit Sorgfalt betrachtet werden muß.
7.4 WARD (crisp clustering)
Das Clustern von Daten ist relativ einfach, wenn nur zwei Variablen vorhanden sind, da
ein zweidimensionaler Plot eine gute Visulisierungsmöglichkeit bietet. In der Industrie
und Wirtschaft benötigt man jedoch für komplexe Systeme öfter mehrdimensionale
-82-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Datenfelder, deswegen findet diese Methode in der Praxis eher wenig Anwendung.
7.4.1 Beispiel für WARD (crisp clustering)
Ausgehend von den Daten, die für die “Self organized maps” verwendet wurden, kann
auch ein “Clustering” mittels des WARD-Algorithmus durchgeführt werden. Hierzu wird
der CreateWARD[] Befehl benutzt.
CreateWARD[<datensatz>, <optionen>]
•
<datensatz>
•
<optionen>
•
•
•
Größe des Clusters:
Gewicht der Attribute:
Anfang des Zählers:
Size->Automatic oder Nummer
Weights->Automatic oder {x,y,...}
Count->Automatic oder Nummer
Für das Beispiel ergibt sich somit folgende Befehlszeile:
centersWARDinit = CreateWARD[
som,
Weights ­> {1, 1, 0},
Size ­> 1
];
Als Größe des Clusters wurde Eins gewählt, da die optimale Clusteranzahl zu diesem
Zeitpunkt nicht bekannt war. Da die Berechnung von WARD Clustern sehr viel
Rechenaufwand erfordern, empfehlen die Entwickler von MLF, dass “WARD
Clustering” nur in Zusammenhang mit “Self organized maps” (SOF) durchgeführt
werden soll.
Für das Beispiel hat der WARD-Algorithmus einen Valdierungs-Index von 13
verschiedenen Werten erzeugt. Jeder dieser Validierungswerte beinhaltet die
Wahrscheinlichkeit, dass ein Datensatz eine bestimmte Anzahl an Clustern beinhaltet.
Für das Arbeiten mit MLF hat sich herausgestellt, dass ein Validierungsindex von 1 bis
13 die besten Ergebnisse bei der Berechnung ergibt.
-83-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Um den Valdierungsindex sehen zu können, bietet sich die „PlotLineGraph[]“-Operation
an:
wIndex = GetParam[centersWARDinit, "WIndex"][[1]];
PlotLineGraph[wIndex];
Wie aus der Befehlszeile ersichtlich wird, muss zuerst der Index aus dem Cluster
extrahiert werden, bevor der Plot erzeugt werden kann . Dies geschieht mit der GetParam
[] Funktion. Der Output sieht folgendermaßen aus:
Für diese Grafik erzeugt der Kernel einen Plot, bei dem auf der Abszisse die
Clusteranzahl und auf der Ordinate die Validierungswerte eingetragen sind. Bei der
Betrachtung des Grafen sollte die Anzahl der Cluster, die am wahrscheinlichsten für den
Datensatz ist, erkennbar sein. Je höher der Validierungswert ist, desto größer ist die
Wahrscheinlichkeit für die jeweilige Clusteranzahl. Davon ausgehend wählt man die
Clusteranzahl mit dem höchsten Validierungswert, beziehungsweise nimmt man die
Spitzen des Grafs für die weiteren Berechnungen. (Bei diesem Beispiel ist der Cluster mit
der Größe vier sehr stark ausgeprägt)
Nachdem die Clustergröße vom Benutzer gewählt wurde, sind alle Vorbereitungen für
das Clustering abgeschlossen. Für die Durchführung des Clusterings bietet sich das KMeans-Clustering oder das WARD Clustering an. Für das Beispiel bietet keine der
beiden Methoden Vor- oder Nachteile, der Einfacheit halber wird im folgenden Abschnitt
das WARD – Clustering beschrieben.
Die WARD Methode bietet es an, den vorigen Output in Form eines Baumes
darzustellen:
Show[Graphics[PlotClusteringTree[centersWARDinit]], PlotRange ­> All];
-84-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Die Nummern am Boden des Baumes stellen die Nummern der Knoten dar. Man kann
dies auch als SOM darstellen lassen:
labels = Range[25] – 1;
Show@Graphics@
PlotSOMGrid[som, Dims ­> {1, 2}, Thickness ­> 0., Labels ­> labels, PointSize ­> 0.04, AspectRatio ­> 1];
-85-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Für die Berechnung des Clusters sollte die optionale Angabe der optimalen Clustergröße
dem Algorithmus mitgegeben werden:
optSize = Position[wIndex, Max@wIndex][[1, 1]];
centersWARD = CreateWARD[
som,
Weights ­> {1, 1, 0},
Size ­> optSize
];
Print["Computing ", optSize, " clusters."];
Der Mathematica-Kernel gibt aus, dass vier Cluster berechnet werden ( "Computing 4
clusters.") Dies ist nicht überraschend, denn in den vorigen Schritten könnte bereits aus
dem Indexgrafen erkannt werden, dass die optimale Clustergröße eine Anzahl von vier
Clustern aufweisen muss.
Der Cluster sollte auch durch einen Plott grafisch ausgegeben werden:
Show@Graphics[Join[
PlotAttributes[sampleData, Dims ­> {1, 2}, PointSize ­> 0.01],
{GrayLevel[0]}, PlotSOMGrid[som, Dims ­> {1, 2}, Goal ­> centersWARD, PointSize ­> 0.05, Thickness ­> 0.0025]
], Axes ­> True, PlotRange ­> {{0, 1}, {0, 1}}, AspectRatio ­> 1];
Als Output wird folgende Grafik erzeugt:
-86-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Ein Blick auf die erzeugten Cluster des WARD-Algorithmus zeigt, daß manche Knoten
am Rande ihrer zugehörigen Cluster liegen. Im WARD-Clustering kann jeder Knoten nur
einem Cluster zugeordnet werden, was unter Umständen beim Benutzer zu
Mißverständnissen führen kann. Um dieses Problem zu umgehen, sollten FuzzyClustering-Methoden verwenden werden, denn bei diesen Methoden kann ein Knoten zu
mehreren Cluster gehören.
Um ein solches Fuzzy-Cluster zu erzeugen, kann die k-means Methode verwendet
werden. Die Initialisierung erfolgt mittels der „CreateKMeans[]“ Operation.
CreateKMeans[<datensatz>, <optionen>]
•
<datensatz>
•
<optionen>
•
•
•
•
•
Größe des Clusters:
Gewichtung:
Anfang des Zählers:
Fuzzyfizierung des Clusters:
Einflußfaktor der SOM:
Size->Automatic oder Nummer
Weights-> Automatic oder Liste {x,y,...}
Count->Nummer
Fuzziness->Nummer
SomFactor->Nummer
Wie bereits an der Syntax ersichtlich wird, ist die k-means Methode sehr stark von der
Initialisierung abhängig. (Speziell durch den Fuzzyness- und den SOM-Einflußfakor.)
Angewendet auf das Beispiel ergibt sich folgende Befehlszeile:
centersKMeans = CreateKMeans[
sampleData,
Weights ­> {1, 1, 0},
Size ­> 4,
Fuzziness ­> 50.0,
SomFactor ­> 10.0
];
-87-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Die k-means Cluster werden durch die Angabe ihres Zentrums beschrieben. Es empfiehlt
sich, die Cluster vom Mathematica-Kernel als Matrix ausgeben zu lassen:
GetParam[GetParam[centersKMeans, "Clusters"], "DataMatrix"][[1]] // TableForm
Für eine übersichtliche grafisce Darstellung der Clustern ist es besser, wenn man sich des
„Show@Graphics[]“ Kommando bedient. In unserem Falle würde das folgendermaßen
aussehen:
Show@Graphics[Join[
PlotAttributes[sampleData, Dims ­> {1, 2}, Goal ­> centersKMeans, PointSize ­> 0.01]
], Axes ­> True, PlotRange ­> {{0, 1}, {0, 1}}];
-88-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
7.5 Clusterberechnung mit verschiedenen Methoden
In der Praxis ist es oft sehr schwierig, die Anzahl der Cluster und deren Zentren
herauszufinden. Aus diesem Grund macht es Sinn, verschiedene Methoden zu
kombinieren, um ein optimales Ergebnis überhaupt erst erzielen zu können.
Im folgenden Beispiel wird die WARD Methode benutzt, um ein k-means-Clustering zu
initialisieren:
centersWARD = CreateWARD[
som,
Weights ­> {1, 1, 0},
Size ­> 3
];
centersKMeans = CreateKMeans[
som,
InitClusters ­> GetParam[centersWARD, "Clusters"],
Weights ­> {1, 1, 0},
Size ­> 3
];
Durch die obere Befehlszeile wird ersichtlich, dass die von der „CreateWARD[]“
Funktion erzeugten Cluster als Input für die Initialisierung der k-means-Cluster benutzt
werden. Mit der folgenden Funktions- und Operationskombination sollten die erzeugten
Cluster schließlich grafisch ausgegeben werden:
Show@Graphics[Join[
PlotAttributes[sampleData, Dims ­> {1, 2}, Goal ­> 3, PointSize ­> 0.005],
{GrayLevel[0]}, PlotSOMGrid[som, Dims ­> {1, 2}, Goal ­> centersKMeans, PointSize ­> 0.05, Thickness ­> 0.0025]
], Axes ­> True, PlotRange ­> {{0, 1}, {0, 1}}, AspectRatio ­> 1];
-89-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
Als Plott wird folgende Grafik erzeugt:
Wenn erwünscht, kann daraus eine Beschreibung kreiert werden, wie wir sie schon aus
dem Bereich des „Supervised Learnings“ kennen:
centersKMeans = CreateKMeans[
sampleData,
Weights ­> {1, 1, 0},
Size ­> 4,
Fuzziness ­> 50.0,
SomFactor ­> 10.0
];
testPreds = CreatePredicates[sampleData, {1, 2}, 6];
testVars = DefPredicateVars[testPreds];
descr = CreateClusterDescriptions[sampleData, centersKMeans, testVars, MaxRules ­> 5];
PrintDescriptions[descr, Info ­> False]
-90-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
7.6 Fazit
Die Kombination von „Unsupervised Learning“ mit „Supervised Learning“ ist optimal
für das Bearbeiten von Daten, die unvollständig sind oder bei denen das Ziel im
vorhinein noch nicht klar ist. Meist wird „Unsupervised Learning“ vor „Supervised
Learning“ benutzt, da dadurch einerseits Daten angeglichen werden, andererseits
eventuelle Ziele zum Vorschein kommen können.
Da medizinische Daten meist in unvollständiger Form vorhanden sind, macht die
Auswertung der Daten nur durch die Kombination „Unsupervised-Supervised Learing“
Sinn. Denn durch „Unsupervised Learning“ werden die Daten einerseits angeglichen
beziehungsweise vervollständigt, andererseits werden erste „verborgene“
Zusammenhänge zwischen den Daten sichtbarer.
Kurz gesagt bereitet „Unsupervised Learning“ die Daten auf, die dann durch „Supervised
Learning“ genauer in Betracht genommen werden können. Dadurch ist es möglich, die
-91-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
vorhandenen Daten auf ein Minimum des Notwendigen zu reduzieren. Ein relativ großer
Nachteil bei diesen Verfahren ist, daß die Rechtenzeit exponentiell zu der Menge an
Daten ansteigt. Der Grund dafür liegt darin, daß die Berechnung der Cluster ein sehr
rechenaufwendiges Verfahren ist. Dadurch wird dieses Verfahren bei einer zu großen
Datenmenge wiederum unbrauchbar.
-92-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
8 Kurzreferenz
Diese Referenz sollte die wichtigsten Kommandos im Zusammenhang mit MLF und
Mathematica kurz beschreiben und deren Syntax anführen. Sie sollte vor allem als
Nachschlagewerk für das Arbeiten mit MLF behilflich sein.
CreateSOM[]
Beschreibung:
Dient zum Erzeugen einer „Self Organized Map“. Es müssen dabei Daten angegeben
werden. Als Option können die Größe der SOM Matrix sowie Fehlerlevel, Typ und
Gewichtung der Attribute angegeben werden.
Syntax:
CreateSOM[<daten>, <optionen>]
• <daten>
• <optionen>
• Größe der SOM – Matrix:
Size->{x,y}
• Maximales Fehlerlevel:
Errorlevel -> Automatic oder Angabe einer Zahl
• Typ:
Wahlweise “BATCH” oder “ONLINE”
• Gewichtung der Attribute:
Weights->Automatic oder Weights->{x,y,...}
• Initialisierung des Zählers:
Count-> Automatic oder Angabe einer Zahl
RecallBM[]
Beschreibung:
Die sogenannte „Recall-Best Matches-Methode“ ruft die angepaßten Daten zurück. Es
müssen der Datensatz und die Cluster angegeben werden. Als Optionen stehen dann noch
die Gewichtung, die Größe der Nachbarschaft und die Beeinflussung der
Nachbarschaftsknoten zur Verfügung.
Syntax:
RecallBM[<datensatz>,<cluster>, <optionen>]
• <datensatz>
• <cluster>
• <optionen>
-93-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
•
•
•
Gewichtung:
Größe der Nachbarschaft:
Beeinflussung der Nachbarschaftsknoten:
Weights->Automatic oder Zahl
Nsize->Zahl
Nstrength->Zahl
CreateWARD[]
Beschreibung:
Erzeugen eines WARD Clusters ausgehend von einem gewissen Datensatz. Hier können
Angaben über die Größe, Gewicht der Attribute und des Zählers mitgegeben werden.
Syntax:
CreateWARD[<datensatz>, <optionen>]
• <datensatz>
• <optionen>
• Größe des Clusters:
Size->Automatic oder Nummer
• Gewicht der Attribute:
Weights->Automatic oder {x,y,...}
• Anfang des Zählers:
Count->Automatic oder Nummer
CreateKMeans[]
Beschreibung:
Dient zum Erzeugen eines Fuzzy-Clusters mittels der k-means Methode. Hierbei muss
der Datensatz angegeben werden. Optionen über die Größe des Clusters, dessen
Gewichtung, Fuzzyfizierung und der Einflußfakor des SOM kann mitgegeben werden.
Syntax:
CreateKMeans[<datensatz>, <optionen>]
• <datensatz>
• <optionen>
• Größe des Clusters:
Size->Automatic oder Nummer
• Gewichtung:
Weights-> Automatic oder Liste {x,y,...}
• Anfang des Zählers:
Count->Nummer
• Fuzzyfizierung des Clusters:
Fuzziness->Nummer
• Einflußfaktor der SOM:
SomFactor->Nummer
-94-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
CreatePredicates[]
Beschreibung:
Dient zum Erzeugen von Fuzzy-Prädikaten für numerische Datensätze. Dazu muss der
Datensatz, die Spalte und die Anzahl der Sets angegeben werden. Optionen über
Maximum, Minimum, Typ des Fuzzy-Sets und dergleichen können angegeben werden
Syntax:
CreatePredicates[<datensatz>, <Spalten> ,<anzahl der sets>, <optionen>]
•
•
<datensatz>
<optionen>
• Überlappung der Fuzzy-Sets:
• Breite des Fuzzy-Sets:
• Prädikattyp :
• Settyp:
• Minimum der Betrachteten Wertebereiche:
• Grenze:
• Sprachliche Variablen:
• Seperate Fuzzy-Set:
• Schnittpunkte:
• Minimum:
• Maximum:
Overlap -> Automatic oder Wert
Width -> Automatic oder Wert
PredType -> ALL oder IS oder ISEX
SetType -> PWL oder EXP
MinSup –> Automatic oder Wert
Border -> True oder False
Linguistic -> True oder False
SeparateSets -> True oder False
Cutpoints -> Automatic oder Wert
Minimum -> Automatic oder Wert
Maximum -> Automatic oder Wert
CreatePredicatesIs[]
Beschreibung:
Dient zum Erzeugen von Fuzzy-Prädikaten für nicht numerische Datensätze. Dazu muss
der Datensatz, die Spalte und die Anzahl der Sets angegeben werden. Optionen über
Maximum, Minimum, Typ des Fuzzy-Sets und dergleichen können angegeben werden.
Syntax:
CreatePredicatesIs[<datensatz>, <Spalten> ,<anzahl der sets>, <optionen>]
•
•
<datensatz>
<optionen>
• Überlappung der Fuzzy-Sets:
• Breite des Fuzzy-Sets:
• Prädikattyp :
• Settyp:
Overlap -> Automatic oder Wert
Width -> Automatic oder Wert
PredType -> ALL oder IS oder ISEX
SetType -> PWL oder EXP
-95-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
•
•
•
•
•
•
•
Minimum der betrachteten Wertebereiche:
Grenze:
Sprachliche Variablen:
Seperate Fuzzy-Set:
Schnittpunkte:
Minimum:
Maximum:
MinSup –> Automatic oder Wert
Border -> True oder False
Linguistic -> True oder False
SeparateSets -> True oder False
Cutpoints -> Automatic oder Wert
Minimum -> Automatic oder Wert
Maximum -> Automatic oder Wert
CreatePredicateVars[]
Beschreibung:
Erzeugt zu der angegebenen Prädikatliste die dazugehörigen Prädikatvariablen. Dazu
muss eine Prädikatliste angegeben werden. Es gibt keine Optionen.
Syntax:
CreatePredicateVars[<datensatz>]
•
<datensatz>
CreateID3[]
Beschreibung:
Dient zum Erzeugen eines Entscheidungsbaumes mit dem FS-ID3 Algorithmus. Dazu
muss der Datensatz, die Prädikatenliste und die Zielliste angegeben werden. Optional
kann angegeben werden, welche Logik verwendet werden soll usw. .
Syntax:
CreateID3[<datensatz>, <pädikatenliste> ,<zilliste>, <optionen>]
•
•
•
•
<datensatz>
<prädikatenliste>
<zielliste>
<optionen>
• Verwendete Logik:
• Minimum Überlappung:
• Minimum Entropie:
Logic -> LogicM oder Angabe
MinConf -> Wert
MinSup -> Wert
-96-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
•
•
Minimum Erhöhung der Entropie:
Maximale Baumtiefe:
MinIncr -> Wert
MaxLevel -> Wert
RecallID3[]
Beschreibung:
Dient zur Neuklassifizierung eines Datensatzes mit einem Entscheidungsbaum. Dazu
muss der Datensatz und ein Entscheidungsbaum angegeben werden. Optional kann die
verwendete Logik angegeben werden usw. .
Syntax:
RecallID3[<datensatz>, <pädikatenliste> ,<zilliste>, <optionen>]
•
•
<datensatz>
<entscheidungsbaum>
• Verwendete Logik:
• Entscheidungstyp:
Logic -> LogicM oder Angabe
Type -> PROB oder MAJOR
CreateFOIL[]
Beschreibung:
Dient zum Erzeugen einer Regelbasis mit dem FS-FOIL Algorithmus. Dazu muss der
Datensatz, die Prädikatenliste und die Zielliste angegeben werden. Optional kann
angegeben werden welche Logik verwendet werden soll usw. .
Syntax:
CreateFOIL[<datensatz>, <pädikatenliste> ,<zielliste>, <optionen>]
•
•
•
•
<datensatz>
<prädikatenliste>
<zielliste>
<optionen>
• Verwendete Logik:
• Minimum Detail:
• Minimum Vertrauen:
• Maximale Länge der Regeln:
Logic -> LogicM oder Angabe
MinSup -> Wert
MinConf -> Wert
MaxLevel -> Wert
-97-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
•
•
•
Maximale Versuche nach Fehlschlag:
Maximale Anzahl der Iterationen
Bereich der Suche
MaxNegIter -> Wert
MaxIter -> Wert
ExpLevel -> Wert
RecallFOIL[]
Beschreibung:
Dient zur Neuklassifizierung eines Datensatzes mit einer Regelbasis generiert vom FSFOIL-Algorithmus. Dazu muss der Datensatz und eine Regelbasis vom FS-FOILAlgorithmus angegeben werden. Optional kann die verwendete Logik angegeben werden.
Syntax:
RecallFOIL[<datensatz>, <regelbasis>, <optionen>]
•
•
•
<datensatz>
<regelbasis>
<optionen>
• Verwendete Logik:
Logik –> Angabe der Logik
CreateMINER[]
Beschreibung:
Dient zum Erzeugen einer Regelbasis mit dem FS-MINER-Algorithmus. Dazu muss der
Datensatz, die Prädikatenliste und die Zielliste angegeben werden. Optional kann
angegeben werden welche Logik verwendet werden soll usw. .
Syntax:
CreateMINER[<datensatz>, <pädikatenliste> ,<zielliste>, <optionen>]
•
•
•
•
<datensatz>
<prädikatenliste>
<zielliste>
<optionen>
• Verwendete Logik:
• Minimum Detail:
• Minimum Vertrauen:
• Maximale Länge der Regeln:
Logic -> LogicM oder Angabe
MinSup -> Wert
MinConf -> Wert
MaxLevel -> Wert
-98-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
•
Maximale Anzahl der Regeln:
MaxRules -> Wert
RecallMiner[]
Beschreibung:
Dient zur Neuklassifizierung eines Datensatzes mit einer Regelbasis generiert vom FSMINER-Algorithmus. Hierbei muss der Datensatz und eine Regelbasis vom FS-MINERAlgorithmus angegeben werden. Optional kann die verwendete Logik angegeben werden.
Syntax:
RecallFOIL[<datensatz>, <regelbasis>, <optionen>]
•
•
•
<datensatz>
<regelbasis>
<optionen>
• Verwendete Logik:
Logik –> Angabe der Logik
OptimizeRENO[]
Beschreibung:
Dient zur Optimierung von gegebenen Regelbasen (erstellt von FS-MINER oder FSFOIL). Dazu muss ein Datensatz sowie eine Regelbasis angegeben werden. Optional
können auch die Spalten der Datenmengen angegeben werden usw.
Syntax:
OptimizeRENO[<datensatz>, <regelbasis>, <optionen>]
•
•
•
<datensatz>
<regelbasis>
<optionen>
• Inputattribute:
• Zielvariable:
• Art der Regelbasis
• Beta1
• Beta2
Dims -> {Werte, Werte}
Goal -> Wert
Automatic oder Angabe der Art
Automatic oder Angabe von „parameter beta 1“
Automatic oder Angabe von „parameter beta 2“
-99-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
-100-
Bakkalaureatsarbeit '03 - MLF
Richard Springle / Jürgen Repolusk
9 Literaturhinweise
Zu Mathematica
• Sanns, Schuchmann - Datenanalyse mit Mathematica – Oldenbourg 1999
• Michael Kofler, Hans-Gert Gräbe – Mathematica (Einführung, Anwendung, Referenz)
– Addison Wesley 2002
Zu Fuzzy-Logik
• Zadeh, L.: "Fuzzy Sets", Information and Control 8, 1965
• Schildt, G.-H.: Prozeßautomatisierung, Springer Verlag, 1998
• Jamshidi, M.: Applications of Fuzzy-Logik, Prentice Hall, 1997
Zu Superviced Learning
• Quinlan, J. Ross: Applications of Expert Systems: Based on the Proceedings of the
Second Australian Conference, Addison Wesley 1987
-101-

Documentos relacionados