DIONE Abschlussbericht Data Mining Workbench für eine ökologische Datenbank 7. April 2005 Teilnehmer Boris Bensien, Richard Hackelbusch, Sebastian Heisecke, Niels Henze, Rainer Hilbrands, Heike Kraef, Jörn Künnemann, Pascal Kuhn, Daniel Meyerholt, Florian Postel und Hauke Tschirner Betreuer Prof. Dr. Michael Sonnenschein Dr. Michael Stadler Dipl.-Inform. Jens Finke ii Inhaltsverzeichnis 1 Einleitung 1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Ziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Inhalt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Grundlagen 2.1 LEDA - Projektübersicht und Datenbankschema . . . . . 2.1.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . 2.1.2 Ziele . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.3 Herangehensweise . . . . . . . . . . . . . . . . . . 2.1.4 LEDA Datenstandards . . . . . . . . . . . . . . . 2.2 J2EE, Servlets und JSP . . . . . . . . . . . . . . . . . . 2.2.1 J2EE . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2 Servlets . . . . . . . . . . . . . . . . . . . . . . . 2.2.3 JSP . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Webapplikationen mit J2EE . . . . . . . . . . . . . . . . 2.3.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . 2.3.2 J2EE . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.3 Der Tomcat-Server . . . . . . . . . . . . . . . . . 2.3.4 Web Services . . . . . . . . . . . . . . . . . . . . 2.4 Das Framework Struts . . . . . . . . . . . . . . . . . . . 2.4.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . 2.4.2 Model-View-Controller . . . . . . . . . . . . . . . 2.4.3 Der Controller . . . . . . . . . . . . . . . . . . . . 2.4.4 Das Model . . . . . . . . . . . . . . . . . . . . . . 2.4.5 Die View . . . . . . . . . . . . . . . . . . . . . . . 2.4.6 Das Validator Plugin . . . . . . . . . . . . . . . . 2.5 Lernen von Entscheidungsbäumen und Assoziationsregeln 2.5.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . 2.5.2 Grundlagen . . . . . . . . . . . . . . . . . . . . . 2.5.3 Algorithmen . . . . . . . . . . . . . . . . . . . . . 2.5.4 Optimierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1 2 3 4 4 5 6 7 17 17 23 26 33 33 33 36 38 45 45 45 46 49 51 56 57 57 58 62 70 iii Inhaltsverzeichnis 2.6 2.7 2.8 2.9 2.5.5 Schlusswort . . . . . . . . . . . . . . . . . . . . . . . . Lineare und logistische Regression - Modell und Lernverfahren 2.6.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . 2.6.2 Lineare Regression . . . . . . . . . . . . . . . . . . . . 2.6.3 Logistische Regression . . . . . . . . . . . . . . . . . . 2.6.4 Regressions- und Modellbäume . . . . . . . . . . . . . 2.6.5 Schlusswort . . . . . . . . . . . . . . . . . . . . . . . . Clustering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . 2.7.2 Der Begriff Clustering . . . . . . . . . . . . . . . . . . 2.7.3 Datentypen in der Cluster-Analsye . . . . . . . . . . . 2.7.4 Berechnung der Abstände . . . . . . . . . . . . . . . . 2.7.5 Kategorien von Clusteringverfahren . . . . . . . . . . . 2.7.6 Algorithmen der Partitionierungsverfahren . . . . . . . 2.7.7 Algorithmen hierarchischer Verfahren . . . . . . . . . . 2.7.8 Algorithmen Dichte-basierter Verfahren . . . . . . . . . Fallbasiertes Schliessen . . . . . . . . . . . . . . . . . . . . . . 2.8.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . 2.8.2 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . 2.8.3 Fallrepräsentation . . . . . . . . . . . . . . . . . . . . . 2.8.4 Ähnlichkeitsbestimmung . . . . . . . . . . . . . . . . . 2.8.5 Aufgabenklassen für fallbasierte Systeme . . . . . . . . 2.8.6 Bezug zum Projekt ’DIONE’ . . . . . . . . . . . . . . . 2.8.7 Vor- und Nachteile des fallbasierten Schließens . . . . . Das Softwarepaket SPSS Clementine 7.2 . . . . . . . . . . . . 2.9.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . 2.9.2 Das CRISP-Datenmodell . . . . . . . . . . . . . . . . . 2.9.3 Die Arbeitsoberfläche von Clementine . . . . . . . . . . 2.9.4 Die einzelnen Knoten . . . . . . . . . . . . . . . . . . . 2.9.5 Expression Builder . . . . . . . . . . . . . . . . . . . . 2.9.6 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . 2.9.7 Abkürzungen . . . . . . . . . . . . . . . . . . . . . . . 3 Anforderungsdefinition 3.1 Vorgaben und Ziele . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Web-Applikation innerhalb eines Service-Containers 3.1.2 Entwicklungsumgebung . . . . . . . . . . . . . . . . 3.2 Szenarien und Anwendungsfälle . . . . . . . . . . . . . . . 3.2.1 Akteure . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 Wesentliche Anwendungsfälle . . . . . . . . . . . . 3.2.3 Weitere Anwendungsfälle . . . . . . . . . . . . . . . 3.3 Prozessverläufe . . . . . . . . . . . . . . . . . . . . . . . . iv . . . . . . . . 72 73 73 73 77 83 89 91 91 91 91 92 93 95 98 103 105 105 105 107 111 116 117 118 119 119 119 122 122 128 129 133 135 . 135 . 136 . 136 . 136 . 136 . 137 . 138 . 141 Inhaltsverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 143 144 144 144 144 145 145 145 145 146 146 146 146 147 147 147 147 148 148 149 150 150 150 151 151 151 151 4 Grobentwurf 4.1 Systemaufbau . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 Modul Steuerung . . . . . . . . . . . . . . . . . . 4.1.2 Modul WebUserInterface . . . . . . . . . . . . . . 4.1.3 Modul Datamining Algorithmen . . . . . . . . . . 4.1.4 Modul Datenstrukturen . . . . . . . . . . . . . . 4.1.5 Schnittstelle User - WebUserInterface . . . . . . . 4.1.6 Schnittstelle WebUserInterface - Datenstrukturen 4.1.7 Schnittstelle WebUserInterface - Algorithmen . . 4.1.8 Schnittstelle Algorithmen - Datenstrukturen . . . 4.1.9 Kommunikation Steuerung - Algorithmen . . . . . 4.1.10 Kommunikation Steuerung - Datenstrukturen . . 4.1.11 Kommunikation Steuerung - Präsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 153 154 155 157 161 164 164 168 170 171 171 172 3.4 3.5 3.6 3.7 3.8 3.3.1 Verfahren . . . . . . . . . . . . 3.3.2 Trait-Matrix . . . . . . . . . . . 3.3.3 Ergebnisvergleich . . . . . . . . Funktionale Anforderungen . . . . . . 3.4.1 Benutzerverwaltung . . . . . . . 3.4.2 Management der Arbeitsabläufe 3.4.3 Auswahl der Trait-Matrix . . . 3.4.4 Modellerstellung . . . . . . . . 3.4.5 Modellverifizierung . . . . . . . 3.4.6 Modellvorhersage . . . . . . . . 3.4.7 Ergebnisausgabe . . . . . . . . 3.4.8 Jobverwaltung . . . . . . . . . . Nichtfunktionale Anforderungen . . . . 3.5.1 Latenzzeiten . . . . . . . . . . . 3.5.2 Erweiterbarkeit . . . . . . . . . 3.5.3 Sicherheit . . . . . . . . . . . . 3.5.4 Verfügbarkeit . . . . . . . . . . 3.5.5 Korrektheit . . . . . . . . . . . 3.5.6 Kompatibilität . . . . . . . . . 3.5.7 Haftung . . . . . . . . . . . . . Systemaufbau . . . . . . . . . . . . . . 3.6.1 Web-Browser . . . . . . . . . . 3.6.2 Kernkomponente . . . . . . . . 3.6.3 Datenbank . . . . . . . . . . . . Dokumentationsanforderungen . . . . . 3.7.1 Entwicklerdokumentation . . . 3.7.2 Endbenutzerdokumentation . . Akzeptanzkriterien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v Inhaltsverzeichnis 4.2 4.1.12 Kommunikation Datenstrukturen - Algorithmen Ablaufbeschreibung . . . . . . . . . . . . . . . . . . . . 4.2.1 Anwenderauthentifizierung . . . . . . . . . . . . 4.2.2 Experimentauswahl . . . . . . . . . . . . . . . . 4.2.3 Erstellen einer Trait-Matrix . . . . . . . . . . . 4.2.4 Auswahl des Verfahrens und Konfiguration . . . 4.2.5 Start des Verfahrens . . . . . . . . . . . . . . . 4.2.6 Verlauf des Verfahrens . . . . . . . . . . . . . . 5 Feinentwurf 5.1 Paketstruktur . . . . . . . . . . . . . . . . . . . . . 5.1.1 Struktur des Java-Quelltextes . . . . . . . . 5.2 Schnittstellen . . . . . . . . . . . . . . . . . . . . . 5.2.1 Modul Datenstrukturen . . . . . . . . . . . 5.2.2 Modul Algorithmen . . . . . . . . . . . . . . 5.3 Inhaltlicher Aufbau der Webseiten von DIONE . . . 5.4 Serverseitige Stuktur der Webseiten von DIONE . . 5.4.1 Übersicht JSP, Skript-Funktionen und Styles 5.5 Klassen des WUI Moduls . . . . . . . . . . . . . . . 5.5.1 Paket wui.action . . . . . . . . . . . . . . . 5.5.2 Paket wui.lang . . . . . . . . . . . . . . . . 5.5.3 Paket wui.tag.table . . . . . . . . . . . . . . 5.5.4 Paket wui.tag.tree . . . . . . . . . . . . . . 5.5.5 Paket wui.tag . . . . . . . . . . . . . . . . . 5.5.6 Paket wui.util . . . . . . . . . . . . . . . . . 5.6 Klassen des Moduls Steuerung . . . . . . . . . . . . 5.6.1 MiningJob . . . . . . . . . . . . . . . . . . . 5.6.2 MiningJobManager . . . . . . . . . . . . . . 5.6.3 SimpleJobManager . . . . . . . . . . . . . . 5.6.4 DioneException . . . . . . . . . . . . . . . . 5.7 Klassen des Moduls Algorithmen . . . . . . . . . . 5.7.1 Paket algorithm . . . . . . . . . . . . . . . . 5.7.2 Paket algorithm.model . . . . . . . . . . . . 5.7.3 Paket algorithm.model.dione . . . . . . . . . 5.7.4 Paket algorithm.model.xelopes . . . . . . . . 5.7.5 Paket algorithm.model.weka . . . . . . . . . 5.7.6 Paket algorithm.util . . . . . . . . . . . . . 5.7.7 Paket algorithm.visualization . . . . . . . . 5.8 Klassen des Moduls Datenstrukturen . . . . . . . . 5.8.1 WUI-DS . . . . . . . . . . . . . . . . . . . . 5.8.2 Algorithmus Konfiguration . . . . . . . . . . 5.8.3 Traitmatrix . . . . . . . . . . . . . . . . . . vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 173 174 174 174 175 175 175 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 . 177 . 177 . 177 . 178 . 180 . 184 . 191 . 191 . 195 . 195 . 197 . 197 . 198 . 198 . 199 . 201 . 201 . 203 . 204 . 205 . 206 . 206 . 208 . 211 . 211 . 212 . 212 . 213 . 218 . 218 . 221 . 223 Inhaltsverzeichnis 5.9 Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . 5.9.1 Tabellenstruktur Experiment . . . . . . . . . . . 5.9.2 Tabellenstruktur Algorithmusspezifikationen . . . 5.10 Ausgewählte Abläufe . . . . . . . . . . . . . . . . . . . . 5.10.1 Interaktiver Entscheidungsbaumalgorithmus . . . 5.10.2 Zusammenspiel von JSP und anderen Elementen . . . . . . . . . . . . . . . . . . . 230 231 237 246 246 248 6 Umsetzung und Implementation 251 6.1 Unterschiede zum Entwurf . . . . . . . . . . . . . . . . . . . . 251 7 Ausblick 253 7.1 Vorschläge zur Erweiterung . . . . . . . . . . . . . . . . . . . 253 7.2 Bekannte Fehler . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Anhang Abkürzungsverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . Liste der Abbildungen . . . . . . . . . . . . . . . . . . . . . . . . . Literaturverzeichnis I I V VII vii Inhaltsverzeichnis viii Kapitel 1 Einleitung 1.1 Motivation Heutzutage werden Information und Wissen zunehmend elektronisch gespeichert und aufbereitet. Dabei ist es leicht möglich bei einer großen Menge von Daten den Überblick zu verlieren. Das führt dazu, dass eine Auswertung der Daten per Hand undenkbar wird. Um diesem Problem zu begegnen gibt es bereits vielfältige automatisierte Ansätze, zusammen gefasst unter dem Begriff ”Data-Mining”, um aus diesem Datenüberfluss strukturiertes aufbereitetes Wissen zu extrahieren. Mit diesem Themenfeld wird sich diese Projektgruppe beschäftigen. Diese Projektgruppe ist Teil des LEDA-Projekts das sich mit der, innerhalb dieses Projektes entwickelten, LEDA-Traitbase, einer offenen, europaweiten Datenbank, die Pflanzen-Daten speichert und zur Verfügung stellt, beschäftigt. 1.2 Ziele Innerhalb dieser Projektgruppe, die den Namen DIONE trägt, soll nun eine Plattform geschaffen werden, um auf der vorhandenen LEDA-Traitbase verschiedene Data-Mining-Verfahren anwenden zu können. Dabei soll die Plattform durch eine Internet-Präsenz auf Basis von Webapplikationen erstellt werden um den Zugriff nicht auf das Vorhandensein eines zu installierenden Programms zu beschränken. Außerdem sollen für den Datamining-Teil verschiedene Algorithmen integriert werden, und auch die Möglichkeit geschaffen werden zu einem späteren Zeitpunkt andere Verfahren hinzu zufügen 1 Kapitel 1 Einleitung 1.3 Inhalt Innerhalb dieses Berichtes werden im folgenden zunächst alle Seminarvorträge der Projektteilnehmer zu den in diesem Projekt relevanten Themen vorgestellt. Im Anschluss folgt die, in der Gruppe erstellte, Anforderungsdefinition. Diese wird dann zunächst im Grobentwurf verfeinert. Hier werden auch bereits allgemeine Designentscheidungen getroffen. Diese werden dann im Feinentwurf konkretisiert und es wird dort, unter anderem mit Klassendiagrammen und -beschreibungen, eine Basis für die Implementation geschaffen. 2 Kapitel 2 Grundlagen In diesem Kapitel werden alle zur Projektarbeit nötigen Grundlagen, die in Seminarvorträgen vorgestellt wurden, erläutert und zum späteren Nachschlagen zusammengetragen. Diese Grundlagen beinhalten zunächst einen Überblick über das Projekt LEDA, in dessen Rahmen diese Projektgruppen stattfindet, und die zugehörige Datenbank. Darauf folgen drei Arbeiten die sich mit den technischen Mitteln beschäftigen die nötig sind um eine Webapplikation zu erzeugen. In diesen Arbeiten geht es daher um JSP, Servlets, J2EE, Tomcat und Struts. Was diese Sachen im einzelnen sind wird in den jeweiligen Arbeiten erklärt. In den fünf abschließenden Arbeiten geht es um die verschiedenen DataminingVerfahren und deren Funktionsweise und Anwendung. Die letzten beiden Arbeiten befassen sich mit dem Vergleich der Verfahren und schon vorhandenen Implementationen der Verfahren. 3 Kapitel 2 Grundlagen 2.1 LEDA - Projektübersicht und Datenbankschema von Richard Hackelbusch Life history traits of the northwest European flora: a database (LEDA) Um sich den Herausforderungen stellen zu können, welche sich aus dem Eingriff des Menschen in die Umwelt - z.B. durch hohe Luftverschmutzung durch Verkehr und Industrie, eine veränderte Landnutzung, die Zerklüftung der Landschaft durch Siedlungs- und Straßenbau - auf die europäische Flora ergeben, und um internationalen (UNO-Konferenz für Umwelt und Entwicklung [6]) sowie europäischen (Habitats Directive [2]) Verpflichtungen nachkommen zu können, ist ein hohes Maß an Wissen über die Eigenschaften der Pflanzen dieser Flora erforderlich. Aus diesem Grund ist das Projekt LEDA Traitbase (im Folgenden LEDA“) ins Leben gerufen worden, welches ” als Zielsetzung die Schaffung einer Datenbank über die (zunächst nordwest-) europäische Flora mit über 3000 Pflanzenarten und mit je über 20 Merkmalen hat ( Traitbase“). ” Dieses von der Europäischen Union über ihren Forschungs- und Entwicklungsdienst CORDIS [3] im fünften Rahmenprogramm geförderte Projekt1 ist auch der Anlass für diese Projektgruppe (Data Mining Workbench für eine ökologische Datenbank ). Für LEDA ist eine Projektdauer von drei Jahren vorgesehen, welche am 1. November 2002 begonnen hat und am 31. Oktober 2005 endet. Die Koordination des Projekts übernimmt die AG Landschaftsökologie der Universität Oldenburg. Außerdem sind noch zehn Partner (Universitäten und wissenschaftlichen Institute) am LEDA Projekt beteiligt. 2.1.1 Einleitung Um die Merkmale von Pflanzen zu erfassen, hat es bereits Bestrebungen mit teilweise beträchtlichem Aufwand gegeben. Daher ist die Menge der gesammelten Daten schnell gewachsen. Allerdings sind die Daten über viele Quellen (Datenbanken, Veröffentlichungen, etc) mit unterschiedlicher Größe verteilt. Die Quellen selbst sind in verschiedenen Sprachen und über die Länder Europas verteilt gesammelt und gespeichert worden. Es hat bisher keine Zusammenführung der Daten gegeben. Aus diesem Grund konnte bislang auch noch keine europaweite Funktionsanalyse der Pflanzenmerkmale und der Auswirkungen des Menschen auf die Flora vorgenommen werden. Diese Zusammenführung der Daten / Pflanzenmerkmale ( traits“) soll mit ” 1 4 Projektnummer: EVR1-CT-2002-40022 2.1 LEDA - Projektübersicht und Datenbankschema dem LEDA Projekt vorgenommen werden und damit eine europaweite Datenbank der Pflanzenmerkmale ( Traitbase“) entstehen. ” Eine wesentliche Herausforderung ist, mit Hilfe dieses Informationssystems Veränderungen der Flora innerhalb einer sich laufend ändernden Landschaft vorhersagen zu können. So ist von besonderem Interesse, in wie weit Pflanzen in ihrem vorhanden Lebensraum fortbestehen können, oder ob sie neue Lebensräume erschließen bzw. kolonisieren können. Diese beiden Fähigkeiten hängen von den biologischen Merkmalen der Pflanzen ab. Es wird vor theoretischem Hintergrund erwartet, dass die Fähigkeiten eindeutige Funktionskombinationen durch die Merkmale der Pflanzen beschreiben. Hierzu sollen in der LEDA Datenbank so genannte Sorte-Merkmal-Matrizen“ ” erzeugt werden, welche die verschiedenen Merkmale miteinander in Beziehung setzen. Dieser Text ist die Seminarausarbeitung zum gleichnamigen Seminarvortrag. Er geht im Folgenden auf die konkreten Ziele des LEDA-Projekts, die Herangehensweise beim Entwickeln des Systems und als Schwerpunkt auf die Datenqualität und das Datenbankschema, welches zur internen Datenrepräsentation Verwendung finden soll, ein. In Hinblick auf die Zielgruppe wird auf biologische Details nur am Rande eingegangen. 2.1.2 Ziele Das Ziel des LEDA Traitbase Projekts ist es, eine offene euroapaweite Datenbank der Pflanzenmerkmale der Flora Europas - beginnend mit der Flora Nordwesteuropas - zu schaffen, um den Herausforderungen - der durch den Menschen verursachten Veränderungen der Pflanzenwelt - entgegenzutreten. Da weder die Flora noch die von den Menschen verursachten Veränderungen an der Flora an nationalen Grenzen halt machen, und um einen Nutzen aus bereits erhobenen Daten ziehen zu können, sollen dazu verschiedene bereits existierende nationale Datenprojekte und in der Literatur veröffentliche Daten zusammengefügt werden. Aus diesem Grund hat es sich geradezu angeboten, dieses Projekt im europäischen Rahmen durchzuführen. Die über 20 Pflanzenmerkmale, die in der LEDA Datenbank gespeichert werden sollen, sind in drei für ein Verständnis der Pflanzen besonders wichtige Merkmalsklassen eingeteilt: • Persistence: Daten zur Beschaffenheit und zur Überlebensstärke einer Pflanze 5 Kapitel 2 Grundlagen • Regeneration: Daten zum Lebenszyklus und zur Vermehrung der Pflanze • Dispersability: Daten zur Ausbreitung und Verteilung der Samen der Pflanze Um diese Daten in die Datenbank einpflegen zu können, sollen unterschiedliche Quellen verwendet werden: Wie bereits erwähnt, sollen verschiedene bisher national geführte Datenbankprojekte in LEDA zentralisiert zusammengeführt werden. Daneben soll ein umfangreicher Schatz an LiteraturVeröffentlichungen, deren Erscheinung teilweise bis ins 19. Jahrhundert zurückreicht, in den Datenbestand eingepflegt werden. Das gilt auch für bisher unveröffentliche Datenerhebungen sowie für Messungen, welche extra für LEDA vorgenommen werden. Hieraus erhofft man sich die Verfügbarkeit eines Datenbestandes von mehr als 20 Pflanzenmerkmalen von über 3000 Pflanzenarten der Flora Nordwesteuropas. Dieser Datenbestand soll über ein WWW-Interface verfügbar gemacht werden. Die Schnittstelle soll Funktionen zur Dateneingabe, der Anzeige der Daten in der Datenbank, der Anzeige von Metadaten, sowie der Analyse der Daten mit Data-Mining-Werkezugen anbieten. Um die Nutzbarkeit der LEDA Traitbase zu demonstrieren, ist vorgesehen, in die WWW-Schnittstelle spezielle Werkzeuge zur Analyse verschiedener europäischer Regionen zu integrieren. Desweiteren soll das LEDA-System eine Plattform zum wissenschaftlichen Austausch anbieten, um unnötige Mehrfacheingaben zu verhindern und internationale Kenntnis von Funktionsbedeutung von Pflanzenmerkmalen zu bündeln. Die erwarteten Nutzergruppen umfassen das gesamte Spektrum an Personen, die ein Interesse an der (Nutzung der) Flora Europas haben. Sie gehen von Landschaftsplanern, Landwirten über Politikberater, Politiker, Entscheidungsträger bis hin zu Wissenschaftlern. 2.1.3 Herangehensweise Die zu erledigende Arbeit für LEDA ist in fünf so genannte Workpackages aufgeteilt worden. Dabei fallen die ersten drei Workpackages für die Sammlung bzw. das Einpflegen der Daten an, wobei die Aufteilung der Arbeit dafür nicht nach Regionen oder Pflanzanarten erfolgt, sondern in die drei oben bereits beschriebenen Pflanzenmerkmalsklassen Persistence, Regeneration sowie Dispersability. 6 2.1 LEDA - Projektübersicht und Datenbankschema Das vierte Workpackage befasst sich mit dem Entwurf und der Implementierung des dafür benötigten Informationssystems, welches die Daten speichert, Schnittstellen zur Ein- und Ausgabe der Daten über das Internet bereitstellt, sowie Data-Mining und Data-Retrieval Anwendungen beinhaltet. Im fünften Workpackage schließlich werden Beispielanwendungen speziell für die einzelnen - bereits oben erwähnten - erwarteten Benutzergruppen von LEDA zur Demonstration ihrer Leistungsfähigkeit entwickelt. Die Projektgruppe Data Mining Workbench für eine ökologische Datenbank ist somit dem vierten Workpackage zuzuordnen; sie soll Data-Mining Tools für LEDA entwerfen und implementieren. Die Herangehensweise ist in Abbildung 2.1.3 schematisch abgebildet. • Workpackage 1: Sorte-Merkmal-Matrix Persistence - Prof. Dr. Michael Kleyer, Universität Oldenburg • Workpackage 2: Sorte-Merkmal-Matrix Regeneration - Prof. Dr. Jan Bakker, Universität Groningen • Workpackage 3: Sorte-Merkmal-Matrix Dispersability - Dr. Ken Thompson, Universität Sheffield • Workpackage 4: Informationssystem - Prof. Dr. Michael Sonnenschein, Universität Oldenburg / OFFIS • Workpackage 5: Beispielanwendungen - Prof. Dr. Peter Poschlod, Universität Regensburg 2.1.4 LEDA Datenstandards Nachdem es in den vorherigen Abschnitten eine Übersicht über das LEDA Traitbase Projekt gegeben hat, befasst sich dieser Abschnitt mit dem Thema der internen Repräsentation der gesammelten Pflanzenmerkmale und übrigen Daten innerhalb der Datenbank, die für die Arbeit dieser Projektgruppe von sehr hoher Bedeutung ist. Zunächst wird auf die Datenstandards und die Ansprüche an die Datenqualität seitens LEDA eingegangen, worauf eine Vorstellung ihrer Umsetzung als Datenbankschema folgt. LEDA Datenstandards aus inhaltlicher Sicht Da aus biologischer Sicht ein hohes Qualitätsniveau der Daten angestrebt wird, soll für jedes Pflanzenmerkmal eine bestimmte Datenstruktur eingehalten werden. Dabei gilt der Grundsatz, dass der Detailgrad möglichst hoch 7 Kapitel 2 Grundlagen WP 1, 2, 3 LEDA data collection WP 1 Persistence WP 2 Regeneration WP 3 Dispersal WP 4 LEDA database system WWW access user friendly input interface Data retreival tool Data mining tool e-networking plattform WP 5 LEDA application for end-users National Landscape Habitat policy consultant environmental planner restoration manager farmer tutorial Abbildung 2.1: Schematische Darstellung der Herangehensweise mit den fünf Workpackages sein soll. Er wird damit begründet, dass den daraus erwachsenen Vorteilen aufgrund der Verfügbarkeit von moderner Hard- und Software keine nennenswerten Nachteile entgegenstehen, da moderne Informationssysteme in der Lage sind, auch mit sehr großen Datenbeständen umzugehen. Die Informationen eines Merkmals müssen dafür in das verwendete Datenbankschema abgeleitet werden. Es soll innerhalb einer Datenstruktur neben den obligatorischen immer auszufüllenden Datenfeldern auch optionale Felder geben, deren Ausfüllung nicht vorgeschrieben ist. Dies ist auch nicht immer möglich, da manche Quellen aus der Literatur vielleicht gar keine entsprechenden Daten vorhalten. Die Attribute der Pflanzenmerkmale lassen sich in zwei Kategorien aufteilen: Es gibt qualitative und quantitative Merkmale. Bei quantitativen Merkmalen genügt die Angabe eines bestimmten (nicht zwangsläufig numerischen) Wertes, welcher z.B. die Zugehörigkeit zu einer Merkmalsklasse beschreibt. Man unterscheidet bei qualitativen Merkmalen zwischen ordinalen (Ausprägungen können geordnet werden, z.B. Größenklasse) und nominalen (Ausprägungen lassen sich nicht ordnen, z.B. Zugehörigkeit zu einer Pflanzenfamilie) Merkmalen. Für quantitative (numerische) Merkmale werden dagegen mehrere Attribute wie z.B. der Durchschnitt, der Median, das Minimum, das Maximum oder die Varianz bereitgestellt. Bei quantitativen Merkmalen unterscheidet man zwischen diskreten (zählbaren) und stetigen Merkmalen. Ebenso wird gefordert, dass die Daten in atomarer Form in die Datenbank 8 2.1 LEDA - Projektübersicht und Datenbankschema eingetragen werden. Das bedeutet, dass es in der Datenbank z.B. für das Merkmal PH-Wert des Wassers“ kein Feld PH-Wert“ gibt, in welches die ” ” Zeichenkette 2.5 <= PH <= 3.5“ eingetragen werden kann, sondern, da es ” sich bei dem Merkmal um ein quantitatives Merkmal handelt, Felder für Minimum und Maximum vorhanden sein sollen. Außerdem soll bei quantitativen Merkmalen auf eine Klassifizierung vor der Eingabe verzichtet werden. Wenn z.B. der PH-Wert des Wassers 2.5 ist, und damit einer Klasse klein“ ” angehört, soll trotzdem der Wert 2.5“ in der Datenbank gespeichert wer” den. Auf diese Weise kann eine Klassifizierung seitens der Datenbank im Nachhinein vorgenommen werden, und es entsteht kein Informationsverlust bei nachträglicher Änderung der Klassen. LEDA Datenstandards aus entwurfsorientierter Sicht Die Umsetzung der geforderten Datenstandards und Datenqualität erfolgt durch den Einsatz einer relationalen Datenbank. Das Schema besteht daher aus Entitätstypen, welche durch Relationen miteinander verknüpft sein können. Die graphische Repräsentation des Schemas erfolgt durch ein EntityRelationship-Diagramm. Darin werden Entitätstypen durch Kästen und Relationen durch Rauten und Linien dargestellt. Auch aus Sicht der Informatik wird ein hohes Maß an Qualität von den Daten gefordert. Dies kann durch den Aufbau des Datenbankschemas realisiert werden. Glücklicherweise korreliert der Anspruch positiv mit den Qualitätsanforderungen, welche im vorherigen Abschnitt beschrieben worden sind. Um ganz allgemein ein hohes Maß an Datenqualität zu erhalten, wird angestrebt, dass das Datenbankschema eine möglichst hohe (d.h. mindestens die dritte) Normalform erfüllt (vgl. [8]). Damit ein Schema die erste Normalform erfüllt, reicht es, dass jedes Attribut jedes Entitätstyps atomar sein muss. Schon durch die Erfüllung der ersten Normalform wird das Schema einigen Qualitätsansprüchen aus dem vorigen Abschnitt gerecht (nur die Eingabe von atomaren Werten gestatten). Durch das geschickte Organisieren von Entitätstypen, ihrer Schlüsselattribute und Fremdschlüsselbeziehungen soll das Schema möglichst auch höheren Normalformen entsprechen. Damit soll verhindert werden, dass Redundanz und Anomalien (Einfüge-, Lösch- bzw. Aktualisierungsanomalie) auftreten. Um auch den anderen Qualitätsansprüchen gerecht zu werden, ist die Entscheidung dafür gefallen, jedes Pflanzenmerkmal mit einem eigenen Entitätstyp zu modellieren. Alle Attribute eines Merkmals sind auch gleichzeitig Attribut des entsprechenden Entitätstyps. Dabei stehen für quantitative Merkmale je ein Attribut für die durchschnittliche Größe, den Median, das Mini- 9 Kapitel 2 Grundlagen mum, das Maximum, die Varianz und den Standardfehler bereit. Quantitative Merkmale erhalten meist Attribute, welche als Fremdschlüsselbeziehung mit Entitätstypen über eine Relation verbunden sind, die die entsprechenden quantitativen Werte beinhalten. Ebenso werden andere wichtige Informationen wie z.B. die Klassifizierung der Pflanze oder die Quellenangabe als eigene Entitätstypen organisiert. Als Beispiel für die Repräsentation - bevor ein Überblick über das gesamte Datenbankschema erfolgt - soll die Datenstruktur eine Literaturreferenz als Datenquelle für Pflanzendaten dienen. Zunächst erfolgt ein Ausschnitt einer tabellarischen Beschreibung der zu speichernden Daten, worauf im Anschluss die Umsetzung als Entity-Relationship-Diagramm (ER-Diagramm) visualisiert wird (vgl. Abbildung 2.2 und Tabelle 2.1, sowie [4]). Attribut Refname Reftype Author Year Publisher ISXN Beschreibung Verkürzter Name der Datenquelle Person, Veröffentlichung oder Datenbank Liste von Autorennamen – separat gespeichert Jahr der Veröffentlichung Name des Verlegers ISSN oder ISBN-Nummer der Quelle Format Text Text Text Number Text Number Level Optional Obligatorisch Obligatorisch Obligatorisch Obligatorisch Optional Tabelle 2.1: Literaturquellen in der Datenbank Abbildung 2.2: Literaturquellen in der Datenbank Wie man sehen kann, ist für die Repräsentation einer Veröffentlichung der Entitätstyp Publication“ vorgesehen. Er hat den Primärschlüssel (ober” halb der horizontalen Linie innerhalb des Entitätstyps) referenceID(FK)“, ” 10 2.1 LEDA - Projektübersicht und Datenbankschema welcher eine Spezialisierungsrelation auf den Primärschlüssel des Entitätstyps Reference“ (leider nicht mehr im Bild) ist. Attribute wie Jahr der ” Veröffentlichung ( Year“) oder Titel der Veröffentlichung ( Title“) sind kei” ” ne Fremdschlüsselbeziehungen und werden direkt in dem Entitätstyp gespeichert. Attribute, die Fremdschlüssel zu anderen Entitätstypen sind, werden in der vorliegenden Entity-Relationship Repräsentation mit (FK)“ ge” kennzeichnet. In diesem Beispiel sind das neben dem schon angesprochenen Primärschlüssel referenceID“ die Attribute languageCode“, journa” ” ” lID“ sowie pubtypeID“. Die Informationen über den Autor werden eben” falls nicht in dem Entitätstyp Publication“ gespeichert. Nur hat man sich ” in diesem Fall dazu entschieden, das Attribut, das auf die Verbindung von Autor und Veröffentlichung hinweist, als eigenen Entitätstyp Authorship“ ” zu realisieren. Diese Verknüpfungen der Entitätstypen über Fremdschlüsselbeziehungen dienen dazu, die bereits erwähnten Anomalien sowie unnötige Redundanz zu vermeiden. Auf diese Weise können z.B. alle für eine Sprache relevanten Daten in dem Entitätstyp LanguageCode“ gespeichert werden, und, sollte es ” zu Änderungen daran kommen, müssten diese Änderungen nur innerhalb dieses Entitätstyps vorgenommen werden. Abbildung 2.3: Übersicht über das LEDA Datenbankschema Wie zu erkennen ist, haben die einzelnen Entitätstypen im ER-Diagramm unterschiedliche Hintergrundfarben. Diese dienen dazu, leichte Unterscheidungen bezüglich des Zwecks bzw. der Funktion eines Entitätstyps vornehmen zu können. Dies ist gerade dann nützlich, wenn das ER-Diagramm - wie 11 Kapitel 2 Grundlagen im Fall von LEDA - sehr umfangreich geworden ist. Abbildung 2.3 zeigt eine Übersicht über das Schema, welches für LEDA zum Einsatz kommt (vgl. [4]). Dieses ER-Diagramm ist freilich vollständig, jedoch leidet leider die Übersichtlichkeit unter dieser Vollständigkeit. Es ist zwar versucht worden, Entitätstypen, welche inhaltlich miteinander in Beziehung stehen, räumlich möglichst nah aneinander anzuordnen, jedoch ist es in dem Diagramm nicht mehr möglich, die relationalen Beziehungen zwischen allen Entitätstypen nachzuvollziehen. Es überdecken sich einfach zu viele als Verbindungslinie dargestellte Relationen. Abbildung 2.4: Übersicht über das LEDA Datenbankschema - Einteilung in Regionen Um sich dennoch einen Überblick über den Aufbau des Datenbankschemas verschaffen zu können, habe ich das ER-Diagramm in vier Teilbereiche aufgeteilt (vgl. Abbildung 2.4), welche im folgenden vorgestellt werden. Abbildung 2.5 zeigt den Ausschnitt a aus Abbildung 2.4 in vergrößerter Form. In diesem Teilbereich des ER-Schemas befinden sich die Entitätstypen für alle Daten mit Ausnahme der Pflanzenmerkmale und Lebensräume der Pflanzen. Dabei sind die dort abgespeicherten Daten drei Hauptfunktionen zuzuordnen: Die grün unterlegten Entitätstypen ( LedaUser“, etc) betreffen die Daten ” bezüglich des Nutzers der LEDA Datenbank. Über ihn werden die Daten abgespeichert, welche zur Nutzung der Datenbank nötig sind (Username, Passwort) sowie einige persönliche Daten wie z.B. die EMail-Adresse. Daneben werden über ihn die Daten abgespeichert, die bestimmen, zu welcher 12 2.1 LEDA - Projektübersicht und Datenbankschema Abbildung 2.5: Entitätstypen ohne die Pflanzenmerkmale 13 Kapitel 2 Grundlagen Benutzergruppe der Benutzer gehört, und welche Rolle er im LEDA Projekt einnimmt. Abbildung 2.6: Entitätstypen zu Pflanzenfundort und Lebensraum Die gelb unterlegten Entitätstypen ( Reference“, etc) wurden bereits weiter ” oben angesprochen: Hiermit können Daten über die Herkunft einer Pflanzeninformation abgespeichert werden. So kann eine solche Quelle eine bereits existierende Datenbank oder aber auch eine Literaturveröffentlichung sein. In den türkis unterlegten Entitätstypen ( Taxon“, etc) wird schließlich die ” Pflanze selber klassifiziert und abgespeichert. So zählen dazu Attribute wie Name der Pflanze, Spezies der Pflanze, usw. Auffällig sind des Weiteren noch violett hinterlegte Entitätstypen. Diesen Entitätstypen ist allerdings keine gemeinsame inhaltliche Bedeutung zuzuordnen. Sie beinhalten vielmehr Informationen zu verschiedenen Klassifizierungen. Diese logical-value-Relationen haben den Zweck, flexibel auf Umbenennungen von Kategorien oder Klassen reagieren zu können. Sie finden sich auch in den anderen Abschnitten des ER-Diagramms wieder, die im Folgenden beschrieben werden. Abbildung 2.6 zeigt den Ausschnitt b aus Abbildung 2.4 in vergrößerter Form. Innerhalb dieses Abschnittes befinden sich Entitätstypen, die Daten bezüglich des Lebensraums ( HabitatType“) und des Fundortes der Pflan” zenpopulation ( GeoReference“) beinhalten sollen. ” 14 2.1 LEDA - Projektübersicht und Datenbankschema Bezüglich des Lebensraums der Pflanzenpopulation werden dann Daten wie der PH-Wert bzw. Säuregehalt des Wassers und des Bodens gespeichert. Für den Fundort der Pflanzenpopulation werden Attribute für Daten wie das Land, in dem die Pflanzenpopulation wächst, bereitgestellt. Außerdem beinhaltet dieser Abschnitt des ER-Diagramms noch der Entitätstyp der Relation Picture“, welche die Möglichkeit gibt, ein Bild einer Pflanze ” der Population in der Datenbank abzuspeichern. In den Abschnitten c und d von Abbildung 2.4 befinden sich die Entitätstypen für die Speicherung der über 20 einzelnen Pflanzenmerkmale. Wie bereits erwähnt, wird pro Pflanzenmerkmal ein Entitätstyp bereitgestellt. Auffällig ist allerdings, dass es innerhalb des ER-Diagramms keine räumliche Trennung der Merkmale bezüglich der bereits weiter oben angesprochenen und in Workpackages eingeteilte Merkmalsklassen Persistence, Regeneration und Dispersability gibt. Sie sind im Gegenteil innerhalb der Abschnitte c und d bunt verteilt. Für die Ausprägung eines Pflanzenmerkmals wird für jedes Merkmal u.a. der Messwert (die Messwerte bei quantitativen Merkmalen), ein Kommentar, die Datenquelle (über Fremdschlüsselbeziehung), das Einpflegedatum, die Messmethode (über Fremdschlüsselbeziehung) und Pflanzenklassifizierung (über Fremdschlüsselbeziehung) abgespeichert. Abbildung 2.7 zeigt dies beispielhaft für das Pflanzenmerkmal Alter der Pflanze beim ersten Blüten“. ” Abbildung 2.7: Beispiel für einen Entitätstyp eines Pflanzenmerkmals Für eine detailliertere Information zu dem Datenbankschema sei auf [4] verwiesen. An der Stelle wird das ganze Schema in Form des bereits bekannten ER-Diagramms gezeigt. Es bietet interaktive Informationen zu Entitätstypen 15 Kapitel 2 Grundlagen und deren Attributen an, da nach Mausklick auf z.B. ein Attribut in einem anderen Frame der Webseite eine genaue Beschreibung dazu angezeigt wird. Weitere Informationsquellen über das LEDA-Projekt sind einmal die LEDA Projekt-Homepage selber (vgl. [5]), sowie das Paper [19], welches einen verknappten Überblick über das LEDA Projekt gibt und das Paper [14], welches deutlich detaillierter auf Einzelaspekte - gerade auf die zu erfassenden Pflanzenmerkmale und die dazugehörigen Messmethoden - eingeht. 16 2.2 J2EE, Servlets und JSP 2.2 J2EE, Servlets und JSP von Pascal Kuhn 2.2.1 J2EE Definition Java 2 Platform, Enterprise Edition, ist ein Standard, um mit modularen Komponenten verteilte, mehrschichtige Anwendungen zu entwickeln. J2EE setzt auf bereits etablierte Standards wie z.B. JDBC oder CORBA auf und ermöglicht dem Entwickler den Zugriff auf weitere Funktionalitäten wie z.B. Enterprise Java Beans, Java Servlets, JSP und XML [7] . Entstehung Anfang 1999 wurde das Java Development Kit in Java-2-Plattform umbenannt. Um verschiedene Einsatzgebiete von Java deutlicher voneinander abzugrenzen, fasste Sun seine Bibliotheken zu drei Gruppen zusammen: • Java-2-Plattform, Standard Edition (J2SE), die klassische Java-2-Plattform für Desktop-Anwendungen, • Java-2-Plattform, Enterprise Edition (J2EE) für große, verteilte Unternehmensanwendungen und • Java-2-Plattform, Micro Edition (J2ME) für mobile und eingebettete Systeme (PDAs, Mobiltelefone, Set-Top-Boxen usw.). Kernelement ist die J2SE, die von J2EE erweitert und von J2ME auf einen Teilumfang reduziert ist [21] . J2EE Plattformübersicht Architektur Die in Abbildung 2.8 dargestellten Zusammenhänge zwischen den einzelnen Komponenten der J2EE, müssen von jeder J2EE-Plattform erfüllt werden. Grafik1 liefert hierzu einen logischen Überblick. Die verschiedene Rechtecke stellen die verschiedenen Container dar, die eine Laufzeitumgebung für die jeweils im oberen Teil der Rechtecke aufgezeigten Applikationskomponenten bieten. Die vom jeweiligen Container angebotenen Dienste sind im unteren Teil der Rechtecke dargestellt. Die Pfeile stellen die benötigte Mindestkonektivität zwischen den Komponenten an. 17 Kapitel 2 Grundlagen Applikationskomponenten Eine J2EE Laufzeitumgebung definiert vier verschiedene Applikationskomponenten, die von jedem J2EE Produkt unterstützt werden müssen [1] : Applikationen sind Javaprogramme, die normalerweise auf einem Desktopcomputer ablaufen und eine Grafische Benutzerschnittstelle bieten. Sie bieten eine spezielle Funktionalität und können sehr umfangreich sein. Servlets, JSP laufen typischerweise in einem Webcontainer ab und reagieren auf HTTP-Anfragen. Servlets und vor allem JSP-Seiten dienen dazu HTML-Seiten zu generieren. Webapplikationen bilden sich aus dem Zusammenspiel mehrerer dieser Webkomponenten. Enterprise Java Beans laufen in einer speziell verwalteten Umgebung ab, die Transaktionen unterstützt. Sie bieten typischerweise die Geschäftslogik einer J2EE-Anwendung Applets sind kleine Javaprogramme die eine Grafische Oberfläche bieten, und normalerweise in einem web browser ablaufen. Sie bieten z.B. ein leistungsfähiges Benutzerinterface auf der Clientseite einer J2EEAnwendung. Container Container müssen eine Java kompatible Laufzeitumgebung zur Verfügung stellen, wie sie in Java 2 Plattform Standard Edition definiert ist. Container bieten den Applikationskomponenten eine federated view der darunterliegenden J2EE APIs. Applikationskomponenten kommunizieren nicht direkt miteinander, sondern sie nutzen die vom Container zu Verfügung gestellten Protokolle und Methoden um miteinander oder mit externen Komponenten zu kommunizieren. Typische J2EE Produkte bieten für jeden Typ von Applikationskomponenten je einen Container. Es ist vorgegeben das ein Container einen bestimmten Satz an Standarddiensten bieten, die im folgenden noch erläutert werden. Standarddienste Folgende Standarddienste müssen von einem J2EE Server angeboten werden: HTTP, HTTPS Die HTTP client-side API wird durch das package java.net definiert, während die server-side API durch die Servlet- und JSP interfaces definiert werden. Für HTTPS gilt das gleiche nur das das HTTPProtokoll über das SSL Protokoll genutzt wird. 18 2.2 J2EE, Servlets und JSP Java Transaktion API/Service (JTA/JTS) Unterstützen die Abwicklung verteilter Transaktionen nach dem XA/Open-Standard. RMI-IIOP Das RMI-IIOP Teilsystem ist zusammengesetzt aus APIs die es erlauben im RMI Stil zu programmieren, unabhängig vom darunterliegenden Protokoll und aus Implementierungen solcher APIs die sowohl das ”J2SE native RMI protocol” als auch das CORBA IIOP Protokoll unterstützen. J2EE Applikationen können diese Protokolle nutzen um z.B. CORBA- Dienste zu benutzen die außerhalb ein J2EE Systems ablaufen. Der Zugriff auf Enterprise Java Beans kann ebenfalls über RMI-IIOP APIs geregelt werden [1]. Java IDL Die Java Interface Definition Language (IDL) bietet J2EE Applikationen die Möglichkeit Externe CORBA- Objekte zu über das IIOPProtokoll anzurufen und mit ihnen zu interagieren. JDBC API Die Java Database Connectivity stellt eine Programmierschnittstelle zur Verfügung, die den Zugriff auf alle wichtigen relationalen und Objektrelationalen Datenbanken erlaubt. JDBC definiert eine generische Programmierschnittstelle für Datenbanken als Menge von Klassen und Schnittstellen die, die von einem JDBC-Treiber implementiert werden müssen. JDBC deckt den gesamten Prozess des Datenbankzugriffs von der Verbindungsherstellung über die Generierung von SQLAbfragen und -Updates bis hin zum Transaktionsmanagements ab [21] . Java Message Service (JMS) Java Message Service ist ein API für den Zugriff auf Nachrichtenorientierte Systeme, wie z.B. MQSeries von IBM, die eine asynchrone Kommunikation über den Austausch von Nachrichten benutzen. Java Naming an Directory Interface (JNDI) Ist eine Umfangreiche Klassenbibliothek für die Nutzung von Namens- und Verzeichnisdiensten. Mit diesen Diensten kann man Netzwerkressourcen auf Namensräume abbilden und so einen Transparenten Zugriff auf verteilte Dienste und Objekte im Netz erhalten. JavaMail Das JavaMail- API modelliert ein abstraktes Mail-System, das weitgehend unabhängig von der verwendeten Mail-Middelware ist. Mit diesem APIs können Mail-Server und Clients auf Basis diverser Protokolle wie SMTP, POP3 und IMAP4 aufgebaut werden [21] . Java API für XML Parsing Da XML im Datenaustausch eine immer größere Rolle spielt wurde mit JAXP in J2EE eine umfangreiche Programmierschnittstelle für den Zugriff auf XML-Parser und XML- Dokumente mittels SAX und DOM geschaffen. Für formatierte Dokumente 19 Kapitel 2 Grundlagen steht außerdem eine Unterstützung von XSLT- Transformationen zur Verfügung. J2EE Connector Architecture Definiert eine Integrationsschnittstelle, mit der unterschiedliche Informationsquellen an einen Applikationsserver gekoppelt werden können. So muss evtl. in einem Unternehmen ein altes Verwaltungssystem integriert werden, da ein ersetzen nicht möglich ist, oder ein inkompatibles Datenbanksystem soll angeschlossen werden JCA bietet hier die Lösung, ähnlich wie bei JDBC können die Hersteller oder Drittanbieter der alten Systeme einen Treiber erstellen, der den Zugriff auf diese Systeme möglich macht. Security Services Mit dem JAAS-Framework bietet Java ein Rahmenwerk für die Zugriffskontrolle von Ressourcen und für die Authentifizierung von Benutzern. Web Services J2EE bietet volle Unterstützung für einerseits clients von Internetdiensten als auch Internetdienst Endpunkte. Verschiedene Java Technologien werden kombiniert eingesetzt um eine gute Unterstützung von Internetdiensten zur Verfügung zu stellen. Die Java API für XMLbasierende RPC (JAX-RPC) bieten Unterstützung für Internetdienste die ein SOAP/HTTP Protokoll nutzen. JAX-RPC definiert die Abbildung zwischen Java-Klassen und XML wie es von SOAP RPC Aufrufen verwendet wird. Management Die Java 2 Plattform, Enterprise Edition Management Spezifikation definiert APIs um J2EE Server mit Hilfe einer speziellen Management Enterprise bean. Desweiteren ist die Java Management Extensions (JMX) API genutzt um weitere Managementfunktionen zur Verfügung zu stellen. Schichtenmodell Moderne Applikationen, insbesondere Webapplikationen, bestehen in der Regel aus mehreren Schichten, die zusammengesetzt die gesamte Funktionalität bieten. Grundsätzlich wird bei J2EE in vier verschiedene Schichten unterschieden: Clientenschicht, Server-side-Präsentationsschicht, Serverside-Geschäftslogik und die Ressourcenschicht. Die Clientenschicht setzt sich zusammen aus entweder einer einfachen Browser-HTML-Oberfläche, die evtl. mit Java-Applets unterstützt wird, oder aus Applikationen, die auf Serverfunktionalitäten zugreifen. Die Server-side-Präsentationsschicht besteht üblicherweise aus Servlets und JSP Elementen, die dynamische Inhalte wie etwa 20 2.2 J2EE, Servlets und JSP HTML-Seiten generieren, und so eine mächtige Benutzerschnittstelle auf Serverseite bieten. Bei J2EE setzt sich die Geschäftslogik auf Serverseite aus Java Enterprise Beans in Kombination mit Servlets zusammen. JEB kapseln die Geschäftslogik und sind so leicht portierbar. Alternativ kann die Geschäftslogik auch einfach aus dem Zusammenspiel von Servlets und JSP-Seiten gebildet werden. Die Ressourcenschicht bilden Datenbanken, die für moderne Softwaresysteme unabdingbar geworden sind. Ebenfalls gehören Verbindungen zu anderen evtl. älteren Systemen z.B. über ein CORBA-Schnittstelle. Es gibt natürlich auch Softwaresysteme denen weniger Schichten genügen, oder aber Systeme die weitere Schichten einschieben. Vorteile sind in jedem Fall aber die bessere Wiederverwendbarkeit, eine leichtere Modulare Entwicklung sowie eine bessere Erweiterbarkeit. Sicherheit in J2EE Sicherheit ist für heutige Softwaresysteme ein sehr wichtiger Faktor. Besonders seit das Internet eine wichtige Ressource für den Austausch von Daten und dem weltweiten Zugriff auf eben diese bietet, muss Sicherheit auf diversen Gebieten gewährleistet werden. J2EE definiert einen Katalog an minimalen Sicherheitsfunktionen die eine J2EE Anwendung bieten muss. Die wichtigsten dieser Sicherheitsfunktionen sind Authentifizierung, Zugriffskontrolle auf Ressourcen, Datenintegrität, Datenschutz, Eindeutige Identifizierbarkeit des Benutzers und ein sichere Log-Funktion. Die Authentifizierung wird in J2EE so aufgefasst das sich Client und Server einander beweisen müssen das sie berechtigt sind in der benutzen Weise aufeinander zuzugreifen. So muss z.B. ein client-applet evtl. über ein vom Benutzer eingegebenes Passwort beweisen das der Benutzer das Recht hat mit diesem applet auf das System zuzugreifen. Wenn ja kann ein Zugriff erlaubt werden, wenn nicht wird der Zugriff verweigert. Die Zugriffskontrolle auf Ressourcen ist ebenfalls eine wichtige Funktion um zu verhindern das Applikationen oder Clients (Browser oder Applets), auf Hintergrundresourcen zugreifen auf die sie in ihrer Benutzerrolle nicht befugt sind. Jeder Benutzer bekommt über seine Anmeldung eine gewisse Befugnis, die normalerweise mit Rollen verknüpft ist. Benutzer in gleichen Benutzergruppen haben gleiche Rechte. Aus Gründen der Gewährleistung von Integrität und Datenschutz können solche Rollen auch bestimmten Programmen oder Komponenten zugewiesen werden. So kann einiges Komponenten z.B. untersagt werden direkt auf die Datenbank zuzugreifen, sondern eine vorgegebene Schnittstelle zu benutzen. In diesem Zusammenhang ist auch der Datenschutz ein wichtiger Aspekt. Geschützte Daten dürfen nur von Benutzern abgerufen werden können die auch die nötigen Rechte dazu haben. In der heutigen Informationsgesellschaft 21 Kapitel 2 Grundlagen stellen Informationen ein wertvolles Gut dar. Daten müssen aus Unternehmerischen Gründen geschützt werden, aber auch um die Privatsphäre von Privatpersonen zu sichern. Die eindeutige Identifizierbarkeit der auf das System zugreifenden Benutzer ist eine wichtige Sicherheitskomponente, nur so können Zugriffe zurückverfolgt werden. Wenn jeder Zugriff zuverlässig und eindeutig zurückverfolgt werden kann, und eine sicheres Logging gewährleistet ist, so ist eine gute Basis für eine sicheres Arbeiten geschaffen. Ein letztes Konzept ist die Gewährleistung von Datenintegrität. Dies bedeutet das sichergestellt werden muss das Daten auf ihrem Weg von A nach B nicht modifiziert werden können. Solche veränderten Nachrichten, z.B. in einem offenen Netzwerk müssen erkannt werden können. J2EE bietet für diese Sicherheitskonzepte bereits eine große Zahl an vordefinierte Bibliotheken. Insgesamt ist der Sicherheit eine bedeutende Rolle zuzuweisen. Ein Unternehmen hat hohe Anforderungen an ein Softwaresystem, insbesondere wenn es sich um Webapplikationen handelt. Java bietet bereits Grundsätzlich gute Konzepte zum Thema Sicherheit, so kann das Java Sandbox Modell bereits eine gute Grundsicherheit für das System auf dem die Applikation laufen soll bieten. Anwendungsgebiete und Vorteile J2EE wurde geschaffen um große, verteilte Unternehmensanwendungen zu erstellen. Im Gegensatz zu J2SE ist J2EE um diverse Komponenten wie Dienste und andere Grundfunktionalitäten erweitert. Die Grundlage einer J2EE bildet der J2EE-Server, an den per Spezifikation wichtige Anforderungen gestellt sind. Diese Anforderungen stellen eine gewisse Basis zur Verfügung, die eine Portierbarkeit von Applikationen ermöglicht. Auch an J2EE- Anwendungen werden fest definierte Anforderungen gestellt, um eine gewisse Qualität zu sichern. Die Qualitätssicherung durch das Aufstellen von konsequenten Regeln ist eine der Grundlagen von J2EE. Durch das Vererbungskonzept in Java kann eine gewisse Grundlage geschaffen werden um eine Struktur vorzugeben die eingehalten werden muss. J2EE bietet dem Entwickler viele Vorteile. Grundsätzlich ist Java als Grundlage als Vorteil zu betrachten. Plattformunabhängigkeit, Objektorientierung, umfangreiche Bibliotheken sowie ausgereifte Sicherheitsaspekten sind einige der daraus resultierenden Vorteile. Speziell J2EE bietet jedoch dem Entwickler von großen Verteilten Anwendungen, insbesondere Webapplikationen besondere Vorteile. Erweiterbarkeit, Skalierbarkeit und Zuverlässigkeit sind hier zentrale Faktoren [20] . Ein bestehendes System muss in der heutigen Zeit, um dauerhaft 22 2.2 J2EE, Servlets und JSP Leistungsfähig zu bleiben und den immer schneller steigenden Anforderungen zu genügen, eine gute Erweiterbarkeit bieten. Erweiterbarkeit in diesem Sinne bedeutet, das sich das Softwaresystem leicht ändern, an besondere Gegebenheiten anpassen und um zusätzlichen Funktionsumfang erweitern lassen kann. Weitere Aspekte der Erweiterbarkeit sind die Wiederverwendbarkeit und die Modularisierung. Applikationen bestehen in der Regel aus vielen Modulen, die jeweils Teilfunktionen implementieren. Durch dieses Konzept ist das auskoppeln und zentralisieren von Teilfunktionen leicht möglich ist, was insbesondere für das anpassen und erweitern von Softwaresystemen sehr wichtig ist. Skalierbarkeit ist insbesondere für Webapplikationen und große Unternehmensanwendungen eine Wichtige Eigenschaft für ein Softwaresystem. Während man bei normalen Desktop-Anwendungen ungefähr absehen kann welche Leistung erwartet wird, kann dies bei den anderen Systemen nicht vorhergesagt werden. Für einen Webserver ist es z.B. eine wichtige Eigenschaft eine gewisse Reaktionszeit zu gewährleisten. Diese Reaktionszeit darf bei einem überdurchschnittlichem Zugriff nicht zu stark einbrechen, oder gar den Server zum Absturz bringen. Zuverlässigkeit ist ein weiterer sehr wichtiger Punkt. Benutzer erwarten von einem System, das es immer zuverlässig arbeitet und allzeit erreichbar ist. Wenn nur eine einzige Komponente ausfällt, im Hardware-, Software- oder auch im Netzwerkbereich ist evtl. die gesamte Applikation nicht mehr verfügbar. Zuverlässigkeit ist ein sehr wichtiges Kriterium für Software, da ein großer Teil der Erwartungen daran geknüpft ist, und sich Kunden von Applikationen darauf verlassen, das das Softwaresystem einwandfrei arbeitet. Als letzten großen Vorteil von J2EE möchte ich noch anführen, das es für die Entwicklung von Softwarekomponenten oder auch ganzen Applikationen bereits eine Fülle von Design-Patterns gibt, auf die man als Entwickler zurückgreifen kann. Diese Patterns bieten konkrete Entwurfsmuster für die Entwicklung von bestimmten Softwarekomponenten, die den eigenen Entwurf, aber auch die Implementierung unterstützen. Selbsterstellte Patterns können z.B. auch Firmenintern weiterverwendet werden, und stellen so ein wertvolles Nebenprodukt neben dem eigentlichen Entwicklungsprozess dar. 2.2.2 Servlets Servlet Interface Servlets sind Webkomponenten die dazu benutzt werden können dynamischen Inhalt für Web-Seiten zu erzeugen. Sie funktionieren über ein Request/Responsemodell. Servlets erhalten z.B. einen HTTP-Request, führen dann 23 Kapitel 2 Grundlagen ihre Funktion aus und erzeugen einen Response der an den anfragenden WebBrowser geschickt wird. Die Methoden zur Request-Bearbeitung sind entsprechend den HTTP-Anfrage-Typen doGet, doPost, . . . . Servlets müssen entweder das Java Servlet Interface implementieren, oder von einer Klasse erben die dieses Interface implementiert. Standard Servlet-Klassen sind GenericServlet und HttpServlet. Request/Response Wird das Servlet aufgerufen so werden automatisch vom Container einige implizite Objekte erzeugt. Die wichtigsten sind die Objekte Request und Response. Über das Request-Objekt werden alle wichtigen Informationen wie z.B. Parameter, Informationen über den Servlet-Context, den zum Request gehörenden HTTP-Header, Pfadelemente, Cookie-Informationen, SSLSicherheitsinformationen und noch vieles mehr übergeben. Der Request kapselt die gesamte Servlet-Eingabe in Objekte, die dann ausgelesen werden können. Auch der Container kann Informationen über das Request-Objekt an das Servlet weitergeben. Das Response-Objekt kapselt die Servlet-Ausgabe. So können zum Beispiel die Ausgabe-Objekte zugegriffen, Puffer verwaltet, Cookies angelegt und HTTP-Header für die Antwort generiert werden. Die Funktionsweise kann man wie folgt beschreiben: Ein Servlet wird aufgerufen und mittels der HTTP-Übergabefunktionen GET oder POST werden Parameter an das Servlet weitergegeben. Das Servlet überschreibt nun die Methoden doGet() und doPost(), um die entsprechenden Anfragetypen zu bearbeiten. Je nach Anfragetyp wird eine der beiden Funktionen aufgerufen. Die Funktionen doGet() und doPost() erhalten als Übergabewert die Objekte request vom Typ HttpServletRequest und response vom Typ HttpServletResponse. Nun können aus dem Request-Objekt die Parameter ausgelesen werden. Die Daten werden dann verarbeitet oder eine beliebige Funktionalität erfüllt, je nachdem was die Servlet-Aufgabe ist. Dann kann man z.B. über das Response-Objekt einen PrintWriter erzeugen und danach mit einfachen Ausgabefunktionen wie println() direkt in die Servlet-Ausgabe schreiben und ein HTML-Dokument erzeugen, das dann an den Absender des Requests zurückgeschickt wird. Servlet-Lebenszyklus Servlets haben einen festgelegten Lebenszyklus. Beim der ersten Anfrage an das Servlet wird es vom Servlet-Container, z.B. einem Tomcat, geladen und instanziiert. Als nächstes wird das Servlet initialisiert. Dabei wird die Init-Methode aufgerufen. Dies passiert nur beim ersten Aufruf. Hier wird im 24 2.2 J2EE, Servlets und JSP Normalfall die Servlet-Umgebung initialisiert. Vorbereitende Tätigkeiten wie das Öffnen einer Datenbankverbindung können hier erledigt werden. Danach wird die Service-Methode des Servlets aufgerufen. Für jede Anfrage die nach der ersten getätigt wird, wird ein Thread gestartet der die entsprechende Service-Methode (doGet und doPost, wie oben beschrieben) aufruft. So ist eine parallele Abarbeitung mehrerer Anfragen möglich. Für Servlets bedeutet das, das alle Globalen Variablen, sowie Zugriffsfunktionen auf Datenbanken oder Dateien synchronisiert werden müssen. Java bietet hier bereits eine volle Unterstützung. Bei Variablen, Methoden und Funktionen wird einfach das Schlüsselwort synchronized verwendet. Java implementiert dann einen Zugriffsschutz über ein Semaphorenkonzept. Es gibt alternativ die Möglichkeit ein Servlet über ein SingleThreadInterface zu implementieren. Dann werden die Anfragen nacheinander abgearbeitet, was allerdings in der Praxis für eine hochfrequentierte Webseite nicht in Frage kommt. Am Ende wird das Servlet vom Container über eine destroy-Methode beendet. Hier werden noch Aufräumarbeiten erledigt wie z.B. das Schließen von Dateien oder das Schließen einer Datenbankverbindung. Sessions Bei dem Zugriff auf Webapplikationen ist es wichtig, das die Anwendung den Benutzer während seiner Sitzung eindeutig identifizieren kann. Hierzu gibt es so genannte Sessions. Im allgemeinen werden Sessions durch Cookies oder durch URL- rewriting realisiert. Bei der Verwendung von Cookies wird ein kleiner Datensatz mit einer Identifikation auf den Client geladen, die dann bei jeder weiteren Anfrage verwendet wird. Bei URL-rewriting werden später folgende Anfragen durch hinzufügen von Parametern so verändert, das z.B. eine Session-ID oder der Name mit übergeben wird. Sessions sind im Servlets über ein Session-Objekt realisiert, das vom Request-Objekt geholt werden kann. Das setzen von Cookies erfolgt über das Response-Objekt. Die Session wird auf dem Server gespeichert und dem zugehörigen Client durch Cookies und URL-Rewriting zugeordnet. Das Session-Objekt bietet noch mehr. Es stellt eine Datenstruktur auf Parameter/Wert Basis zur Verfügung in die Daten gespeichert werden können. So könnte man z.B. eine typische shopping-cart Anwendung über das Session-Objekt realisieren. Sitzungen werden entweder automatisch nach einer festgelegten Zeitspanne beendet, oder explizit über die invalidate-Methode [9] . 25 Kapitel 2 Grundlagen Filter Filter sind Java Komponenten, die dazu genutzt werden können, einen HTTPRequest, oder -Response zu manipulieren. Anwendungsgebiete sind etwa Ver- oder Entschlüsselungen, oder aber das anpassen an einen kompatiblen Header-Typ. Weitere Anwendungsgebiete sind Kompression, Bildkonvertierungen, aber auch Logfunktionen und XSLT-Konvertierung für die Darstellung von XML-Daten. Filter werden den eingehenden Requests direkt zugeordnet und können diese Request-Methoden überschreiben. Welcher Filter aufgerufen wird hängt von dem ihm zugeordneten Servlets ab. 2.2.3 JSP Definition Java Server Pages sind die J2EE Technologie um Applikationen zu bauen die dynamischen Web-Inhalt erzeugen. Im Gegensatz zu Servlets eignen sie sich besser um HTML und die Java-Funktionalität zu kombinieren. Funktionsweise JSP-Seiten werden von einem JSP-fähigen Webserver durch eine JSP-Engine in ein Servlet übersetzt und dann wie die vorher beschriebenen Servlets ausgeführt. Grundsätzlich ist die Technologie eng mit Servlets verwandt, jedoch werden hier beim erstellen der dynamischen Seite Scriptingelemente, Direktiven und Aktionen in HTML eingebettet, und nicht wie bei Servlet die HTML-Komponenten in den Javacode. In der Ausführung unterscheiden sie sich aber kaum. Lebenszyklus Beim ersten Aufruf einer JSP Seite, die im *.jsp Format auf dem Webserver vorliegt, wird die JSP-Datei in ein Servlet übersetzt. Dieses Servlet wird dann kompiliert und wie ein Servlet ausgeführt. Hierbei werden die im Servlet-Abschnitt bereits erwähnten Stadien wie Init(), Service(), und destroy() durchlaufen. Auch JSP laufen wie Servlets bei mehreren Anfragen in verschiedenen Threads ab, die jeweils nur die Service-Methode ausführen. Die nötigen Synchronisationsmechanismen müssen vom Programmierer der Seite verwendet werden. Aus Performanzgründen kompilieren einige Server 26 2.2 J2EE, Servlets und JSP die JSP schon vor dem ersten Aufruf, um die erste Anfrage genauso schnell bearbeiten zu können wie die übrigen. Aufbau einer JSP-Seite Ein JSP-Seite besteht im wesentlichen aus HTML-Code, Scriptingelementen, Direktiven, und Aktionen. Im folgenden werden Scriptingelemente, die wichtigsten Direktiven sowie die wichtigsten Aktionen, die Standardaktionen, und TagLibs kurz erläutert. Scriptingelemente Mit Scriptingelementen kann man Code in das Servlet einfügen, das von der JSP-Seite generiert wird. Es wird zwischen drei Formen unterschieden [9] : • Ausdrücke haben die Form <%= expression%>. Ausdrücke werden ausgewertet und direkt in die Seite eingefügt, also später direkt als HTML ausgegeben. • Scriptlets haben die Form <% code %>. Mit Hilfe von Scriptlets kann vollständiger Javacode in die HTML-Seite eingebettet werden. Komplexe Berechnungen oder aber auch Kontrollstrukturen für die HTMLAusgabe können so realisiert werden. Der Javacode in den Scriptlets steht später im Servlet in der Service-Methode. • Deklarationen haben die Form <%! code %>. In Deklarationen kann ebenso wie ein Scriptlets Javacode eingebettet werden. Im Gegensatz zu Scriptlets wird dieser Code jedoch später außerhalb der ServiceMethode abgelegt. Hier können zum Beispiel Methoden oder Globale Variablen definiert werden. Kommentare haben die Form <%– – Kommentar – –%> Direktiven Direktiven dienen dazu die Gesamtstruktur des Servlets zu kontrollieren und dazu mit dem Container zu kommunizieren. Sie werden beim Übersetzen der JSP-Seite ausgeführt. Direktiven haben die Form: <%@ Direktive {Attribut = ,, Wert ”} %>. Die wichtigsten Direktiven sind die page-, include- und die taglib-Direktive, die im folgenden genauer beschrieben werden. 27 Kapitel 2 Grundlagen • Die page-Direktive dient dazu einer JSP Seitenattribute zuzuweisen. Solche Attribute sind zum Beispiel das setzen einer zugehörigen Fehlerseite bzw. das definieren der aktuellen Seite als Fehlerseite. Das import Attribut ist mit dem einbinden von Javaklassen oder -Packages zu vergleichen. Es kann weiterhin definiert werden ob die JSP-Seite in einer Session enthalten sein muss, oder es können Puffer-Attribute und Informationen über die Zeichencodierung gesetzt werden. Der Syntax der page-Direktive ist: <%@ page {Attributliste} %> . Die Attributliste besteht dann aus einer Liste mit Attributen und den zugewiesenen Werten. Hier alle Attribute: extends, import, session, buffer, isThreadSafe, isErrorPage, errorPage, contentType, pageEncoding, language, autoFlush, info, isELIgnored. • Die include-Direktive dient dem ineinander Einfügen von Code, vergleichbar einer Substitution. So kann z.B. zur Kompilationszeit eine andere JSP-Seite, aber auch statischer Inhalt direkt in die aktuelle JSPSeite eingebunden werden. Dies erspart Mühe wenn spezielle, häufig gebrauchte Teile von JSP oft geändert oder erneuert werden müssen. Der Syntax der include-Direktive ist: <%@ include page/file=,,URI”Attributliste%>, wobei page einen statischen und dynamischen Inhalt,und file nur einen statischen Inhalt einfügen kann. • Die taglib-Direktive hat die Funktion Tag-Bibliotheken einzubinden, die später noch erläutert werden. Syntax hier: <%@ taglib uri=,,tagliburi” prefix=,,tagprefix” %> , wobei tagliburi eine absolute oder relative Adresse der Tag-Bibliothek, und tagprefix das hier im Dokument zu verwendende Tag ist. Verwendung und Anwendungsgebiete werden später noch beschrieben. Implizite Objekte Wenn eine JSP-Seite aufgerufen wird und der vorliegende Request bearbeitet wird, werden einige Objekte implizit erzeugt, auf die dann sofort zugegriffen werden kann. Die wichtigsten impliziten Objekte sind: • request, das bereits vom Servlet bekannte javax.servlet.http.HttpServletRequest Objekt, das diverse Parameter und Funktionen zur Anfrage des Clients bietet. Es kann genau wie im Servlet verwendet werden. • response, ebenfalls vom Servlet bekannt bietet es Parameter und Funktionen um die Antwort an den Client zu definieren. Typ: javax.servlet.http.HttpServletResponse 28 2.2 J2EE, Servlets und JSP • out, vom Typ javax.servlet.jsp.JspWriter, ist von java.io.Writer abgeleitet. Dient der JSP-Ausgabe. • session, vom Typ javax.servlet.http.HttpSession, ist ebenfalls vom Servlet bekannt. Dient zur Verwaltung von Sitzungen und kann zum Speichern Sitzungsbezogener Daten genutzt werden. • application, vom Typ javax.servlet.ServletContext, stellt der JSP-Seite eine Sicht auf seine Umgebung zur Verfügung. • config, vom Typ javax.servlet.ServletConfig. Kann genutzt werden um die Konfiguration auszulesen. • pageContext, vom Typ javax.servlet.jsp.PageContext, bietet weitere Funktionalitäten für den JSP-Einsatz in JSP-Umgebung [?] • page, vom Typ java.lang.Object. Mit Hilfe dieser impliziten Objekte ist bereits ein umfangreiche Grundlage geboten um komfortabel JSP programmieren. Standardaktionen Standardaktionen bieten, zusätzlich zu den impliziten Objekten, eine weitere zusätzliche Funktionalität von Java Server Pages. Sie werden in XML-Syntax geschrieben und haben das Prefix jsp. Im Folgenden werden die wichtigsten erläutert: • <jsp:usebean> Wird verwendet um JavaBeans in JSP zu benutzen. Die beans werden hiermit erzeugt und bekommen einen Namen(ID) zugewiesen. Syntax: <jsp:usebean id=,,name’’class=,,classname’’>. Mit Hilfe der Standardaktionen jsp:setProperty und jsp:getProperty können ihnen Werte zugewiesen oder Werte ausgelesen werden. Alternativ können auch die in den Beans realisierten Lese- und Schreibmethoden verwendet werden. • <jsp:include>, kann andere JSP direkt in die aktuelle einbetten. Syntax: <jsp:include page="JspFilePfadName\ flush=true/>. Dies kann dazu verwendet werden vordefinierte Teile von Seiten häufiger zu verwenden oder um die JSP-Dateien übersichtlicher zu machen. • <jsp:forward>. Diese Aktion gibt die Verarbeitungreihenfolge an die spezifizierte Seite weiter. Der Rest der aktuellen wird nicht weiter durchlaufen. Syntax: <jsp:forward page="JspFilePfadName\ /> 29 Kapitel 2 Grundlagen • <jsp:plugin> Mit dieser Aktion können Plugins, wie z.B. Applets eingebunden werden. Parameterübergabe erfolgt über die Aktionen jsp:param bzw. jsp:params. Eine Alternative falls das plugin nicht geladen werden kann bietet jsp:fallback. Diese Aktionen können innerhalb des jsp:plugin Tags benutzt werden. Beispiel: <jsp:plugin type="applet" code="Molecule.class" codebase="/html" > <jsp:params> <jsp:param name="molecule"value= "molecules/benzene.mol"/> </jsp:params> <jsp:fallback> <p> unable to start plugin </p> </jsp:fallback> </jsp:plugin> Diese Standardaktionen können mit den im folgenden Abschnitt beschriebenen TagLibs erweitert werden. TagLibs Mit Hilfe von Tag-Bibliotheken ist es möglich weitere Aktionen als die Standardaktionen zu definieren und diese dann in JSP zu benutzen. Somit können auch komplexe Strukturen und Funktionalitäten auf der JSP in einfacher XML-Schreibweise genutzt werden, was insbesondere auch für nicht-Programmierer, z.B. die Webdesigner einen Vorteil bietet. JSP wurde geschaffen um das Zusammenspiel von Webdesignern und Programmierern zu erleichtern, wobei die TagLibs eine zentrale Rolle spielen. Der Designer hat keine komplizierte Code-Fragmente auf seiner Seite sondern einfach XML-Tags, die für ihn, bei guter Dokumentation, einfach zu handhaben sind. TagLibs beinhalten üblicherweise mehere Funktionen die dann über ein Tag mit nachgestelltem Funktionsnamen verfügbar sind. Um die einzelnen Tag-Funktionen zu schreiben muss man eine Tag Handler-Klasse schreiben, die das Interface Tag implementiert. Tag Handler-Klassen sind JavaBeans. Die Parameter werden per Name im Tag übergeben. Wenn der Server das entsprechende Tag findet erzeugt er eine Instanz der zugehörigen Klasse und übergibt die Werte über die entsprechenden set und get Methoden. In der Tag Handler-Klasse müssen folgende Methoden enthalten sein, die beim öffnen bzw. beim schließen des Tags aufgerufen werden: doStartTag() und doEndTag(). 30 2.2 J2EE, Servlets und JSP Anwendungsgebiete von Servlets und JSP Anwendungsgebiete von Servlets und JSP sind insbesondere Webapplikationen. Jedoch lassen sich insbesondere mit JSP auch kleine dynamische Seiten erstellen, die man sonst evtl. mit PHP oder dem weniger mächtigen Javascript erstellt hätte. JSP bieten sich durch ihre Eigenschaften und ihren speziellen Funktionsumfang als Präsentationsschicht für Webapplikationen an. Ein Professioneller Webdesigner kann eine Seite erstellen und dabei evtl. auf mächtige TagLibs zurückgreifen. Die Designfrage spielt in der heutigen Zeit bei einem riesigen Angebot an Webseiten eine immer wichtigere Rolle, weshalb der Einsatz von Profis in diesem Bereich oft sinnvoll erscheint. JSP bietet genau hier eine gute Unterstützung. Die Trennung von Design und Hintergrundlogik ist hier ideal realisiert. Mit Hilfe der Servlets und dem riesigen J2EE Paket dahinter kann man mächtige Applikationen erstellen und im Web zur Verfügung stellen. Die J2EE bieten eine große Bibliothek die Datenbankzugriffe und andere wichtige Funktionen einer großen Anwendung direkt zugreifbar machen. 31 Kapitel 2 Grundlagen Abbildung 2.8: J2EE Architektur Diagramm 32 2.3 Webapplikationen mit J2EE 2.3 Webapplikationen mit J2EE von Heike Kraef 2.3.1 Einleitung Je vielfältiger die Anwendungen im Internet werden, desto wichtiger wird die Möglichkeit, auf die Benutzer angepasste Internetpräsenzen anbieten zu können. Auch soll auf das Nutzerverhalten dynamisch eingegangen werden können. Die Schwierigkeit, die zu lösen ist, ist dabei, dabei das die Services Übersichtlich und geordnet bleiben um sie auch warten und verbessern zu können. Um all das zu vereinfachen und eine strukturiertes Modell zu haben, wurde von Sun J2EE eingeführt. J2EE definiert einen Standard für die Entwicklung von komponentenbasierten mehrschichtigen Internet-Applikationen. Ausserdem enthält es verschiedene Entwicklungswerkzeuge. Dies alles ist auf der Internetpräsenz von Sun als auf diesen Bereich abgestimmte Klassenbiblithek(SDK) zusammen mit anderen Tools erhältlich. Diese Arbeit behandelt die verschiedene Begriffe, die in diesem Zusammenhang immer wieder auftauchen und auch zum Teil die praktische Anwendung dieser J2EE-Spezifikation innerhalb des Tomcat-Servers von Apache. 2.3.2 J2EE Der Aufbau von J2EE ist, wie man in der Abbildung 2.9 sieht, sehr einfach gehalten. Auf der linken Seite liegt der komplette Teil, welcher auf der Seite Abbildung 2.9: Übersicht über den J2EE-Aufbau des Nutzers vorkommen kann. Dabei kann der Nutzer entweder über einen herkömmlichen Internet-Browser auf die Informationen, bzw. Internetseiten 33 Kapitel 2 Grundlagen oder andere Services, zugreifen, oder über einen sogenannten ApplicationClient, also ein auf die Aufgabe speziell abgestimmtes Programm. Bei dieser Art von Client hat man, im Gegensatz zu einem normalen Browser, die Möglichkeit nicht nur mit dem Web-Container-Teil des Servers zu komunizieren, sondern eine eigene Oberfläche, z.B. mit den Java-Swing-Klassen, zu entwickeln und dann direkt mit den Komponenten des EJB Containers zu komunizieren. Bei einem Browser ist dieser direkte Weg ausgeschlossen. Ein Browser kann nur indirekt, über den Web-Container, mit dem EJB-Container kommunizieren. Der EJB-Container, bzw. seine Komponenten sollen hier nicht weiter betrachtet werden; der Webcontainer jedoch wird im folgenden noch genauer beschrieben. Web-Container Der Web-Container kann abstrakt als eine Art Gruppierung betrachtet werden, welche die Webapplikationen und die zur Ausführung notwendigen Komponenten enthält. Dementsprechend kann man den Webcontainer auch als eine Art Schnittstelle bezeichnen, welche über eine definierte, immer gleiche, Struktur die Informationen ihrer Komponenten nach Außen weiter gibt. Es gibt unter anderem einen Ansatz von Apache (Geronimo) bei dem diese Schnittstelle als java-Interface-Klasse implementiert wurde, so dass eine Klasse, die diese implementiert, auf jeden Fall die folgenden Methoden enthalten muss: void deploy(String url): Führt eine Webapplikation aus. String getDefaultWebXmlURL(): Gibt die URL der Beschreibungs-Datei2 zurück die von diesem Container genutzt wird. void setDefaultWebXmlURL(String url): Setzt den Pfad auf BeschreibungsDatei die dieser Container nutzt. Dadurch wird sicher gestellt das jede Webapplikation auf die gleiche Weise angesprochen und genutzt werden kann. Webapplikation Webapplikationen sind, im Gegensatz zu den gleich bleibenden Teilen eines Webservers, die dynamische Erweiterung eines Web oder Application Server. 2 34 siehe Kapitel 2.3.3 2.3 Webapplikationen mit J2EE Dabei sind die statischen Teile, z.B. die zur generellen Komunikation benötigten verschiedenen, unterstützten Protokolle (ftp, html, ssh, ...), unabhängig von den angebotenen Services. Grundlegend gibt es zwei unterschiedliche Variationen von Webapplikationen. Zum einen service-orientierte Webapplikationen, die reine Daten ohne optische Repräsentation liefern. Zum anderen präsentations-orientierte Webapplikationen, die im Gegensatz zu den serviceorientierten, eine optische Repräsentation beinhalten. Das bedeutet in der Praxis, dass eine präsentations-orientierte Webapplikation z.B.eine htmlDatei oder eine XML-Datei liefert, wobei diese XML-Datei nur präsentationsorientiert ist falls ein Stylesheet mit geliefert wird. Bei der Java2 Plattform stellen die Web Komponenten, wie z.B. JSP, Servlets (siehe auch [15]) und Webservice Endpunkte3 , diese dynamische Erweiterbarkeit bereit. Praktische Anwendung Um nun eine Webapplikation, deren Teile unter anderem JSPs und Servlets sind, z.B. in einer Internet-Präsenz nutzen zu können, stellt sich die Frage wie man sie starten und nutzen kann. Dazu braucht man erst einmal ein Java Development Kit (JDK), um die genannten JSPs und Servlet überhaupt erst einmal zu erzeugen und eventuell noch einige Klassen schreiben zu können, welche die für die JSPs und Servlets benötigten Daten liefern. Doch um nun die geschriebene Webapplikation im Internet bereitstellen zu können, benötigt man noch einen Server der es möglich macht, auf die Applikation von Aussen zuzugreifen, z.B. Tomcat, auf den im folgenden noch näher eingegangen wird. Des weiteren benötigt man ein Building Tool mit dem man Anweisungen bzgl. des Servers in ausführbare Dateien schreiben kann. Diese Dateien sollten möglichst so aufgebaut werden können, dass es auf die Anfordernisse eine Webservers angepasst ist. Es bietet sich hier an das Tool ”Ant” zu nutzen, da dieses auf XML-Basis4 funktioniert und bereits Tags anbietet mit deren Hilfe die Konfigurationen des Servers einfacher werden. Zu guter Letzt ist es ratsam, ein Concurrent Versions System (CVS) zu nutzen, mit Hilfe dessen man Veränderungen die man an den Webapplikationen vorgenommen hat wieder Rückgängig machen kann, falls sich mal ein Fehler eingeschlichen haben sollte. 3 4 Punkt, an dem der Teil den der Nutzer noch sieht, aufhört siehe Kapitel 2.3.4 35 Kapitel 2 Grundlagen 2.3.3 Der Tomcat-Server Der Tomcat-Server ist ein Application-Server von Apache der die Spezifikationen von J2EE, bzw. das entsprechende Schichtenmodell einhält. Der Abbildung 2.10: Übersicht über den Aufbau des Tomcat-Servers Server besteht, wie man in Abbildung 2.10 sieht, aus folgenden Komponenten: Connector: Diese Teile, von denen es mehrere geben kann, sind die Übersetzer von verschiedenen HTTP-Protokollen (HTTP/1.0, HTTP/1.1, HTTPD, ...) in ein allgemeines Format, das der eigentliche Server verstehen kann. Service: bildet die Schnittstelle zwischen mehreren Connectors und genau einer Engine. Engine: fasst mehrere Hosts zu einer gesammelten Schnittstelle zusammen (verteilte Systeme). Host: entspricht einem Rechner, der durch eine URL identifiziert werden kann. Context: entspricht mehreren Webapplikationen auf einem Host. Tomcat-Ordner-Struktur Der Tomcat-Server ist aus der Perspektive des Nutzers nichts anderes als eine Struktur von einigen Ordnern, die teilweise wieder ausführbare Programme 36 2.3 Webapplikationen mit J2EE und Skripte enthalten um den Server aktivieren, deaktivieren und warten zu können. So liegen z.B. im Home-Verzeichnis des Servers folgende Verzeichnisse: bin/ : Startup- , Shutdown- und andere Skripte. conf/ : Konfigurationsdateien und DTDs5 webapps/ : die verschiedenen Webapplikationen in Unterordnern oder als WAR-Datei logs/ : Log-Dateien des Servers, also Text-Dateien mit den anfragen, ... common/lib : JAR Dateien, welche von allen Webapplikationen und internen Tomcat Funktionen genutzt werden. shared/lib : von allen Webapplikationen genutzte JAR -Dateien Die einzelnen Webapplikationen haben zusätzlich auch noch eine Verzeichnisstruktur. Oft wird für jede Webapplikation, wie oben beschrieben, ein eigener Ordner im Verzeichnis webapps/ erzeugt. Innerhalb von diesem neuen Ordner wird nun noch folgende Ordner-Struktur angelegt: aktuelles Verzeichnis: hier werden die *.html und *.jsp Dateien abgelegt. /WEB-INF/ : In dieses Verzeichnis wird die Datei web.xml, also der Web Application Deployment Descriptor6 gespeichert. /WEB-INF/classes/ : alle in dieser Webapplikation benötigten Java-class Dateien (servlets und andere) /WEB-INF/lib/ : alle in dieser Webapplikation benötigten *.jar-Dateien Statt dieser Verzeichnisstruktur kann man diese Hierarchie auch in einem ”Web application archive” speichern. So eine *.war Datei ist eine *.jar Datei, also eine gepackte Version der Ordner, mit anderer Endung um deutlich zu machen was darin enthalten ist. Jedoch werden solche Dateien zur Laufzeit entpackt um auf die Inhalte zugreifen zu können. 5 6 siehe Kapitel 2.3.4 XML-Datei die beschreibt welche Services diese Webapplikation bereit stellt 37 Kapitel 2 Grundlagen 2.3.4 Web Services Ein Web Service ist ein Dienst, der mit Hilfe von XML auf der Basis von Internet-Netzwerkprotokollen zur Verfügung gestellt wird. Web Services bilden die drei wichtigsten Teile der Zusammenarbeit ab: Das Zusammenfinden, Binden und den Datenaustausch [23,16]. Diese Begriffe sind wie folgt zu verstehen: Datenaustausch: Der Datenaustausch wird hauptsächlich mit der Hilfe von SOAP und HTTP durchgeführt. Alternativ zu SOAP kann der Datenaustausch auch über XML-RPC erfolgen. Auf XML-RPC wird im folgenden nicht näher eingegangen. Zusammenfinden: Einen Web Service kann automatisch via UDDI7 gefunden werden. UDDI selbst basiert auf SOAP über HTTP. Weitere Protokolle sind angedacht und teilweise standardisiert, wie zum Beispiel WSIL. Binden: Das Binden zwischen dem Verzeichnis(UDDI) und dem Server, auf dem der Web Service bereit gestellt wird, dominiert der WSDL Standard. In WSDL kann man alle wichtigen Informationen ablegen, die man benötigt, um auf einen Web Service zuzugreifen. Ein Vorgänger von WSDL ist DISCO. XML Extensible Markup Language (XML) ist ein textbasierter Standard zur Datendarstellung. Das bedeutet, das man mit Hilfe dieses Standards Daten strukturiert und übersichtlich verwalten kann. Dazu kann man in einem Schema (in DTDs8 ) eigene Tags definieren. Tags sind Schlüsselwörter die die Daten gliedern. So könnte man beispielsweise, wenn man die Daten von mehrere Personen im XML-Format speichern wollte, Tags für Name, Vorname, Adresse usw. definieren. Ein Tag wird dabei mit spitzen Klammern kenntlich gemacht, wobei das Tag am Ende eines Datenfeldes mit einem Slash hinter der öffnenden Klammer geschrieben wird. Ein XML-Datensatz zum vorigen Beispiel sähe dann z.B. wie folgt aus: XSLT option disabled! <?xml version="1.0" ?> <adressliste> 7 8 Verzeichnisdienst der Unternehmen, der ihre Daten und ihre Services enthält. Document Type Definitions 38 2.3 Webapplikationen mit J2EE <kunde> <nachname>Gans</nachname> <vorname>Gustav</vorname> <adresse>Entenhausenerstr. 12</adresse> <ort>Federbach</ort> </kunde> </adressliste> Der Vorteil einer solchen Datenhaltung ist es, das die Daten, im Gegensatz zu html-Dateien, getrennt von ihrer Darstellung gespeichert werden. Um diese Daten darstellen zu können werden Stylesheets definiert, die ihrereseits wiederum definieren wie die einzelnen Tags angezeigt werden sollen. Das wiederum hat den Vorteil, dass es so wesentlich leichter wird, die Darstellung der Daten z.B. an einzelne Nutzer anzupassen. So ist es beispielsweise möglich, dass, wenn mehrere Firmen die gleichen Daten auf einem zentralen Server nutzen, diese Daten innerhalb einer eigenen Firmenseite mit angepasstem Logo usw. erscheint. WSDL Die Web Services Description Language (WSDL) ist ein plattform-, programmiersprachen- und protokollunabhäniges XML-Format zur Beschreibung von Web-Services. Eine solche Beschreibung enthält, wie man im folgenden Beispiel des Übersetzungsservices Babelfish sieht, unter anderem den Namen, den Ort und die Kommunikationsarten des Services: <definitions name="BabelFishService" targetNamespace= "http://www.xmethods.net/sd/BabelFishService.wsdl"> <message name="BabelFishRequest"> <part name="translationmode" type="xsd:string"/> <part name="sourcedata" type="xsd:string"/> </message> <message name="BabelFishResponse"> <part name="return" type="xsd:string"/> </message> <portType name="BabelFishPortType"> <operation name="BabelFish"> <input message="tns:BabelFishRequest"/> <output message="tns:BabelFishResponse"/> </operation> 39 Kapitel 2 Grundlagen </portType> <binding name="BabelFishBinding" type="tns:BabelFishPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="BabelFish"> <soap:operation soapAction="urn:xmethodsBabelFish#BabelFish"/> <input> <soap:body use="encoded" namespace="urn:xmethodsBabelFish" encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace="urn:xmethodsBabelFish" encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <service name="BabelFishService"> <documentation> Translates text of up to 5k in length, between a variety of languages. </documentation> <port name="BabelFishPort" binding="tns:BabelFishBinding"> <soap:address location= "http://services.xmethods.net:80/perl/soaplite.cgi"/> </port> </service> </definitions> In disem Beispiel ist ersichtlich, das die Beschreibung dieses Services in verschiedene Teile gekapselt ist. Die äußerste Kapsel ist das Tag definitions. Sie beinhaltet unter anderem den Namen des Web Services. In der nächsten Ebene gibt es die Tags types,message, porttype, binding und service [22]. Das Tag types kommt in dem Beispiel nicht vor. In ihm kann man eigene Typen definieren. Da in dem Beispiel aber nur ein einfache Typen enthält(string) ist dies hier nicht nötig. message definiert die Art der auszutauschenden Daten. Hier entsprechen die beiden Messages dem eingegebenen Wort und dem übersetzten Ergebnis. Diese Definition wird nun wiederum im porttype um 40 2.3 Webapplikationen mit J2EE die Übermittlungsart einer, hier BabelFish genannten, Operation fest zu legen. In diesem Beispiel wird dies so definiert, dass der Endpunkt auf eine Anfrage eine Antwort sendet(Request-response). Weitere Alternativen, auf die ich hier aber nicht eingehen werde, wären Oneway, Solicit-response oder Notification. Das daraufhin folgende Tag ist binding. Hier wird nun das konkrete Protokoll und das Datenformat für einen PortType festgelegt. In dem Beispiel wird für unsere zuvor definierte Operation das SOAP-Protokoll zur Übertragung der Messages festgelegt, und auch wo die Definition des Protokolls bzw. die Definition der hier zu nutzenden Encoding Styles zu finden ist. Zu guter Letzt bleibt noch das Tag service. Dieses Tag beinhaltet unter anderem die Dokumentation, was der Service tut, und teilt innerhalb von hier definierten Ports den einzelnen Bindings genaue Adressen zu. Diese Beschreibung kann in der UDDI Registry gespeichert und so im Web veröffentlicht werden, so dass auch andere Firmen oder auch Privatleute auf diese Services zugreifen können. SOAP Das Simple Object Access Protokoll, kurz SOAP, ist ein XML-basiertes Kommunikationsprotokoll, dass unabhängig vom Transportprotokoll definiert ist und daher nicht nur über HTTP sondern auch über FTP oder andere Protokolle arbeiten kann. Die wichtigsten Prinzipien sollen dabei ”simplicity and extensibility” also Einfachheit und Eweiterbarkeit sein. Diese Prinzipien sind durch XML leicht zu erfüllen. Um nun Daten verschicken zu können, müssen diese in eine ”SOAP-Message” verpackt werden, die wie in Abbildung 2.11 ersichtlich aus folgenden Teilen besteht: SOAP Envelope: kappselt Header und Body und enthält z.B. Anweisungen wie die Nachricht dekodiert werden muss. SOAP Header: übernehmen Aufgaben wie Authentifizierung, Transaktionsmanagement usw.; es kann mehrere innerhalb einer Nachricht geben. SOAP Body: die eigentlichen Daten, die in dieser Message verschickt werden In der Realität könnte nun eine solche SOAP-Message wie folgt aussehen: 41 Kapitel 2 Grundlagen Abbildung 2.11: Struktur einer SOAP-Message ohne Attachment <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Header> <n:alertcontrol xmlns:n="http://example.org/alertcontrol"> <n:priority>1</n:priority> <n:expires>2001-06-22T14:00:00-05:00</n:expires> </n:alertcontrol> </env:Header> <env:Body> <m:alert xmlns:m="http://example.org/alert"> <m:msg>Pick up Mary at school at 2pm</m:msg> </m:alert> </env:Body> </env:Envelope> Hier kann man gut sehen, dass die einzelnen Teile der SOAP-Message durch XML-Tags gegliedert sind, und das auch die Inhalte die hier verschickt werden im XML-Format vorliegen. Inzwischen gibt es sogar Internet-Browser, z.B. Mozilla 1.0, die dieses Protokoll unterstützen, und es über Javascript-Aufrufe möglich machen auch direkt auf Webservices zugreifen können [13]. Kommunikation Die Kommunikation von Nutzerapplikationen mit dem Server, wie sie im Modell von J2EE vorgesehen ist, sieht man in Abbildung 2.12. Dort sieht 42 2.3 Webapplikationen mit J2EE Abbildung 2.12: Request-Handling in J2EE man, dass beim Stellen einer Anfrage, z.B. über eine Internetseite, diese Anfrage als HTTPServlet gestellt wird und dieses wiederum auf Webkomponenten, also auf JSPs, Servlets und html-Seiten, zugreift. Die einzelnen Webkomponenten greifen dann ihrerseits auf Daten, Prozeduren oder andere Webapplikationen zu. In der Praxis ist dieser Verlauf etwas detailierter zu betrachten. Im folgenden Beispiel (siehe auch Abb. 2.13) eine Anfrage an eine Webapplikation betrachten, welche wiederum auf einen Webservice zurückgreift. In diesem Beispiel stellt der Nutzer eine Anfrage. Dies geschieht z.B. dadurch das er sich eine Internetseite anschaut oder auch indem er Beispielsweise ein Formular ausfüllt, abschickt und auf eine Antwort oder ein Ergebnis wartet. Es gibt unzählige Möglichkeiten wie solch eine Anfrage aussehen kann. Nach dem die Anfrage mit Hilfe des http-Protokolls versendet wurde, übersetzt ein Connector diese http-Message in ein dem Kern des Servers bekanntes http. Dann kann der Server eine Session starten und leitet die Anfrage über die Engine an die entsprechende Webapplikation weiter. Diese bearbeitet die Anfrage und liefert nun ihrerseit eine JSP oder eine html-Seite zurück. Falls die Webapplikation jedoch noch Daten benötigt, die sie selbst an einen anderen Webservice stellen muss, kann sie, falls dieser ein entsprechendes Servlet beinhaltet, die Anfrage an des Webservice als SOAP-Nachricht schicken. Diese wird dann bei dem Server, auf dem der Webservice liegt, wieder 43 Kapitel 2 Grundlagen Abbildung 2.13: Beispiel für den Ablauf einer Anfrage an den Tomcat-Server mit einem Servlet dekodiert und bearbeitet. Nun muss der Webservice das Ergebnis wiederum als SOAP-Nachricht kodieren und sie zurück senden. 44 2.4 Das Framework Struts 2.4 Das Framework Struts von Niels Henze 2.4.1 Einleitung Bei Struts [10] handelt es sich um ein Framework, mit dessen Hilfe sich das Model-View-Controller (MVC) Konzept für Web-Anwendungen mit Java umsetzen lässt. Es ist ein Open-Source Projekt, wurde im Jahr 2000 von Craig R. McClanahan initiiert und fußt auf den folgenden Technologien: • Java-Server-Pages • Java-Servlets • Enterprise-Java-Beans Im Folgenden wird das MVC Konzept kurz erläutert und die Benutzung von Struts anhand dieses Konzeptes erklärt. Struts lässt sich von der Seite http://jakarta.apache.org/struts herunterladen. 2.4.2 Model-View-Controller Das Model-View-Controller Konzept geht auf Prof. Trygve Reenskaug zurück und wurde erstmals mit der Sprache Smalltalk implementiert (siehe [17] und [18]). Das Konzept zerlegt die Benutzungsoberfläche in drei Komponenten: • Das Model beschreibt die Schnittstellen zur Logik durch Definition von Datenstrukturen und Methoden • Die View nimmt Zugriff auf im Model spezifizierte Daten und stellt sie dar • Der Controller fungiert als Schnittstelle zwischen View, Model und dem Benutzer. Mehrere View- und Controller-Komponenten können dasselbe Model oder Teile davon darstellen bzw. bearbeiten. Durch die Spezifikation der Schnittstelle zur Logik mit der Komponente Model ist es möglich, die Logik relativ unabhängig von View und Controller zu entwickeln. View und Controller sind so relativ einfach auszutauschen, da sie nur mit dem Model verbunden sind. 45 Kapitel 2 Grundlagen Abbildung 2.14: Model-View-Controller in Struts Die Erläuterung wie das MVC-Konzept mit Struts umgesetzt wird, wird mit einem Beispiel für einen einfachen Registrierungsvorgang erläutert ( [12]). Die ”Startseite”, durch die die Registrierung aufgerufen wird, ist http://.../actions/signup.jsp. Innerhalb der Seite wird dem Benutzer ein Formular präsentiert, in dem er einige Angaben machen muss. Wenn der Benutzer das Formular vollständig ausgefüllt hat, wird ihm eine Bestätigungsseite angezeigt. Wenn Angaben fehlen, wird er aufgefordert, die fehlenden Informationen nachzutragen. 2.4.3 Der Controller Der Controller hat die Aufgabe, HTTP-Requests vom Client entgegenzunehmen. Zudem muss er entscheiden, welche Funktionen des Models auszuführen sind und dann die Verantwortlichkeit für das Erzeugen der nächsten Sicht der Benutzungsschnittstelle an eine passende View-Komponente zu delegieren. Der Controller wird durch die Komponenten ActionServlet und Configuration gebildet. Die Komponente ActionServlet ist ein Servlet vom Typ ActionServlet. Die Configuration ist eine XML-Datei (struts-config.xml), die das Verhalten des Servlets beschreibt, indem Aktionen definiert werden. Jede Aktion legt für einen eingehenden HTTP-Request fest, welche ActionKlasse (also eine Klasse, die die Action-Klasse erweitert) verantwortlich ist, die gewünschte Aktion des Model auszuführen. Nachdem die Action-Klasse ihre Arbeit erledigt hat, gibt sie einen Wert zurück. Für jeden dieser zurückgegebenen Werte wird festgelegt, welche JSP der View die Antwort für den 46 2.4 Das Framework Struts Client erzeugt. Beim Start der Web-Anwendung wird die Konfigurationsdatei vom Servlet gelesen und das Servlet verhält sich entsprechend. Struts erlaubt es, logische Namen für die Aktionen zu verwenden, an die die Kontrolle weitergeleitet werden soll. Eine Aktion-Methode kann somit nach einer Seite fragen, ohne den tatsächlichen Namen der JSP zu wissen. Im Folgenden wird die Konfigurationsdatei struts-config.xml des Registrierungsvorgangs erläutert. <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="contactFormBean" type="servlets.ContactFormBean"/> </form-beans> <action-mappings> <action path="/actions/signup" type="servlets.SignupAction" name="contactFormBean" scope="session" input="/forms/signup.jsp"> <forward name="missing-value" path="/forms/signup.jsp"/> <forward name=" success" path="/WEB-INF/results/ confirmation.jsp"/> </action> </action-mappings> </struts-config> Innerhalb des <form-beans> Tags können FormBeans deklariert werden. Ein FormBean ist ein Bean, das von Struts automatisch mit dem Inhalt eines Formulars gefüllt wird und von der Klasse ActionForm erbt. Durch das <formbean> Tag wird ein FromBean für die spätere Benutzung in den <action> Tags deklariert. Die Attribute und Methoden des FormBean müssen mit 47 Kapitel 2 Grundlagen den Feldern des Formulars, mit dem das FormBean benutzt wird, überein stimmen. In diesem Fall wird durch die Attribute Folgendes festgelegt: name: type: Der Name mit dem das FormBean in den <action> Tags angesprochen wird. In diesem Fall also ”contactFormBean”definiert durch name=”contactFormBean” Der Name der Klasse des FormBean. In diesem Fall type=”servlets.ContactFormBean”also die Klasse ”servlets.ContactFormBean” Innerhalb des <action-mappings> Tags werden Aktionen definiert, die bei einem bestimmten Requests ausgeführt werden. Durch das <action> Tag wird eine Aktion definiert. In diesem Fall wird durch die Attribute Folgendes festgelegt: path: type: name: scope: input: Beschreibt für welchen Request die Aktion verantwortlich ist. In diesem Fall durch path=”/actions/signup”ein Request für die Seite http://domain/anwendung/actions/signup.do, wobei das ”.do”implizit angehängt wird. Beschreibt durch Instanzen welcher Klasse der Request bearbeitet werden soll. In diesem Fall type=”servlets.SignupAction”also eine Instanz der Klasse servlets.SignupAction. Der Name eines in den <form-beans> Tags deklarierten Bean. In diesem Fall durch name=”contactFormBean”das oben deklarierte Bean. Die Gültigkeitsdauer des Beans. In diesem Fall durch scope=”session”hat das Been die Gültigkeitsdauer einer Session. Die Adresse der JSP, welche eine Input-Form enthält. In diesem Fall input=”/forms/signup.jsp”also die JSP signup.jsp. Durch die <forward> Tags wird festgelegt, welche JSP aufgerufen werden sollen. Das Action-Objekt, das den Request bearbeitet gibt ein Ergebnis zurück. Abhängig von diesem Ergebnis, können verschiedene JSP die Antwort für den Client erzeugen. 48 2.4 Das Framework Struts name: path: Beschreibt bei welchem durch das Objekt zurückgegebene Ergebnis die JSP aufgerufen wird. Für name=”missingvalue”wird die JSP aufgerufen wenn SignupAction ”missing-value”zurück gibt. Beschreibt welche JSP aufgerufen werden soll, wenn das entsprechnde Ergebnis zurückgegeben wurde. Für path=”/forms/signup.jsp”wird die JSP signup.jsp aufgerufen. 2.4.4 Das Model Die Komponenten Action und Business Objects bilden das Model. Die ActionObjekte werden mit dem Controller der Anwendung verbunden und haben auf diese Weise Zugriff auf die Methoden des Servlets. Wenn die Kontrolle vom Controller an ein Action-Objekt weitergegeben wird, kann das ActionObjekt auf ein im Controller deklariertes ActionForm-Bean zugreifen und so Informationen weiterleiten. Ein Action-Objekt kann auch Objekte erzeugen und sie in einer der von Servlets verwendeten Session-Collections ablegen. Da jeder Client seine eigene Session hat, hat jeder Client auch sein eigenes Bean. Innerhalb der Session eines Clients kann aber auf das selbe Bean zugegriffen werden. Die folgende von der Klasse Action erbende Klasse SignupAction.java überprüft, ob das Eingabefeld firstName leer ist. Für diesen Fall erzeugt sie eine Nachricht in einem Bean und gibt missing-value zurück. Für den Fall, dass das Eingabefeld nicht leer ist, wird success zurückgegeben. package servlets; import javax.servlet.http.*; import org.apache.struts.action.*; public class SignupAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ContactFormBean userBean = (ContactFormBean)form; String firstName = userBean.getFirstName(); 49 Kapitel 2 Grundlagen if ((firstName==null) || (value.trim().equals(""))) { makeWarning(request, "first name"); return(mapping.findForward("missing-value")); } return(mapping.findForward("success")); } protected void makeWarning(HttpServletRequest request, String message) { HttpSession session = request.getSession(); ContactFormBean contactFormBean = (ContactFormBean) session.getAttribute("contactFormBean"); contactFormBean.setWarning(message); } } Die Klasse muss von der Klasse Action erben damit sie mit dem Controller verbunden werden kann. Außerdem muss die execute Methode überschrieben werden, die aufgerufen wird, wenn der Controller die Kontrolle an eine Instanz der Klasse weitergibt. Über die an die Methode übergebenen Parameter kann eine Instanz der Klasse auf Controller und View zugreifen. public class SignupAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { Die im Controller innerhalb des <action> Tag definierte Aktion ist sowohl mit der Klasse SingupAction als auch mit einem ContactFormBean verbunden. Deshalb ist die übergebene ActionForm vom Typ ContactFormBean und kann auf ContactFormBean ”gecastet”werden. Auf das so erhaltene ContactFormBean kann normal zugegriffen werden. ContactFormBean userBean = (ContactFormBean)form; String firstName = userBean.getFirstName(); 50 2.4 Das Framework Struts Der erhaltene String wird darauf getestet, ob er leer ist. Für diesen Fall wird die Methode makeWarning aufgerufen und missing-value zurückgegeben. Für den Fall, dass der String nicht leer ist, wird success zurückgegeben. if ((firstName==null) || (value.trim().equals(""))) { makeWarning(request, "first name"); return(mapping.findForward("missing-value")); } return(mapping.findForward("success")); Die makeWarning Methode benötigt als Parameter nur den request. Damit kann das oben bereits benutze ContactFormBean erfragt werden und Methoden des Beans aufgerufen werden. Auf diese Weise könnte auch auf andere Objekte der Session zugegriffen werden (in diesem Fall hätte das ContactFormBean natürlich auch direkt übergeben werden können). protected void makeWarning(HttpServletRequest request, String message) { HttpSession session = request.getSession(); ContactFormBean contactFormBean = (ContactFormBean) session.getAttribute("contactFormBean"); contactFormBean.setWarning(message); } Die Business Objekte liegen außerhalb des Struts Framework. Sie führen in der Regel Zugriffe auf Datenbanken oder die Berechnung von Funktionen durch. Da sie auf Java-Klassen basieren, kann alles implementiert werden, zu dem Java in der Lage ist. Auf Objekte der Komponente wird durch die Action-Objekte zugegriffen. 2.4.5 Die View Die View wird durch die Komponenten JSP, Tag Libraries und Action Form gebildet. Die Komponente JSP wird durch Java-Server-Pages gebildet. Die Komponente Tag Libraries ist die Tag-Bibliothek von Struts die innerhalb der JSP benutzt werden kann. Die Komponente Action Form wird durch Beans gebildet, die von der Klasse ActionForm erben und den Umgang mit Formularen erleichtern. 51 Kapitel 2 Grundlagen Java-Server-Page Eine JSP generiert eine Ausgabe, die als Response an den Benutzer weitergeleitet wird. In der Regel handelt es sich bei der Ausgabe um eine HTML-Seite. In diesem Beispiel wird beim Aufruf der JSP http://domain/anwendung/actions/signup.jsp eine HTML-Seite erzeugt, die ein Formular enthält. Die Felder des Formulars werden mit dem Inhalt des in struts-config.xml unter dem Namen contactFormBean deklarierten ActionForm-Bean gefüllt. Außerdem wird das Attribut warning des contactFormBeans ausgegeben. Der Inhalt der JSP ist wie folgt: <!DOCTYPE ...> <HTML> <HEAD><TITLE>Sign Up</TITLE></HEAD> <BODY> <H1 ALIGN="CENTER">Sign Up</H1> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <html:form action="/actions/signup"> <bean:write name="contactFormBean" property="warning" filter="false"/> First name: <html:text property="firstName"/><BR> Last name: <html:text property="lastName"/><BR> Email address: <html:text property="email"/><BR> <html:submit value="Sign Me Up!"/> </html:form> </BODY> </HTML> Zuerst wird mit HTML-Tags der Titel der Seite und eine Überschrift definiert. Dem Compiler der JSP wird die Position der Tag-Library-Descriptor und mit welchem Präfix sie angesprochen werden bekannt gegeben. In diesem Fall ”html”für die Tags der HTML-Bibliothek und ”bean”für die Tags der Bean-Bibliothek von Struts. <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> 52 2.4 Das Framework Struts Es wird das form-Tag der HTML-Bibliothek benutzt. Mit action=”/actions/signup”wird definiert welche (in struts-config.xml ebenfalls definierte) Aktion durch das Formular ausgelöst werden soll. Die Zeilen: <html:form action="/actions/signup"> <bean:write name="contactFormBean" property="warning" filter="false"/> First name: <html:text property="firstName"/><BR> Last name: <html:text property="lastName"/><BR> Email address: <html:text property="email"/><BR> <html:submit value="Sign Me Up!"/> </html:form> werden in der HTML-Ausgabe zu: <FORM ACTIOM="/actions/signup.do" METHOD="POST"> ... </FORM> Mit dem Tag write aus der Bean-Bibliothek wird der Inhalt des Attributs warning des contactFormBean ausgegeben. Das Bean wird automatisch neu erzeugt,wenn es noch nicht existiert. Existiert bereits ein Bean für den aktuellen Kontext wird dies genutzt. Mit dem Attribut filter kann festgelegt werden, dass der Inhalt des auszugebenden Attributs nicht gefiltert werden soll. Normalerweise werden Zeichen wie < durch &lt; ersetzt. Verhindert werden kann dies durch filter=”false”. <bean:write name="contactFormBean" property="warning" filter="false"/> Mit dem text-Tag aus der HTML-Bibliothek können Eingabefelder definiert werden. Da die property Attribute mit den Attributen des ActionForm-Bean ContactFormBean übereinstimmen, werden sie miteinander verbunden. Die Zeilen: First name: <html:text property="firstName"/><BR> Last name: <html:text property="lastName"/><BR> Email address: <html:text property="email"/><BR> werden in der HTML-Ausgabe zu Folgendem: 53 Kapitel 2 Grundlagen First name: <INPUT TYPE="TEXT" NAME="firstName" VALUE="firstName"><BR> Last name: <INPUT TYPE="TEXT" NAME="lastName" VALUE="lastName"><BR> Email address: <INPUT TYPE="TEXT" NAME="email" VALUE="email"><BR> Wobei firstName, lastName und email durch den Inhalt der jeweiligen Beans ersetzt werden. Die generierte HTML-Seite wird im Browser des Clients wie folgt dargestellt: Abbildung 2.15: Die erzeugte HTML-Seite ActionForm-Bean Die in der Instanz des ContactFormBean vorliegenden Informationen werden automatisch in die HTML-Seite eingetragen. Der Inhalt des Formulars 54 2.4 Das Framework Struts wird beim Absenden des Formulars automatisch in die Instanz des ContactFormBean übernommen. Der Quelltext der ContactFormBean Klasse ist wie folgt: package servlets; import org.apache.struts.action.*; public class ContactFormBean extends ActionForm { private String firstName = "First name"; private String lastName = "Last name"; private String email = "user@host"; private String warning = ""; public String getFirstName() {return(firstName);} public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() {return(lastName);} public void setLastName(String lastName) { this.lastName = lastName; } public String getEmailAddress() {return(emailAddress);} public void setEmailAddress(String emailAddress) { this.emailAddress = emailAddress; } public String getWarning() { return(warning); } public void setWarning(String baseWarning) { this.warning ="Missing " + baseWarning + "<BR>"; } } Das Beispiel für den Registrierungsvorgang ist nun komplett und sollte leicht zu erweitern sein, indem die besprochenen Dateien genutzt werden. Allgemein bietet es sich an, eine vorhandene Struts Anwendung (wie das besprochene Beispiel) zu verändern, um neue Anwendungen zu erstellen. Für die einfache Bnutzung von Struts bietet es sich an zusätzlich ein Plugin für die Entwicklungsumgebung seiner wahl zu installieren [11]. 55 Kapitel 2 Grundlagen 2.4.6 Das Validator Plugin Häufig ist es notwendig, nur bestimmte Benutzereingaben in Formularen zu erlauben. Struts bietet hierfür die Möglichkeit, Eingaben des Benutzers bereits auf dem Client zu prüfen. Hierfür wird das Validator Plugin genutzt, welches JavaScript in die generierte HTML-Seite einfügt. Das Plugin einbinden Um das Plugin einzubinden, müssen die folgenden Zeilen in die Konfigurationsdatei struts-config.xml eingefügt werden: ... <plug-in className= "org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value= "/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/> </plug-in> ... Regeln für die Validierung In der XML-Datei ”validator-rules.xml”werden Regeln für die Validierung definiert. Struts liefert einige Regeln, die genutzt werden können, bereits mit. In der XML-Datei ”validation.xml”wird beschrieben, welche Eingaben für die Formularfelder gültig sind. <form-validation> <formset> <form name="contactFormBean"> <field property="firstName" depends="required"> <arg0 key="name.displayname"/> </field> </form> </formset> </form-validation> 56 2.5 Lernen von Entscheidungsbäumen und Assoziationsregeln 2.5 Lernen von Entscheidungsbäumen und Assoziationsregeln von Sebastian Heisecke 2.5.1 Einleitung In der heutigen Zeit ist es durch die Technik, Automatisierung und Computer möglich, Unmengen von Informationen zu erheben, zu sammeln und zu speichern. Durch diese täglich immer größer werdende Informationsflut wird es für den Anwender immer schwieriger seine gesuchte Information zu finden, oder überhaupt einen Überblick über die Daten zu erhalten. Zusammenhänge oder Gesetzmäßigkeiten lassen sich noch viel schwieriger aus den Daten herausfiltern. Deswegen verwendet man Data Mining, welches durch Techniken des maschinellen Lernens ein besseres Verständnis von großen Datenmengen ermöglicht, wobei auch Gemeinsamkeiten und Beziehungen zwischen Daten bzw. Attributen verdeutlicht werden. Entscheidungsbäume und Assoziationsregeln sind essentielle Bestandteile des Data Mining, wobei dieses besonders häufig bei der Warenkorbanalyse eingesetzt wird, da besonders Beziehungen und Gemeinsamkeiten von gekauften Gegenständen interessieren, um mit Kundenprofile den Umsatz durch gezielte Werbung zu erhöhen. Ein bekanntes Beispiel ist die Internetbuchhandlung Amazon, da hier nach einem Buchkauf, eine Empfehlung von Büchern ausgesprochen wird, die von Kunden stammt, die das gleiche Buch gekauft haben. 57 Kapitel 2 Grundlagen 2.5.2 Grundlagen Entscheidungstabellen Eine Entscheidungstabelle ist die einfachste und elementarste Darstellung von Daten, die sowohl als Ein- als auch als Ausgabe für das Data Mining genutzt werden kann. Die unten angegebene Tabelle gibt anhand von Wetterdaten darüber Auskunft, ob zum Beispiel ein Fußballspiel gespielt werden kann oder nicht. Hierbei sind die Wetterdaten die Attribute, welche in den ersten vier Spalten zu erkennen sind. Eine Zeile der Tabelle enthält für jedes Attribut einen Wert und ordnet diese Attributkombination einer Klasse zu, die in Spalte fünf angegeben wird. Die Klasse gibt über die Entscheidung Auskunft, ob ein Spiel stattfindet oder abgesagt wird. Im Beispiel mit den Wetterdaten wären 36 Attributkombinationen möglich, von denen 14 in der Entscheidungstabelle aufgeführt sind. Abbildung 2.16: Entscheidungstabelle für die Wetterdaten Entscheidungsbäume Ein elementarer Bestandteil des maschinellen Lernens sind Entscheidungsbäume. Im Gegensatz zu Entscheidungstabellen bieten sie eine strukturierte Beschreibung von Daten, die für viele Aufgabenstellungen eine leichter verständliche Darstellung der zugehörigen Regeln ermöglichen, da Bäume gut visualisiert werden können. Beim Data Mining dienen Entscheidungsbäume zur Bestimmung der Klassenzugehörigkeit von Daten, wobei ein zu klassifizierender Datensatz von der Wurzel bis zu einem Blatt den Baum durchläuft. An jedem Knoten wird ein bestimmtes Attribut überprüft und abhängig vom Ergebnis entweder der linke oder rechte Sohn zur weiteren Überprüfung gewählt. babei wird ein Attribut meistens mit einem Konstanten Wert verglichen (größer, gleich, kleiner) was eine ja/nein Entscheidung liefert. Knoten können auch mehrfache Verzweigungen aufweisen, wenn zum Beispiel das Attribut numerisch ist. Bei einem Vergleich von kleiner, gleich und größer würde zum Beispiel eine Dreifachverzweigung entstehen. Ebenso wenn Intervalle, wie zum Beispiel unterhalb, innerhalb und oberhalb, verglichen 58 2.5 Lernen von Entscheidungsbäumen und Assoziationsregeln werden. Auch wenn man das Fehlen eines Wertes als eigenständigen Attributwert aufnimmt, ergibt sich eine Anzahl von Verzweigung die größer als zwei ist. Wenn die Instanzen eines Datensatzes von ihrem Weg beginnend bei der Wurzel ihre jeweiligen Blätter erreicht haben, so ist dieser Datensatz klassifiziert worden, da die Instanzen den Klassen der jeweiligen Blätter zugeordnet werden können. Ferner ist es auch ohne große Umstände möglich, einen Entscheidungsbaum in eine Regelmenge umzuwandeln, was im Anschluss präzisiert wird. Ein weiterer elementarer Bestandteil des maschinellen Lernens sind Klassifi- Abbildung 2.17: Entscheidungsbaum für die Wetterdaten kationsregeln. Ein weiterer Vorteil von Regeln ist die Tatsache, das jede einzelne Regel als eine Art unabhängiger ”Wissens-Baustein” betrachtet werden kann. Zudem sind bereits vorhandene Regelmengen leicht erweiterbar ohne die existierenden Regelen zu verfälschen, wohingegen eine Erweiterung der Baumstruktur diese unbrauchbar machen kann. In Abschnitt 2.1 wurden bereits die Entscheidungstabellen vorgestellt, wobei aus diesen direkt Klassifikationsregeln abgelesen werden können. Nimmt man zum Beispiel die erste Zeile der Entscheidungstabelle und verknüpft die Attribute mit einem ”und”, dann erhält man eine Regel, die diese Werte der Attribute einer Klasse zuordnet und somit klassifiziert. Wenn also alle booleschen Bedingungen den Wert ”true” zurückgeben, gilt die Regel. 59 Kapitel 2 Grundlagen Die Bedingungen in den Regeln werden somit immer mit ”und” Verknüpft, während die Regeln selber per ”oder” Verknüpft werden. Beispiel 1. If outlook = sunny and temperature = hot and humidity = high and windy = false then play = no Diese Klassifikationsregel ist zwar korrekt, bietet aber kaum einen Vorteil gegenüber der Entscheidungstabelle. Sollte es allerdings möglich sein einige Attribute aus der Regel zu streichen, können mehrere Zeilen der Entscheidungstabelle durch eine Klassifikationsregel dargestellt werden. Lässt man aus obiger Regel temperature und windy wegfallen, erhält man eine Klassifikationsregel die neben der ursprünglichen Kombination von Attributwerten auch die Zeile 2 und 8 der Entscheidungstabelle richtig klassifiziert. Beispiel 2. If outlook = sunny and humidity = high then play = no Es muss aber beachtet werden, das je mehr Bedingungen in einer Regel weggelassen werden, die Gefahr steigt, dass einige Instanzen falsch klassifiziert werden. Klassifikationsregeln lassen sich aber auch anders erzeugen, indem ein Entscheidungsbaum in eine Regelmenge umgewandelt wird. Dies wird erreicht indem für jedes Blatt des Baumes eine Regel angelegt wird. Die Bedingungen der einzelnen Regeln erhält man, indem man den Baum von der Wurzel bis zum gewünschten Blatt durchläuft und jeden Knoten der auf diesem Pfad liegt als neue Bedingung in die Regel aufnimmt. Das Blatt bestimmt dann die Klasse, der die Attributkombination zugeordnet werden können. Die einzelnen Regeln werden mit oder verknüpft, sodass der Regelblock den Baum ersetzen kann. Ein Nachteil dieser Methode ist jedoch, dass die Regeln die aus Bäumen erzeugt wurden meistens komplizierter als nötig sind. Dafür können keine Regeln auftreten die der gleichen Instanz unterschiedliche Klassen zuordnen, weil die Redundanz in der Regelstruktur Mehrdeutigkeiten bei der Interpretation verhindert. Auch wird bei aus Bäumen abgelesenen Regeln jede Instanz wirklich klassifiziert. Klassifikationsregeln sind ein elementarer Bestandteil des Data Mining, da sie die Grundlage für die Assoziationsregeln bilden und somit erst das maschinelle Lernen und das Vorhersagen von Attributwerten ermöglichen. Assoziationsregeln Wie zuvor schon erwähnt sind Assoziationsregeln verwandt mit den Klassifikationsregeln. Der einzige Unterschied besteht darin, dass nicht nur Klassen, 60 2.5 Lernen von Entscheidungsbäumen und Assoziationsregeln sondern auch beliebige Attributwerte und Attributkombination vorhergesagt werden können. Somit dienen Assoziationsregeln der Darstellung verschiedener Regelmäßigkeiten, die in der Datenmenge zu finden sind. Sie sagen im Allgemeinen unterschiedliche Attributkombinationen voraus, so dass wesentlich mehr Assoziationsregeln als Klassifikationsregeln aus einem Datensatz erzeugt werden können. Zur Veranschaulichung dienen die bereits bekannten Wetterdaten zur Beurteilung, ob gespielt werden kann oder nicht. Die folgenden Beispiele sind besonders gut, weil sie für die gesamten Trainingsdaten zutreffen: Beispiel 3. If temperature = cool then humidity = normal Beispiel 4. If outlook = sunny and play = no then humidity = high Beispiel 5. If windy = false and play = no then outlook = sunny and humidity = high Assoziationsregeln ermöglichen durch das Aufdecken von Regelmäßigkeiten das Vorhersagen von Attributwerten. Wie das Beispiel 2.4.1 zeigt, tritt, immer wenn temperature = cool ist, humidity = normal auf. Somit kann man bei einem anderen Datensatz, wo der Wert des Attributs humidity fehlt, aber der Wert des Attributs temperature = cool ist, diesen fehlenden Wert, nämlich humidity = normal, hinzufügen. Die Beispiele 2.4.2 und 2.4.3 zeigen, das auch Attributkombinationen zur Vorhersage genutzt, aber auch selbst vorhergesagt werden können. Somit lassen sich auch mehrere Assoziationsregeln zu einer komplexeren zusammenfassen oder, wie Beispiel 2.3.2 und 2.4.2 zeigen, können auch häufig die Attribute innerhalb der Regel umgestellt werden. Bei Letzteren ist immer Vorsicht geboten und sollte stets anhand der Trainingsdaten validiert werden. Bei den zuvor gezeigten Beispielen wurde bereits erwähnt, dass diese zu 100 Prozent in Bezug auf die Trainingsdaten korrekt sind. Dies wird bei Assoziationsregeln als Genauigkeit bezeichnet. Die Genauigkeit ist die Anzahl der Instanzen, die sie korrekt vorhersagt, ausgedrückt als Proportion aller Instanzen, auf die sie angewendet wird. Anzahl der richtig klassifizierten Instanzen Genauigkeit = Anzahl aller Instanzen 61 Kapitel 2 Grundlagen 2.5.3 Algorithmen Algorithmus zum Erzeugen von Entscheidungsbäumen Der Algorithmus zum Erzeugen von Entscheidungsbäumen baut auf dem ”Teil- und Hersche” Verfahrensprinzip auf und ist einer der wesentlichen Bestandteile des Data Mining, da dieser Algorithmus in der Lage ist Entscheidungsbäume aufzubauen. Es folgen nun die einzelnen Schritte zum Aufbau eines Entscheidungsbaumes. Am Anfang steht die Wurzel des Baumes, so dass ein Attribut als Wurzelknoten ausgewählt werden muss. Die Werte, die das Attribut annehmen kann, bilden die Verzweigungen, die vom Wurzelknoten ausgehen. Es stellt sich als erstes die Frage, welches der Attribute am besten als Wurzelknoten geeignet ist. Auf das Beispiel mit den Wetterdaten aus den vorherigen Kapiteln angewendet bedeutet dies, dass es vier Attribute und somit vier potentielle Wurzelknoten gibt. In Abbildung 3.1.1. sind diese abgebildet, wobei die Blätter die yes- und no-Klassen darstellen. Treten entweder nur yes- oder no-Klassen in einem Blatt auf, braucht dieses nicht weiter unterteilt zu werden. Um beurteilen zu können welches Attribut die reinsten Unterknoten erzeugt, benötigen wir ein Maß, welches dieses angibt. Hierzu wird das Informationsmaß eingeführt, welches in bits gemessen wird. Bits sind nicht mit der Speichereinheit bit zu verwechseln, da das Informationsmaß häufig Werte zwischen 0 und 1 annimmt. Die Einzelheiten zur Berechnung folgen im nächsten Abschnitt. Rechnet man nun für jede Verzweigung des Wurzelknotens aus Abbildung 3.1.1 das Informationsmaß aus, so ist man in der Lage das durchschnittliche Informationsmaß für den Wurzelknoten auszurechnen. Berechnet man ebenfalls das Informationsmaß der unstrukturierten Trainingsdaten, ist es auch noch möglich den Informationsgewinn auszurechnen. Dazu wird das Informationsmaß des Wurzelknoten vom Informationsmaß der unstrukturierten Trainingsdaten subtrahiert. Anhand des Maßes für den Informationsgewinn, lassen sich nun die verschiedenen Attribute auf ihre Fähigkeit als Wurzelknoten beurteilen. Das Attribut mit dem höchsten Informationsgewinn bildet den Wurzelknoten. Die Werte, die das Attribut annehmen kann bilden die Verzweigungen. Im folgenden Beispiel wurde outlook als Zerlegungsattribut für die Baumwurzel ausgewählt. Damit sind die Trainingsdaten in Untermengen zerlegt, eine für jeden Wert, den das Attribut outlook annehmen kann. Diese eben beschriebene Vorgehensweise kann rekursiv für jede Verzweigung ausgeführt werden, wobei nur jene Instanzen verwendet werden, die die Verzweigung auch erreichen. 62 2.5 Lernen von Entscheidungsbäumen und Assoziationsregeln Abbildung 2.18: Auswahl des Wurzelknoten Da eine erneute Zerlegung nach outlook keinen Sinn ergibt, werden nur noch die drei restlichen Attribute berücksichtigt. Abbildung 3.1.2 zeigt die möglichen Tochterknoten vom Wurzelknoten für den Attributwert outlook = sunny. Es wird wieder der Informationsgewinn ausgerechnet und mit diesem das Attribut für den Knoten ausgewählt. In diesem Fall ist es humidity. Mit diesem Schritt ist der sunny-Zweig abgearbeitet, weil in den TöchterKnoten des Knotens humidity alle Instanzen dieselbe Klasse, hier also yes bzw. no, aufweisen. Laut Teile und Herrsche Algorithmus zeigt dies das Ende der Konstruktion eines Baumabschnittes an. Auch der overcast-Zweig ist schon abgearbeitet, da er von Anfang an rein war und nur yes-Klassen enthält. Als letztes muss der rainy-Zweig abgearbeitet werden. Wendet man nun wieder den Algorithmus rekursiv auf den rainy-Zweig an, so erhält man den in Abbildung 2.2.1 gezeigten Entscheidungsbaum. In der Praxis kommt der Idealfall reine Knoten zu haben, um somit ein Blatt bilden zu können, nur sehr selten vor. Somit ist es schwer die Abbruchbedindgung zuerreichen, damit der Algorithmus terminiert. In der Theorie wird der Prozess beendet, wenn die Daten nicht weiter zerlegbar sind. In der Praxis wird mit Prunning diese Problem bewältigt. 63 Kapitel 2 Grundlagen Abbildung 2.19: Auswahl des Tochterknoten Informationsmaß Das Informationsmaß ist das entscheidene Maß für den Teile und Hersche Algorithmus, da es eine Aussage über die Eignung von verschiedenen Attributen als Knoten ermöglicht. Wie zuvor erwähnt wird das Informationsmaß in bits gemessen und nimmt Werte zwischen 0 und 1 an. Es wird mit Hilfe der Entropie berechnet, welche mit dem Logarithmus zur Basis 2 arbeitet. Folgende Formel gibt die Berechnung des Informationsmaßes für eine Datenmenege mit drei Klassen an. Wobei p,q,r für die Anzahl der Instanzen, die zu dieser Klasse gehören steht. Die Formel ist für weniger oder mehr Klassen einfach erweiterbar. Beispiel 3.2.1 zeigt die Berechnung für zwei Klassen bei den Wetterdaten. Beispiel 3.2.2 hingegen veranschaulicht die Bedeutung des Informationsmaßes innerhalb des Algorithmus zur Erzeugung von Entscheidungsbäumen. Formel 3.2.1 info([p,q,r]) = entropy(p / (p + q + r), q / (p + q + r), r / (p + q + r)) = [- p log p - q log q - r log r + (p + q + r) log (p + q + r)] / (p + q + r) Beispiel 3.2.2 Info(2,3) = (-2 log 2 – 3 log 3 + 5 log 5) / 5 = 0,971 64 2.5 Lernen von Entscheidungsbäumen und Assoziationsregeln Abbildung 2.20: Informationsmass 65 Kapitel 2 Grundlagen Der Abdeckungs-Algorithmus Für die Konstruktion von Regelen könnte man natürlich erst einen Entscheidungsbaum erzeugen und von diesem dann die Regeln ableiten. Wenn allerdings effiziente Regeln erzeugt werden sollen, ist dieses sehr schwer und bedarf einen großen Aufwand. Deswegen lohnt sich ein alternativer Ansatz: Der Abdeckungs-Algorithmus. Dieser Ansatz basiert darauf, die einzelnen Klassen nacheinander zu betrachten und nach einer Möglichkeit zu suchen, alle darin enthaltenen Instanzen abzudecken und gleichzeitig Instanzen auszuschließen, die nicht zu der Klasse gehören. Der Name Abdeckungs-Algorithmus bezieht sich auf die Eigenschaft, dass in jedem Schritt eine Regel abgeleitet wird, die einige der Instanzen abdeckt. Zum besseren Verständnis des Abdeckungsalgorithmus soll Abbildung 3.3.1 dienen, da in einem zweidimensionalen Instanzenraum der Abdeckungs Algorithmus graphisch dargestellt werden kann. Es wird eine Regel gesucht, die alle a’s abdeckt und die b’s ausschließt. Als erstes wird eine vertikale Zerlegung des Instanzenraumes durch die Regel if x > 1.2 then class = a vorgenommen. Durch diese Regel werden neben allen a’s aber auch noch fünf b’s abgedeckt, so dass der Regel noch eine Bedingung hinzugefügt werden muss, um eine 100 prozentige Abdeckung zu erreichen. Indem eine horizontale Zerlegung vorgenommen wird, ist es mit der Regel if x > 1.2 and y > 2.6 then class = a möglich alle a’s abzudecken und die b’s auszuschließen. Natürlich lässt sich der Algorithmus auch allgemein gültig beschreiben. Der Abbildung 2.21: Darstellung des Abdeckungsalgorithmus Algorithmus ergänzt jede Regel solange mit Bedingungen bis ihre Genauigkeit 100 Prozent erreicht. Die Genauigkeit berechnet sich aus p, der Anzahl der positiven Beispiele die die Regel richtig abdeckt, dividiert durch t, der 66 2.5 Lernen von Entscheidungsbäumen und Assoziationsregeln Anzahl der Instanzen die die Regel insgesamt abdeckt. Wenn p = t ist, beträgt die Genauigkeit 100 Prozent, da die Anzahl der Instanzen auf die die Regel zutrifft gleich der Zahl der Instanzen ist, die die Regel abdeckt. Der Algorithmus iteriert mit der äußeren Schleife über alle Klassen, es werden also nacheinander für jede Klasse Regeln erzeugt, die die Beispiele dieser einen Klasse abdecken. Bei jedem Schleifendurchlauf werden die Trainingsdaten bzw. die Instanzmenge neu initialisiert, mit einer leeren Regel, die noch alle Beispiele der Trainingsdaten abdeckt. Diese wird durch eine Bedingung erweitert, so dass möglichst viele positive Beispiele der Klasse durch die Regel abgedeckt werden. Daher wird die Bedingung gewählt, die das Verhältnis p/t maximiert. Die Beispiel die durch die Regel abgedeckt werden, werden aus der Beispielmenge entfernt. Nach der gleichen Vorgehensweise wie zuvor, werden weitere Bedingung der Regel hinzugefügt, bis ihre Genauigkeit 100 Prozent erreicht, also alle positive Beispiele abgedeckt sind, aber auch nur diese. Wenn die Regel für eine Klasse korrekt erstellt worden ist, geht der Algorithmus zur nächsten Klasse. Da zuvor die positiven Bespiele der vorherigen Klasse entfernt worden sind, muss der Instanzenraum neu initalisiert werden. Algorithmus zur Erzeugung von Assoziationsregeln Es stellt sich noch die Frage wie man Assoziationsregeln erzeugt. Da bereits bei kleinen Datenmengen Unmengen von Assoziationsregeln möglich sind, interessieren nur Assoziationsregeln, die eine hohe Abdeckung aufweisen. Es wird nun nicht mehr zwischen linker und rechter Regelseite unterschieden, sondern nach Kombinationen von Attribut-Wertepaaren gesucht, die eine vorgegebene Mindestabdeckung von Instanzen aufweisen. Diese Kombinationen werden auch als Gegenstandsmengen bezeichnet, da ein Attribut-Wertepaar ein Gegenstand ist. Die Bezeichnung leitet sich aus der Warenkorbanalyse ab, wo nach Assoziationen zwischen Gegenständen, sprich den gekauften Artikel, gesucht wird. Der Algorithmus zur Erzeugung von Assoziationsregeln arbeitet in zwei Phasen, wobei in der ersten Phase Gegenstandsmengen mit einer geforderten Mindestabdeckung erzeugt werden. Dies erreicht man, indem bei jeder Operation die Datenmenge durchlaufen wird, um die Gegenstände in jeder Menge zu zählen. Diese nach einem Durchlauf entstanden Gegenstandsmengen, werden in einer Tabelle gespeichert, wie es in Abbildung 3.4.1 in der ersten Spalte zu erkennen ist. Aus diesen so genannten Ein-Gegenstandsmengen (da sie einen Gegenstand enthalten) lassen sich nun potentielle Zwei-Gegenstandsmengen durch Kombination von Ein-Gegenstandsmengen erzeugen. Dabei ist zu beachten, dass 67 Kapitel 2 Grundlagen Attribute des gleichen Typs mit unterschiedlichen Werten nicht kombiniert werden dürfen, da so etwas in der realen Welt nicht existiert. Diese ZweiGegenstandsmengen müssen nun noch auf ihre Abdeckung bezüglich der Datenmenge überprüft werden, wobei die Zwei-Gegenstandsmengen, die die Mindestabdeckung nicht erfüllen aus der Tabelle gelöscht werden. So erhält man die zweite Spalte in Abbildung 3.4.1. Iterativ ist es möglich, aus den Zwei-Gegenstandsmengen nach der zuvor beschriebenen Arbeitsweise Drei-Gegenstandsmengen usw. zu erzeugen. Für dieses Beispiel ist damit die erste Phase des Algorithmus zur Erzeugung von Assoziationsregeln abgeschlossen. Allgemein gilt, dass nur aus Gegenstandsmengen die bereits die Mindestabdeckung erfüllen, höherwertige Gegenstandsmengen generiert werden können, die auch die Mindestabdeckung erfüllen. Ferner können keine Gegenstandsmengen erzeugt werden, die mehr Gegenstände aufweisen, als es Attribute in der Datenmenge gibt, da sonst zwangsläufig Gegenstände mit unterschiedlichen Werten eines gleichen Attributs in einer Gegenstandsmenge existieren würden. In unserem Beispiel ist somit die Vier- Gegenstandsmenge die höchst mögliche Gegenstandsmenge. In der zweiten Phase des Algorithmus zur Erzeugung von Assoziations- Abbildung 2.22: Gegensandstabelle der Wetterdaten regeln werden aus jeder Gegenstandmenge die Regeln mit der geforderten Mindestabdeckung herausgefiltert. Um Regeln zu erzeugen, die nur eine Auswertung auf der rechten Seite haben, ist es ausreichend, eine Bedingung nach der anderen als Schlussfolgerung der Regel in Betracht zu ziehen, sie aus der Gegenstandsmenge zu entfernen und die Abdeckung der gesamten Gegenstandsmenge durch die Abdeckung der resultierenden Teilmengen zu teilen, so dass das Ergebnis die Genauigkeit der Regel angibt. Möchte man Regeln mit Mehrfachauswertungen, wäre es äußert Rechenintensiv zu überprüfen, welche Wirkung es hat, jede Teilmenge der Gegenstandsmenge auf die rechte Seite der der Regel zu stellen und den Rest der Menge als Bedingungen stehen zu lassen. Dies wäre zwar die logische Vorgehensweise, ist aber, außer bei kleinen Datenmenge, zu aufwändig. Deswegen ist es günstiger, Regeln mit einfachem Schluss, die wie eben gezeigt leicht erzeugt werden können, zu potentiellen Regeln mit doppeltem Schluss umzuformen. Regeln mit doppeltem Schluss lassen sich zu potentiellen Regeln mit dreifachem Schluss umformen. Im Prinzip handelt es sich um die gleiche Vorgehensweise wie beim Erzeugen der potentiellen Gegenstandsmengen. Natürlich muss jede potentielle Regel mit der Tabelle abgeglichen 68 2.5 Lernen von Entscheidungsbäumen und Assoziationsregeln werden, um sicher zugehen, dass die Forderung nach einer bestimmten Mindestgenauigkeit erfüllt wird. Dies ist aber weniger aufwändig, als die Regeln durch die zuvor angedeutete Brute-Force-Methode zu erzeugen. 69 Kapitel 2 Grundlagen 2.5.4 Optimierung Prunning Wie bereits erwähnt ist es selten, dass ein Blatt zu 100 Prozent rein ist und somit die gewünschte Abbruchbedingung liefert. Häufig ist es deshalb sinnvoll, schon früher aufzuhören oder nachträglich den Baum zu bescheiden, auch Prunning genannt. Man unterscheidet zwischen pre-, also beschneiden während des Erzeugen des Baumes, und post-prunning, beschneiden nach Erstellen des Baumes. Bei Pre-Prunning läßt sich vorher nicht abschätzen, ob dies eine Verbesserung mit sich bringt, da zum Beispiel Knoten, die mit dem zu beschneidenen Knoten im Zusammenhang stehen, erst später dem Baum hinzugefügt werden können. Damit besteht die Gefahr des Informationsverlusts, wenn man den Knoten beschneidet. Deswegen steht auch das Post-Prunning im Vordergrund. Beim Post-Prunnig wird zuerst der Baum vollständig mit dem bekannten Algorithmus zur Erzeugung von Entscheidungbäumen aufgebaut. Erst jetzt beginnt man mit dem Prunning. Zum einem erschweren replizierte Unterbäume, also Bäume die mehrfach an verschiedenen Stellen des Baumes zu finden sind, das Verständis, so dass hiervon einige aus dem Baum entfernt werden können. Wobei aber keine festen Kriterien vorgegeben sind, wann man einen replizierten Unterbaum löschen darf. Hier muss vor allem der Autor darauf achten, ob das Löschen eines replizierten Unterbaumes nicht die Aussagekraft des Baumes zerstört. Zum anderen sind Unterbäume unerwünscht, in denen fast alle Instanzen der gleichen Klasse angehören, aber einige Ausreißer, die zu einer anderen Klasse gehören, somit diesen Unterbaum bedingen. Mit Pruning schneidet man den Unterbaum vom Baum ab und ersetzt diesen dann durch ein Blatt der Klasse, der die Mehrheit der Instanzen des Unterbaumes angehören. Dieses subtree replacement kann man auch automatisch vornehmen lassen, in demman eine Bedingung für das Pruning angibt. Zum Beispiel wenn 99 Prozent aller Instanzen eines Baumes zu einer Klasse gehören und mehr als 100 000 Instanzen vorliegen, so wird der Unterbaum durch ein Blatt erstezt. Natürlich geht Genauigkeit verloren, wenn man Unterbäume aus dem Baum entfernt, aber dadurch wird die Verständlichkeit und Handhabbarkeit um ein beträchtliches erhöht. Ferner lässt sich durch eine Testmenge, die man auf den Baum ansetzt, herausfinden welche Unterbäume ersetzt werden können. Abbildung 4.1.1 zeigt die Vorgehensweise, wobei aber beachtet werden muss, dass in der Realität weit aus mehr Instanzen der Klasse No angehören müssten, um an dieser Stelle ein so genanntes subtree-replacement vorzunehmen. 70 2.5 Lernen von Entscheidungsbäumen und Assoziationsregeln Abbildung 2.23: Subtree-Replacement Evaluation Beim maschinellen Lernen ist es vom besonderen Interesse Zusammenhänge und Gesetzmäßigkeiten zu finden, und Regeln abzuleiten und Vorhersagen treffen zu können. Da man diese Regeln aus relativ kleinen Datensätzen erzeugt, ist es von außerordenlicher Wichtigkeit, seine Ergebnisse zu überprüfen. Denn die Gefahr besteht, das einige Sonderfälle falsche Regeln erzeugt haben können. Zur Überprüfung der Ergebnisse kann man nun die Daten nehmen, die man nicht zum Lernen verwendet hat. Beim Beispiel mit den Wetterdaten hatten wir nur 14 von 36 Instanzen benutzt, so dass die restlichen 22 als Testmenge genutzt werden können. Möchte man Regeln überprüfen, so gibt die Anwendung dieser auf die Testmenge durch ihre Genauigkeit darüber Aufschluß, wie gut die Regeln die Testmenge klassifizieren. Bei Bäumen hingegen wird die Testmenge auch als Prunningmenge bezeichnet. Denn wenn man die Testmenge durch den zuvor erstellten Entscheidungsbaum laufen läßt, können nicht oder kaum benutzte Verzweigungen erkannt werden, die zum Beispiel durch Sonderfälle entstanden sind. Durch Subtree-Replacement können dann die Bäume optimiert werden, um ein höheres Verständnis durch weniger Komplextität zu gewährleisten. 71 Kapitel 2 Grundlagen 2.5.5 Schlusswort In einer Welt in der das Wissen und die Verfügbarkeit von Informationen immer wichtiger werden, steigt auch gleichzeitig die Bedeutung von Data Mining Techniken. Somit sind Entscheidungsbäume und Assoziationsregelen elementarer Bestandteil der heutigen ”digitalen” Gesellschaft geworden. Wobei diese Entwicklung sich im Hintergrund vollzogen hat, denn Data Mining Techniken stellen nur wenig neue Funktionalitäten zur Verfügung, da ihre eigentliche Aufgabe die Analyse, Strukturierung und Veranschaulichung von riesigen Datenmengen ist, die sonst nur schwer oder gar nicht zu handhaben wären. Dies findet vor allem Einsatz bei der Kundenanalyse, wo riesige Datenmengen über das Einkaufsverhalten gesammelt werden und man an Zusammenhängen von gekauften Gegenständen interessiert ist, die so nicht aus der Datenflut abzulesen wären. Die Assoziationsregeln sind vor allem auf der technischen Seite interessant, da durch sie schon bei wenigen vorliegenden Daten Rückschlüsse auf andere Daten ermöglicht werden. Dies ist zum Beispiel bei Amazon zu finden, wo einem nach einem Kauf ein ähnliches Buch vorgestellt wird. Je mehr man kauft und je mehr Daten somit zugrunde liegen, desto besser werden die Schlüsse. Assoziationsregeln sind bei der Implementierung deshalb so beliebt, da sie ganz einfach umzusetzen sind. Ihr Nachteil ist, dass sie für Laien und Außenstehende schwer verständlich sind. Im Gegensatz zu Entscheidungsbäumen, die sich nur schwer implementieren lassen, aber dafür sofort für jeden verständlich sind. Gerade für Präsentationen von Ergebnissen des Data Minings sind sie hervorragend geeignet, denn sie stellen Zusammenhänge, Regeln und die Struktur der Daten für jeden verständlich dar. 72 2.6 Lineare und logistische Regression - Modell und Lernverfahren 2.6 Lineare und logistische Regression - Modell und Lernverfahren von Daniel Meyerholt 2.6.1 Einleitung Für das Data-Mining sind Methoden zur Vorhersage von Werten und zur Klassifizierung von Testdaten sehr wichtig. Sie helfen, Daten einzuordnen und eine gewisse Struktur in diese zu bringen. Regressionsverfahren sind hierbei aus der Statistik anerkannte Verfahren die helfen, numerische Voraussagen zu treffen. Modell- und Regressionsbäume stellen ein maschinelles Lernverfahren dar und helfen die Qualität von Vorhersagen oder Klassifizierungen zu verbessern und zu strukturieren. Als Grundlage für diese Ausarbeitung dienten mir die entsprechenden Kapitel (4.6 und 6.5) aus [?] für die Abschnitte über lineare Regression und Modellbäume. Der Teil über logistische Regression basiert auf einer Veröffentlichung von Rainer Diaz-Bone [?]. 2.6.2 Lineare Regression Grundlagen Die lineare Regression ist ein Verfahren aus der klassischen Statistik, was dazu dient, numerische Voraussagen über eine (abhängige) Variable zu treffen, in dem diese von verschiedenen anderen (unabhängigen) Variablen (bzw. Attributen) geschätzt wird. Sie hat die Prämisse, dass zwischen diesen Variablen und der abhängigen ein linearer Zusammenhang besteht. Das lineare Modell Das lineare Modell eignet sich auch sehr gut dazu, bestimmten numerischen Attributwerten eine numerische Klasse zuzuordnen. Den linearen Zusammenhang beschreibt man durch: x = w0 + w1 a1 + w2 a2 + ... + wk ak x ist die Klasse, k die Anzahl der Attribute, a1 . . . ak die Attributwerte und w0 . . . wk die Gewichtungen für die entsprechenden Attributwerte. w0 kann man sich hierbei als eine Art “y-Achsenabschnitt” vorstellen, wie dies z.B. auch bei einer normalen Geradengleichung der Fall ist. Zur Notation ist es 73 Kapitel 2 Grundlagen sinnvoll, das Attribut a0 einzuführen, das immer den Wert 1 hat. Damit lässt sich die Formel umschreiben zu: x= k X wj aj j=0 Bestimmung der Gewichtungen Nun hängt die Qualität einer solchen Vorhersage offensichtlich sehr stark von der Wahl der Gewichtungen ab. Diese erhält man, indem man eine gewisse Anzahl Trainingsdaten vorliegen hat, deren Klasse bekannt ist, und aus diesen mit Hilfe eines Optimierungsverfahrens geeignete Gewichtungen bestimmt. Die vorhergesagte Klasse für den i. Trainingsdatensatz wird ausgedrückt als: k X (i) wj aj j=0 Die bekannte Klasse des i. Trainingsdatensatzes beschreibt man als x(i) . Y # "# " % ! ! ! ! + $% *+ $ * ' &' & X ) () ( Abbildung 2.24: Trainingsdatensätze Im einfachen Beispiel lässt sich dies durch eine “Punktwolke” wie in Abb. 2.24 darstellen. Die blauen Punkte stellen die Trainingsdatensätze dar, wobei die x-Achse die unabhängige und die y-Achse die entsprechenden abhängigen Werte beschreiben. Es ist schon so zu erkennen, dass zwischen den Daten ein linearer Zusammenhang besteht. 74 2.6 Lineare und logistische Regression - Modell und Lernverfahren Die Gewichtungen bzw. Regressionskoeffizienten müssen nun in einem Verfahren so gewählt werden, dass die vorhergesagte Klasse einer Trainingsinstanz möglichst dicht an der echten Klasse liegt. Diese “Nähe” beschreibt man einfach als Differenz zwischen diesen Werten: x (i) k X − (i) wj aj j=0 In Abb. 2.25 ist dies wieder im einfachen Fall dargestellt, wo es nur eine Gewichtung zu finden galt. Die entstandene Gleichung ist durch die grüne Linie angedeutet. Die rote Linie stellt den zu minimierenden Wert für einen Trainingsdatensatz dar. Y # "# " % ! ! ! ! + $% *+ $ * ' &' X & ) () ( Abbildung 2.25: Trainingsdaten mit gefundener Gleichung In der Praxis verwendet man zur Bestimmung der Koeffizienten die Methode der kleinsten Quadrate. Die Bewertung der Güte einer Koeffizientenkombination erfolgt mit folgendem Ausdruck: n X i=1 x(i) − k X !2 (i) wj aj j=0 Das Ziel ist es also, diese Summe durch geeignete Wahl der Koeffizienten zu minimieren. Abbruchkriterien für Algorithmen, die “gute” Koeffizienten bestimmen könnten sind zum Beispiel ein bestimmter Grenzwert für die Bewertungsfunktion sein oder auch ein sich nicht änderndes Muster in einer Folge von Bewertungen also keine große Besserung durch Veränderung der Koeffizienten. Ein sehr einfaches Verfahren stellt zum Beispiel das Gauss’sche Eliminationsverfahren dar. 75 Kapitel 2 Grundlagen Problematisch ist allgemein bei solchen Verfahren jedoch das Verhalten, wenn die Trainingsdaten viel “Rauschen” bzw. “Ausreißer” beinhalten. In Abb. 2.26 wird deutlich, wie ein solcher Ausreißer (roter Punkt) die Qualität des ganzen Modells verschlechtert. Y # "# " % ! ! ! ! + $% *+ $ * ' &' X & ) () ( - ,- , Abbildung 2.26: Verhalten auf Ausreißer Klassifizierung Die lineare Regression wird auch zum Klassifizieren von Daten in Klassen verwendet. Da sie an sich numerische Werte vorhersagt, die jeden Wert von −∞ . . . + ∞ annehmen können, ist das Klassifizieren so nicht direkt möglich. Eine Möglichkeit ist die sogenannte “lineare Regression mit Mehrfachantworten”. Hier wird ein Regressionsmodell für jede Klasse erstellt, wobei der entstandene Wert zwischen 0 und 1 liegen soll. 0 bedeutet dann “gehört” nicht zu der Klasse” und 1 entsprechend “gehört zu der Klasse”. Die so entstandenen Regressionsfunktionen lassen sich auch als Mitgliedsschaftsfunktionen für jede Klasse auffassen. Hat man nun einen Testvektor, so werden dessen Attribute in jeder dieser Funktionen eingesetzt und dann das Modell ausgewählt, dass den größten Wert (nahe 1) annimmt. Der Testvektor ist dann wahrscheinlich in eben dieser Klasse. Vor- und Nachteile Die Vor - und Nachteile des linearen Regressionsmodells sind gegeneinander abzuwägen. Vorteile sind: 76 2.6 Lineare und logistische Regression - Modell und Lernverfahren • Es ist einfaches Modell, das gut im Rechner umzusetzen ist9 • Bei gesichertem linearen Zusammenhang liefert es qualitativ gute Ergebnisse. Es hat aber auch Nachteile: • Linearer Zusammenhang ist oft nicht gesichert oder praktisch einfach nicht vorhanden. • Hohe Empfindlichkeit gegenüber Ausreißern • Oft ist die Wahrscheinlichkeit für das Auftreten einer Ausprägung interessanter, als die Ausprägung selbst. 2.6.3 Logistische Regression Um diese Nachteile zu behandeln bietet sich die logistische Regression an. Grundlagen Die logistische Regression behandelt nicht die Vorhersage einer numerischen, abhängigen Variablen, sondern gibt eine Eintrittswahrscheinlichkeit eines Ereignisses an. Somit kann die abhängige Variable nur Werte zwischen 0 (“Ereignis tritt nicht ein”) und 1 (“Ereignis tritt ein”) annehmen. Für das Data-Mining ist offensichtlich ein Ereignis wie “Testvektor gehört zu Klasse A” interessant. Folglich braucht man hier für jede mögliche Klasse ein Modell, wie dies bei der linearen Regression mit Mehrfachantworten der Fall ist10 . Grundmodell Die logistische Regressionsgleichung für den einfachen Zwei-Variablen-Fall lautet eα+βxi +ui πi = 1 + eα+βxi +ui 9 Z.B. mit dem Gauss’schen Eliminationsverfahren s. http://home.t-online.de/home/ arndt.bruenner/mathe/scripts/regr.htm 10 Beachte, dass bei der lin. Regr. m. Mehrfachantworten für jede mögliche Klasse jeweils ein Wert zwischen 0 und 1 approximiert wird 77 Kapitel 2 Grundlagen Noch kürzer geschrieben ergibt sich πi = 1 1+ e−(α+βxi +ui ) . πi ist hierbei die EintrittsWahrscheinlichkeit des Ereignisses; α, β, . . . sind ähnlich wie bei der linearen Regression Gewichtungsparameter sog. Grundgesamtheitsparameter. ui ist der stochastische Anteil, der uns nicht weiter interessiert. Da hier mit Wahrscheinlichkeiten gearbeitet wird11 , gibt es folglich auch einen Schätzer für diese Eintrittswahrscheinlichkeit. Dieser Schätzer wird bezeichnet als π̂i = pi = P (Y = 1) im Folgenden nur noch als pi bezeichnet. α, β, . . . sind unbekannt und müssen wie bei der linearen Regression aus den Trainingsdaten geschätzt werden. Diese berechneten Werte werden dann als a, b, . . . notiert und als Logit-Koeffizienten bezeichnet. pi = 1 ea+bxi = a+bx −(a+bx i i) 1+e 1+e Die Schätzung der Logit-Koeffizienten erfolgt in der Praxis meist mit der “Maximum-Likelihood-Methode”. Es ist zu erkennen, dass bei diesem Modell der nicht-lineare Zusammenhang zwischen der abhängigen und einer bzw. mehreren unabhängigen Variablen im Vordergrund steht. Gerade bei Anwendungen in der Ökologie, aber auch anderen Bereichen ist der logistische Zusammenhang interessanter oder sogar als einziger adäquat, da sich hiermit Wachstums- und Sättigungseigenschaften besser ausdrücken lassen. In Abb. 2.27 ist der Verlauf der Funktion für den einfachen Zwei-Variablenfall dargestellt. Bei f (x) ist a = 0 und b = 1; bei g(x) ist a = −20 und b = 5. Die Regressionskurve verläuft immer punktsymmetrisch zum Wendepunkt des Graphen. Es fällt deutlich auf, dass sich extreme x-Werte kaum auf die abhängige Variable auswirken, da der Graph asymptotisch gegen 0 bzw 1 verläuft. Dies ist eine der vorstechenden Eigenschaften der logistischen Regression, da das Modell somit robust gegenüber Ausreißern ist. Die Rolle der Logit-Koeffizienten in einer derartigen Gleichung ist schwer zu beschreiben aufgrund der auftretenden Wechselwirkungen zwischen den Parametern. Der Koeffizient a hat anscheinend keinen Einfluss auf den Verlauf bzw. die Krümmung des Graphen. Er “verschiebt” die Kurve nur horizontal12 . Der Einfluss von b auf den Verlauf der Kurve ist nicht so leicht 11 Hieraus folgt auch, dass die Wahrscheinlichkeit für den Nicht-Eintritt des Ereignisses P (Y = 0) = 1 − P (Y = 1) = 1 − pi ist 12 vgl. die Rolle von w0 bei der linearen Regression in Abschnitt 2.6.2 78 2.6 Lineare und logistische Regression - Modell und Lernverfahren 1.5 f (x) = 1+1−x 1 g(x) = 1+e−(−20+5x) pi 1 0.5 0 −0.5 −10 −5 0 5 10 x Abbildung 2.27: Beispiele für logistische Regression anzugeben, was erst im Mehrvariablenfall (mit mehreren bj ) sehr deutlich wird. Es lässt sich allerdings schon anhand des Beispiels aussagen, dass bei hohen b-Werten die Kurve immer steiler verläuft. Läuft |bj | gegen 0, so nimmt die Kurve nach und nach die Gestalt einer Geraden an. Bei Werten < 0 wird die Steigung der Kurve stets negativ. Logit-Modell Um den Einfluss der Logitkoeffizienten weiter zu interpretieren, bietet sich das Logit-Modell an. Wir ersetzen zur Vereinfachung der Umformungen in der logistischen Regressionsgleichung den Teil α + βj xij durch z. Dann erhält man sehr schnell das 79 Kapitel 2 Grundlagen Logit-Modell: ez 1 + ez z πi (1 + e ) = ez πi + ez πi = ez πi = ez − ez πi πi = ez (1 − πi ) πi = ez 1−πi πi ln 1−π =z i πi ⇔ ⇔ ⇔ ⇔ ⇔ ⇔ = (2.1) (2.2) (2.3) Hierbei ist • (1) die logistische Regressionsgleichung, • der linke Teil von (2) ist der sogenannte Odds πi 1−πi • und (3) ist die Link-Funktion bzw. das Logit-Modell. Der Odds ist so interessant, weil er genau das Verhältnis von Eintritt des Ereignisses (πi ) und Nicht-Eintritt (1 − πi ) beschreibt. Der logarithmierte Odds bildet dann die Link-Funktion bei (3), die man auch als Logit bezeichnet: πi Γ(πi ) = ln 1 − πi Durch Einsetzen des Regressionsausdrucks z erhält man dann das binäre πi Logit-Modell z.B. für den Zwei-Variablen-Fall:ln 1−π = α + βxi . Allgemeiner i bei k unabhängigen Variablen und mit Verwendung der geschätzten LogitKoeffizienten ergibt sich dann k X pi ln =a+ bj xij . 1 − pi j=1 Durch Exponentiation zur Basis e auf beiden Seiten entsteht somit: k k P P k Y a+ bj xij bj xij pi a a j=1 j=1 =e =e e =e ebj xij . 1 − pi j=1 80 2.6 Lineare und logistische Regression - Modell und Lernverfahren Bedeutung des Effekt-Koeffizienten eb Der sogenannte Effekt-Koeffizient ebj bietet sich an, wenn man den Einfluss der exogenen Variablen (xij ) auf den Odds (das Wahrscheinlichkeitsverhältnis) untersuchen will. Erhöht man z.B. im zwei-Variablen-Fall diese exogene Variable um eine Einheit, wird deutlich wie dieser Effekt-Koeffizient entsteht und wie er die Wahrscheinlichkeiten beeinflusst: = = = = ea+b(xi +1) ea eb(xi +1) ea ebxi +b ea ebxi eb pi eb 1−pi Eine Erhöhung von xi um 1 beeinflusst also den Odds linear. Es ist allerdings zu beachten, dass es sich beim Odds um das Wahrscheinlichkeitsverhältnis handelt, nicht um die Wahrscheinlichkeit des Eintretens des Ereignisses. Betrachtet man nochmal den Verlauf der e-Funktion in Abb.2.28 wird deutlich, dass ein negativer Regressionskoeffizient b das Wahrscheinlichkeitsverhältnis verringert (eb < 1), während positive Koeffizienten den Odds erhöhen13 . Hier liegt also offenbar ein Wechselspiel zwischen Effekt8 7 6 5 eb 4 3 2 1 0 −3 −2 −1 0 1 2 b Abbildung 2.28: Exponentialfunktion Koeffizienten und Veränderungen der unabhängigen (exogenen) Variablen vor. Interessant bleibt trotzdem, wie diese sich auf die Wahrscheinlichkeit pi auswirken. Der Autor stellt dieses so wie Abb. 2.29 dar. Hier ist angege13 bemerke auch, dass für den Effekt-Koeffizient immer eb ≥ 0 gilt 81 Kapitel 2 Grundlagen 487:9)<;=>4!.?*4@4A !"#"$%& 2..#.3"0(/4"5145146. p '(*)+$,-"./"0.12i . eb ; 9 84@4A M N#O D"#EGFP0.3I#514Q7 = <1 K b K #EC#. e *B2.36.."#(>4"#514514. ALI K Y =1 Y =0 B84@4A C D"EGFH#.I514J7 = >1 K b "0.3 #. e *2..#.3"0(/4"5145146. ALI K Y =1 Y =0 Abbildung 2.29: Auswirkung einer Erhöhung der exogenen Variable auf pi ben, wie sich eine Erhöhung von exogenen Variablen in den verschiedenen Wertebereichen von eb auswirken. Alle hier gemachten Betrachtungen gehen davon aus, dass immer nur eine der exogenen Variablen sich verändert, da sonst das System noch schwerer zu analysieren ist aufgrund der auftretenden wechselseitigen Beeinflussungen. Nachteile Nachteile der logistischen Regressionsanalyse gibt es aber auch: • Es sollten mindesten mehr als 100 Stichproben vorliegen • Nur metrische Variablen können richtig erfasst werden • Die unabhängigen Variablen müssen unkorreliert sein • Einschränkungen der Maximum-Likelihood-Methode wie z.B. Vorhandensein beider Ausprägungen Y = 1 und auch Y = 0 82 2.6 Lineare und logistische Regression - Modell und Lernverfahren 2.6.4 Regressions- und Modellbäume Regressions- und Modellbäume sind sehr mächtige maschinelle Lernverfahren für das Data-Mining. Sie weisen eine gewisse Ähnlichkeit mit Entscheidungsbäumen auf, haben aber andere Ansprüche und Kriterien. Grundlagen Regressions - und Modellbäume dienen zur Vorhersage von numerischen Werten, was der größte Unterschied zu klassischen Entscheidungsbäumen ist, wobei Regressionsbäume in den Blättern einen Durchschnittswert der Trainingsinstanzen enthalten und Modellbäume ein zum Beispiel lineares Modell, was den eigentlichen Wert bestimmen soll. Regressionsbäume sind deshalb ein Spezialfall von Modellbäumen. Mit dem in Abschnitt 2.6.2 beschriebenen Verfahren lassen sich solche Bäume sehr gut zur Klassifizierung von Testinstanzen verwenden. Glättungsverfahren Ein Modellbaum wird normalerweise bis zu seinem Blatt durchlaufen, wo sich dann ein Regressionsmodell befindet, das den Wert für die Testinstanz vorhersagt. Da es unter Umständen wie zum Beispiel wenigen vorhanden Trainingsdaten sehr große Unterschiede zwischen zwischen benachbarten Modellen geben kann, hat sich in der Praxis die Durchführung eines Glättungsverfahren als sehr sinnvoll gezeigt. Hierbei werden Regressionsmodelle nicht nur für die Blätter des (beschnittenen) Baumes angelegt, sondern auch für jeden einzelnen Knoten. Dadurch kann man den vorhergesagten Wert mit Werten aus vorhergehenden Knoten kombinieren und dadurch die Qualität eines solchen Baumes noch verbessern. Eine Gleichung zur Glättung lautet: p0 = np + kq n+k p0 ist die an den nächsthöheren Knoten hochzureichende Vorhersage, p ist die Vorhersage, die der aktuelle Knoten von unten bekommt, q ist der Wert des Modells im aktuellen Knoten n die Anzahl Trainingsinstanzen und k eine sogenannte Glättungskonstante. 83 Kapitel 2 Grundlagen Aufbau eines Baumes Der Aufbau eines Regressionbaumes gliedert sich in mehrere Phasen: • Ein Induktionsalgorithmus erzeugt den anfänglichen Baum aus den Trainingsdaten ähnlich den Entscheidungsbäumen • Sobald der Grundbaum aufgebaut ist, wird erwogen ihn an einigen Stellen zurückzuschneiden, falls dieses die Qualität der Ergebnisse verbessern könnte. Induktion des Baumes Der Aufbau des Grundbaumes nutzt wie Entscheidungsbäume ein Aufteilungskriterium anhand dessen man entscheidet, welches Attribut genutzt wird, um die Trainingsdatenmenge T aufzuteilen. Im Gegensatz zu Entscheidungsbäumen dient hier nicht die Informationsmaximierung als Kriterium, sondern es wird die Standardabweichung der gesamten Trainingsdaten berechnet und als Fehlermaß festgelegt. Es wird dann an jedem Knoten für jedes Attribut die Fehlerreduktion berechnet. Das Attribut, dass dann diese Reduktion maximiert ist das Teilungsattribut. Die Fehlerreduktion wird auch als Reduktion der Standardabweichung bezeichnet und mit SDR14 abgekürzt. Sie berechnet sich mit SDR = sd(T ) − X |Ti | i |T | × sd(Ti ). sd(T ) ist die Standardabweichung der gesamten Trainingsdaten und Ti sind die entstehenden Teilmengen für das gewählte Attribut. Es wird nicht weiter aufgeteilt, falls die vorhergesagten Werte der Instanzen, die einen Knoten erreichen nur leicht variieren oder anders ausgedrückt die Standardabweichung in diesem Knoten nur ein kleinen Bruchteil der gesamten Standardabweichung ist15 . Es wird auch nicht weiter aufgeteilt, wenn an dem Knoten nur noch eine kleine Menge der Trainingsinstanzen(zum Beispiel 4 oder weniger) vorhanden ist. In der Praxis hat sich gezeigt, dass Veränderungen dieser Schwellwerte sich nicht extrem auf die Qualität der Ergebnisse auswirken. 14 15 Standard Deviation Reduction Der Autor schlägt hier 5% vor 84 2.6 Lineare und logistische Regression - Modell und Lernverfahren Beschneiden des Baumes Das Beschneiden eines Baumes nutzt auch die bei der bereitsangesprochenen Glättungsmethode entstandenen Regressionsmodelle in jedem Knoten. Bei diesen Modellen werden aber nur die Attribute verwendet, die vorher noch nicht zur Entscheidungsfindung genutzt wurden. Die Anzahl der verwendeten Attribute sinkt also mit tieferen Ebenen des Baumes. Das verwendete Pruning-Verfahren benutzt die Abschätzung der erwarteten Fehlerrate der Testdaten. Zuerst wird die (absolute) Differenz zwischen vorhergesagtem Wert und tatsächlichem Wert für alle Trainingsinstanzen, die den Knoten erreichen gemittelt. Weil der Baum ja nur auf den Trainingsdaten arbeitet, wird dieser Durchschnitt den Fehler für nicht beachtete Fälle unterschätzen. n+v multipliziert. n ist Daher wird dieser Durchschnitt noch mit dem Faktor n−v die Anzahl der Trainingsdaten, und v die Anzahl der Parameter im Regressionsmodell des aktuellen Knotens. Das Beschneidungsverfahren beginnt unten im Baum und berechnet diese Fehlerrate für jeden Knoten und dessen Unterbaumes. Die Fehlerrate der beiden Verzweigungen wird hierbei jedoch noch mit der Anzahl der Trainingsinstanzen in den Verzweigungen gewichtet, damit nicht geringe Mengen von Trainingsinstanzen das Gesamtergebnis beeinflussen. Ist die Fehlerrate im Unterbaum nun größer als im aktuellen Knoten, wird der aktuelle Knoten zum Blatt umgewandelt, da ja eine weitere Verfolgung der Verzweigungen für die Qualität der Vorhersagen keinen Sinn machen würde. Nominale Attribute Die Regression an sich ist ein numerisches Verfahren, weswegen sich natürlich die Frage stellt, wie man mit nominalen Attributen wie zum Beispiel “kalt”, “rot”, “beliebt” oder anderen umzugehen hat. Die Lösung ist hier, solche Attribute in binäre Variablen zu transformieren. Man berechnet für jedes nominale Attribut der Trainingsinstanzen den Durchschnitt der zugehörigen Klassenwerte und listet diese sortiert nach dem Wert auf. Das nominale Attribut wird dann, wenn es k mögliche Ausprägungen hat, durch k − 1 synthetische Binärattribute ersetzt. Das i-te ist dann 0, falls der beobachtete Wert einer Instanz aus den ersten i dieser Folge synthetischer Attribute stammt, sonst ist es 1. 85 Kapitel 2 Grundlagen Fehlende Werte Fehlende Werte sind in der Praxis oft eher die Regel als die Ausnahme, weswegen man sich hier Gedanken machen sollte. Es wird die Formel zur SDR-Berechnung abgeändert zu X m |Tj | SDR = × sd(T ) − × sd(Tj ) |T | |T | j∈{L,R} m ist die Anzahl der Instanzen ohne das fehlende Attribut, T die Menge Instanzen, die den Knoten erreichen und TL und TR sind die entstehenden Teilmengen durch Aufteilen an diesem Attribut. Instanzen, denen dieses Attribut fehlt müssen jedoch auch aufgeteilt werden, deshalb gibt es das Verfahren der Leihaufteilung16 bei dem einfach ein anderes Attribut als das fehlende verwendet wird. Es wird das Attribut als Ersatz genommen, dass am stärksten mit dem fehlenden korreliert. Dies ist in der Praxis jedoch nicht verwendbar, da es mit einem erheblichen Rechenaufwand verbunden ist. Einfacher ist es zum Beispiel den bekannten Klassenwert als Ersatz zu verwenden was aber voraussetzt, dass genau dieses Attribut mit der größten Wahrscheinlichkeit mit dem zur Aufteilung verwendeten Attribut korreliert. Dies funktioniert natürlich nur bei der Verarbeitung der Trainingsinstanzen, da für Testinstanzen der Klassenwert nicht bekannt ist. Hier bietet sich am einfachsten an, den unbekannten Attributwert mit dem Durchschnittswert der Trainingsinstanzen für dieses Attribut zu ersetzen. Codeskizzen Hier sind noch ein paar Pseudomethoden formuliert, die das Erstellen eines Modellbaumes demonstrieren sollen. Die eigentliche Hauptmethode: Node MakeModelTree (instances) { SD=sd(instances); /* Standardabweichung aller Trainingsinstanzen */ convertNominals(); //nominale Attribute umwandeln root=newNode(); // Wurzel erzeugen root.instances=instances; // Trainingsdaten zuweisen split(root); // rekursiven Aufteilungsalgorithmus verwenden 16 Surrogate Splitting 86 2.6 Lineare und logistische Regression - Modell und Lernverfahren prune(root); return root; } // Baum rekursiv beschneiden // Baum zurückgeben Der Aufteilungsalgorithmus: void split(node) { if ((node.nInstances()<4)|(sd(node.instances)<0.05*SD)) node.type=LEAF; // Abbruchkriterium ? Dann Blatt else { node.type=INTERIOR; berechne SDR für alle Attribute node.attribute=Attribut mit max. SDR; /* Aufteilungsattribut wählen */ split(node.left); // links weiter splitten split(node.right);// rechts weiter splitten } } Das Pruning: void prune (node) { if (node.type == INTERIOR) { prune(node.leftChild); // Links weiter prune(node.rightChild); // Rechts weiter node.model = //Regressionsmodell erstellen linearRegression(node); if (subtreeError(node)>error(node)) node.type = LEAF; // Fehler im Unterbaum größer als // Fehler im Node ? // dann beschneiden } } Fehlerabschätzung im Unterbaum mit Gewichtung der Anzahl Trainingsinstanzen in den Teilbäumen: void subtreeError(node) { 87 Kapitel 2 Grundlagen l=node.left; r=node.right; if (node == INTERIOR) { return ( sizeof(l.instances)*subtreeError(l) +sizeof(r.instances)*subtreeError(r)) / sizeof(node.instances) } else return error(node) } Die Funktion error(node) errechnet dabei den Fehler für ein Blatt wie folgt: P Instanzen|Abweichung vom vorhergesagten Klassenwert| n+v × n−v n mit n als Anzahl Instanzen am Knoten und v Anzahl der Parameter im Regressionsmodell. Beispielbaum Ein Beispiel für einen nach diesen Algorithmen erzeugten Modellbaum mit linearer Regression ist in Abb. 2.30 dargestellt. pgewinn <=3.5 >4.5 [3.5,4.5] motor spindel vgewinn D,E,C B,A LM3 <=2.5 LM4 >2.5 LM5 D,E,C,B LM6 A LM7 spindel D,E,C LM1 B,A LM2 Abbildung 2.30: Beispiel für einen Modellbaum Es soll die Beschleunigungszeit eines Servosystems vorhergesagt werden, wobei ein Servoverstärker, ein Motor, eine Leitspindel und ein Gleitwagen teil des Systems sind. 88 2.6 Lineare und logistische Regression - Modell und Lernverfahren Die zugehörigen linearen Modelle sind in Tabelle 2.2 angegeben. Modell Konstante pgewinn vgewinn motor=D motor=D,E motor=D,E,C motor=D,E,C,B spindel=D spindel=D,E spindel=D,E,C spindel=D,E,C,B LM1 −0.44 LM2 2.60 0.82 vs. vs. vs. vs. vs. vs. vs. vs. E,C,B,A C,B,A B,A A E,C,B,A C,B,A B,A A LM3 3.50 LM4 0.18 LM5 0.52 0.24 −0.16 0.10 0.42 LM6 0.36 0.42 3.30 1.80 LM7 0.23 0.06 0.15 0.09 0.22 0.07 0.18 0.47 0.63 0.28 0.90 0.34 0.16 0.14 Tabelle 2.2: Lineare Modelle für Beispielbaum In diesem Beispiel werden 2 nominale und 2 numerische Attribute verwendet. Die nominalen wurden nach dem Verfahren in Abschnitt 2.6.4 in entsprechende synthetische binäre Attribute umgewandelt. Die Dreifachabzweigung bei pgewinn ist Resultat eines Algorithmus17 , der bestimmte gleiche Teile eines Baumes zusammenfasst. Somit ist das LM2 z.B. 2.60 + 3.30 ∗ 1, falls Motor=D ist. In diesem Modell wirken sich also andere Ausprägungen des Motors überhaupt nicht aus. Bei LM1 wiederum ist ein Motor vom Typ D oder E ausschlaggebend. Bei LM7 würde sich die Ausprägung Motor=D bzw Motor=E mehrfach auf den vorhergesagten Wert auswirken, während Motor=C nur einmal einfließt. 2.6.5 Schlusswort Regressionsbäume wurden 1984 mit dem CART-System18 von Breiman et al. zum ersten Mal implementiert. Neben einem Entscheidungsbauminduzierer enthielt es ein System zur Regressionsbaumerstellung. Inzwischen hat es sich weiterentwickelt und beinhaltet Methoden um zum Beispiel mit fehlenden Werten umzugehen, nominale Attribute zu verarbeiten und vieles mehr. Diese Formen des Data-Mining finden vermehrt in Domänen wie zum Beispiel CRM-Analysen, Profilerstellung und anderen Anwendungen. Die wachsende Nachfrage hat über die Jahre natürlich dafür gesorgt, dass auch der Markt für diese Art von Software immer größer wurde. Verfahren zur Modellbauminduktion sind noch relativ jung und müssen sich wohl erst in der Praxis bewähren. Modellbäume sind flexibel, so ist aus ihnen 17 laut Autoren ist dieser Algorithmus sehr einfach und schaut, ob die Wurzel und einer ihrer Nachfahren das gleiche Attribut auswerten 18 C lassification And RegressionT rees http://www.salford-systems.com/ 89 Kapitel 2 Grundlagen zum Beispiel auch das Verfahren der lokal gewichteten Regression entstanden, in dem die einzelnen Modelle sich noch gegenseitig beeinflussen also zur Laufzeit gefunden werden. Außerdem ist man nicht auf lineare Modelle beschränkt und kann vielfältige andere Gewichtungsfunktionen oder Pruningalgorithmen verwenden. 90 2.7 Clustering 2.7 Clustering von Hauke Tschirner 2.7.1 Einleitung Ziel dieser Ausarbeitung ist es, durch die Vorstellung einiger Prinzipien, eine Einführung in den Bereich des Clustering zu geben. 2.7.2 Der Begriff Clustering Zuerst soll an dieser Stelle eine grundlegende Vorstellung darüber geschaffen werden, was der Begriff Clustering umfasst. Grundsätzlich wird Clustering in der Literatur als Verfahren beschrieben, welches gleichartige Daten zu sogenannten Clustern zusammenfasst. Gleichartigkeiten zwischen Daten werden dabei zumeist durch Abstände zwischen einzelnen Datenobjekten gemessen. Ein Vorteil von dieser Kategorisierung ist etwa eine Zeitersparniss, da man gleichartige Daten auf ähnliche bzw. gleiche Weise behandeln kann. Zusätzlich fördert Clustering eine Fokussierung auf Daten mit bestimmten Merkmalen. 2.7.3 Datentypen in der Cluster-Analsye Typischerweise operieren main-memory-basierte Clusteringverfahren auf den folgenden zwei Datentypen Data matrix In dieser Matrix sind die Datenobjekte und ihre Attributwerte gesichert. In vertikaler Ebene werden die n Datenobjekte unterschieden. Dies könnten z.B. Personen sein. In horizontaler Ebene sind die Attributwerte der einzelnen Datenobjekte gesichert, also z.B. Name, Geburtsdatum, usw. . 91 Kapitel 2 Grundlagen Dissimilarity matrix In dieser Matrix werden die Abstände der Datenobjekte untereinander gesichert. Hierbei bezeichnet etwa d(2,1) den Abtand zwischen Datenobjekt 2 und Datenobjekt 1. 2.7.4 Berechnung der Abstände Abstände zwischen Datenobjekten sind bei vielen Clusteringverfahren ein wesentlicher Faktor zur Einordnung dieser Daten. Die Art der Berechnung der Abstände hängt dabei von der Art der verglichenen Attribute ab. Grundsätzlich kann man zwei wesentliche Ausprägungen der Abstandsberechnung unterscheiden: Die euklidische-, Manhattan- (oder cityblock-) und Minkowski-Distanz wird bei Vergleich von linearen Zahlenwerten, etwa Höhe, Gewicht, usw., angewendet, kann aber auch, nach logarithmischer Transformation, bei exponentiellen Werten, etwa exponentiellen Wachstumswerten, angewendet werden. p Euklidische Distanz d(i, j) = |xi1 − xj1 |2 + |xi2 − xj2 |2 + ... + |xip − xjp |2 Manhattan-Distanz d(i, j) = |xi1 − xj1 | + |xi2 − xj2 | + ... + |xip − xjp | 1 Minkowski-Distanz d(i, j) = (|xi1 − xj1 |n + |xi2 − xj2 |n + ... + |xip − xjp |n ) n Zur Berechnung dieser Distanzen werden die einzelnen Attribute der Datenobjekte verglichen, d.h. jeweils subtrahiert, und diese Differenzen werden addiert. Dabei ist die Minkowski-Distanz eine Verallgemeinerung der euklidischen- und der Manhattan-Distanz, wobei n=2 im Falle der euklidischen Distanz und n=1 im Falle der Manhattan-Distanz. Bei binären Attributwerten findet ein Vergleich mit Hilfe des simple-matchingund des Jaccard-Koeffizienten statt. simple-matching-Koeffizient d(i, j) = r+s Jaccard-Koeffizient d(i, j) = q+r+s 92 r+s q+r+s+t 2.7 Clustering Dabei bezeichnet r den Fall, dass das eine Datenobjekt den Wert 1 hat und das Andere den Wert 0. s bezeichnet den umgekehrten Fall, dass das eine Datenobjekt den Wert 0 hat und das Andere den Wert 1. q bezeichnet den Fall, dass beide Datenobjekte den Wert 1 haben, und t bezeichnet schließlich den Fall das Beide den Wert 0 haben. Welcher Koeffizient zur Berechnung genutzt werden muss hängt von der Bedeutung der binären Attributwerte ab. Ist es ohne Bedeutung ob ein Attribut den Wert 0 oder 1 zugeordnet bekommt, also etwa in einer reinen Unterscheidung wie männlich − weiblich, so nennt man dies invariante Ähnlichkeit. In diesem Fall nutzt man zur Berechnung des Abstandes den simple-matching-Koeffizienten. Ein weiterer Fall ist, dass die Vergabe des Attributwertes 0 oder 1 eine Bedeutung hat, also etwa bei Zuständen wie positiv und negativ bei Feststellung medizinischer Befunde, wobei das seltenere Ergebnis, etwa HIV-positiv, mit 1 codiert wird und das häufigere Ergebnis, etwa HIV-negativ, mit 0. Hierbei spricht man von nichtinvarianter Ähnlichkeit. In diesem Fall nutzt man den Jaccard-Koeffizienten zur Berechnung de Abstandes. Bei nominalen Attributwerten, d.h. bei Werten mit mehreren Zuständen, z.B. Farbe: blau, rot, gelb, grün, nutzt man eine abgewandelte Form des simple-matching-Koeffizienten. 2.7.5 Kategorien von Clusteringverfahren Clusteringverfahren können grob in fünf Kategorien eingeteilt werden, welche im Folgenden kurz vorgestellt werden. Partitionierungsverfahren Bei diesen Clusteringverfahren legt man die Zahl k der gewünschten Cluster zu Beginn fest. Initial werden dann k Clustermittelpunkte willkürlich festgelegt. Dies könnten z.B. Datenobjekte selbst sein. Um nun festlegen zu können welche Datenobjekte welchem Cluster zuzuordnen sind, wird für jedes Datenobjekte festgestellt in welchem Abstand es sich zu den Clustermittelpunkten befindet. Es wird dann demjenigen Cluster zugeordnet, von dessen Mittelpunkt es den geringsten Abtand hat. Ein wesentlicher Nachteil bei diesem simplen Verfahren ist deutlich: Die erzeugten Cluster sind vollständig von der initialen Festlegung der Clustermittelpunkte abhängig. Daher existieren Algorithmen die eine iterative Verbesserung der Clusterbildung vollziehen. Die Algorithmen k-means und k-medoids werden an späterer Stelle noch einmal genauer betrachtet. 93 Kapitel 2 Grundlagen Hierarchische Verfahren Bei diesen Verfahren werden die Cluster hierarchisch erzeugt. Man unterscheidet dabei zwei Richtungen: agglomerativ und divisiv. Agglomerative Verfahren bezeichnen dabei ein bottom-up-Vorgehen bei der Clustererzeugung. D.h. zu Beginn eines agglomerativen Algorithmus bilden alle Datenobjekte jeweils ein eigenes Cluster und werden dann schrittweise zu größeren Clustern zusammengefasst. Divisive Verfahren bezeichnen hingegen ein topdown-Vorgehen. Bei divisiven Algorithmen bilden also zu Beginn alle Datenobjekte ein Cluster und werden schrittweise in kleinere Cluster aufgesplittet. Ein Nachteil bei hierarchischen Verfahren dieser simplen Vorstellung ist, dass einmal gemachte Schritte nicht mehr rückgängig zu machen sind. Daher wurden Algorithmen entwickelt, die etwa eine Relokation von Datenobjekten erlauben (BIRCH) oder genauere Analysen der Objektverbindungen vollziehen (CURE), um eine verbesserte Clusterbildung zu erreichen. Auf einige hierarchische Algorithmen wird im weiteren Verlauf noch eingegangen. Dichte-basierte Verfahren Diese Verfahren unterscheiden sich deutlich von den bisher vorgestellten Methoden durch die Form in der die Cluster entstehen. Bei dichte-basierten Methoden wächst ein Cluster schrittweise, bis ein gewisser Grenzwert an Objektdichte erreicht wird. Die Objektdichte, d.h. also die Zahl der Datenobjekte in der Umgebung eines anderen Datenobjektes, wird anhand eines festgelegten Radius um ein Datenobjekt gemessen. Dieser Radius wird im Folgenden als neighborhood bezeichnet. Dadurch dass Cluster bei diesen Verfahren schrittweise wachsen, erkennen dichte-basierte Algorithmen Cluster von willkürlicher Form. Bei den zuvor vorgestellten Verfahren ist dies nicht ohne weiteres möglich. Der Algorithmus DBSCAN wird im weiteren Verlauf näher vorgestellt. Gitter-basierte Verfahren Bei diesen Verfahren wird das gesamte Objektfeld in Gitterzellen aufgeteilt. Diese Gitterzellen können weiterhin Sub-Gitterzellen enthalten, so dass eine Art hierarchischer Gitterstruktur entsteht. Gitter höherer Ordnung enthalten dabei Informationen über den Inhalt ihrer Sub-Gitter. Die Gitterzellen bilden dabei die Cluster auf dem Datenfeld. Interessant ist bei diesen Verfahren, dass, nach Erzeugung der Gitterzellen, Anfragen auf die Daten in den Clustern sehr schnell behandelt werden 94 2.7 Clustering können. Ein Nachteil ist natürlich eine fehlende Genauigkeit der entstandenen Cluster. An dieser Stelle seien nur zwei Algorithmen genannt: STING und CLIQUE. Genauere Informationen über diese Verfahren sind in der Literatur vorhanden. Modell-basierte Verfahren Bei diesen Verfahren wird ein gewünschtes Modell des vervollständigten Clusterings als Hypothesenmodell aufgestellt. In weiteren Schritten dieser Verfahren wird versucht ein best-fit für die gegebene Datenmenge auf das Hypothesenmodell zu finden. Da diese Verfahren im folgenden nicht weiter behandelt werden, sei an dieser Stelle wiederum auf die Literatur hingewiesen. 2.7.6 Algorithmen der Partitionierungsverfahren k-means Der Algorithmus k-means strukturiert Cluster, indem er Mittelpunkte (means) der Cluster ermittelt und Datenobjekte entsprechend der Entfernung zu diesen Mittelpunkten den jeweiligen Clustern zuordnet. D.h. jedes Datenobjekt wird demjenigen Cluster zugeordnet, dessen Mittelpunkt es am nahesten liegt. In einer Schleife wird dann jeweils ein neuer Mittelpunkt als Mittelwert aller Datenobjekte eines jeweiligen Clusters ermittelt und eine neue Clusteranalyse gestartet. Es folgt nun der k-means Algorithmus, wobei k die Anzahl der zu erzeugenden Cluster einer Datenbank von n Objekten bezeichnet: (1) arbitrarily choose k objects as the initial cluster centers; (2) repeat (3) (re)assign each object to the cluster to which the object is most similar, based on the value of the objects in the cluster; (4) update the cluster means, i.e. calculate the mean value of the objects for each cluster; (5) until no change; Die Arbeitsweise des Algorithmus wird durch folgendes Beispiel klar. Hierbei wird angenommen, dass drei Cluster zu erwarten sind, also k=3. Die Punkte bezeichnen die Datenobjekte. Ein Plus steht für einen Clustermittelpunkt, und die gestrichelten Linien begrenzen die einzelnen Cluster. 95 Kapitel 2 Grundlagen Abbildung 2.31: Ein Beispiel für die Anwendung von k-means aus [Han01], S.350 In Schritt (a) wurden bereits die ersten Cluster, anhand der Entfernungen der Datenobjekte zu den Clustermittelpunkten, ermittelt. Die Mittelpunkte wurden aber noch nicht angepasst. Dies ist in Schritt (b) geschehen. Die Clustermittelpunkte wurden entsprechend der Datenobjekte in den Clustern verschoben und ein neuer Abgleich der Entfernungen der Datenobjekte zu den neuen Mittelpunkten ergab veränderte Clusterzugehörigkeiten. In Schritt (c) sieht man die entgültigen Cluster durch fette Linien getrennt. Hier gab es keine Veränderungen der Clusterzuordnung nach Durchlaufen einer Schleife. Die Komplexität dieses Algorithmus ist O(nkt), wobei t die Zahl der Iterationsschritte bezeichnet. n und k wurden zuvor bereits definiert. Der k-means Algorithmus hat allerdings einige wesentliche Nachteile. Cluster nichtkonvexer Form werden nur sehr schlecht erkannt. Zusätzlich muss k, also die Anzahl der zu erreichenden Cluster, zu Beginn bereits spezifiziert sein, was insbesondere bei umfangreicheren Datenbanken ein Problem darstellt. Auf sogenannte outliers, also Stördaten die extrem aus der Menge von Daten herausstechen und dadurch Ergebnisse verfälschen, reagiert der k-means Algorithmus zudem sehr empfindlich. Dieser dritte Nachteil kann allerdings durch Einsatz des k-medoids Algorithmus gemindert werden. k-medoids Ein medoid bezeichnet das zentralste Datenobjekt eines jeden Clusters. Bei diesem Algorithmus wird daher nicht schrittweise der Mittelpunkt innerhalb des Clusters verschoben, sondern springt sozusagen von einem zuvor zentralen Datenobjekt zu einem nach einem Iterationsschritt neuen zentralsten Datenobjekt. Diese Schritte werden in folgender Graphik deutlicher. 96 2.7 Clustering Abbildung 2.32: Ein Beispiel für die Anwendung von k-medoids aus [Han01], S.352 Orandom bezeichnet dabei das neue zentralste Objekt eines Clusters. Oj ist der alte Mittelpunkt dieses Clusters, Oi der Mittelpunkt eines anderen Clusters. p bezeichnet dasjenige Datenobjekt, für welches überprüft werden soll ob es seine Clusterzugehörigkeit nun ändert. Die fette Linie bezeichnet die bisherige Clusterzugehörigkeit, die gestrichelte Linie bezeichnet die neue Zugehörigkeit. In Fall 1 wechselt p die Clusterzugehörigkeit, da nach Mittelpunktswechsel Oi nun näher ist als Orandom . In Fall 2 bleibt p Teil des bisherigen Clusters, da es Orandom näher ist als Oi . In Fall 3 ändert sich die Clusterzugehörigkeit von p nicht, da es immer noch Oi am nahesten ist. In Fall 4 ändert sich die Clusterzugehörigkeit von p, da es nun Orandom am nahesten ist. Outliers haben hierbei wesentlich weniger Einfluss auf die Clusterbildung als im Falle von k-means. Typische k-medoids Algorithmen sind etwa PAM (Partitioning around medoids), bei welchem in jedem Schritt überprüft wird, ob ein anderes Datenobjekt einen besseren meidoid abgeben würde. Dieser Algorithmus arbeitet allerdings nur auf kleinen Datenmengen effektiv. Daher wurde zum Einsatz bei großen Datenmengen der k-medoids Algorithmus CLARA (Clustering LARge Applications) entwickelt. CLARA wählt aus der gesamten Datenmenge nur einen Teil als Repräsentationsmenge. Durch Einsatz von PAM werden daraufhin medoids ermittelt. CLARA wählt dabei mehrere feste Teile der Gesamtdatenmenge und liefert, nach Anwendung von PAM, das beste Ergebnis des Clusterings zurück. Die Komplexität von CLARA ist dabei O(ks2 + (k(n − k)), wobei s die Größe des samples, also des Datenausschnitts, bezeichnet. CLARANS (Clustering LARge Applications based upon RANdomized Search) ist eine effektivere Variante von CLARA, bei der eine 97 Kapitel 2 Grundlagen zufällige Auswahl von Datensamples für ein besseres Ergebnis sorgt. Obwohl k-medoids robuster ist als k-means, ist der Einsatz doch aufwendiger. 2.7.7 Algorithmen hierarchischer Verfahren Die folgende Abbildung zeigt die zwei grundsätzlich unterschiedlichen Ansätze bei Algorithmen hierarchischer Verfahren. Abbildung 2.33: Übersicht der hierarchischen Verfahren aus [Han01], S.355 Die agglomerative (bottom-up) Vorgehensweise im simplen agglomerativen Algorithmus AGNES und die divisive (top-down) Vorgehensweise im simplen DIANA Algorithmus. Ein agglomerativer Algorithmus anhand eines konkreten Beispieles In diesem Beispiel geht es um das Abfallaufkommen im Regierungsbezirk Chemnitz des Jahres 1993. Hier ein kurzer Überblick über die vorhandenen Daten. Zu Beginn des Algorithmus bilden alle Kreise jeweils ein eigenes Cluster. In jedem Schritt werden nun die zwei ähnlichsten Cluster zu einem Cluster verschmolzen. Zur Berechnung des neuen Abstandes zu den bestehenden Clustern wird der Average Linkage Algorithmus hinzugezogen. d(Cu , Ct ) = 12 (d(Cr , Ct ) + d(Cs , Ct )) Wobei Cr und Cs die verschmolzenen Cluster sind. Der Abstand zum bestehenden Cluster Ct wird mittels der quadrierten euklidischen Distanz ermittelt. 98 2.7 Clustering Abbildung 2.34: Beispieldaten zur Erzeugung des Dendogrammes aus [Sto97], S.131 Zur graphischen Darstellung der sich ergebenden Clusterhierarchie existieren sogenannte Dendogramme. Das dargestellte Dendogramm entstand durch Anwendung des Average Linkage Algorithmus auf die obige Datenmenge. 99 Kapitel 2 Grundlagen Abbildung 2.35: Dendogramm aus [Sto97], S.132 Durch einen festgelegten Grenzwert eines Clusterabstandes können nun drei größere Cluster erkannt werden. Diese Cluster sind in der Graphik durch Kästen markiert. Die drei letzten Kreise fallen aus dem Rahmen und können keinem Cluster zugeordnet werden. Beispiel eines divisiven Clustering mit Verschmelzungs- und Aufteilungsoperationen In diesem Beispiel werden Dateninstanzen inkrementell zu einem Baum zusammengefügt. Jede Instanz die hinzugefügt wird, wird probeweise jedem vorhandenen Blatt als Sohn zugeordnet. Die sogenannte Kategoriennützlichkeit gibt dabei die Qualität dieser Position für die entsprechende Instanz an. Sie gibt Auskunft über die Gesamtqualität der Aufteilung in Cluster. Die Formel der Kategoriennützlichkeit lautet folgendermaßen: P P P 2 2 l P r[Cl ] i j (P r[ai =vij |Cl ] −P r[ai =vij ] ) CU (C1 , C2 , ..., Ck ) = k vij bezeichnet dabei Werte von Attributen ai . In der innersten Schleife werden also die Werte und in einer mittleren Schleife die Attribute durchlaufen. 100 2.7 Clustering Cl bezeichnet die Cluster. Diese werden in der äusseren Schleife durchlaufen. P r[ai = vij |Cl ]2 bezeichnet die Wahrscheinlichkeit, dass das Attribut ai den Wert vij im Cluster Cl annimmt, und P r[ai = vij ]2 bezeichnet die Wahrscheinlichkeit, dass das Attribut ai den Wert vij überhaupt annimmt. Der Vergleich dieser Wahrscheinlichkeiten gibt damit die Nützlichkeit der Existenz entsprechender Cluster an, d.h. also die Nützlichkeit der Aufteilung der Daten in Cluster. Dies geschieht durch den Vergleich von Existenz und Nicht-Existenz. Die Division durch k sorgt für eine pro-Cluster-Angabe der Kategoriennützlichkeit. Zusätzlich gibt es Aufteilungs- und Verschmelzungsoperationen. Es werden etwa zwei bereits zugeordnete Knoten verschmolzen, wenn ein neuer Knoten, durch die Kategoriennützlichkeit, sich ähnlich gut in einem Cluster mit Beiden befinden sollte. Die folgende Graphik zeigt den Aufbau eines solchen Baumes. Die ersten fünf Instanzen werden als Blätter an den Knoten angefügt. Ab der sechsten Instanz wird der Algorithmus gestartet. In Schritt (c) wurde also Knoten f hinzugefügt, da die Kategoriennützlichkeit ergab, dass sich Knoten f in einem Cluster mit Knoten e befinden sollte. In Schritt (e) ergab die Überprüfung der Kategoriennützlichkeit für alle Blattknoten, dass Knoten h einen Cluster mit Knoten a aber auch mit Knoten d bilden sollte. Daher wird der Baum umstrukturiert, d.h. Knoten a und d werden verschmolzen und bilden mit Knoten h einen Cluster. Schritt (f) zeigt einen finalen Baum, in dem die hierarchische Struktur deutlich zu erkennen ist. CURE Der divisive Algorithmus CURE unterscheidet sich von anderen Algorithmen dahingehend, dass mehrere Repräsentationspunkte die Form eines Clusters definieren. In jedem Schleifendurchlauf des Algorithmus werden die zwei Cluster mit den nahesten Repräentationspunkten verschmolzen und diese Repräentationspunkte schrumpfen entgegen dem neuen Mittelpunkt der verschmolzenen Cluster. In der folgenden Graphik ist ein solcher Ablauf dargestellt. In Schritt (b) wurden zufällig Repräsentationspunkte gewählt. Welche Datenobjekte zu den entsprechenden Clustern gehören, wird durch den Abstand zu den Repräsentationspunkten ermittelt. In Schritt (c) sieht man den bereits weit fortgeschrittenen Algorithmus. Die Repräsentationspunkte sind entsprechend der neuen Mittelpunkte verschmolzener Cluster zusammengeschrumpft. Zwei größere Cluster zeichnen sich ab. 101 Kapitel 2 Grundlagen Abbildung 2.36: Beispiel eines divisiven Clustering aus [Wit01], S.232 CURE bietet die Möglichkeit outliers auszuschliessen. Die Komplexität von CURE ist O(n). Allerdings können Kategorien-Daten nicht mit CURE bearbeitet werden. Um diese Daten zu clustern existiert ein separater Algorithmus namens ROCK. 102 2.7 Clustering Abbildung 2.37: Ein Beispiel für die Anwendung von CURE aus [Han01], S.360 2.7.8 Algorithmen Dichte-basierter Verfahren DBSCAN Der DBSCAN Algorithmus betrachtet den sogenannten neighborhood, also den Radius um ein Datenobjekt, und prüft die Anzahl der Datenobjekte in diesem. Erreicht diese einen Grenzwert MinPts so bildet das Datenobjekt, dessen neighborhood geprüft wurde, ein core object. Von Datenobjekten, die sich im neighborhood eines core objects befinden wird wiederum der neighborhood überprüft, usw. . Datenobjekte sind density-connected wenn eine Verbindung, über den neighborhood, dieser mit einem core object möglich ist. Solch verbundene Datenobjekte bilden die Cluster. Alle Datenobjekte die nach Durchlauf des Algorithmus keinem Cluster zugeordnet werden konnten sind Stördaten. Der Ablauf wird in dem folgenden Beispiel deutlich. Angenommen MinPts=3. M, P, S und O wären core objects. Q ist etwa density-connected mit M und P bildet mit diesen daher ein Cluster. Es ist zu beachten das sich der Algorithmus in diesem Beispiel noch in einem 103 Kapitel 2 Grundlagen Abbildung 2.38: Ein Beispiel für die Anwendung von DBSCAN aus [Han01], S.364 frühen Stadium befindet. Weitere Datenobjekte, wie etwa die Unbenannten im neighborhood von M müssten ihren neighborhood prüfen. Auf diese Weise wächst ein Cluster an und kann so auch willkürliche Form haben. Die Komplexität von DBSCAN ist im worst-case O(n2 ). Ein Nachteil ist, dass für den Einsatz von DBSCAN der neighborhood und MinPts festgelegt sein müssen. Da das gesamte Ergebnis des Clusterings sehr sensibel gegenüber dem neighborhood ist, kann ein unzureichender Wert das Ergebnis erheblich verfälschen. Daher wurde der Algorithmus OPTICS entwickelt, welcher eine Hierarchie von Clustern anhand verschiedener Werte für den neighborhood aufstellt. 104 2.8 Fallbasiertes Schliessen 2.8 Fallbasiertes Schliessen von Rainer Hilbrands 2.8.1 Einleitung Diese Ausarbeitung beschäftigt sich mit dem fallbasierten Schließen. Zunächst werden einige grundlegende Definitionen gegeben. Anhand einiger Beispiele soll verdeutlicht werden, was fallbasiertes Schließen ist. Danach wird auf die Fallrepräsentation eingegangen, die Grundlage für die formale Umsetzung ist. Ein ganz zentrales Thema ist die Ähnlichkeitsbestimmung, die den Kern des fallbasierten Schließens bildet. Desweiteren soll die Klassifikation von Objekten erläutert werden, welches zu den analytischen Aufgaben eines fallbasierten Systems gehört. Zu guter letzt werden die Vor- und Nachteile dieser Methode beleuchtet. 2.8.2 Grundlagen Was ist ”Fallbasiertes Schließen”? Fallbasiertes Schließen löst neue Probleme durch Vergleich des Problems mit bereits gelösten ähnlichen Problemen. Grundlage dafür ist eine sogenannte Fallbasis, in der Probleme bzw. Erfahrungen ggf. mit Lösungen gespeichert sind. Die Darstellung eines Falles in der Fallbasis ist Aufgabe der Fallrepräsentation, die individuell auf das jeweilige System abgestimmt werden muß. Durch eine Ähnlichkeitsbestimmung, auf die später eingegangen wird, werden ähnliche Probleme herausgesucht. Die Lösung des in der Fallbasis vorhandenen Problems wird dann in modifizierter Form übernommen. Dies geschieht, weil in den seltesten Fällen identische Problemstellungen vorhanden sind. Der neue Fall wird anschließend in die Fallbasis aufgenommen. Beispiele für ”Fallbasiertes Schließen” Ein Patient konsultiert seinen Hausarzt. Er schildert ihm verschiedene Symptome (z.B. Magenschmerzen, kurzfristige Schwindelgefühle). In diesem Fall ist dies die Problembeschreibung. Danach erinnert sich der Arzt an einen anderen Patienten, der über ähnliche Beschwerden klagte. Dieser Vorgang beschreibt die Suche in der Fallbasis mit Ähnlichkeitsbestimmung. Nun stellt er aufgrund dieser Erfahrung eine Diagnose und verschreibt ihm das gleiche Medikament, allerdings in einer anderen Dosierung. Der Arzt übernimmt also die Lösung der zuvor gemachten Erfahrung und gleicht diese dem individuellen Fall an. 105 Kapitel 2 Grundlagen Ein Automechaniker soll den Wagen eines Kunden reparieren. Er erhält eine kurze Beschreibung, wie sich der Fehler auswirkt. Aus Erfahrung weiß er, dass gerade dieses Modell der Automarke XY häufig ein Problem mit einem bestimmten Bauteil hat. Auch er hat unbewußt eine Ähnlichkeitsbestimmung vorgenommen und wendet nun die Lösung des ihm bekannten Problems auf das aktuell vorhandene an. 106 2.8 Fallbasiertes Schliessen 2.8.3 Fallrepräsentation Allgemeines Wichtiger Bestandteil des fallbasierten Schließens ist die Repräsentation der einzelnen Fälle in der Fallbasis. Die dazu benötigten Datenstrukturen sind stark von den jeweiligen Daten und der späteren Ähnlichkeitsbestimmung abhängig. Es gibt keine universelle formale Umsetzung der Fallrepräsentation. Desweiteren können verschiedene Datenstrukturen miteinander kombiniert werden. Was in einem Fall gespeichert ist, hängt auch von dem jeweiligen System ab. Im Allgemeinen enthält ein Fall eine Problembeschreibung bzw. Situationsbeschreibung. Es wird also festgehalten und welchen Bedingungen es zu einem Fehler gekommen ist und wie sich dieser darstellt. Zudem werden die Lösungsinformationen beschrieben. Dabei sollte auch angegeben werden, warum diese Lösung gewählt worden ist (Begründung). Eventuell sollten auch alternative Lösungsansätze oder Lösungswege angeboten werden. Optional wären ggf. auch Güteinformationen nützlich, wie z.B. Zeit, Kosten, Risiko oder Akzeptanz der Lösung. Für die formale Umsetzung der Fälle benötigt man geeignete Datenstrukturen. Hier sollen, ohne Anspruch auf Vollständigkeit, vier solcher Umsetzungen beschrieben werden: • Attribut-Wert-Repräsentaion • Objektorientierte Repräsentation • Graphen • Prädikatenlogische Repräsentation Attribut-Wert-Repräsentation Diese relativ einfache Form der Darstellung beschränkt sich auf die Speicherung der unterschiedlichen Merkmale mit den dazugehörigen Werten. Dies soll anhand eines Beispiels verdeutlicht werden: Bei einer Platine, die Teil einer Steuerungseinheit ist, liegt ein Defekt vor: • Problem: • Spannung an Ausgang: 14,5 V 107 Kapitel 2 Grundlagen • Relais 1-7: [on,off,on,on,off,off,on] • LED 23: on • Lösung: • Defektes Bauteil: IC-568 • Reparaturdokumentation: Handbuch D, Seite 87 Die Attribut-Wert-Repräsentation hat eine einfache Datenstruktur. Dadurch wird auch die Ähnlichkeitsbestimmung relativ einfach. Ein Nachteil dieser formalen Umsetzung ist allerdings, dass Aktionsfolgen nicht dargestellt werden können. Das bedeutet, dass zum Beispiel eine Beschreibung eines Lösungsweges in nicht ohne weiteres zu repräsentieren ist. Desweiteren fehlen relationale Beziehungen zwischen einzelnen Attributen bzw. Attributgruppen. Die struktuelle Gliederung wird hier vernachlässigt. Deswegen eignet sich die Attribut-Wert-Repräsentation lediglich für einfach Systeme mit kleinen Fallbasen, dessen Merkmale wenige Beziehungen untereinander aufweisen. Dies schränkt die Anwendbarkeit für die meisten Systeme stark ein. Man bedient sich daher einer erweiterten Form der Attribut-Wert-Repräsentation: die Rede ist von der objektorientierten Repräsentation. Objektorientierte Repräsentation Die objektorientierte Repräsentation von Fällen ist eine Erweiterung der Attribut-Wert-Repräsentation. Hier werden mehrere Attribute zu Objekten zusammengefaßt. Mehrere Objekte stehen untereinander in Beziehungen. Diese Modellierung ist bei Entwicklern sehr beliebt, da die reale Welt dadurch leicht umzusetzen ist. Die Beziehungen spielen dabei eine wichtige Rolle. Zwei Objekte können beispielweise in einer kompositionellen Relation stehen (”is-part-of”-Relation). Dabei setzt sich ein Objekt aus mehreren Teilobjekten zusammen. Z.B. ist der Motor, die Reifen und das Chassis sind Teilobjekte des Objektes Formel-1-Wagen. In diesem Beispiel ist die Objektklasse ”Computer” eine Oberklasse der Klasse ”Laufwerke”. Beide Klassen enthalten mehrere Attribute mit Werten. Auch hier soll eine kleine Bewertung dieser Repräsentationsform vorgenommen werden. Anders als bei der Attribut-Wert-Repräsentation ist hier eine strukturierte Darstellung von Fällen möglich. Ein wesentlicher Vorteil ist die einfache Modellierung der ”realen Welt” für die Entwickler. Doch die einfache Umsetzung der Repräsentation hat seinen Preis: die spätere Entwicklung der Ähnlichkeitsbestimmung ist aufwendiger und benötigt besonders in 108 2.8 Fallbasiertes Schliessen Abbildung 2.39: Beispiel für eine objektorientierte Repräsentation der späteren Anwendung eine gute Performance des Rechensystems. Außerdem ist auch hier die Repräsentation von Aktionsfolgen nicht ohne weiteres möglich. Geeignet ist die OO-Repräsentation für komplexe Fallstrukturen im analytischen Bereich. Repräsentation durch Graphen Mit Hilfe von Graphen können ebenfalls Probleme gut beschrieben werden. So kann man sich eine Repräsentation mit UML vorstellen, die Problemfälle in der Programmierung darstellt. Im Bereich der Chemie eignen sich Graphen zur Darstellung von Molekülstrukturen. Die eigentlichen Stärken liegen jedoch im Bereich der Lösungsbeschreibung. Die Knoten des Graphen beschreiben die auszuführenden Tätigkeiten. Die Kanten können die Reihenfolge und repräsentieren Alternativen definieren. Bei dieser Datenstruktur sind Aktionsfolgen einfach darstellbar. Jedoch sind die Möglichkeiten der strukturellen Gliederung stark beschränkt. Zur späteren Ähnlichkeitsbestimmung existieren gute Algorithmen aus der Graphentheorie. Es handelt sich hierbei um Tests auf Graphenisomorphie, auf die später noch eingegangen werden soll. Diese Algorithmen sind jedoch sehr aufwändig. So ist bespielsweise der Subgraphenisomorphie-Test NP-vollständig. Im Allgemeinen ist diese Form der Repräsentation gut geeignet für analytische und synthetische Aufgaben mit einer Graphenstruktur. Desweiteren findet sie häufig Anwendung bei der Darstellung von Aktionsfolgen (z.B. Lösungswege). 109 Kapitel 2 Grundlagen Prädikatenlogische Repräsentation Alle bisher genannten Repräsentationsformen können auf Prädikate abgebildet werden. Man benötigt hierzu Elementarsymbole (logische Zeichen, Funktionszeichen, Prädikatzeichen und Variablen), Terme und Formeln. Zur Erinnerung folgt eine kurze Definition von Termen und Formeln: 1. Defintion von Termen: a) Alle Variablen und 0-stelligen Funktionszeichen sind Terme. b) Wenn t1 ,...,tn Terme und f ein n-stelliges Funktionssymbol ist mit n > 0, dann ist f (t1 , .., tn ) ein Term. c) Alle Terme entstehen aus (a) durch Iteration von (b). 2. Defintion von Formeln: a) Wenn P ein n-stelliges Prädikatszeichen ist und t1 , ..., tn Terme sind, dann ist P (t1 , ..., tn ) eine Formel (Atomformel). b) Wenn F und P Formeln sind, dann sind auch ¬F , F ∨ P , F ∧ P , F ⇒ P Formeln. c) Alle Formeln entstehen aus (i) durch Iteration von (ii). Greifen wir das Beispiel der Attribut-Wert-Repräsenation auf, so kann man folgende Beschreibung des Falls vornehmen: Problem: spannung(ausgang, 14.5) ∧ relais(1, on) ∧ relais(2, of f ) ∧ led(23, on) Lösung: ⇒ def ekt(IC − 568) Die prädikatenlogische Repräsentation ist sehr flexibel und kann auch für Systeme mit hoher Komplexität verwendet werden. Die Theorie bietet auch hier eine gute Grundlage. Jedoch gibt es Schwierigkeiten bei der Darstellung von numerischen Werten. Man sollte vorher prüfen, ob die spätere Ähnlichkeitsbestimmung nicht zu aufwendig wird. 110 2.8 Fallbasiertes Schliessen 2.8.4 Ähnlichkeitsbestimmung Das zentrale Thema des fallbasierten Schliessens ist die Ähnlichkeitsbestimmung. Sie ist notwenig für die Auswahl eines Falles - sie beantwortet die Frage, ob ein Problem A auf das Problem B übertragen werden kann. Problemstellungen Zunächst soll hier darauf eingegangen werden, welche Fragestellungen und Probleme zu beachten sind, wenn man eine Ähnlichkeitsbestimmung vornehmen möchte: Eine absolute Ähnlichkeit wird es in den meisten Systemen nicht geben. So ist die Toleranz der Abweichungen von großer Bedeutung. Wichtig ist zu bedenken, wann ein Objekt A tatsächlich dem Objekt B ähnlich ist. Dabei ist es wichtig zu wissen, dass die einzelnen Attribute unterschiedliche Gewichtung haben können. Nicht jedes Attribut ist von gleicher Bedeutung. Diese Gewichtung kann mit einer Zahl zwischen 0 und 1 angegeben werden. Als Ergebnis müssen ggf. mehrere Fälle ausgewählt werden, damit der Anwender eine eigene Selektion vornehmen kann. So will der Anwender unter Umständen zwischen mehreren Alternativen wählen können. Daraus folgt, dass die Toleranz der Ähnlichkeit parametrisierbar sein muß. Unter Umständen müssen für die Ähnlichkeitsbestimmung Attributwerte umgeformt werden. Dabei darf deren Ordnungsinformation nicht verloren gehen: stark, mittel, weich wird zum Beispiel zu den Werten 3, 2, 1. Es gilt hierbei stark < mittel < weich. Ähnlichkeitsrelationen und Ähnlichkeitsmaße Um die Ähnlichkeit zwischen zwei Attributwerten zu ermitteln, wird ein Distanzmaß eingesetzt. Die einfachste Form der Distanz ist der Betrag der Differenz zweier Werte: Distanz = |AttributwertF allX − AttributwertF allY | (2.4) Dies ist jedoch eine zu triviale Berechnung. In der Praxis möchte man Werte im Intervall von 0 bis 1 für jedes einzelne Merkmal. So kann man die einzelnen Werte mit der Gewichtung multiplizieren und dann diese ermittelten Werte zu einem Betrag summieren. Dieser Wert dient dann zum Vergleich mit anderen Fällen in der Fallbasis. 111 Kapitel 2 Grundlagen Definition: Ähnlichkeitsmaß Ein Ähnlichkeitsmaß auf einer Menge M ist eine reellwertige Funktion sim : M 2 → [0, 1] (2.5) mit: • ∀x ∈ M : sim(x, x) = 1 (Ref lexivitaet) • ∀x, y ∈ M : sim(x, y) = sim(y, x) (Symmetrie) Definition: Distanzmaß Ein Distanzmaß auf einer Menge M ist eine reellwertige Funktion d : M 2 → IR+ (2.6) mit: • ∀x ∈ M d(x, x) = 0 (Ref lexivitaet) • ∀x, y ∈ M d(x, y) = d(y, x) (Symmetrie) Ein Distanzmaß d ist eine Metrik und (M, d) bildet einen metrischen Raum, wenn zusätzlich gilt: ∀x, y ∈ M : d(x, y) = 0 → x = y und ∀x, y, z ∈ M : d(x, y) + d(y, z) ≥ d(x, z) (Dreiecksungleichung). Folgend sollen zwei Ähnlichkeitsmaße definiert werden. Es handelt sich zum einen um den Hammingabstand und zum anderen um den Simple-MatchingKoeffizienten: Definition: Hammingabstand H(x, y) = n − n X i=1 xi · yi − n X (1 − xi ) · (1 − yi ) (2.7) i=1 Die Funktion hat folgende Eigenschaften: • H(x, y) ∈ [0, n], wobei n der maximale Abstand ist • H(x, y) bezeichnet die Anzahl der verschiedenen Attributausprägungen • H ist ein Abstandsmaß. Hier gilt H(x, x) = 0 und H erfüllt die Symmetrieeigenschaft. 112 2.8 Fallbasiertes Schliessen • H ((x1 , ..., xn ) , (y1 , ..., yn )) = H ((1 − x1 , ..., 1 − xn ) , (1 − y1 , ..., 1 − yn )) Definition: Simple-Matching-Coefficient (SMC) Die Formel des SMC ist etwas komplexer. Daher zunächst folgende Definitionen: • a= Pn xi · yi • b= Pn xi · (1 − yi ) • c= Pn − xi ) · yi • d= Pn − xi ) · (1 − yi ) i=1 i=1 i=1 (1 i=1 (1 • n=a+b+c+d Zunächst gilt: H(x, y) = b + c = n − (a + d) Der SMC sei dann wie folgt definiert: simH (x, y) = 1 − n − (a + d) a+d b+c = =1− n n n (2.8) Unter Umständen benötigt man Modifikationen der Ähnlichkeitsfunktion. Dies ist zum Bespiel notwendig, wenn eine Ähnlichkeit bei einer Ausprägung nur dann vorhanden ist, wenn beide einen bestimmten Wert erfüllen. Ähnlichkeit soll bespielsweise nur dann vorhanden sein, wenn beim Vergleich zweier Autos beide Motoren defekt sind. Liegt in beiden Fällen kein Defekt vor, so soll hier auch keine Ähnlichkeit bestehen. Kurz gesagt, hängt sim in unterschiedlicher Weise von den Ausprägungen der einzelnen Attribute ab. Nur ein Wert von ’1’ trägt demnach zur Ähnlichkeit bei. Ein mögliches a Ähnlichkeitsmaß in diesem Fall wäre die folgende Formel: sim = a+b+c Eine weitere Modifikation ist notwendig, wenn Attribute von unterschiedlicher Bedeutung für die Ähnlichkeit ist - wenn sim also in unterschiedlicher Weise von den einzelnen Attributen abhängig ist. Bei einem Vergleich zweier Computersysteme ist das Attribut ’CPU’ wichtiger als das Attribut ’CD-ROM’. Hier erweitert man den Hammingabstand um eine Gewichtung. Dabei steht man vor der Schwierigkeit, den Gewichtsvektor bestimmen zu müssen. Dies kann unter Umständen Kopfzerbrechen bereiten. Der Gewichtsvektor sei wie folgt definiert: α = (α1 , ..., αn ) mit: • Pn i=1 αi = 1 • αi ∈ [0, 1] 113 Kapitel 2 Grundlagen Der gewichtete Hammingabstand ergibt sich dann aus der Formel: Hα (x, y) = 1 − n X i=1 αi · xi · yi − n X αi · (1 − xi · (1 − yi ) (2.9) i=1 Eine weitere Möglichkeit des Abstandsmaßes ist der gewichtete Abstand nach Euklid. Dieser ist im Gegensatz zum Hammingabstand und dem SMC sehr einfach: v u n uX αi · (xi − yi )2 (2.10) d(x, y) = t i=1 Verhalten bei unbekannten Attributwerten Die große Stärke beim fallbasierten Schließen ist, dass trotz ungenauer Anfragen eine akzeptable Antwortmenge erzeugt wird. Fehlen Attributwerte, so gibt es drei Strategien, mit den fehlenden Angaben umzugehen. Zur Erinnerung soll hier erwähnt werden, dass das Ähnlichkeitsmaß einen Wert im Intervall von ”0” und ”1” hat. Im Falle hundertprozentiger Übereinstimmung beträgt dieser Wert ”1”. Bei der optimistischen Strategie geht man davon aus, dass es bei diesem Merkmal zu einer Übereinstimmung kommen wird. Daher wird der Wert des Ähnlichkeitsmaßes auf den Wert ”1” gesetzt. Die pessimistische Strategie geht im Gegensatz dazu von absolut keiner Übereinstimmung aus. Der Wert wird hier auf ”0” gesetzt. Die letzte Strategie nennt man ”Strategie des Erwartungswertes”. Für den fehlenden Attributwert wird ein wahrscheinlicher Wert ermittelt. Mit diesem wird dann die Ähnlichkeit bestimmt. Ähnlichkeitsbestimmung der Fallrepräsentationen Widmen wir uns nun der Ähnlichkeitsbestimmung bei den unterschiedlichen Fallrepräsentationen. Zunächst soll das Beispiel für die objektorientierte Repräsentation ergänzt werden: Zunächst werden die Distanzen der einzelnen Attributwerte in den jeweiligen Objektklassen berechnet. Wie diese Berechnung in diesem Fall genau erfolgt, soll vernachlässigt werden. Die Werte werden jeweils mit der festgelegten Gewichtung multipliziert. Anschließend kann dann die Summe gebildet werden, die nun die Distanz für die jeweilige Klasse ist. In diesem Fall erhält man die Werte ”0,62” für die Oberklasse und ”0,97” für die Unterklasse. Fehlende Werte werden mit Hilfe der optimistischen Strategie verarbeitet. So wird angenommen, dass es bei der Anfrage zu einer Übereinstimmung mit dem 114 2.8 Fallbasiertes Schliessen Abbildung 2.40: Beispiel für eine OO-Repräsentation mit Gewichten und Distanzmaßen Fall kommt. Das Distanzmaß wird also auf den Wert ”1” gesetzt. Liegt eine Baumstruktur vor, so kann die Ähnlichkeit leicht an Hand von der Position der beiden Vergleichskomponenten im Graphen bestimmten: Hier ist zum Beispiel der Duron dem Athlon ähnlicher, als zum Pentium IV. Abbildung 2.41: Beispiel einer Baumstruktur Dies ist damit begründet, weil der Duron und der Athlon einen gemeinsamen Vaterknoten besitzen. Die Ähnlichkeitsbestimmung bei Graphen beruht auf Tests auf Graphenisomorphie. Zwei Graphen G1 = (N1 , E1 ) und G2 = (N2 , E2 ) sind isomorph, wenn es eine bijektive Abbildung f : N1 7−→ N2 gibt, so dass gilt: (v, w) ∈ E1 gdw. (f (v), f (w)) ∈ E2 . Das folgende Beispiel zeigt zwei isomorphe Graphen. 115 Kapitel 2 Grundlagen Abbildung 2.42: Graphenisomorphie 2.8.5 Aufgabenklassen für fallbasierte Systeme Bei einem fallbasierten System unterscheidet man analytische und synthetische Aufgaben. Bei analytischen Aufgaben liegt der Schwerpunkt der Anwendung in der Analyse einer vorliegenden Situation. Dazu muß ein vorliegender Fall häufig einer Klasse zugeordnet werden. Diese Klassen sind im Allgemeinen fest vorgegeben. Eine Modifiziertung der Lösung ist hier nicht erforderlich. Hauptsächlich benötigt man lediglich nur die Ähnlichkeitsbestimmung. Folgende Aufgaben gehören zu den analytischen Aufgaben: • Klassifikation • Diagnose • Bewertung • Entscheidungsunterstützung Bei synthetischen Aufgaben liegt der Schwerpunkt im Zusammensetzen einer komplexen Lösung aus einzelnen Bestandteilen. Die Anfrage ist hier in der Regel eine Anforderung an eine Lösung. Die Lösungsmenge ist nicht begrenzt. Ein wesentlicher Bestandteil des Systems ist die Lösungsanpassung. Dazu ist eine große Fallbasis nötig. Die Entwicklung eines synthetischen Systems ist deutlich höher als bei einem analytischen Systems. Folgende Aufgabenbereiche gehören zu dieser Klasse: • Konfiguration • Design • Planung 116 2.8 Fallbasiertes Schliessen 2.8.6 Bezug zum Projekt ’DIONE’ Der Aufbau einer Fallbasis ist in unserem Fall nicht notwendig, da wir mit der LEDA-Datenbank ohne weiteres arbeiten können. Der Anwender nutzt das fallbasierte Schließen zur Ermittlung fehlender Attributwerte von Pflanzenmerkmalen. Die Eingabe ist eine Pflanze mit fehlenden Merkmalswerten. Der Algorithmus führt eine Ähnlichkeitsbestimmung durch und gibt als Resultat Werte für die fehlenden Merkmale aus. Dabei sollte der Anwender eine zusätzliche Information über die Qualität der ermittelten Werte bekommen - also eine Aussage über den Grad der Ähnlichkeit. Abbildung 2.43: Mögliche Nutzung des fallbasierten Schließens Die vorhandenen Attributwerte in der LEDA-Datenbank können problemlos zur Ähnlichkeitsbestimmung verwendet werden, da es sich um nummerische Werte handelt. Durch die Struktur der Datenbank und der verwendeten Sprachen liegt es nahe, eine objektorientierte Ähnlichkeitsbestimmung zu wählen. Die einzelnen Objektklassen werden also zunächst separat ausgewertet. Anschließend erfolgt eine Zusammenfassung der Werte zum Gesamtähnlichkeitsmaß. Das Ähnlichkeitsmaß kann durch eine relativ einfache Abstandsberechnung bestimmt werden. Jedoch spielt die Gewichtung hier eine große Rolle. Diese dürfte nicht ganz einfach umzusetzen sein. 117 Kapitel 2 Grundlagen 2.8.7 Vor- und Nachteile des fallbasierten Schließens Die Wartung des Systems, insbesondere der Fallbasis, ist minimal. Das System kann neue Fälle selbständig aus den modifizierten Antwortfällen in die Fallbasis übertragen. Somit wird neues Wissen automatisch hinzugefügt. Die Benutzerakzeptanz ist sehr hoch, da die Vorgehensweise des fallbasierten Schließens sehr natürlich ist. Jeden Tag vergleichen wir vorhandene Probleme mit zuvor gemachten Erfahrungen. Ein besonderer Vorteil liegt in der hohen Ausnutzung der bestehenden Datenmenge. Das Prinzip erlaubt auch relativ unscharfe Anfragen, also fehlende Attributwerte. Man erhält dennoch eine Menge von Antworten, die akzeptabel ist. Wie bereits erwähnt, kann man ein fallbasiertes System mit der Möglichkeit ausstatten, die Parameter von Ähnlichkeitsmaßen zu lernen. Dazu benötigt man jedoch ein Feedback vom Benutzer, der die ausgegebenen Lösungen bewerten muß. Leider gibt es aber auch einige Nachteile, die hauptsächlich die Entwicklungsphase betreffen. So ist die Definition der Ähnlichkeitsmaße sehr aufwändig. Oft kommt man um Probieren und Spielen mit den Gewichten nicht herum. Ein weiterer Nachteil ist, dass in den meisten Fällen ein Aufbau einer Fallbasis nötig ist. 118 2.9 Das Softwarepaket SPSS Clementine 7.2 2.9 Das Softwarepaket SPSS Clementine 7.2 von Jörn Künnemann 2.9.1 Einleitung In dieser Ausarbeitung geht es um das Softwarepaket Clementine von der Firma SPSS. Hierbei soll gezeigt werden, welche Möglichkeiten eine DataMining Software bietet und wie die Handhabung dieses Programms ist. Als Version wurde Clementine 7.2 benutzt. 2.9.2 Das CRISP-Datenmodell Abbildung 2.44: Das CRISP-Datenmodell Clementine baut auf dem CRISP-Datenmodell (Abbildung 2.44) auf, welches die Grundlage für die Realisierung von Projektplänen im bereich DataMining ist, wobei CRISP die Abkürzung für Cross Industry Standard for Data-Mining ist. Erstellt wurde dieses standardisierte Prozessmodell von verschiedenen Industriefirmen wie SPSS, OHRA und Daimler Chrysler anfang 1999. Ziel bei der Erstellung dieses Entwurfes war es, ein robustes, 119 Kapitel 2 Grundlagen allgemeines Modell zu entwickeln, welches die Kosten- und Zeit minimiert, Toolunabhängig ist, und eine Hilfe bei Dokumentation, Argumentation und Wissensmanagement bietet. Der Vorteil liegt darin, das man durch die Standardisierung ein leichteres Verständnis für alle Beteiligten bekommt, bessere Ergebnisse vorliegen und eine bessere Kommunikation nach außen hat. Vergleichbar ist dieses Modell mit Virtuous Cicle, KDD-Prozess und SEMMASAS. Es gibt sechs verschiedenen Phasen, welche zyklisch durchlaufen werden. 1. Business Understanding 2. Data Understanding 3. Data Preparation 4. Modeling 5. Evalution 6. Deployment In der ersten Phase Business Understanding geht es um das Projektziel und die Erfolgskriterien. Bsp. für ein Mobilfunkanbieter: “Durch die Kundenbindungsmaßnahmen soll die Kündigungsrate im Bereich Handy Privatkunden von 20% pro Jahr auf 15% gesenkt werden.“ Das Unternehmen macht sich einen Überblick über die Ressourcen, bezieht Risiken mit ein und stellt Kosten und Nutzen in Vergleich. Weiterhin wir das eigentlich Data-Mining Ziel beschrieben, um das Erfolgskriterium zu erfüllen: “Um das Geschäftsbezogene Ziel zu Erreichen, sollen Kündiger vorab mit einer Genauigkeit von 80% als solche identifiziert werden.“ Der letzte Schritt dieser Phase ist das erstellen eines Projektplanes wobei man sich hier einen ersten Überblick über die vorhandenen Tools verschafft und die geeigneten Methoden zur Zielerreichung bewertet. Außerdem müssen noch weitere Einzelheiten geklärt werden. In diesem Beispiel könnte das folgendermaßen aussehen: • Einteilung der Kunden in einer Gruppe, wann ist ein Kunde ein Kündiger • Festlegung eines Zeitrahmens, d.h. wann will ich mit dem Projekt beginnen und wann mache ich die nächsten Schritte • Wann ist die Kampagne ein Erfolg • Wie sieht es mit der Personellen Situation aus, verfüge ich über die nötigen Experten um Datenbank und andere Programme zu bedienen 120 2.9 Das Softwarepaket SPSS Clementine 7.2 • Brauche ich zusätzliche Hard- oder Software • Wo liegen die Grenzen des Projektes, welche Rechte muss ich einhalten, z.B. Datenschutz, in welchen räumlichen Kreis kann ich die Aktion durchführen Nach dem Abschluss dieser Phase beginnt man mit Data Understanding. Hierbei geht es um die Sammlung aller Daten die für das Projekt gebraucht werden. Dabei kommen folgende Fragestellungen zustande: • Wo kann ich auf die Daten zugreifen • Muss ich mir Zugriffsrechte besorgen • Wie steht es um die Qualität der Daten aus (Vollständigkeit) • Gibt es noch weiter Informationsquellen auf die ich aber momentan nicht zugreifen kann Bei der Auswahl der Daten aus verschiedenen Quellen ist darauf zu achten, dass diese auch kompatibel zueinander sind. Unterschiede kann es z.B. bei Datumsformaten geben (15-03-2004 oder 03-15-2004). Des Weiteren verschafft man sich einen ersten groben Überblick der Daten und stellt Zusammenhänge fest. Dieses geschieht damit, dass man sich die Daten in einer Tabelle betrachtet oder sie in verschiedenen Grafiken darstellt. Aufgabe in dieser Phase ist es auch, einen Datensammelungsbericht zu schreiben. In Phase drei, der Data Preperation, geht es um die Bereinigung der Datensätze. Es werden die benötigten Daten erfassen und wichtige Felder und Variablen herausgesucht. Des weiteren werden die Datensätze von den so genannten Nullund Leerfeldern bereinigt oder aber auch mehrere Datensätze zu einem zusammengefügt. Hier entsteht also eine gründliche Analyse des Datenbestandes. Bei der Modellierung geht es um die Auswahl des richtigen Vorhersageund Erklärungsmodells. Es wird ein Verfahren bestimmt, zu dem man Testdaten entwickelt. Diese Testdaten sind nur ein kleiner Teil des wirklichen Datenbestandes. Mit diesen Testdaten wird dann die Modellierung erzeugt und schließlich bewertet. Ziel ist es, ein Modell zu finden, das nicht nur für die Testdaten gute Ergebnisse bestimmt, sondern auch für den kompletten Datenbestand brauchbare Ergebnisse liefert. In der Evalution kommt es dann zur Auswertung der Ergebnisse die man mit der Modellierung bekommen hat. Hierbei muss genau darauf geachtet werden, ob auch wirklich das Projektziel erreicht wurde. Alle vorherigen Phasen werden noch einmal kritisch betrachtet um dann die nächsten Schritte zu planen. Die letzte Phase ist dann das Deployment, wo die Ergebnisse in der Realität umgesetzt werden. 121 Kapitel 2 Grundlagen Die gesamte Umsetzung muss überwacht werden und endet mit einem finalen Bericht. Clementine bietet zur Realisierung dieses Modells ein Hilfesystem an, damit das Projekt möglichst dicht an diesem Prozess realisiert wird. 2.9.3 Die Arbeitsoberfläche von Clementine Die Arbeitsoberfläche (Abbildung 2.45) von Clementine ist sehr einfach und übersichtlich gestaltet. Sie besteht aus zwei Hauptbestandteilen, einmal die Arbeitsfläche und einmal die so genannten Knoten. Auf der Arbeitsfläche werden die Knoten über Pfeile verbunden und stehen somit in einer Beziehung zueinander. Die dadurch entstehenden Graphen nennt man Streams. Das Platzieren der Knoten auf der Arbeitsfläche geschieht nach dem Dragand-Drop verfahren, sie können einfach mit der linken Maustaste auf den gewünschten Platz der Arbeitsfläche gezogen werden oder alternativ mit einem Doppelklick der linken Maustaste platziert werden. Die Verbindungen zwischen den einzelnen Knoten entstehen dadurch, das die mittlere Maustaste am Anfangsknoten gedrückt wird und am Endknoten wieder losgelassen wird. Clementine bietet außerdem die Möglichkeit, mehrere Streams gleichzeitig geöffnet zu haben. Zwischen den einzelnen Streams kann man im Auswahlfenster wechseln, wo des weiteren noch die Ergebnisse der Modellierung aber auch die Grafische Darstellung der Daten anwählbar ist. Wie die meisten anderen Programme mit einer GUI bietet auch Clementine eine Menüleiste am oberen Fensterrand wo bequem alle Befehle ausgeführt werden können. Mit der rechten Maustaste kann man je nachdem an welcher stelle man sich auf der Arbeitsoberfläche befindet unterschiedliche Kontexmenüs aufrufen. Alle für das angeklickte Objekt möglichen Befehle werden hier dargestellt. 2.9.4 Die einzelnen Knoten Die Knoten sind die Hauptbestendteile von Clementine. Mit Ihnen kann man Datenquellen öffnen, bearbeiten und sich den Inhalt anzeigen lassen. Getrennt sind die verschiedenen Knoten hierbei nach ihren Fähigkeiten wie Import, Datensatzoperationen, Feldoperationen oder Ausgabe. Aus welchem Bereich die platzierten Knoten kommen, kann man auf der Arbeitsfläche an ihren unterschiedlichen Formen erkennen. Import aus Datenquellen In Clementine gibt es verschiedene Wege vorhandene Datenquellen zu importieren, sei es aus einer Datenbank, einer Textdatei oder aus dem eigenen 122 2.9 Das Softwarepaket SPSS Clementine 7.2 Abbildung 2.45: Die Arbeitsoberfläche Programmformat von SPSS. Die vorhandenen Möglichkeiten sollen hier genauer beschrieben werden. Datenbank: Mit diesem Knoten können Daten über ODBC importiert werden. Unterstützt werden hierbei Excel, MS Access, DBase, SAS, Oracle und Sybase. Datei(var.): Hier liest Clementine die ASCII-Daten aus einer Textdatei ein. Die verschiedenen Spalten werden hierbei durch Trennzeichen gekennzeichnet. Vor dem Import ist bei den Einstellungen darauf zu achten, welche Trennzeichen in der Textdatei benutzt werden. Die verschiedenen Möglichkeiten sind unter anderem Komma, Semikolon oder Tabulator. Datei(fest): Hier liest Clementine die ASCII-Daten aus einer Textdatei mit fester Spaltenbreite ein. Sobald eine bestimmte Anzahl von ASCIIZeichen erreicht ist, wird eine neue Spalte gebildet. Die Spaltenbreite kann hierbei beliebig eingestellt werden, aber auch automatisch erkannt werden. SPSS-Datei: Hiermit können Daten importiert werden, die als SPSS-File gespeichert wurden. Es ist auch möglich, Daten aus älteren Clementine Versionen zu importieren. SAS: Hiermit ist es möglich SAS-Daten zu importieren. Dabei kann man 123 Kapitel 2 Grundlagen zwischen den Formaten SAS für Windows, SAS für UNIX, SAS Transport File und SAS version 7/8 auswählen. Benutzereingabe: Hier ist eine manuelle Eingabe der Daten möglich. Dieses kann dazu benutzt werden, eine kleine Testmenge für die Modellierung herzustellen. Datensatzoperationen Mit den importierten Datensätzen können verschiede Operationen ausgeführt werden. Dieses ist für die Phasen Data Understanding und Data Preperation sehr wichtig. Auswählen: Bei dem Knoten Auswählen werden nur Felder weiterverarbeitet, wenn diese eine bestimmte Bedingung erfüllen, beispielsweise Sollen nur Kunden betrachtet werden die älter als 40 Jahre sind. Als Bedingung müsste man folgendes einsetzen: “age > 40“, wobei age den Feldnamen bezeichnet für den die Bedingung zutreffen soll. Stichprobe: Hierbei handelt es sich um einen Knoten der eine Datensatz auf eine bestimmt Größe reduziert, z.B. werden nur die ersten 50 Datensätze, jeder dritte oder 20 willkürliche ausgewählt. Dieser Knoten wird häufig für das erstellen von einer Testmenge benutzt. Aggregieren: Hiermit werden bestimmte Datensätze in einer Gruppe eingeteilt, z.B. gibt es in einer Tabelle die Spalten Alter, Geschlecht und Region. Möchte man nun wissen wie das Durchschnittsalter getrennt nach Region und Geschlecht ist, so werden alle mit männlichem Geschlecht einer Region in einer Gruppe zusammengefasst und das Durchschnittsalter errechnet. Das selbe passiert mit den weiblichen Geschlecht bis alle auf ihre Region eingeteilt sind. Sortieren: Hiermit ist es möglich die Daten aufsteigend oder absteigend bedingt durch ein oder mehrere Felder zu sortieren. Mergen: Mit diesem Knoten ist es möglich mehrere Datenquellen zu einer zusammenzufügen. Hierbei kann man zwischen zwei Verfahren des zusammenfügens auswählen. 1. Die Datensätze werden einfach in der vorhandenen Reihenfolge nebeneinander gesetzt. 2. Es wird ein Schlüsselfeld in jeder Datenquelle definiert, damit jeder Datensatz genau zugeordnet werden kann. 124 2.9 Das Softwarepaket SPSS Clementine 7.2 Anhängen: Anders als beim Mergen, wo verschiedene Datenquellen spaltenweise zusammengefügt werden, kommt es hier zum Zusammenschluss von Datensätzen zeilenweise. Die Datenquellen sind hierbei strukturell gleich aufgebaut, jedoch unterschiedlich im Inhalt. Hierbei ist darauf zu achten, dass die untereinander gehangenen Felder dem gleichen Feldtyp entsprechen. Bei Mergen und Anhängen kann es zu Problemen kommen. Diese treten auf wenn die Datenquellen eine unterschiedliche Struktur im Aufbau haben, da hiermit eine große Anzahl von leeren Feldern entstehen kann und die Qualität der Daten damit deutlich zurück geht. Duplikat entf.: Dieser Knoten bewirkt, dass man aus jeder Klasse nur einen Repräsentativen Datensatz nimmt. Dieses könnte eingesetzt werden um aus jeder Altersklasse beispielsweise nur eine Person zu nehmen. Hierbei wählt Clementine jeweils den ersten Datensatz einer Klasse aus, die restlichen Duplikate werden gelöscht. Feldoperationen Die Feldoperationen bieten verschiedene Möglichkeiten an, um die einzelnen Felder zu manipulieren. Diese sind für die Qualitätssteigerung und für die Phase Data Preparation notwendig. Typ: Hierbei wird für die verschieden Felder der Typus festgelegt. Dieses ist nötig, damit die verschiedenen Algorithmen der Modellierung mit den Daten arbeiten können. Unterschieden wird hierbei zwischen Bereich, Diskret, Flag(Binär) und Set. Bei dem Typ Bereich handelt es sich um eine Eingrenzung numerischer Werte nach unten und nach oben, wobei der Minimalwert des Datensatzes als untere und der Maximalwert des Datensatzes als obere Schranke gewertet wird. Der Typ Flag kommt zustande, wenn es nur zwei Auswahlmöglichkeiten für ein Feld gibt, dementsprechend bietet Set die Auswahl mehrerer Möglichkeiten für ein Feld an. In Diskret werden Felder eingeteilt, deren Inhalt viele unterschiedliche String-Eingaben beinhaltet. Clementine bietet hierbei die Möglichkeit, den Typ des Feldes automatisch zu erkennen oder aber eine manuelle Festlegung. Filter: Mit diesem Knoten kann man die für die Modellierung nicht benötigte Felder löschen oder aber unpassende Feldbezeichnungen umbenennen. Ableiten: Mit Ableiten werden neue Felder auf der Grundlage vorhandener Felder erzeugt. Hierbei kommen die einfachen Rechenoperationen wie 125 Kapitel 2 Grundlagen dividieren oder multiplizieren zum Einsatz. Um z.B. das Verhältnis zweier Felder zueinander zu sehen, kann man mit dieser Operation Feld1 durch Feld2 dividieren. Das entstandene Datenfeld wird als neue Spalte dem Datensatz angehangen. Füller: Der Füller ist ein wichtiger Bestandteil um den Feldinhalt zu verändern. Hiermit kann man z.B. leere Felder automatisch mit Daten füllen. Hierbei muss man sich jedoch vorher im klaren sein, wie mit leeren Feldern umgegangen werden soll. Dabei gib es drei Möglichkeiten: 1. Datensätze mit leeren Feldern werden gelöscht, dies hat den Nachteil das die Quelldatei sehr klein werden kann und somit unbrauchbar für eine Modellierung wird 2. Die leeren Felder werden mit Mittelwerten oder Modellwerten gefüllt 3. Es wird ein Vorhersagemodell entwickelt, das die Felder mit dem am wahrscheinlichsten für diesen Datensatz möglichen Werten füllt. Hierbei wird überprüft, ob es einen ähnlichen Datensatz mit dem gesuchten Wert gibt Dichomatisieren: Hierbei wird eine Spalte mit Binärwerten eingefügt, die anzeigt ob ein ausgewähltes Datenfeld zu einer Bestimmten Gruppe gehört oder nicht. Zum Einsatz kommt dieser Knoten beispielsweise bei einer Warenkorbanalyse. Produkte die gekauft wurden bekommen eine 1, Produkte die nicht gekauft wurden bekommen eine 0. Verlauf: Hierbei wird eine neue Spalte mit Feldern in einer sortierten Reihenfolge erzeugt. Dabei setzt Clementine immer den nächsten Wert einer bestimmten Reihenfolge ins nächste Feld ein. Angewendet wird dieses z.B. bei Datumsfeldern. Diagramme Die Diagramme liefern erste Zusammenhänge der Daten und einen graphischen Überblick der Roh-Daten. Des Weiteren sind die Diagramme zur Auswertung und Bewertung der Modellierung wichtig. Alle Diagramme sind im Bildformat oder als HTML speicherbar und können somit bequem weiter verwendet werden. 126 2.9 Das Softwarepaket SPSS Clementine 7.2 Modellierung Hierbei möchte ich nicht auf die einzelnen Modellierungsarten in Detail eingehen, sondern nur darstellen, welche möglichen Verfahren in Clementine angewendet werden können. Eine detaillierte Beschreibung der Modelle sind in anderen Ausarbeitungen im Rahmen des Projektes Dione zu finden. Insgesamt bietet Clementine 12 verschiedene Versionen der Modellierung an: • Neuronale Netze: Netzwerk & Kohonen • Entscheidungsbäume: C5.0 & C&RT-Baum • Clusteranalyse: K-Means & Two-Step • Assoziationsanalyse Apiori & GRI • Regressionsanalyse: Regression & Logistisch • Sonstige: Sequenz & Faktor Ausgabe Mit diesen Knoten kann man sich Informationen über die Datensätze und Modellierung anzeigen lassen. Genutzt werden diese Knoten in jeder Phase des Crisp-Modells um in jeden Schritt möglichst viele Informationen zu gewinnen. Alle erzeugten Ausgaben kann man über das Ausgabefenster auf der rechten oberen Hälfte der Arbeitsfläche aufrufen. Bei der Ausgabe kann man zwischen Anzeigen auf dem Bildschirm und Ausgabe in ein File, wie z.B. html, wählen. Die gespeicherten Files können dadurch bequem weiterverarbeitet werden. Zur einfachen Darstellung ist der Tabellen-Knoten gedacht. Hier werden die Datensätze in einer einfachen Tabelle mit allen Datensätzen angezeigt. Der nächste Knoten ist die Matrix, wobei hier die Daten in einer Kreuztabelle angezeigt werden. In dieser Matrix kann man bereits erste Zusammenhänge der Daten erkennen. Mit dem Analyse-Knoten werden die fertigen Modellierungen unteranderem auf Richtigkeit überprüft. Hierbei wird getestet, auf wie viel Prozent der Datensätze das Modellierungsergebnis zutrifft. Im angefügten Beispiel ist eine Richtigkeit von 100% erreicht wurden. Dieses sind jedoch Traumwerte und werden in der Realität fast nie erreicht. Der Statistik Knoten liefert wichtige Erkenntnisse über die Daten. Hierbei kann man z.B. Datensätze erkennen, die für die Modellierung unwichtig sind. Dieses könnten Felder sein, die mit ihren Werten von den anderen extrem abweichen, und somit nicht repräsentativ für eine Modellierung sind. Der Qualitätsknoten dient zur Überprüfung der Vollständigkeit des Datensatzes. 127 Kapitel 2 Grundlagen Hierbei wird angezeigt, wie viel Prozent der Daten Leer-Felder oder Nullwerte sind. Der Report-Knoten dient dazu, einen ausführlichen Bericht zu erstellen. Dabei kann automatisch generierter Text über die Daten und Modellierung eingefügt werden. Des weiteren ist ein Export der Daten in eine Datenbank über ODBC möglich. Die Speicherung ins SPSS-Format bietet eine einfache Weiterverarbeitung der Daten in andere Produkte von SPSS an. Weiterhin gibt es die Möglichkeit der Speicherung in eine Textdatei und ins Format von MS Excel. Abbildung 2.46: Der Expression-Builder 2.9.5 Expression Builder Der Expression-Builder (Abbildung 2.46) dient dazu, es dem Benutzer möglichst einfach zu ermöglichen Formeln und Bedingungen zu erstellen. Aufrufen kann man ihn überall dort, wo man Funktionen und Formel einsetzen kann. Der Expression-Builder baut auf dem Sandkastenprinzip auf, was heißt, dass man durch einfaches zusammenklicken komplexe Formeln erreicht. Auf der linken Seite des Fensters sind hierbei die verschiedenen vordefinierten Formel zu sehen, in der Mitte gibt es die einzelnen Grundrechenarten und Vergleichsoperationen, rechts im Fenster sind alle Felder eines Datensatzen inkl. Typ zu sehen. Im oberen Fensterbereich sieht man die erstellten Formeln und Bedingungen, die man mit einem Mausklick auf “Überprüfen“ auf ihre Gültigkeit überprüfen kann. 128 2.9 Das Softwarepaket SPSS Clementine 7.2 2.9.6 Beispiel In diesem kleinen Beispiel sollen kurz die einzelnen Arbeitsschritte für die Modellierung von Daten durchgenommen werden. Bei dem Datensatz handelt es sich um eine Medikamentenkartei mit verschiedenen Daten. Diese sind Alter, Geschlecht, Blutnatriumkonzentration, Blutkaliumkonzentration, Bluthochdruck und das verabreichte Medikament. Abbildung 2.47: Patientenkartei Ziel bei dieser Modellierung ist es, möglichst genau vorher zu sagen, bei welchen Werten ein Patient welches Medikament einnehmen soll. Als erstes muss der Datensatz geöffnet werden. Dieses geschieht, in dem man den Knoten Datei(var.) durch einen Doppelklick in der Knotenauswahl auf die Arbeitsfläche bringen. Der so entstandenen Knoten wird mit einem Doppelklick der linken Maustaste geöffnet. Es erscheint ein Fenster mit mehreren Auswahlmöglichkeiten. Die zu öffnene Datei heisst “drug1n.txt“ und ist bei jeder Standardinstallation von Clementin 7.2 vorhanden. Als nächstes wird der Datensatz etwas genauer untersucht. Es wird ein Tabellen-Knoten auf der Arbeitsfläche platziert und dieser wird mit dem Datensatzknoten verbunden. Nach dem klicken mit der rechten Maustaste auf dem Tabellenknoten, erscheint ein Kontextmenü wo “Stream ausführen“ ausgewählt 129 Kapitel 2 Grundlagen wird. Hierbei werden alle Schritte vom Anfangsknoten bis zum angeklickten Endknoten durchgearbeitet. Nach dem Ende der Berechnung erscheint eine Tabelle (Abbildung 2.47) mit den Rohdaten der Datenquelle. Hierbei kann man sich einen kurzen Überblick der Daten verschaffen, genauere Aussagen über zusammenhänge kann man jedoch noch nicht treffen. Des weiteren sieht man in der Tabelle die Vollständigkeit der Daten. Um einen besseren Überblick über die Verteilung der Medikamente zu sehen, wird der Knoten Verteilung eingefügt und ebenfalls mit dem Datensatz verbunden. Nach dem Ausführen wird erkenntlich, welches Medikament wie häufig eingesetzt wurde (Abbildung 2.48). Hierbei wird deutlich, dass Medikament Y am meisten Abbildung 2.48: Medikamentenverteilung verabreicht wurde. Für die Verteilung der Medikamente sind in diesem Beispiel die Werte für Blutnatriumkonzentration und Blutkaliumkonzentration sehr entscheidend. Um die Abhängigkeit der Medikamente im Zusammenhang mit diesen Werten darzustellen, wird ein Plot-Knoten erzeugt und mit dem Datensatz verbunden. Bei den Eigenschaften wird als x-Achse die Spalte K und als y-Achse die Spalte Na zugeteilt. Als Farbe wird Medikament eingestellt. Nach dem Ausführen des Streams erhält man ein Diagramm, wo ersichtlich wird, das bei einem bestimmten Verhältnis von K zu Na nur ein bestimmtes Medikament verabreicht wird. Mit den bisherigen Schritten hat man einen ersten Überblick der Daten bekommen und durch die Darstellung in Diagramme bereits erste Abhängigkeiten herausgefunden. Um die Arbeitsfläche übersichtlich zu machen, können alle Knoten bis auf die Datenquelle gelöscht werden. Für den weiteren Verlauf der Modellierung sind diese nicht notwendig. Mit den Erkenntnissen aus den vorangegangenen Schritten wird der nächste Schritt vorbereitet. Es wird ein AbleitenKnoten auf der Arbeitsfläche erzeugt um ein neues Datenfeld im Datensatz zu erstellen. Dieser wird wieder mit der Datenquelle verbunden und seine Eigenschaften bearbeitet. Im Diagramm war ersichtlich, dass das Verhältnis 130 2.9 Das Softwarepaket SPSS Clementine 7.2 von K zu Na wichtig ist, und deshalb werden diese beiden Felder zueinander dividiert. Als neues Feld im Datensatz erscheint nun das Ergebnis dieser Division, welches zur weiteren Verarbeitung verwendet wird. Als nächstes wird das Ergebnis der neuen Spalte betrachtet (Abbildung 2.49), dazu wird der Ableiten-Knoten mit einem Histogramm-Knoten verbunden. Dabei wird ersichtlich, dass bei einem Verhältnis von über 15 zwischen N und K nur Medikament Y in frage kommt. Um die Medikamente genauer einzuteilen, Abbildung 2.49: Verhältnis von Na zu K müssen aber noch andere Werte mit in Betracht gezogen werden. Mit einem Netzdiagramm wird nun überprüft wie der Blutdruck die Medikamentenwahl beeinträchtigt. Dabei wird erkenntlich, dass Medikament A, B und C nur bei einer Art von Blutdruck verabreicht wird. Mit den bisher gewonnenen Ergebnissen ist jedoch noch keine genaue Einteilung der Medikamente möglich. Um in der Modellierung fort zu fahren, wird jetzt die genaue Datenauswahl getroffen. Mit dem Filter-Knoten werden die für die Modellierung nicht benötigten Felder entfernt. In diesem Fall sind das die Felder N und K, denn bei dieses Feldern interessiert nur das Verhältnis dieser beiden untereinander. Als nächstes wird die Typesierung der Felder mit dem Typ-Knoten festgelegt. Dieser wird mit dem Filter-Knoten verbunden und geöffnet. Die Festlegung des Typs wird hierbei automatisch ermittelt in dem man den Knopf “Werte Lesen“ betätigt. Des weiteren wird hier noch festgelegt, welches die Zielvariable ist. Da zu ermitteln ist, wann welches Mdikament eingesetzt werden soll, wird Medikament auch als Zielvariable in dem 131 Kapitel 2 Grundlagen Feld Richtung eingestellt. Jetzt kommt es zur Auswahl des Modellierungsverfahrens, optimal für diesen Fall ist der Entscheidungsbaum C5.0 der auf der Arbeitsfläche platziert wird und mit dem Typknoten verbunden wird. Um die Modellierung abzuschließen, muss der fertige Stream (Abbildung 2.51) noch einmal ausgeführt werden und das Ergebnis kann im Modellfenster betrachtet werden. Dazu wird auf dem neu entstandenen Knoten im Modellfenster das Kontextmenü geöffnet und durchsuchen angewählt. Hierbei kann man sich das Ergebnis einmal textuell als Baum (Abbildung 2.50) anzeigen lassen, oder aber die Graphische darstellung wählen. Um zu überprüfen ob die Abbildung 2.50: Textuelle Baumdarstellung des Ergebnis Modellierung ein akzeptables Ergebnis liefert, wird dieses mit dem AnalyseKnoten überprüft. Es wird hierbei der im Modellierungsfenster entstandene Knoten mit dem Typ-Knoten verbunden und ein Analyse-Knote angehangen. Bei erneuten Ausführen des Streams wird erkenntlich, dass das Ergebnis eine 100%ige Vorhersage für die Verteilung der Medikamente liefert, in der Realität sind solche Ergebnisse jedoch höchst unwahrscheinlich. 132 2.9 Das Softwarepaket SPSS Clementine 7.2 Abbildung 2.51: Screenshot des fertigen Stream 2.9.7 Abkürzungen SPSS: Statistical Package for the Social Sciences (Firmenname) CRISP: Cross Industry Standard for Data Mining KDD-Prozess: Knowledge Discovery in Database SEMMA: Sample Explore Modify Model Access MS: Microsoft ODBC: Open DataBase Connectivity 133 Kapitel 2 Grundlagen 134 Kapitel 3 Anforderungsdefinition Im Rahmen des EU-Projekts LEDA entsteht in der Abteilung Umweltinformatik eine Datenbank zur Speicherung von Pflanzendaten. Es werden dabei für über 3000 Wildpflanzenarten Nordwesteuropas jeweils ca. 30 pflanzenphysiologische Merkmale unterschieden. Ziel der Projektgruppe ist es, aufbauend auf dem vorhandenen Informationssystem Komponenten zu entwickeln, die das Erkennen von Zusammenhängen zwischen Merkmalen auf physiologischer, räumlicher und umgebungsbezogener Ebene ermöglichen. Dazu sollen verschiedene Methoden aus den Bereichen Data Mining, Clustering und Machine Learning untersucht, implementiert und bewertet werden. Die Integration einiger ausgewählter Algorithmen soll unter einer einheitlichen Web-basierten Workbench erfolgen, die die Anwendung der Methodiken und die Darstellung der Ergebnisse ermöglicht. 3.1 Vorgaben und Ziele Als Basis dient eine bereits vorhandene Oracle-Datenbank, die über ca. 3000 Pflanzen mit 30 pflanzenphysiologischen Merkmalen verfügt. Es soll eine Webapplikation erstellt werden, die plattformunabhängig ist. Diese Applikation soll es dem Benutzer des Internetportals möglich machen, Data-Mining zu betreiben. Dazu werden einige Verfahren zur Verfügung gestellt, wie zum Beispiel das Clustering oder die Erstellung eines Entscheidungsbaumes. Genauere Details der Funktionalität entnehme man den folgenden Ausführungen in diesem Dokument. Ziel der Projektgruppe DIONE ist die Entwicklung einer Data-Mining-Workbench, die im realen Betrieb einer Web-basierten Datenbank (’LEDA’) mit Pflanzenmerkmalen von externen Benutzern eingesetzt werden kann. 135 Kapitel 3 Anforderungsdefinition 3.1.1 Web-Applikation innerhalb eines Service-Containers Die Implementierung der Algorithmen wird in der Programmiersprache Java erfolgen und die einzelnen Module sollen als Web-Applikationen innerhalb eines Servlet-Containers ablaufen. Als Server wird der Apache Tomcat 5.x verwendet. 3.1.2 Entwicklungsumgebung Die Implementierung erfolgt unabhängig vom Betriebssystem. Als Entwicklungsumgebung wird Eclipse in der Version 3.0 verwendet. Zusätzlich wird das Tomcat Plugin von SYSDEO in der Version 3.0.0.alpha1 eingebunden. Zur Versionskontrolle wird zudem CVS eingesetzt, das auch von Eclipse unterstützt wird. Der Server ”polaris-neu.offis.uni-oldenburg.de”, der auch den Zugriff auf die Oracle-Datenbank erlaubt, wird vom Softwarelabor zur Verfügung gestellt. 3.2 Szenarien und Anwendungsfälle Vorstellbare Szenarien für DIONE sind DataMining-Vorgänge, die von Forschern durchgeführt werden, welche zusätzliche Erkenntnisse über Pflanzenarten und deren möglichen Zusammenhänge unter Zuhilfenahme der Daten, die in der LEDA-Datenbank gespeichert sind, erlangen wollen. Die Forscher sind in der Regel gut bis sehr gut mit dem Datenbankschema(vgl. [4]) der LEDA-Datenbank vertraut. Ihr Aufenthaltsort, von dem sie die DataMiningExperimente aus betreiben wollen, ist nicht bestimmt. Es ist aber davon auszugehen, dass sie über einen internetfähigen Personal Computer mit einem nicht allzuschnellen Internetzugang verfügen, mit dem sie durch Verwendung eines graphischen Webbrowsers Zugang zum World Wide Web erlagen können. 3.2.1 Akteure Wie bereits erwähnt, kann davon ausgegangen werden, dass die Benutzer des DIONE-Systems über gute Kenntnisse des LEDA-Schemas verfügen. Dagegen ist nicht gesichert, dass die selben Benutzer über große Computererfahrung verfügen. Aus diesem Grund sollte nur vorausgesetzt werden, dass die DIONE-Benutzer fähig sind, selbständig ins World Wide Web über einen Webbrowser zu gelangen. Die Webseiten, über die das DIONE-System durch 136 3.2 Szenarien und Anwendungsfälle die Benutzer gesteuert werden kann, muss also weitestgehend selbsterklärend sein, ergonomische Richtlinien erfüllen und wie eine normale“ Webseite da” herkommen. Dagegen kann die fachliche Kompetenz der DIONE-Benutzer bezogen auf das Forschungsgebiet als sehr ausgeprägt vorausgesetzt werden. Es ist daher nicht nötig, Hilfestellung aus biologischer Sicht zur Verfügung zu stellen. 3.2.2 Wesentliche Anwendungsfälle DIONE DataMining­ Modell erstellen Benutzer DataMining­ Modell verifizieren Pflanze in Klasse einordnen (Vorhersage) Abbildung 3.1: Wesentliche Anwendungsfälle Die wesentlichen Anwendungsfälle - vgl. Abbildung 3.1 - beschreiben plakativ die drei wesentlichen DataMining-Vorgänge, welche aus den denkbaren Szenarien hervorgehen, welche allesamt innerhalb eines sog. Experiments durchgeführt werden können. DataMining-Modell erstellen Ein DataMining-Modell kann eine Klassenbeschreibung, ein Entscheidungsbaum oder auch eine Regelmenge sein. Ein solches Modell wird mit einer Menge von Trainingsdaten“ (Menge von Pflanzen mit bestimmten betrach” teten Merkmalsausprägungen) evtl. interaktiv mit dem Benutzer erstellt. Um 137 Kapitel 3 Anforderungsdefinition z.B. eine Pflanze in eine Klasse mit einer gewissen Wahrscheinlichkeit zuordnen zu können, ist ein vorhandenes DataMining-Modell notwendig. DataMining-Modell verifizieren Um die Güte eines erstellten DataMining-Modells verifizieren zu können, hat der Benutzer die Möglichkeit, das Modell mit Hilfe einer Menge von Testdaten zu verifizieren. Diese Testdaten haben in der Regel den gleichen Aufbau wie die Trainingsdaten (s.o.), beinhalten aber Werte, welche aber zur Modellerstellung keine Verwendung gefunden haben. Vorhersage Schließlich hat der Benutzer die Möglichkeit, ein erstelltes DataMining-Modell anzuwenden. Hierzu kann z.B. eine Pflanze auf einen Entscheidungsbaum angewandt werden und eine Vorhersage gegeben werden, mit welcher Wahrscheinlichkeit die Pflanze in eine bestimmte Klasse fällt. 3.2.3 Weitere Anwendungsfälle Die wesentlichen Anwendungsfälle werden - wie bereits erwähnt - jeweils im Rahmen eines Experiments durchgeführt. Es folgen nun weitere Anwendungsfälle, welche sich auf die Handhabung dieser Experimente beziehen. Plakativ dargestellt in Abbildung 3.2. Konfiguration der Experimente Zu einem Experiment gehört die Datenmenge ( Traitmatrix“), das verwen” dete DataMining-Verfahren (z.B. Clustering, Entscheidungsbaum), die Anwendung (Modell erstellen, verifizieren bzw. Vorhersage) sowie am Ende das Ergebnis. Die einzelnen Elemente eines Experimentes lassen sich je nach Art unterschiedlich umfangreich konfigurieren. So könnte z.B. festgelegt werden, wieviele Klassen beim Clusteringverfahren erstellt werden sollen. Auch lässt sich die Traitmatrix genau bestimmen. Neben der genauen Angabe, welche Pflanzen in der Datenmenge auftauchen sollen, kann auch bestimmt werden, über welche Merkmale der Pflanzen das DataMining durchgeführt werden soll. 138 3.2 Szenarien und Anwendungsfälle Weitere DIONE Services Konfiguration der Experimente Aggregation der Quelldaten Laden und Speichern von Experimenten Benutzer Scheduling von laufenden Experimenten Exportieren / Veröffentlichen von Ergebnissen Import von Klassenbeschrei­ bungen Abbildung 3.2: Die weiteren Anwendungsfälle Aggregation der Quelldaten Aufgrund der Gegebenheit, dass in der LEDA-Datenbank eine Menge von Nullwerten (Merkmalsausprägungen ohne Eintrag) vorhanden sind, muss dem Benutzer die Möglichkeit gegeben werden, die Quelldaten der Traitmatrix zu aggregieren. Hierzu zählt z.B. die Anwendung eines Nullwertverfahrens (z.B. Durchschnitt einsetzen, oder Zufallszahl) für ein Merkmal auf alle nichtausgefüllten Merkmalsausprägungen. Laden und Speichern von Experimenten Alle an dem Experiment beteiligten Elemente (Quelldaten, Verfahren, Ergebnis) und ggf. deren Konfigurationen sollen abgespeichert und auch wieder geladen werden können. Scheduling von Experimenten Der Benutzer soll die Möglichkeit haben, bei langwierigen Experimenten, mehrere Experimente zu starten. Dazu gehört dann auch, dass er für deren 139 Kapitel 3 Anforderungsdefinition Durchführung unterschiedliche Prioritäten festlegt und auch ggf. laufende Experimente abbrechen ( killen“) kann. ” Import von Klassenbeschreibungen Es soll dem Benutzer die Möglichkeit gegeben werden, von ihm selbst erstellte Klassenbeschreibungen auf das System hochzuladen, welche dann als Attribute der Quelldaten (Spalten in der Traitmatrix) gewertet werden, welche ausgehend von der nun hochgeladenen Datenbasis erweitert / modifiziert werden kann. Exportieren / Veröffentlichen von Experimenten / Ergebnissen Wenn der Benutzer ein Experiment für spannend genug hält, dass sich auch andere dafür interessieren künnten, so hat er die Möglichkeit, das Experiment öffentlich“ zu machen, so dass auch andere Benutzer das Experiment laden ” und nachvollziehen können. Ebenso soll er einen Report über das Experiment erstellen können und Ergebnisse in einem gängigem Exportformat herunterladen können. 140 3.3 Prozessverläufe 3.3 Prozessverläufe Konfiguration der Verfahren Eingabe Verfahren 1 Vergleich der Ergebnisse Ausgabe 1 Interaktion Verfahren 2 Ausgabe 2 Abbildung 3.3: Prozessverlauf Übersicht Abbildung 3.3 zeigt eine grobe im Weiteren noch näher beschriebene Übersicht über den Prozessablauf des Data-Mining mit DIONE: Gefolgt von einer Eingabe von Daten können verschiedene konfigurierbare Data-Mining Verfahren auf diesen Daten angewandt werden, und deren Ergebnisse miteinander verglichen werden. Für bestimmte Verfahren können die erreichten Ergebnisse auch wieder als Eingabe dienen. Grundsätzlich ist vorgesehen, dass bestimmte Data-Mining Verfahren maßgeblich interaktiv durch den Benutzer beeinflusst werden können. 141 Kapitel 3 Anforderungsdefinition 3.3.1 Verfahren Speichern der Parametrisierung Parametrisieren des Verfahrens Laden von Verfahrens-Parametern Ausfuehrung des Algorithmus Interaktive Anpassung Bestimmen der Trait-Matrix Interne Repraesentation Darstellung des Ergebnisses visuell Speichern des Ergebnisses Vergleich der Ergebnisse Export der Ergebnisse Intern (Weiterverarbeitung) Extern (graphisch, Tabellenform, pmml etc.) Abbildung 3.4: Prozessverlauf für Verfahren Im folgenden sei der universale Prozessverlauf für die einzelnen Verfahren beschrieben. Er beschreibt den Ablauf bei Auswahl einer der wesentlichen Anwendungsfälle, die zuvor beschrieben wurden. Zunächst muss eine TraitMatrix bestimmt werden. Das System gibt anschließend die Möglichkeit, die Parameter des Verfahren zu ändern oder eine bereits gespeicherte Konfiguration zu laden. Nach dem Laden können die Parameter noch verändert werden. Die gewählte Konfiguration kann vor der Ausführung des Verfahrens gespeichert werden. Nach Ausführung des Verfahrens kann das Ergebnis in verschiedenen Repräsentationsformen ausgegeben werden. Dies ist stark vom jeweiligen Verfahren abhängig. Anschließend kann das Ergebnis gespeichert oder exportiert werden. Desweiteren besteht die Möglichkeit einen Vergleich mit anderen Ergebnissen vorzunehmen. Der Ergebnisvergleich wird im Folgenden beschrieben. 142 3.3 Prozessverläufe 3.3.2 Trait-Matrix Aggregation von Daten Behandlung von Nullwerten Auswählen von Merkmalen Auswählen von Pflanzen Speichern der Trait-Matrix Laden einer Trait-Matrix Hochladen einer Pflanzenliste mit Attributen Abbildung 3.5: Prozessverlauf Trait-Matrix Das Bestimmen einer Trait-Matrix wird durch zwei wichtige Schritte bestimmt: Das Festlegen, welche Pflanzen in die Matrix aufgenommen werden sollen, und das Auswählen von den Merkmalen für die Matrix. Der letztere Schritt schließt die Aggregation von Daten mit ein. Die beiden Schritte Auswählen von Pflanzen“ und Auswählen von Merkmalen“ können in be” ” liebiger Reihenfolge - auch sich gegenseitig unterbrechend - vorgenommen werden. Alternativ kann auch eine bereits gespeicherte Trait-Matrix geladen werden, welche wiederum verändert werden kann. Desweiteren soll es möglich sein, die Trait-Matrizen abzuspeichern, damit sie in anderen Situationen erneut geladen werden können. 143 Kapitel 3 Anforderungsdefinition 3.3.3 Ergebnisvergleich Durchführen eines Qualitätsvergleichs Ausgabe des Vergleichsergebnisses Auswahl von Ergebnissen Laden von Ergebnissen Speichern der Ergebnisse Abbildung 3.6: Prozessverlauf für Ergebnisvergleich Die nachdem Anwenden eines Data-Mining-Verfahrens erzielten Ergebnisse können mit anderen bereits vorhandenen Ergebnissen verglichen werden. Für diesen Qualitätsvergleich können die entsprechenden Ergebnisse geladen und ausgewählt werden. Es erfolgt eine Ausgabe des Vergleichsverfahrens. 3.4 Funktionale Anforderungen 3.4.1 Benutzerverwaltung Registrierte Benutzer der Internetpräsenz haben uneingeschränkten Zugriff auf alle in der LEDA-Datenbank enthaltenden Informationen und über die zur Verfügung gestellten Data-Mining Algorithmen. Sie melden sich mit einem Benutzernamen und einem Passwort an. Das Benutzerprofil, das alle notwendigen Informationen (e-Mail-Adresse, Vor- und Nachname) enthält, kann von ihm geändert werden. 3.4.2 Management der Arbeitsabläufe Da unter Umständen die Berechnungen des Data-Minings zeitaufwendig ist, wird das Verfahren auch dann fortgesetzt, wenn der Benutzer sich abmeldet. Ist das Verfahren abgeschlossen, erhält er eine Benachrichtigung per e-Mail. 144 3.4 Funktionale Anforderungen Zudem verfügt das System über sogenannte ”persistente Sessions”: Der Arbeitsstatus bleibt nach dem Abmelden aus dem System erhalten. 3.4.3 Auswahl der Trait-Matrix Zur Eingabe benötigt der Algorithmus unter anderem die Auswahl der Pflanzen mit den gewünschten Attributen (z.B. Trainings- oder Testmengen). Diese können nach belieben ausgewählt werden. Nullwerte können dabei mit verschiedenen Verfahren behandelt werden. Durch ein flexibles Suchsystem können die Pflanzen selektiert werden. So zusammengestellte Matrizen können gespeichert und geladen werden. 3.4.4 Modellerstellung Mit der Modellerstellung wird ein DataMining-Modell (z.B. ein Entscheidungsbaum) durch ein DataMining-Verfahren auf Basis einer Trainingsdatenmenge erstellt. Nach Auswahl eines der zur Verfügung stehenden Algorithmen, kann eine Konfiguration des Verfahrens vorgenommen werden. Dabei wird dem Anwender eine Konfiguration empfohlen, die er seinen Bedürfnissen anpassen kann. Konfigurationen können gespeichert und geladen werden. Anschließend erfolgt die Ausführung des Verfahrens. 3.4.5 Modellverifizierung Mit der Modellverifizierung wird ein erstelltes DataMining-Modell (z.B. ein Entscheidungsbaum) durch ein DataMining-Verfahren auf Basis einer Testdatenmenge verifiziert. Nach dem Laden eines zu verifiziereden Modells und der Auswahl einer passenden Trait-Matrix kann die Verifizierung gestartet werden. Die erstellte Modellverifizierung kann als Konfiguration geladen und gespeichert werden. 3.4.6 Modellvorhersage Durch die Modellvorhersage hat der Benutzer die Möglichkeit ein erstelltes DataMining-Modell auf eine Pflanze anzuwenden. Hierfür muss ein bereits erstelltes Verfahren geladen und eine Pflanze ausgewählt werden. Durch Starten des Verfahrens wird das Modell auf die gewählte Pflanze angewendet. In der Darstellung des erzeugten Ergebnis wird z.B. durch Anwendung eines 145 Kapitel 3 Anforderungsdefinition Entscheidungsbaums auf eine Pflanze eine Vorhersage gegeben werden, mit welcher Wahrscheinlichkeit die Pflanze in eine bestimmte Klasse fällt. 3.4.7 Ergebnisausgabe Nach der Ausführung eines Datamining-Verfahren kann sich der Benutzer das Ergebnis darstellen lassen. Abhängig vom gewählten Verfahren wird das Ergebnis dem Benutzer unterschiedlich präsentiert. Für ein Verfahren können unterschiedliche Sichten auf das Ergebnis zur Verfügung stehen. Für Ergebnisse die auf gleiche Darstelllungen (z.b Regeln) abgebildet werden können, sollten diese Darstellungen dem Benutzer zur Verfügung stehen. 3.4.8 Jobverwaltung Dadurch das dem Benutzer die Möglichkeit gegeben wird nach dem Starten eines Verfahrens weiter zu Arbeiten, kann er mehrere Verfahren gleichzeitig durch das System bearbeiten lassen. Die Anzahl von ihm angestoßenen Verfahren muss dem Benutzer in jeder Sicht präsentiert werden. Er hat die Möglichkeit sich über die laufenden Verfahren zu informieren und sie abzubrechen. 3.5 Nichtfunktionale Anforderungen 3.5.1 Latenzzeiten Um ein das Benutzungs-Interface eines Software-Systems für den Nutzer möglichst konfortabel und transparent zu gestalten, ist es notwendig, dass Latenzzeiten auf ein Minimum reduziert werden. Nach Möglichkeit sollte der Benutzer umgehend nach einer eigenen Aktion eine Reaktion des Systems darauf erhalten - ggf. durch eine einfache Empfangsbestätigung der Eingabe. Das Erreichen dieser Ziele ist bei Applikationen, die als Client-Server Architektur über ein Netzwerk (z.B. das Internet) arbeiten, eine Herausforderung: Latenzzeiten treten bei der Datenübertragung, der Reaktion des Webservers und der es Datenbankservers auf. Dazu kommen noch die ohnehin vorzunehmenden Berechnungsschritte wie z.B. das Aufbauen einer aktualisierten GUI. Aufgrund der Wahl einer Webbrowser basierten Benutzungsschnittstelle können noch weitere Latenzzeiten wie z.B. das generelle Neuaufbauen der kompletten aktuell angzeigten Webseite entstehen. 146 3.5 Nichtfunktionale Anforderungen Die Reduzierung der Latenzzeiten muss aber im Einklang mit anderen software-ergnonischen Zielen wie der Benutzerführung und der Übersicht geschehen. Es muss ein Kompromiss zwischen möglichst wenig Serveranfragen und einer zufriedenstellenden Benutzerführung gefunden werden. 3.5.2 Erweiterbarkeit Durch eine konsequente Kapselung wird eine hohe Erweiterbarkeit garantiert. Die Benutzeroberfläche erhält die Anzeigeobjekte in der für die Anzeige nötige Form. Trotz der Entscheidung, lediglich die Algorithmen von Xelopes zu nutzen, ist eine spätere Verwendung von anderen Algorithmen ohne hohen Aufwand möglich. Individuelle Programmierung erfordert jedoch die Darstellung des Ergebnisses, da dies nicht universell zu definieren ist. Die Ergebnisformen sind dafür zu unterschiedlich. Jedoch sei nochmal erwähnt, dass eine Meta-Darstellung angestrebt ist. 3.5.3 Sicherheit Grundsätzlich werden die allgemein geltenden Standards für Sicherheit in der Softwaretechnik eingehalten. Der Schutz der Datenbank vor unberechtigten Zugriffen fällt nicht in den Zuständigkeitsbereich dieses Projektes. Da minderrelevante, personenbezogende Daten zwischen Client und Server übermittelt werden (Vor- und Nachname, e-Mail-Adresse) - jedoch keine besonders sensible Daten wie z.B. Bankverbindungsdaten - wird auch eine SSLVerschlüsselung verzichtet. Diese Entscheidung wurde auch getroffen, da dieses Verfahren einen negativen Einfluß auf die Übertragungsgeschwindigkeiten hat. 3.5.4 Verfügbarkeit Auf die Verfügbarkeit des Servers hat die ”PG DIONE” keinerlei Einfluss und übernimmt daher auch keine Verantwortung. Jedoch wird bei der Entwicklung darauf geachtet, dass stabilitätskritische Programmaktionen, die den Server in bedrohliche Zustände bringen könnten, vermieden werden. 3.5.5 Korrektheit Data-Mining kann unter Umständen ein sehr komplexer Prozess sein. Daher ist es möglich, dass aufgrund von häufigen Berechnungen mit Fließkomma- 147 Kapitel 3 Anforderungsdefinition zahlen Ergebnisse durch Rundungsfehler verfälscht werden können. Diese Möglichkeit besteht insbesondere dann, wenn es DIONE-Services gibt, welche Client-seitig ausgeführt werden können, da hier mit unterschiedlicher ausführender Hardware operiert wird. Weitere Möglichkeiten der Ergebnisverfälschung bestehen, wenn Data-Mining-Verfahren mit Heuristiken arbeiten, die zufällige Werte verwenden. Es kann also nicht garantiert werden, dass bei gleicher Dateneingabe und verschiedenen Berechnungsvorgängen auf ggf. unterschiedlichen Systemen immer auch das gleiche Ergebnis erzielt werden kann. 3.5.6 Kompatibilität Es wird verlangt, dass die Webseiten von DIONE mit den Webbrowsern der neuesten Generation mit der höchsten Verbreitung in möglichst einheitlicher Optik funktionieren. Dazu werden die Webseiten in dem Format XHTML ” 1.0“ erstellt und anschließend mit einem entsprechenden Validator auf Konsistenz überprüft. Eine vollständige Funktionsgarantie im Sinne der Anforderungsdefinition wird allerdings nur für den Webbrowser Firefox ab Version 1.0 bzw. auf gleicher Technik basierender Netscape bzw. Mozilla-Browser bei Aktivierung von JavaScript und Cookies gegeben. Diese Konfiguration ist Clientseitig als Referenz vorgesehen. Nichtverfügbarkeit von JavaScript kann zu Einschränkungen im Bedienkompfort führen. Webbrowser, die auf Technik von Opera, MSInternetExplorer, Safari oder anderen basieren, zeigen die DIONE-Seiten unter Umständen in abgewandelter Form an, sollten aber auch eine vollständige Funktionalität ermöglichen. Auch kann es zu abgewandelter Anzeige kommen, wenn bestimmte Systemschriftarten nicht installiert sind. Als minimale Bildschirmauflösung werden 1024 mal 768 Punkte vorrausgesetzt. 3.5.7 Haftung PG DIONE“ übernimmt grundsätzlich nur Haftung im Rahmen der notwen” digen gesetzlichen Bestimmungen. Die Nutzung der Softwareprodukte unterliegen zwar einer strengen Kontrolle, für Fehler und dadurch eventuell auftretende Datenverluste oder Einwirkungen auf betriebliche Arbeitsmöglichkeiten übernimmt ”PG DIONE” keine Haftung. Der Kunde kann bei Nachweis von grober Fahrlässigkeit bei der Programmierung des Softwareproduktes entsprechende Haftungsanforderungen stellen. ”PG DIONE” übernimmt keine Haftung für sonstige Fehler, die seitens externer Software verursacht 148 3.6 Systemaufbau wird (Viren, Betriebssysteme, Installationsprogramme, Datenbankhilfsprogramme). ”PG DIONE” oder Lizenzgeber, Direktoren, leitende Angestellte oder Mitarbeiter haften in keinem Fall für etwaige direkte, indirekt verursachte oder gefolgte oder besondere Schäden (Gewinnverluste, Betriebsunterbrechung oder Verluste von Geschäftsinformationen usw.), die aufgrund der Verwendung oder der Nichtverwendbarkeit der Software oder der begleitenden schriftlichen Materialien entstehen, unabhängig vom Grund des Anspruchs und selbst wenn ”PG DIONE” oder ein Vertreter von ”PG DIONE” auf die Möglichkeit solcher Schäden hingewiesen wurde. ”PG DIONE” übernimmt keine Garantie für die Erreichbarkeit des zur Verfügung gestellten Servers. Die Haftung im Bezug auf Fehler beim Server beschränkt sich ausschließlich auf die Konfiguration des Serverprogrammes (Apache Tomcat 5.x), da ”PG DIONE” keinen Einfluss auf die Hardware oder das Betriebssystem (incl. Systemprogramme wie Firewalls) hat. 3.6 Systemaufbau HTTP Request HTTP Response Web-Browser Tomcat Container Präsentationsschicht Anwendungs- Datamining schicht Algorithmen Data-Access-Objects Dione Datenbank SQL Response SQL Request SQL LEDA Datenbank Abbildung 3.7: Aufbau des Systems 149 Kapitel 3 Anforderungsdefinition Grundlage des Systems ist eine Three-Tier Architektur. Die drei Komponenten des sind ein auf dem Rechner des Benutzers laufender Web-Browser, die in einen Tomcat Webserver eingbettete Kernkomponente und eine Datenbank die sowohl die Daten aus dem LEDA-Projekt als auch Dione spezifische Daten enthält. 3.6.1 Web-Browser Da für die erzeugung der Darstellung für den Benutzer Standard HTML eingesetzt wird, kann jeder moderne Browser wie z.B der Internet Explorer von Microsoft in einer aktuellen Version oder Mozilla eingesetzt werde. Spezielle Anforderungen wie installierte Plugins sind für die Grundfunktionen nicht erforderlich. 3.6.2 Kernkomponente Die in Java implementierte Kernkomponente läuft innerhalb des Web-ApplikationenContainer Apache Tomcat. Sie ist in vier Teile aufgeteilt • Präsentationsschicht erzeugt mittels JSP’s und Servlets HTML-Seiten • Anwendungsschicht steuert den Kommunikation zwischen den den anderen Komponenten • Datamining Algorithmen dient zur Berechnung der Datamining Modelle • Data-Access-Objects dienen zur Kapselung der Datenbank Durch Kapselung der einzelnen Teile von einander wird eine erhöhte Flexibilität und Wartbarkeit erreicht. 3.6.3 Datenbank Die LEDA-Daten und die Dione spezifischen Daten befinden sich in der selben Oracle Datenbank. Mittels SQL wird übers Netwerk auf sie zugegriffen. 150 3.7 Dokumentationsanforderungen 3.7 Dokumentationsanforderungen 3.7.1 Entwicklerdokumentation Als Dokumentation für Entwickler dienen in erster Linie folgende Dokumente: Der Entwurf des Systems sowie der Javadoc der Implementierung. Der Entwurf des Systems beinhaltet eine detaillierte Beschreibung des Aufbaus des Systems, welche bis zu Klassenbeschreibungen und -Diagrammen sowie ggf. Datenbankschemata herunter reicht. Der Entwurf ist online als PDF-Dokument in deutscher Sprache für Entwickler verfügbar. Die Möglichkeit des Ausdrucks ist damit gegeben. Bei der Umsetzung des Systems laut Entwurf wird parallel zur Implementierung der Quelltext kommentiert. Dabei wird sich der Vorzüge des Javadoc-Systems bedient, welches das Erstellen einer HTML-Dokumentation über die Klassenstruktur des Systems unterstützt. Diese Dokumentation wird in deutscher Sprache für die Entwickler online zur Verfügung gestellt. Die Möglichkeit, einen Ausdruck davon zu erstellen, ist aber stark eingeschränkt. 3.7.2 Endbenutzerdokumentation Die Dokumentation für den Endbenutzer wird als PDF-Dokument erhältlich sein. Zudem wird ein umfangreiches Hilfesystem auf den Internetseiten zur Verfügung stehen. Beide Dokumentationen werden in englicher Sprache geschrieben. 3.8 Akzeptanzkriterien DIONE gilt als akzeptiert, wenn die funktionalen sowie nicht-funktionalen Anforderungen erfüllt sind. Insbesondere soll der Benutzer, geleitet durch eine eindeutige Benutzerführung, Data-Mining Prozesse starten und deren Ergebnisse in für ihn verständlicher Form präsentiert bekommen können. Die Akzeptanz wird per Abnahmetest geprüft. 151 Kapitel 3 Anforderungsdefinition 152 Kapitel 4 Grobentwurf 4.1 Systemaufbau Einen Überblick über das System liefert Abbildung 4.1. Die einzelnen Module und ihre Kommunikation untereinander werden im Folgenden beschrieben. HTTP Request HTTP Response Web-Browser Tomcat Container Java-ServerPages Struts JobServlets Manager SQL Request Datenstrukturen SQL Response Data-Access-Objects Dione Datenbank Datamining Algorithmen Xelopes Steuerung SQL Präsentation LEDA Datenbank Abbildung 4.1: Systemüberblick der einzelnen Modulen 153 Kapitel 4 Grobentwurf 4.1.1 Modul Steuerung Das Modul Steuerung übernimmt die Ablaufsteuerung der Anwendung. Es ist in zwei Kernkomponenten aufgeteilt: Für den Kontrollfluss des Programms aus Sicht des Anwenders sind Struts-Servlets verantwortlich. Sie nehmen den HTTP-Request entgegen und entscheiden in Abhängigkeit von diesem und dem aktuellen Systemzustand, welche Webseite mit welchem Inhalt als nächstes Dargestellt wird. Die zweite Komponente stellt der Job-Manager dar. Er ist der Scheduler für die laufenden DataMining-Prozesse und läuft in einer einzigen Instanz in einem unabhängigem Thread parallel zu den von dem Benutzer vorgenommenen Interaktionen. Struts Servlets Das Struts-Controller-Servlet hat die Aufgabe, die HTTP-Reqeuests vom Client entgegenzunehmen. Zu dem muss es entscheiden, welche Funktionen der anderen Servlets auszuführen sind, und dann die Verantwortlichkeit für das Erzeugen der nächsten Sicht der Benutzungsschnittstelle an eine passende Java-Server-Page zu deligieren. Die Konfiguration des Controller-Servlets geschieht mit Hilfe einer XML-Datei (struts-config.xml), die das Verhalten des Servlets beschreibt. Die bereits erfwähnten weiteren Servlets übernehmen dann die eigentlichen für den Programmverlauf notwendingen Funktionen wie z.B. Anfragen an das Datenstrukturen-Modul. Jobmanager Der Jobmanager ist eine autome Komponente, die in einer einzigen Instanz und einem eigenen Thread während der gesamten Laufzeit der Anwendung zur Verfügung steht. Sie hat die Aufgabe, DataMining-Jobs anzunehmen und unabhängig von der Benutzerpräsenz durchzuführen und die Ergebnisse in die Datenbank zu schreiben. Eine detaillierte Beschreibung des JobManagers erfolgt in Abschnitt ??. Abbildung 4.2 zeigt die Schnittstelle des Jobmanagements zur Anwendungsschicht. Jede Aufgabe, deren Ausführung über das Jobmanagement geregelt werden soll, muss daerInterface MiningJob implementieren. Anstehende Aufgaben werden mit addJob() hinzugefügt und können per removeJob() wieder entfernt werden. Eine Liste der abzuarbeitenden Aufgaben kann mit getJobList oder benutzerbezogen mit getUserJobList() erfragt werden. Diese Schnittstelle wird als Singleton implementiert. Damit ist gewährleistet, dass genau ein Jobmanager zu einem Zeitpunkt aktiv ist. Desweiteren 154 4.1 Systemaufbau kann an einer zentralen Stelle (Methode getInstance()) gesteuert werden, welche Implementation des Jobmanagments genutzt werden soll. Die Teile der DIONE-Workbench, die den Jobmanager nutzen, sollen nicht angepasst werden müssen, wenn eine neue Implementation genutzt werden soll. util MiningJobManager + addJob(job:MiningJob) + removeJob(job:MiningJob) + getJobList(): List + getUserJobList(user:User): List + getInstance(): MiningJobManager MiningJob + startJob() + pauseJob() + stopJob() + getUser(): User + getStatus(): int Abbildung 4.2: Schnittstelle zum Jobmanagement 4.1.2 Modul WebUserInterface Seitenaufbau Alle Internetseiten sind in vier Bereiche aufgeteilt: Kopf-, Menü-, Arbeitsund Fußbereich. Die Bereiche werden mit Hilfe von HTML-Frames generiert. Auf Frames wird zusätzlich in einigen Darstellungen im Arbeitsbereich zurückgegriffen. Im Kopfbereich befindet sich eine Anzeige über den Status der vorhandenen Experimente (Job-Status). Dabei wird visuell dargestellt, wieviele Experimente noch nicht abgeschlossen sind oder fertig berechnet wurden. Diese Anzeige erhält ihre Informationen von dem Jobmanager und wird bei jedem Laden einer Seite aktualisiert. Zur zusätzlichen Navigation werden bei Arbeitsabläufen Register (Reiter, Laschen) eingeblendet. Bei der Durchführung eines Experimentes werden beispielsweise die Register ”Trait-Matrix”, ”Konfiguration” und ”Ergebnis” (ggf. noch weitere) eingeblendet. Der Menübereich befindet sich am unterhalb des Kopfbereiches und links neben dem Arbeitsbereich. Der Anwender kann hier alle zur Verfügung stehenden Funktionalitäten erreichen (kontextsensitiv). Sprünge, die im Arbeitsablauf sinnlos bzw. zu Fehlern führen könnten, werden nicht angezeigt. So 155 Kapitel 4 Grobentwurf Logobereich Job-Status Register Navigation Arbeitsbereich Zurück Weiter Fußzeile Schiebebalken Abbildung 4.3: Grobentwurf der Seitengestaltung kann beispielsweise der Anwender nicht zu einem Ergebnis gelangen, das noch nicht existiert. Weitere Details erfolgen im Kapitel ”Navigation”. Der Arbeitsbereich gibt den jeweiligen eigentlichen Seiteninhalt wieder. Jedoch werden auch hier Navigationselemente eingesetzt. So beinhaltet der Arbeitsablauf die Funktionalität der Fortführung und des Zurückgehens. Diese Befehle werden durch die Schaltflächen ”Weiter” und ”Zurück” realisiert. Die Schaltflächen werden am Seitenanfang und am Seitenende angezeigt. Ist der Seiteninhalt größer als der darstellbare Bereich, werden Schiebebalken eingeblendet. Die Fußzeile enthält einen Copyright-Hinweis, einen Link zum Impressum und ggf. weitere sekundäre Informationen. Navigation Grundsätzlich soll der Anwender in der lange sein, auf unterschiedlichen Wegen zu seinem Ziel zu gelangen. Daher werden auch die Navigationselemente redundant angeboten. Neben der hauptsächlichen Navigationsmöglichkeit im Menübereich, werden Register im Kopfbereich und Schaltflächen im Arbeitsbereich eingebettet. Im Navigationsmenü werden in Abhängigkeit der aktuellen Seite im Arbeits- 156 4.1 Systemaufbau bereich, mögliche Navigationsschritte eingeblendet. Diese ergeben sich logisch aus dem aktuellen Arbeitsschritt. Sprache Alle Internetseiten werden in deutscher und englischer Sprache ausgegeben. Die Möglichkeit zur Erweiterung für andere Sprachen wird durch das Resource-Bundle- Prinzip ermöglich: Alle textuellen Elemente verweisen durch Labels auf einen Text in der jeweiligen Sprachendatei (z.B. ”Dionede.properties”). Für jede Sprache gibt es eine Datei. Desweiteren existiert eine DefaultSprachendatei. Kontrollfluss Die Darstellung des Inhalt einer Seite wird durch eine JSP-Seite realisiert, während der Übergang mit Hilfe von Servlets realisiert wird. Desweiteren wird Struts verwendet. Globale Variablen werden in der Session, die vom Tomcat-Server erstellt und verwaltet wird gespeichert. Die wesentlichen Daten werden bei den Seitenübergängen an die Datenschicht übergeben. Zu den globalen Variablen gehört zum Beispiel die Information, auf welcher Seite sich der Anwender momentan befindet. Nach Aufruf der Indexseite gelangt der Anwender zu einem Login. Hier wird er aufgefordert, einen Benutzernamen und ein dazu gültiges Kennwort einzugeben. Nach erfolgreicher Eingabe wird eine neue Session vom Tomcat-Server gestartet. Anschließend erfolgt eine Übersicht im Arbeitsbereich. Hier werden Informationen zu den Experimenten und vorhandenen Verfahren dargestellt. Der anschließende Arbeitsablauf (z.B. Modellerstellung) wird durch die Verkettung der jeweiligen JSP-Seiten erfolgen und wird kontrolliert von den Servlets, die sich anhand des Formularinhaltes und des in der Session gespeicherten Status orientieren. Bei der Erstellung der Trait-Matrix wird eine Kollision der Upload-Datei mit der über die Weboberfläche zusammengestellte Matrix vermieden. 4.1.3 Modul Datamining Algorithmen Datenstrukturen von Xelopes Durch die Verwendung des Datamingpaketes von Xelopes, als Algorithmenunterbau in der DIONE Workbench, wird ein Teil der vordefinierten Ein- 157 Kapitel 4 Grobentwurf und Ausgabestrukturen übernommen. Die Abbildung 4.4 zeigt eine Auswahl der Klassen von Xelopes, die in der Entwicklung berücksichtigt werden. Dabei sind die relevantesten farblich hervorgehoben und sollen im folgenden erläutert werden: • Als Eingabeobjekttyp dient der MiningInputStream, wobei von ihm spezifische Eingabearten abgeleitet werden. Anwendung wird hauptsächlich MiningArrayStream finden. Andere Eingaben aus ARFF- oder CSV-Dateien sind möglich. • Für jedes Verfahren werden die Konfigurationseinstellungen durch von MiningSettings abgeleiteten Klassen erzeugt. Diese Klassen benötigen jeweils ein Objekt vom Typ MiningAlgorithmSpecification um die Grundeinstellungen wie Art der Parameter und Standardwerte für ein Verfahren zu erhalten. • Das Verfahren selber wird in einer von MiningModel abgeleiteten verfahrensspezifischen Klassen instanziert. Um das Modell dann erstellen zu können, benötigen diese Klassen die verfahrensspezifische Klasse von MiningSettings und ein Objekt vom Typ MiningInputStream. Die Schnittstelle zur Xelopes-Bibliothek Um die DIONE-Workbench von der Entwicklung der Xelopes-Bibleothek weitestgehens unabhängig zu halten, wird die Auswahl und Konfiguration der Algorithmen aus externer Quelle, der DIONE-Datenbank, erzeugt. Die Abbildung 4.5 zeigt die Schnittstelle zu Xelopes: • Die AlgorithmFactory realisiert die Verfahrensbeschreibung der Algorithmen. Dabei gibt sie Auskunft in Form von Listen über ihre Verfahren und die zugehörigen Parameter.Des weiteren gibt sie Datamining(MiningAlgorithm) und Attributtransformations-Algorithmusobjekte (TransformationMethod) bei Übergabe einer Algoritmusid zurück. • Als Ergebnis dient MiningResult, in der die Methoden für textuelle und grafische Ausgaben definiert werden. Zudem soll eine Liste der Exportformate erzeugbar sein. Für die Ergebnistypen Modellerstellung, Voraussage und Verifikation sind einzelne Ergebnisimplementierungen von MiningResult vorgesehen. 158 4.1 Systemaufbau Xelopes MiningArffStream MiningFileStream MiningCsvStream <<interface>> (from Xelopes) (from Xelopes) (from Xelopes) MiningTransformer (from Xelopes) benutzt MiningArrayStream MiningInputStream MiningFilterStream (from Xelopes) (from Xelopes) (from Xelopes) MultipleToMultipleMapping (from Xelopes) benutzt VectorTransformationStream (from Xelopes) ReplaceMissingValueStream (from Xelopes) RemoveAttribute / AddAttribute benötigt (from Xelopes) MiningModel (from Xelopes) (from Xelopes) ClusteringMiningModel (from Xelopes) (from Xelopes) benötigt AssociationRulesMiningModel ChangeAttributeOrder ClassificationMiningModel MiningSettings (from Xelopes) (from Xelopes) ClusteringSettings AssociationRulesSettings (from Xelopes) benötigt (from Xelopes) MiningAlgorithmSpecification (from Xelopes) DecisionTreeSettings (from Xelopes) Abbildung 4.4: Schnittstelle zu Xelopes • Für den interaktiven Entscheidungbaumalgorithmus ist ein Eingabe in Form eines nächsten auszuführenden Schritts und eine Ergebnisausgabe des Zwischenschritts vorgesehen. Interaktiver Entscheidungsbaumalgorithmus Als eine Datamingmethode soll ein interaktiver Entscheidungsbaum implementiert werden. Hierbei soll es dem Benutzer möglich sein, interaktiv bei der Erstellung des Modells einzugreifen. Dabei hat der Benutzer folgende Möglichkeiten: • Bei jedem Knoten kann der Benutzer das zu splittende Attribut wählen. Hierbei kann der Benutzer das Attribut manuell auswählen oder aber automatisch das beste Attribut bestimmen lassen • Bei jedem Endknoten wird der Informationsgehalt eines jeden Attributes angezeigt. Dieses dient zur Hilfestellung beim Splitting • Der Benutzer kann die Splitting-Aktionen in umgekehrter Reihenfolge rückgängig machen (Prunen), bis zur Wurzel des Baumes 159 Kapitel 4 Grobentwurf algorithm AlgorithmFactory + getDataMiningMethodList(): List + getDataMiningMethodParameterList(method:DataMiningMethod): List + getTransformationMethodList(): List + getTransformationMethodParameterList(method:TransformationMethod): List + getInstance(): AlgorithmFactory MiningResult MiningModelBuildResult + getStatus(): int + getComponent(): Component + getText(): String + getExportFormats(): List InteractiveNextStep MiningInteractiveStepResult MiningPredictionResult MiningVerificationResult Abbildung 4.5: Schnittstellen WebUserInterface - Algorithmen • Bei der Implementierung wird von den Xelopes-Klassen für Entscheidungsbäume abgeleitet. Der Austausch der Daten mit dem WebUserInterface findet über die Interfaces MiningInteraktiveStepResult, für die Ausgabe, und InteractiveNextStep, für die Eingabe des Algorithmus, statt. Diese Interfaces finden sich in Abbildung 4.5 wieder. Die Hauptklasse des Algorithmus befindet sich im Unterpaket model des Paketes algorithms, wie in Abbildung 4.6 zu erkennen ist. model InteractiveDecisionTree Abbildung 4.6: Klasse des interaktiven Entscheidungsbaumalgorithmus 160 4.1 Systemaufbau 4.1.4 Modul Datenstrukturen Datenstrukturen TraitMatrix • wird aus Species (“Zeilen”) und Traits bzw. deren Attributen (“Spalten”) zusammengesetzt • kann ein MiningInputStream für Xelopes erzeugen, sodass dieses seine Algorithmen direkt auf der Struktur ausführen kann • Species und Traits sollen auch explizit hinzugefügt werden können (z.B. für CSV-Import von Daten). Datenbankzugriff Zugriff auf die Datenbank per DAO Data Access Objekte (DAOs) abstrahieren und kapseln die Daten der Datenbank. DAOs managen und kontrollieren ferner die Verbindung zur Datenbank. Sie ermöglichen eine persistente Datenhaltung und die Verwendung verschiedener DBMS. Wie der Abbildung 4.1.4 zu entnehmen ist, nimmt das DAO eine vermittelende Rolle. Es stellt dem BusinessObjekt (z.B. UserInterface) über das TransferObject die Daten der Datenbank zur Verfügung. Dieses wird über Methoden des DAOs gefüllt bzw. zum Speichern/Modifizieren von Daten in der Datenbank vom DAO verwendet. Transferobjekte lassen sich meist sehr einfach als JavaBeans erstellen, sodass andere Komponenten leicht auf die Daten zugreifen können. Es ist ausserdem möglich, in einem DAO die Daten aus mehreren Tabellen abzufragen bzw. wieder auf diese zu verteilen. Abbildung 4.7: DAO-Schema 161 Kapitel 4 Grobentwurf Ein Erweiterung des Schemas durch eine DAO Factory erhöht die Flexibiltät und Kompatiblität. So ist es einfach möglich verschiede Datenbankarte (ORDBMS, OODBMS usw.) oder auch Verzeichnisdienste (JNDI, LDAP usw.) zu benutzen, da für jede Art ein DAO-Unterart angelegt werden kann. Dieses ermöglicht auch verscheidene Datenbanken unterschiedlicher Hersteller zuverwenden. Auch Caching - Strategien lassen sich somit verwirklichen, ohne dass der Code der Applikation umgeschrieben werden muss. Abbildung 4.8: DAO-Factory 1 DioneUserDAO • wird Benutzerverwaltung beinhalten, also auch Hinzufügen von Experimenten, Traitmatrizen und Konfigurationen (public/private) für einen Benutzer. • Abfrage von Experimenten, Traitmatrizen, Konfigurationen, Ergebnissen eines Benutzers • Integration mit existierenden LEDA-Benutzern (LEDA-Schema) • Integration in Tomcat und Struts per JAAS, FormBased Authentication, BasicAuth o.ä. • Möglichkeit Data-Mining Jobs zu verwalten 162 4.1 Systemaufbau Abbildung 4.9: DAO-Factory 2 ConfigDAO • Speichern/Auslesen von Konfigurationen (Modell, Modellverifizierung, Vorhersage, Nullwertbehandlung) TraitMatrixDAO • Speichern/Auslesen einer kompletten Traitmatrix ResultDAO • Speichern/Auslesen von Ergebnissen ExperimentDAO • Speichern/Auslesen eines kompletten oder teilweisen Experimentes 163 Kapitel 4 Grobentwurf Hochladen von Artenlisten • CSV- File kann vom Benutzerrechner hochgeladen werden und bildet initiale Traitmatrix • Weitere Daten enthalten Werte; können nach dem Hochladen konfiguriert werden ebenso wie Einteilung in Numerische, Ordinale und Aggregierte • Hochladen von weiteren Attributen und Pflanzen erlaubt 4.1.5 Schnittstelle User - WebUserInterface Die Interaktion mit dem Benutzer erfolgt über den Webbrowser. Alle Aktionen können über Schaltflächen vorgenommen werden, die in den jeweiligen Kontext von den HTML-Seiten zur Verfügung gestellt werden. Erforderliche Daten werden nach Möglichkeit durch eine Auswahl von bestehenden Daten abgefragt. Dazu werden bevorzugt HTML-Comboboxen verwendet. Individuelle Dateneingaben erfolgen durch Textfelder und werden nach Zurücksenden des Formulares an den Server geprüft. Sofern der Platz im Arbeitsbreich ausreicht, sollen Erkärungen über Funktionalitäten (bzw. erforderliche Daten) direkt angezeigt werden. Weitere Hilfe wird durch eine Schaltfläche im Navigationsmenü zugänglich. Auf die Verwendung von Symbolen soll größtenteils verzichtet werden, sofern sie nicht einem allgemeinen Standard entsprechen. 4.1.6 Schnittstelle WebUserInterface - Datenstrukturen Benutzer: Methode Benutzer einloggen Benutzer ausloggen Benutzerdetails modifizieren Anfrage der vorhandenen Ergebnisse Parameter Benutzername, Passwort Benutzerobjekt Benutzerobjekt Rückgabe Benutzerobjekt Benutzerobjekt Liste der Ergebnisse zu abgeschlossenen Data Mining-Prozessen wird fortgesetzt auf nächster Seite 164 4.1 Systemaufbau fortgesetzt von vorheriger Seite Methode Parameter Rückgabe Tabelle 4.1: Methoden von Benutzer Traitmatrix: Methode Liste der gespeicherten Traitmatrizen anfordern Gespeicherte Traitmatrix laden Parameter Benutzer gewünschte Matrix, Maximale Anzahl der Zeilen, Start- und letzte Zeile Traitmatrix Traitmatrix Aktuelle speichern Allgemeine Bearbeitungsoperationen je nach dem Rückgabe Liste der vorhandenen Matrizen Aktuelle Traitmatrix in gewünschter Maximalgröße, Tatsächliche Größe der Traitmatrix je nach dem Tabelle 4.2: Methoden der Traitmatrix Modellerstellung: Methode Speichern der Konfiguration (Modellerstellung) Parameter Rückgabe Algorithmus / Parameter / Traitmatrix / Ergebnis, Name, Benutzer Anfordern einer Lis- Benutzer Liste der gespeicherten te von gespeicherten Konfigurationen Konfigurationen (Modellerstellung) Laden einer Konfigu- Name Algorithmus / Pararation (Modellerstelmeter / Traitmatrix lung) wird fortgesetzt auf nächster Seite 165 Kapitel 4 Grobentwurf fortgesetzt von vorheriger Seite Methode Parameter Rückgabe Tabelle 4.3: Methoden für Modellerstellung Modellverifizierung: Methode Liste der verfügbaren Algorithmen zur Modellverifizierung anfordern Liste der verfügbaren Parameter zu einem Algorithmus anfordern Speichern der Konfiguration (Modellverifizierung) Parameter Algorithmusobjekt Rückgabe Liste der verfügbaren Algorithmen zur Modellverifizierung Liste der verfügbaren Parameter zum Algorithmus Algorithmus / Parameter / Traitmatrix / Ergebnis, Name, Benutzer Anfordern einer Lis- Benutzer Liste der gespeicherten te von gespeicherten Konfigurationen Konfigurationen (Modellverifizierung) Laden einer Konfigu- Name Algorithmus / Pararation (Modellverifiziemeter / Traitmatrix rung) Tabelle 4.4: Methoden für Modellverifizierung Vorhersage: Methode Speichern der Konfiguration (Vorhersage) Parameter Algorithmus / Parameter / Traitmatrix / Ergebnis, Name, Benutzer Rückgabe wird fortgesetzt auf nächster Seite 166 4.1 Systemaufbau fortgesetzt von vorheriger Seite Methode Parameter Anfordern einer Lis- Benutzer te von gespeicherten Konfigurationen (Vorhersage) Laden einer Konfigura- Name tion (Vorhersage) Rückgabe Liste der gespeicherten Konfigurationen Algorithmus / Parameter / Traitmatrix (Pflanze) Tabelle 4.5: Methoden für Vorhersage Ergebnisbehandlung: Methode Anfordern der möglichen Export- bzw. Reportformate] Exportieren von Ergebnissen Parameter Konfiguration Konfiguration, portformat Ex- öffentlich machen (für Konfiguration, Benutalle Speichern) von Ex- zer perimenten (Ergebnissen) Anfordern einer Liste der öffentlichen Konfigurationen Rückgabe Liste der verfügbaren Export-/Reportformate Ergebnis im Exportformat bzw. Ergebnisreport Liste der öffentlich gemachten Konfigurationen Tabelle 4.6: Methoden der Ergebnisbehandlung • Benutzerverwaltung LedaUser sind mit DioneUser verknuepft Traitmatrix, Konfigurationen und Ergebnisse koennen geladen, gespeichert und veroeffentlicht werden • CSV Dateiimport als initiale Traitmatrix • Funktionen zur Auswahl/Hinzufuegen/Entfernen von Traits • Datenstruktur zum Halten und Abfragen (fuer Anzeige) der fertigen Ergebnisse 167 Kapitel 4 Grobentwurf 4.1.7 Schnittstelle WebUserInterface - Algorithmen Modellerstellung: Methode Liste der verfügbaren Algorithmen zur Modellerstellung anfordern Liste der verfügbaren Parameter zu einem Algorithmus anfordern Setzen der Ausprägung des Parameters eines Algorithmus zur Modellerstllung Anstoßen des Modellerstellungs-DataMining-Prozesses Abfrage des Ergebnis eines ModellerstellungsDataMining-Prozesses Parameter Algorithmusobjekt Rückgabe Liste der verfügbaren Algorithmen zur Modellerstellung Liste der verfügbaren Parameter zum Algorithmus Ausprägung des Parameters Konfiguration Abschätzung der Dauer Konfiguration Ergebnisobjekt dell) (Mo- Tabelle 4.7: Methoden für Modellerstellung Modellverifizierung: Methode Parameter Setzen der Ausprägung Ausprägung des Parades Parameters eines meters Algorithmus zur Modellverifizierung Anfordern einer Lis- Benutzer te von gespeicherten Konfigurationen (Modellverifizierung) Rückgabe Liste der gespeicherten Konfigurationen wird fortgesetzt auf nächster Seite 168 4.1 Systemaufbau fortgesetzt von vorheriger Seite Methode Anstoßen des ModellverifizierungsDataMining-Prozesses Abfrage des Ergebnis eines ModellverifizierungDataMining-Prozesses Parameter Konfiguration Rückgabe Abschätzung der Dauer Konfiguration Ergebnisobjekt (Verifizierung) Tabelle 4.8: Methoden für Modellverifizierung Vorhersage: Methode Liste der verfügbaren Algorithmen zur Vorhersage anfordern Liste der verfügbaren Parameter zu einem Algorithmus anfordern Setzen der Ausprägung des Parameters eines Algorithmus zur Vorhersage Anstoßen des VorhersagungsDataMining-Prozesses Abfrage des Ergebnis eines VorhersagungsDataMining-Prozesses Parameter Algorithmusobjekt Rückgabe Liste der verfügbaren Algorithmen zur Vorhersage Liste der verfügbaren Parameter zum Algorithmus Ausprägung des Parameters Konfiguration Abschätzung der Dauer Konfiguration Ergebnisobjekt hersage) (Vor- Tabelle 4.9: Methoden für Vorhersage Interaktion: Methode Abfragen eines DataMining-Schrittes (interaktiv / Modellerstellung) Parameter Rückgabe Algorithmus / Para- Ergebnisobjekt (intermeter / Traitmatrix, aktiv) Name, Benutzer wird fortgesetzt auf nächster Seite 169 Kapitel 4 Grobentwurf fortgesetzt von vorheriger Seite Methode Parameter Rückgängig machen / Konfiguration Wiederherstellen des letzten interaktiven DataMining-Schrittes Rückgabe Ergebnisobjekt (interaktiv) Tabelle 4.10: Methoden für Interaktion Jobhandling: Methode Anfordern der laufenden Tasks Anfordern der laufenden öffentlichen Tasks Hinzufügen eines Tasks Anhalten und Entfernen eines Tasks Feststellen, ob ein Task erfolgreich beendet worden ist Parameter Userobjekt Rückgabe Liste der laufenden Tasks Liste der laufenden öffentlichen Tasks Task Task Task Feststellung, ob ein Task erfolgreich beendet worden ist Tabelle 4.11: Methoden für Jobhandling 4.1.8 Schnittstelle Algorithmen - Datenstrukturen • Aus einem Experiment kann die Traitmatrix in einen MiningInputStream überführt werden. Aufgrunddessen liegt sie in direkt für Xelopes weiterverarbeitender Weise vor. • Parameter werden aus der Datenbank oder von der Benutzereingabe in Datenstrukturen gespeichert und an die Algorithmen weitergegeben. • Ergebnisobjekte/Konfigurationen koennen in Dione Datenbank abgelegt werden. 170 4.1 Systemaufbau 4.1.9 Kommunikation Steuerung - Algorithmen Bezeichnung Vorbedingung Starten eines Datamining Algorithmus Fehler werden vorher abgefangen, somit dürfen die Daten als korrekt angenommen werden. Es liegen eine Dataminingmethode und ihre gewählten Parameter vor. Nachbedingung Resultat ist in Experiment-Objekt gespeichert Beschreibung Das Datamining-Verfahren wird mit den vorliegenden Experimentdaten und der Konfiguration ausgeführt Fehler MiningException, OutOfMemory Bezeichnung Starten einer Transformationsmethode Vorbedingung Traitmatrix und Eingaben liegen vor. Nachbedingung Traitmatrix enthält die modifizierten Daten. Beschreibung Die Traitmatrix wird nach dem gewählten Transformationsverfahren bearbeitet. Die Werte werden durch die Eingabendaten ersetzt. Fehler TransformationsException, OutOfMemory 4.1.10 Kommunikation Steuerung - Datenstrukturen Alle Daten die aus der Datenbank für die Steuerung benötigt werden, werden als DAOs übergeben. Bezeichnung: Datenspeicherung Vorbedingung: Dateneingaben des Nutzers wurden zuvor überprüft. Nachbedingung: Daten sind gespeichert. Beschreibung: Daten werden als DAO-Objekte von die Datenstrukturschicht weitergeleitet. Sollte ein Speicherung nicht erfolgt sein (z.B. bei einem Verbindungsfehler), wird eine Fehlermeldung zurückgegeben. Fehler: Write-Error Bezeichnung: Vorbedingung: Nachbedingung: Beschreibung: Fehler: Trait-Matrix holen Experiment-Objekt ist vorhanden. Matrix kann vom Servlet in die JSP-Seite überführt werden. für die Anzeige auf der JSP-Seite wird die Trait-Matrix als DAO Experiment.getTraitMatrix() vom Servlet zur Verfügung gestellt. Read-Error 171 Kapitel 4 Grobentwurf Bezeichnung: Vorbedingung: Nachbedingung: Beschreibung: Fehler: Bezeichnung: Vorbedingung: Nachbedingung: Beschreibung: Fehler: Bezeichnung: Vorbedingung: Nachbedingung: Beschreibung: Fehler: Algorithmenübersicht Algorithmenliste ist vorhanden. Algorithmenliste kann vom Servlet in die JSP-Seite überführt werden. Zur Auswahl des gewünschten Verfahrens wird eine Liste der verfügbaren Algorithmen als DA-Objekt übergeben. Read-Error Konfiguration Daten für die Konfiguration sind vorhanden. Konfiguration kann vom Servlet in die JSP-Seite überführt werden. Zur Konfiguration des Verfahrens wird ein DA-Objekt übergeben, das Namen, Datenformate, Standardwerte und Wertebereiche enthält. Read-Error Ergebnisausgabe Ergebnis ist vorhanden. Ergebnis kann über Servlet angezeigt werden. Das Ergebnis wird mit getMiningResult() aus dem DAO Experiment ausgelesen und dargestellt. Read-Error 4.1.11 Kommunikation Steuerung - Präsentation Bezeichnung: Vorbedingung: Datentransfer des Arbeitsbereiches Mögliche Dateneingaben werden an das Servlet weitergereicht und Seitenwechsel wird vom Benutzer ausgelöst. Nachbedingung: Seitenwechsel und Datenübergabe Beschreibung: Es erfolgt eine Speicherung der Daten. Nächste JSPSeite wird angezeigt. Bei Eingabefehlern wird das entsprechende Feld markiert und ein zusätzliche Erklärung in Form einer Zusatzhilfe ausgegeben. Fehler: Inputerror 172 4.2 Ablaufbeschreibung Bezeichnung: Aktualisierung des Jobmanagers Vorbedingung: Seitenwechsel wird vom Benutzer ausgelöst. Nachbedingung: Neuer Status der Jobs Beschreibung: Bei jedem Seitenwechsel wird der neue Status der Jobs übergeben. Fehler: Read-Error 4.1.12 Kommunikation Datenstrukturen - Algorithmen Bezeichnung: Dataminingalgorithmen Vorbedingung: Liste über Dataminingalgorithmen ist vorhanden. Nachbedingung: Algorithmen sind benannt und aufrufbar. Beschreibung: Die Liste bestimmt die Algorithmen und ihren Klassenpfad Fehler: Read-Error Bezeichnung: Vorbedingung: Dataminingparameter Liste über Algorithmen und Dataminingparameter ist vorhanden. Nachbedingung: Algorithmen können instanziiert werden Beschreibung: Die Liste bestimmt die Algorithmen und ihren Klassenpfad Fehler: Read-Error 4.2 Ablaufbeschreibung Der Ablauf der Anwendung ist durch die Navigation der Präsentationsschicht vorgegeben, die von der Steuerungsschicht durch Servlets kontrolliert wird. Fehlerhafte Eingaben oder Fehler im Ablauf werden von der Steuerung übernommen. Anders als bei klassischen Anwendungen ist ein Controller in der Form nicht notwendig. Eine Kommunikation zwischen der Präsenationsschicht und der Algorithmen wird nicht benötigt. Die Präsentationsschicht empfängt alle Daten aus der Datenschicht. Informationen über den Status eines Experimentes werden vom Jobmanager übernommen. Bestandteile der Steuerung sind: • Bestandteile von Struts (ActionServlet, config.xml, ...) • Servlets als Bindeglied zwischen den JSP-Seiten • Jobmanager 173 Kapitel 4 Grobentwurf Der Ablauf ist abhängig von den drei wesentlichen Anwendungsfällen und sei nun im folgenden beschrieben: 4.2.1 Anwenderauthentifizierung Da der Bereich des DIONE-Projektes keine autonome Webapplikation ist, sondern in ein bestehenden Projekt integriert wird, ist eine eigene Benutzerverwaltung nicht notwendig. Hierbei werden die Tomcat-Realms verwendet mit Single-Signon, sodass nur eine einzige Anmeldung für alle Anwendungen nötig ist. 4.2.2 Experimentauswahl Auf der ersten Seite erhält der Anwender einen Überblick über die vorhandenen eigenen und öffentlichen Experimente. Hier kann er zum Bearbeiten eines auswählen oder ein neues Experiment anlegen. Möchte er auf ein vorhandenes Experiment zurückgreifen, erhält er einen Überblick über das jeweilige Experiment. Darin enthalten sind Informationen über den Arbeitsprozess. Alle Arbeitsschritte können bearbeitet werden. Soll ein neues Experiment angelegt werden, wird der Anwender aufgefordert, ein Namen für das Experiment zu vergeben. Nun wird ein neues Experiment erzeugt und in der Datenbank gespeichert. Mögliche Fehlerquellen: Beim Lesen oder Schreiben von Daten kann es zu Verbindungsfehler zwischen der Steuerung und der Datenbank kommen. Die Steuerung wartet beim Schreiben von Daten auf eine Bestätigung. 4.2.3 Erstellen einer Trait-Matrix Mögliche Dateien, die der Anwender von seinem Client auf den Server laden kann, werden auf ihr korrektes Format geprüft. Zugelassen sind nur Dateien im CSV-Format. Nach dem Hochladen kann eine Änderung der Wertespalten erfolgen. Für die spätere Verwendung der Daten muss bekannt sein, ob es sich beispielsweise um nummerische oder ordinale Werte handelt. Die Auswahl von Pflanzen aus der LEDA-Datenbank erfolgt über eine Suchmaske, die eine Suche nach Pflanzennamen und Attributwerten ermöglicht. Die Ergebnisse der Suchanfragen müssen vom Anwender gruppiert werden. Anschließend gibt es die Möglichkeit, eine Aggregation der Daten vorzunehmen. 174 4.2 Ablaufbeschreibung Hinzufügen von weiteren Pflanzen erfolgt durch erneute Suchanfragen. In mehreren Schritten entsteht so eine Trait-Matrix, die nach jedem Teilschritt gespeichert wird. Mögliche Fehlerquellen: Eine intensive Prüfung der zu importierten Datei ist notwendig. Sonstige Fehler beruhen auf Verbindungsfehler zur Datenbank. Die Steuerung erhält lediglich eine Bestätigung. 4.2.4 Auswahl des Verfahrens und Konfiguration Im nächsten Schritt wird der Anwender aufgefordert, einen Algorithmus auszuwählen und eine Konfiguration vorzunehmen. Fehlerhafte Eingaben werden sofort bei einem Seitenwechsel bearbeitet. Alle Daten werden in die Datenbank gespeichert. 4.2.5 Start des Verfahrens In diesem Schritt arbeiten zum ersten Mal alle Schichten zusammen. Zunächst erhält die Steuerungsschicht den Befehl zum Starten des Verfahrens von der Präsentationsschicht. Sind alle notwendigen Daten vorhanden (Trait-Matrix, Konfiguration und ggf. Modell) kann das Verfahren gestartet werden. Dazu erfolgt eine Initialisierung der Algorithmen. Benötigte Daten werden aus der Datenbank direkt geladen. Der Jobmanager erhält ein neues Objekt, es sei denn, es handelt sich um einen interaktiven Algorithmus. Ist des Verfahren beendet, wird das Ergebnis in das Experiment eingetragen und der Jobmanager benachrichtigt. Der Anwender erhält diese Information nach einem Seitenwechsel. Mögliche Fehlerquellen: Ein Fehler, der von der Algorithmenschicht behandelt werden muss, ist die überanspruchung des Speicherplatzes oder der durch Xelopes vordefinierten Ausnahmebehandlungen. In diesen Fällen muss das Verfahren abgebrochen werden. 4.2.6 Verlauf des Verfahrens Die Algorithmusschicht bearbeitet das Experiment, aus dem die Traitmatrix, das Verfahren und die Parameter, gegebenenfalls ein vorgegebenes Modell ausgelesen wird. Nach dem jeweiligen Verfahren wird ein Ergebnis (Modell, 175 Kapitel 4 Grobentwurf Vorhersage und Verifikation) erstellt und in das Experiment zurückgeschrieben. Mit geeigneter Grafikdarstellung kann es dem Nutzer angezeigt werden. für den interaktive Entscheidungsbaumalgorithmus unterscheidet sich der Vorgang durch die Bereitstellung eines Teilergebisses in Form eines Zwischenschrittresultats (vgl. 4.5). Dieses Ergebnis wird dem Benutzer angezeigt und Eingabemöglichkeiten offeriert. Nach Auswahl des nächsten Schrittes wird das Verfahren mit den Einstellungen und dem Teilmodel neu gestartet. Bei Beendigung eines Verfahrens und der Rückgabe des Ergebnisses wird die Speicherung angestoßen. Somit liegen alle erzeugten Resultate in Form eines Experiments in der Datenbank vor. Seitens des Benutzers kann der interaktiver Entscheidungsbaumalgorithmus durch Schließen des Browsers zwar unterbrochen, aufgrund des direkten Rückschreibens in die Datenbank aber nicht gelöscht werden. Ein Weiterarbeiten wird somit ab dem letzten Zwischenresultat ermöglicht. 176 Kapitel 5 Feinentwurf 5.1 Paketstruktur 5.1.1 Struktur des Java-Quelltextes Die Quellen von DIONE haben die in Abbildung 5.1 gezeigte Paketstruktur. Das Hauptpaket heißt de.unioldenburg.dione und besteht aus mehreren Unterpaketen. Jedes Modul wird dabei zu einem Unterpaket zusammengefasst. de.unioldenburg.dione model algorithm model model model data model access model transform model wui model action model objects model util model control model lang model tag model visualization model util model Abbildung 5.1: Paketstruktur des Java-Quelltextes 5.2 Schnittstellen Um ein hohes Maß an Abstraktion zu erreichen, ist vorgesehen, die Kommunikation zwischen den einzelnen Modulen Datenhaltung, Algorithmen, Präsentation und Steuerung über Schnittstellen zu kapseln. Die Abbildung 5.2 bietet hierzu eine Übersicht. 177 Kapitel 5 Feinentwurf dione MiningJobManager TraitMatrix Column clone(): Object findColumn(AttributeDescription): int 1 getRow(int): List getRowCount(): int removeRow(int) addJob(MiningJob) getUserJobList(User): List getJobList(): List removeJob(MiningJob) getInstance():MiningJobManger AttributeDescription clone(): Object getData():List setData(List) toArray(): Object[] * 1 1 1 1 1 * MiningJob TransformationMethod getExperiment(): Experiment getUser(): User getStatus(): int start() stop() pause() continue() getName(): String getDescription(): String getParameters(): List * getAttributeType(): int getExternalName(): String getInternalName(): String getShortTableName(): String getIsAggregationResult(): int getShortTableName(): String getUsedForGrouping(): int getUsedForOrdering(): int getValueType(): int setAttributeType(int) setExternalName(String) setInternalName(String) setIsAggregationResult(int) setShortTableName(String) setUsedForGrouping(int) setUsedForOrdering(int) setValueType(int) 1 * 1 Experiment 1 getName(): String setName(String) getDescription(): String setDescription(String) startExperiment() 1 Parameter 1 1 * MiningAlgorithm 1 * 1 getName(): String getDescription(): String getFunctionType(): int getName():String getParameterList(): List 1 getType(): int getName(): String getDescription(): String getValue(): Object setValue(Object) DioneUser User(String,String) getUsername(): String getSurname(): String getForename(): String 1 setUsername(String) setSurname(String) setForename(String) getEmail(): String setEmail(String) MiningResult 1 clone(): Object getComponent(): java.awt.Component getExportFormats(): List ExportFormat getMimeType(): String getName(): String getDescription(): String getExport(MiningResult): Object Abbildung 5.2: Schnittstellen zur Kommunikation der einzelnen Module von DIONE Die Instanzen-Implementierungen der Interfaces bieten auf die Daten der Anwendung zur Laufzeit Zugriff. Die Interfaces MiningJobManager“ und ” MiningJob“ werden von dem Modul Steuerung implementiert. Die die ” ” ” Datenhaltung betreffenden Interfaces werden von dem Datenstrukturenmodul implementiert. Schließlich werden die die DataMining-Algorithmen betreffenden Interfaces von dem Algorithmenmodul implementiert. 5.2.1 Modul Datenstrukturen Vom Modul Datenstrukturen werden die Schnittstellen implementiert, welche den Zugriff auf die Daten des Benutzers erlauben. Dazu zählen einerseits seine persönlichen Daten sowie die von ihm erstellten Experimente. Die Quelle der Daten ist in der Regel die DIONE- oder die LEDA-Datenbank. User über das Interface User kann ein Benutzer am System an- und abgemeldet werden. Ferner kapselt es die Informationen über den Benutzer wie den Namen und die EMailadresse und bietet Zugriff auf die von ihm erstellten Experimente. 178 5.2 Schnittstellen • User(String, String): Konstruktor, über den ein neues Benutzerobjekt erzeugt wird. Dieser Vorgang findet beim Login statt, die eigentliche Anmeldung an das System aber erst durch den Aufruf der Methode login(). Die Parameter sind der Alias (login) und das dazugehörige Passwort. • getLogin():String: Gibt den Alias des Benutzers zurück. • setLogin(String): Setzt einen neuen Alias für den Benutzer. • getName():String: Gibt den Namen des Benutzers zurück. • getEMail():String: Gibt die EMailadresse des Benutzers zurück. • setEMail(String): Legt eine neue EMailadresse des Benutzers fest. • login(): Meldet den Benutzer an das System an. • logout(): Meldet den Benutzer vom System ab. • getExperiments(): List: Liefert eine Liste von den zum Benutzer gehörenden Experimenten als Instanzen des Interfaces Experiment zurück. • addExperiment(Experiment): Fügt ein Experiment hinzu. • removeExperiment(Experiment): boolean: Entfernt ein Experiment des Benutzers. Liefert false bei nicht vorhandenem Experiment, sonst true. Experiment Ein Experiment beinhaltet alle Daten, die zu einem in den UseCases beschriebenen DataMining-Experiment gehören. Dazu zählen insbesondere die TraitMatrix, der Algorithmus (MiningAlgorithm) und ggf. das Ergebnis (MiningResult). • getName(): String: Gibt den Namen des Experiments zurück. • setName(String): Legt den Namen des Experiments fest. • startExperiment(): Wird vom MiningJobManager aufgerufen, um das Experiment zu starten. • getTraitMatrix(): TraitMatrix: Liefert - falls vorhanden - das TraitMatrixObjekt des Experiments, sonst null. 179 Kapitel 5 Feinentwurf • setTraitMatrix(TraitMatrix): Setzt das TraitMatrix-Objekt des Experiments. • getMiningAlgorithm(): MiningAlgorithm: Liefert den Algorithmus des Experiments inklusive Konfiguration - falls festgelegt, sonst null. • setMiningAlgorithm(MiningAlgorithm): Setzt das MiningAlgorithmObjekt des Experiments. • getMiningResult(): MiningResult: Liefert bei Verfügbarkeit das Ergebnisobjekt des Experiments, sonst null. • setMiningResult(MiningResult): Fügt das Ergebnis des Experiments hinzu. 5.2.2 Modul Algorithmen Das Modul Algorithmen stellt die Schnittstellen bereit, über die ein Algorithmus mit einem Eingabeexperiment gestartet werden kann und eine Resultat zurückliefert. MiningAlgorithm Das Interface MiningAlgorithm definiert die Methoden, mit denen auf einen Algorithmus von Dione zugegriffen werden kann. • getName(): String: Gibt den Namen des Experiments zurück. • getDescription(): String: Gibt eine Beschreibung über den Algorithmus zurück. • getParameterList(): List: Rückgabe ist eine List mit den vom Algorithmus benötigten Parametern. • getFunctionType(): int: Liefert den Funktionstyp des Algorithmus zurück. Diese sind: 1 für Modellerzeugung, 2 für Verifikation, 3 für Vorhersage und 4 für interaktive Modellerzeugung. • startAlgorithm(Experiment exp): Mit Übergabe eines Experimentes wird der Algorithmus von der Steuerung ausgeführt. • getResult(): MiningResult Nach Durchlauf des Algorithmus ist das Resultat über diese Methode bereitgestellt. 180 5.2 Schnittstellen MiningResult Dieses Interface definiert das Ergebnis und seine Zugriffsmethoden für Repräsentation und Export. • getComponent(): Component: Gibt den Namen des Experiments zurück. • getExportFormats(): List: Eine Liste von Exportformaten wird bereitgestellt. • setResultId(int resultId): Ordnet dem Resultat eine eindeutige Identifikationsnummer zu. • getResultId(): int: Liefert die Identifikationsnummmer des Resultats, mit der es in der Datenbank gespeichert wird. ClusteringMiningAlgorithm Anhand diese Interfaces ist der Ausgabetyp erkennbar. Es handelt sich dabei um einen Clustering-Algoithmus. SupervisedMiningAlgorithm AssociationRulesMiningAlgorithm DecisionTreeResult • getMiningModel(): SupervisedMiningModel : • getRootNode(): DecisionTreeDataNode: RuleResult Das RuleResult-Interface beschreibt das Ergebnis eines regelerzeugenden Algorithmus. • getRules(): String[ ]: Gibt eine Stringarray aller erzeugten Regeln zurück. • getRuleSet(): List: Alle Regeln in einer abstrakten List. 181 Kapitel 5 Feinentwurf • getTotalRowCount(): int: Die Anzahl aller Datensätze. • getStatsName(): String[ ]: Das Stringarray enthält die Titel der Anzeigespalten, die für die Leistungsdaten einer Regel bereitgestellt werden. Rule Dieses Interface beschreibt eine von einen Klassifikationsalgorithmus erzeugte Regel. • getRuleString(): String: Gibt die Regel in Form eines Strings zurück. • getRowCount(): double: Rückgabewert ist die Anzahl der von dieser Regel unterstützen Datensatz. • getIncorrectlyClassifiedRows(): double: Anzahl der falsch klassifizierten Datensätze. • getStatsStringValues(): String[ ]: Gibt eine Array von Strings zurück die Leistungsdaten zu der Regel enthalten. MiningParameter Der Mining Parameter als Interface repräsentiert die einzugebenden Parameter, mit denen der Algorithmus gestartet wird. • getName(): String: Gibt den Name des Parameters zurück. • getAlgorithmSpecParameterId(): int: • getDescription(): String: Liefert die Beschreibung des Parameters. • getParameterType(): Class: Gibt die Klasse des Parameters zurück. Beispielsweise gibt ein DioneStringMiningParameter die Klasse java.lang.String zurück. • getValue(): Object: Liefert den Wert des Parameters. • getStringValue(): String: Stringrepräsentation des Parameters. • setValue(Object value) Setzt den Wert für den Parameter. Wirft ggf. Fehler, wenn der Wert nicht zu dem Parametertyp paßt oder wenn der Wert ausserhalb der für diesen Parameter definierten Grenzen liegt. 182 5.2 Schnittstellen • getDefaultValue(): Object: Gibt den Standardwert zurück. Entspricht den Initialwert. • getMinValue(): Obejct: Liefert den zulässigen Minimalwert für den Parameter. • getMaxValue(): Object: Maximale Größe, die die Parameter annehmen dürfen. • isVisible(): boolean: Setzt den Parameter auf nicht sichtbar und somit nicht editierbar. • reset(): Setzt den Parameter auf den Standardwert zurück. 183 Kapitel 5 Feinentwurf 5.3 Inhaltlicher Aufbau der Webseiten von DIONE In diesem Abschnitt erfolgt eine grobe sprachliche Beschreibung des funktionalem Aufbaus der Webseiten von DIONE. Login Abbildung 5.3: DIONE Login-Seite Begrüßungsseite für nichtangemeldete Benutzer, welche eine Maske für das Einloggen bereitstellt. Diese besteht aus Textfeldern für Benutzername und Passwort sowie einer Schaltfläche, um das Einloggen tatsächlich durchzuführen. Bei erfolgreich vorgenommenem Login erreicht der Benutzer seine individuelle Übersichtsseite. Sollte der Login fehlgeschlagen sein, findet sich der Benutzer wieder auf der Login-Seite wieder. Alle Seiten, auf denen der Benutzer eingeloggt ist Jede Seite beinhaltet Navigationskomponenten, welche es dem Benutzer ermöglichen, innerhalb des Workflows zu navigieren. Insbesondere zählen dazu vor“ und zurück“-Schaltflächen bzw. Links. Schaltflächen und Links wer” ” den in diesem Abschnitt synonym verwendet, da das endgültige Aussehen der Webseiten noch nicht bestimmt ist. Jede Seite beinhaltet einen Arbeits- bzw. Inhaltsbereich, in dem die relevanten inhaltlichen Dinge dargestellt und ggf. modifiziert werden können. 184 5.3 Inhaltlicher Aufbau der Webseiten von DIONE Abbildung 5.4: überblick über den Aufbau einer typischen DIONE-Webseite. Abbildung 5.5: Navigationselement der DIONE-Webseite. Die Beschreibung der folgenden Seiten bezieht sich ab jetzt immer auf den Arbeits- bzw. Inahltsbereich der Seite, da die anderen Bereich weitestgehend identisch pro Seite bleiben. Am Kopf jeder Seite befindet sich eine Titelleiste (vgl. Abbildung 5.6), welche DIONE identifziert und dem Benutzer das aktuell bearbeitete Experiment bzw. seinen Standort, wenn er gerade kein Experiment bearbeitet, anzeigt. Auch bietet die Titelleiste dem Benutzer die möglichkeit, sich auszuloggen. Eine Hintergrundcollage bringt Dione, die Pflanzenwelt und die Europaflagge in Einklang. Ferner enthält die Titelleiste eine Statusbox, in welcher der Status der laufenden Experimente des Benutzers dargestellt werden (mit Direktlinks). Auch sind Bereiche für eine ggf. einblendbare kontextsensitive Hilfe vorgesehen. Eine Übersicht zeigt Abbildung 5.4. 185 Kapitel 5 Feinentwurf Abbildung 5.6: Die Kopfleiste der DIONE-Webapplikation Abbildung 5.7: Statusbox, die den Status der laufenden eigenen Experimente zeigt. Persönliche Übersichtsseite Es wird der Status der eigenen Experimente angezeigt und die möglichkeit gegeben, über einen Direktlink zu der Übersichtsseite des jeweiligen Experiments zu gelangen. Desweiteren ist es möglich, auf eine spezielle ExperimteÜbersichtsseite zu gelangen. Auf Wunsch können die öffentlichen nicht eigenen Experimente ebenfalls auf diese Weise dargestellt werden. Weiterhin werden die von nun an möglichen Arbeitsschritte inklusive Beschreibung angezeigt und für den nächsten Schritt zur Wahl gestellt. Neues Experiment (DM-Modell) erstellen Es wird ein Textfeld für die Eingabe des Namens des Experimentes bereitgestellt. Ferner erfolgt eine Übersicht und Auswahl der zur Verfügung stehenden DataMining-Methoden. Neues Experiment (Modell-Verifikation / Vorhersage(n)) erstellen Es wird ein Textfeld für die Eingabe des Namens des Experimentes bereitgestellt. Desweiteren erfolgt eine Übersicht und Auswahl aller verfügbaren Modelle aus eigenen und öffentlichen fremden abgeschlossenen Experimenten. 186 5.3 Inhaltlicher Aufbau der Webseiten von DIONE Erstellen einer Trait-Matrix Um die zu analysierenden Inputdaten zu erzeugen, gibt es drei Möglichkeiten: Import von einer Trait-Matrix mittels LEDA WebQuery, Kopieren von TraitMatrizen aus öffentlichen Experimenten und Hochladen von CSV-Dateien, die dann in Trait-Matrizen überführt werden. Import einer Trait-Matrix mit LEDA WebQuery Es wird ein Link angeboten, über den man zu LEDA WebQuery gelangt. Dort kann man sich komfortabel mit dem LEDA-Tool eine Trait-Matrix zusammenstellen. Es wird dann eine Möglichkeit geben, per Link von LEDA WebQuery zurück zu DIONE zu kommmen, mit dem Resultat, dass die in WebQuery erzeugte Trait-Matrix automatisch in DIONE importiert wird. Laden einer Trait-Matrix aus der Datenbank Es wird eine Liste aller Trait-Matrizen eigener Experimente und eine Liste alle Trait-Matrizen der öffentlichen Experimente angezeigt. über Radiobuttons kann eine Matrix ausgewählt werden. Dazu gibt es die Schaltflächen Abbrechen“ und Laden“. ” ” Importieren (Hochladen) einer Trait-Matrix Hierzu wird ein Textfeld zur Pfadeingabe und eine Schaltfläche Durchsu” chen“ angeboten, um die lokale Datei zu finden. Mit der Schaltfläche Hoch” laden“ wird die Matrix hochgeladen und angezeigt. Ferner werden Comboboxen angeboten, mit denen die Anzahl der gleichzeitig auf einer Seite angezeigten Pflanzen und der gleichzeitig auf einer Seite angezeigten Traits ausgewählt werden kann. Entsprechend wird die Wahl gelassen, welchen Bereich (horizontal / vertikal) der Matrix angezeigt werden soll. Mit Textfeldern können die Traits benannt, mit Comboboxen der Typ ausgewählt werden, und mit Radiobuttons / Comboboxen können die / kann die Pflanzenidentifikationsspalte(n) ausgewählt werden. Schließlich gibt es die Schaltflächen Abbrechen“ und Importieren“. ” ” Konfiguration des DataMining-Algorithmus Es werden die Konfigurationsmöglichkeiten in Abhängigkeit des Algorithmus angeboten (z.B. Wahl des Zieltraits). Anstelle der Schaltfläche Weiter“ ” 187 Kapitel 5 Feinentwurf wird die Schaltfläche Starten“ angeboten. Bei nicht interaktiven Algorith” men wird man wieder auf die Übersichtsseite navigiert. Bei interaktiven Algorithmen geht es mit den Interaktionsschritten weiter. Konfiguration des DataMining-Algorithmus Es werden die Konfigurationsmöglichkeiten in Abhängigkeit des Algorithmus angeboten (z.B. Wahl des Zieltraits). Anstelle der Schaltfläche Weiter“ ” wird die Schaltfläche Starten“ angeboten. Bei nicht interaktiven Algorith” men wird man wieder auf die Übersichtsseite navigiert. Bei interaktiven Algorithmen geht es mit den Interaktionsschritten weiter. Ergebnisanzeige für wirklich abgeschlossenen Experimente Anzeige des Ergebnis in Abhängigkeit des erzeugten Modells. Ggf. angezeigte Graphiken werden in angemessener Größe präsentiert. über Schaltflächen ist es möglich, zu einer Detaiansicht zu gelangen (groß oder als svg). Es wird ferner die Möglichkeit gegeben, weitere Ergebnisse von anderen abgeschlossenen eigenen und öffentlichen fremden Experimenten daneben zum Vergleich anzuzeigen. Abbildung 5.8: Das Ergebnis eines Clustering Experiment 188 5.3 Inhaltlicher Aufbau der Webseiten von DIONE Anzeige des Zwischenergebnis eines interaktiven Algorithmus (Zwischenergebnis) Es wird der aktuelle Baum dargestellt und ggf. die möglichkeit gegeben, die Blätter zu konfigurieren. sowie Knoten ein- bzw. auszublenden. Es wird ferner die möglichkeit gegeben, weitere Ergebnisse von anderen abgeschlossenen eigenen und öffentlichen fremden Experimenten daneben zum Vergleich anzuzeigen. Abbildung 5.9: Das Ergebnis eines Entscheidungsbaum Experiment Übersichtsseite der Experimente Anzeige aller eigenen Experimente (Schaltfläche zu den Details des Experiments) mit Checkbox für jedes Experiment. Dazu die Schaltflächen Löschen“, ” Publizieren“ sowie Abbrechen des Experiments“, welche zu dem Abbrechen ” ” eines laufenden DM-Prozesses führt. Übersichtsseite der Details eines Experiments Es werden alle wichtigen Informationen zum Experiment angezeigt. Ferner gibt es Schaltflächen zum Export des Modells, zum Erstellen eines Reports und zum Abbrechen eines laufenden Experiments. Von dieser Seite aus ist es möglich, den Workflow eines Experiments nachzuvollziehen bzw. fortzusetzen. 189 Kapitel 5 Feinentwurf Abbildung 5.10: Überblick über die öffentlichen Experimente. Export eines Modells Auf dieser Seite stehen Links, welche direkt zu Downloads in entsprechendem Format führen. 190 5.4 Serverseitige Stuktur der Webseiten von DIONE 5.4 Serverseitige Stuktur der Webseiten von DIONE Abbildung 5.11 zeigt die vorgesehenen Speicherorte der einzelnen Webseiten auf dem Server. Dabei ist angedacht, dass inhaltlich verwandte Seiten in den selben Ordnern gespeichert werden. Dies äußert sich konkret darin, dass alle Webseiten, die nur dann aufgerufen werden können, wenn der Benutzer erfolgreich eingeloggt ist, in dem Ordner jsp“ zusammengefasst sind. ” öffentliche Seiten mit funktinonalem Bezug zu DIONE sind (z.B. die Seite, welche die Einlogmaske bereitstellt) im Wurzelverzeichnis abgelegt. Ferner werden noch die Ordner scripts“ für die Javascripte sowie Images“ für die ” ” verwendeten Bilder auf den DIONE Webseiten eingerichtet. Die in Abschnitt 5.3 beschriebenen Webseiten werden jeweils konkret in einer jsp-Datei repräsentiert. Wie bereits erwähnt, liegen die Seiten, die der Benutzer mit geglücktem Login verwendet, im Ordner “jsp“. web-root about.jsp model Back.jsp model error.jsp model imprint.jsp model login.jsp model LoginFailed.jsp model logout.jsp model quickstart.jsp model images jsp ChooseData.jsp model ChooseMethod.jsp model ChooseVPData.jsp model ControlExperiment.jsp model ExperimentOverview.jsp model NewExperiment.jsp model OwnExperiments.jsp model PersonalOverview.jsp model result MiningPrediction.jsp ClusteringResult.jsp model CompareResult.jsp model ComponentResult.jsp model DecisionTreeResult.jsp model InteractiveDecisionTreeResult.jsp model RuleResult.jsp model TreeVerificationResult.jsp model PublicExperiments.jsp model scripts ShowResult.jsp model Abbildung 5.11: Struktur der Webordners von DIONE 5.4.1 Übersicht JSP, Skript-Funktionen und Styles Auflistung der JSPs: 191 Kapitel 5 Feinentwurf Back.jsp Wird bei der Rückkehr aus Webquery aufgerufen und dient dem einlesen der ausgewählten Daten LoginFailed.jsp Aufruf im Falle des fehlerhaften Logins about.jsp Allgemeine Informationen über das Projekt DIONE error.jsp Allgemeine Fehlerseite imprint.jsp Impressum von DIONE index.jsp Startseite logout.jsp Zum Ausloggen eines Users quickstarthelp.jsp Hilfeseite mit einer Kurzanleitung AlgValuePopup.jsp Dient zur erklärung von Algorithmen Parametern ChooseData.jsp Auswahl von Daten (Webquery, CSV, ...) zur Modellerstellung ChooseMethod.jsp Auswahl von vorhandenen Methoden ChooseVPData.jsp Auswahl von Daten (Webquery, CSV, ...) zur Verifikation und Vorhersage ConfigureMethod.jsp Konfiguration der Algorithmenmethoden ControlExperiment.jsp Startseite für den Algorithmus mit der erneuten Anzeige der Konfiguration ExperimentOverview.jsp Übersichtsseite des Experimentes HelpPopup.jsp Hilfe-Popup NewExperiment.jsp Erstellung eines neün Experiments OwnExperiments.jsp Übersicht der eigenen Experimente PersonalOverview.jsp Übersicht der persönlichen/eigenen Daten inklusive der Nachrichten PublicExperiments.jsp Übersicht der öffenlichen Experimente ShowResult.jsp Hauptseite der Ergebnisanzeige mit Einbindung der jeweiligen Ergebnisseiten im Verzeichnis “result“ results/ClusteringResult.jsp Ergebnisanzeige des Clusterings 192 5.4 Serverseitige Stuktur der Webseiten von DIONE results/CompareResults.jsp Ergebnisvergleich results/ComponentResult.jsp Ergebnisanzeige results/DecisionTreeResult.jsp Ergebnisanzeige des Entscheidungsbaumes results/InteractiveDecisionTreeResult.jsp Ergebnisanzeige des interaktiven Entscheidungsbaumes results/MiningPredictionResult.jsp Ergebnisanzeige der Ergebnisvorhersage results/RuleResult.jsp Ergebnisanzeige der Assoziationsregeln results/TreeVerificationResult.jsp Ergebnisanzeige der Ergebnisverifikation results/Subtree.jsp Popup-Fenster des Unterbaumes (Subtree) Auflistung der Skript-Funktionen von scripts.js: dialogRUN(form, value, altext, cotext) Funktion für Combobox (ExperimentControl) dialogPUB(form, value, altext) Funktion für Combobox (öffentliche Experimente) dialogOWN(form, value, altext, cotext) Funktion für Combobox (eigene Experimente) dialogTMA(form, value, altext, cotext) Funktion für Combobox (TraitMatrix) hide(id) Anzeigen und Verstecken von Objekten checkAll(check, formNo) Überprüfen aller Checkboxen in einem Formular checkRadioRow(element, formNo) Überprüfen von Radiobuttons reverseCheck(formNo) Checkboxselektion rückgängig machen checkChecks(formNo) Aktualisierung der Checkboxen hideNavigation(element) Ausblenden der Navigationsleiste checkRow(element, state) Überprüfen der Zeilenauswahl Auflistung der Styles: 193 Kapitel 5 Feinentwurf default.css Styles für Kopfbereich popup.css Styles für Popup-Fenster styles.css Styles für alle Elemente 194 5.5 Klassen des WUI Moduls 5.5 Klassen des WUI Moduls Die Umsetzung des Kontrollflusses über die Webseiten erfolgt mit Hilfe von Struts (vgl. Abbildung 5.12). Hierzu werden für die wesentlichen Seitenübergänge Servlets definiert, welche von der von Struts bereitgestellten Klasse Action“ abgeleitet sind. Diese Klasse stellt bereits die für den Kontrollfluss ” benötigten Methoden bereit, welche von den DIONE-Klassen ggf. überschrieben werden. Die einzelnen angesprochenen Klassen von DIONE erben jedoch nicht direkt von “Action“. Es wird noch die Klasse “DioneAction“ zwischengeschaltet, welche Funktionalität übernimmt, die bei jedem Seitenwechsel in Anspruch genommen werden soll. Dies ist z.B. das Abrufen des Status der bereits laufenden Experimente des Benutzers. wui model action model tag model util model tag model table model Abbildung 5.12: Paketstruktur des Java-Quelltextes Alle Actions werden in einem Paket gebündelt. Da Dione Multilingual konzipiert wurde, beinhaltet das Paket “lang“ die Sprachdateien (Übersetzungen) für zunächst zwei Sprachen (Deutsch und Englisch). Im Paket “tag“ werden die Implementationen der Tags realisiert. Sie sorgen für kürzeren und übersichtlicheren JSP-Code. Da es in der Webanwendung viele Tabellen gibt, wurde ein Subpaket für die Tabellen erstellt. Das Paket “util“ umfasst alle Servlets, Beans und kleinere Hilfsklassen. 5.5.1 Paket wui.action Dieses Paket implementiert die WUI-Actions. Alle Klassen sind abgeleitet von der DioneAction.java. Alle Actions erhalten Daten aus einem HTMLReqüst bzw. aus einem zuvor ausgefüllten Formular. Die Methode execute wird in allen Actions ausgeführt und endet mit einem Seitenaufruf. Die Klassen dieses Paketes werden im folgenden in alphabetischer Reihenfolge erläutert: 195 Kapitel 5 Feinentwurf ChangeColumnTypeAction Ändert den Spaltentyp der Traitmatrix ChooseMethodAction Aktion zur Auswahl der Algorithmen-Methode ChooseModelExperiment Aktion zur Auswahl des Modelltypes CollapseTreeAction Auf- und Zuklappen aller Knoten beim Explorerbaum ConfigureMethodAction Aktion für die Konfiguration eines Experimentes ControlExperimentAction Aktion zum Starten des Algorithmus eines Experimentes CopyMatrixFromExperiment Kopiert eine Matrix (Hilfsaktion) CreateDummyMatrixAction Erstellt eine Dummy-Matrix DioneAction Globale Methoden für alle Actions EditTableAction Führt Veränderungen an Tabellen aus ExperimentOverviewChangingAction Führt Veränderungen bei der Experimentenübersicht aus ExperimentOverviewEditingAction Zum editieren der Experimentenübersicht LoginAction Aktion zum einloggen eines Users LogoutAction Aktion zum ausloggen eines Users NewExperimentAction Erstellt ein neues Experiment OpenCloseNodeAction Auf- und Zuklappen von Knoten beim Explorerbaum OpenNodeAction Aufklappen von Knoten beim Explorerbaum RemoveMatrix Entfernt eine Matrix SelectExperimentAction Aktion zur Auswahl eines Experimentes SetFlag Aktion zum Setzen von Markierungen TableAction Aktionen zum Blättern in Tabellen und Sortieren nach Spalten TreeAction Markiert den Knoten eines Baumes 196 5.5 Klassen des WUI Moduls TrueTreeAction Führt gewünschte Aktionen (ausklappen, einklappen von Ästen) für den ausgewählten Knoten durch. Bei Interaktion wird die Aktion für Benutzereingaben genutzt UploadCSVAction Aktion zum Hochladen einer CSV-Datei 5.5.2 Paket wui.lang Dieses Paket beinhaltet Dateien für die Umsetzung von Labels zu Text in der jeweiligen Sprache. Da die Webseite mehrsprachig ist, kann hier eine einfach Umsetzung erfolgen. Die Verwendung dieses Paketes ist näher in den Kapitel über ausgewählte Abläufe beschrieben. 5.5.3 Paket wui.tag.table Dieses Paket beinhaltet alle tags, die über Struts verwendet werden und für Tabellenausgaben erforderlich sind. ClusteringDescriptionTableUtils Tabelle für Clustering-Beschreibung ClusteringTableUtils Tabelle für Clustering-Daten ExperimentTableUtils Tabelle für Experimente MatrixTableHeaderTag Tabelle für den Kopfbereich einer Matrixtabelle MatrixTableUtils Tabelle für eine Matrixtabelle RulesTableUtils Tabelle für Regelausgabe SimpleTableHeaderItem Kopfbereich einer einfachen Tabelle TableContentTag Allgemeine Inhaltsbereich aller Tabellen TableHeaderItem Kopfbereich einer allgemeinen Tabelle TableHeaderTag Kopfbereich einer allgemeinen Tabelle TableState Zum Setzen und zur Rückgabe verschiedener Zustände einer Tabelle TableTag Stellt den Rahmen für alle Tabellen TableUtils Beinhaltet Hilfsmethoden für Tabellen VerificationTableUtils Tabelle für die Darstellung des Ergebnis einer Verifikation 197 Kapitel 5 Feinentwurf 5.5.4 Paket wui.tag.tree Dieses Paket beinhaltet alle tags, die über Struts verwendet werden und für Baumdarstellung erforderlich sind. Tree Implementation der Explorer-Baumdarstellungsfunktionen TreeTag Ausgabe der Explorer-Baumdarstellung 5.5.5 Paket wui.tag Dieses Paket beinhaltet alle tags, die über Struts verwendet werden. Für jeden Tag wird die Methode “doStartTag“ verwendet. Sie beinhaltet den auszuführenden Java-Code. Für die folgenden Tag-Klassen soll an dieser Stelle lediglich eine kurze Beschreibung der Aufgabe erfolgen. Technische Einzelheiten sind der externen Code-Dokumentation zu entnehmen. AvailableAlgrorithmsTag Zum Anzeigen der verfügbaren Algorithmen. ConfigurationOverviewTag Zeigt die Übersicht zur Konfiguration an. ConfigurationTag Anzeige der Konfiguration eines Experimentes ContentFrameInnerTag Zur Positionierung des Arbeitsbereiches ContentFrameTag Zur Positionierung des Arbeitsbereiches ContentTag Umschließt den Inhaltsbereich ControlExperimentTag Zur Anzeige des Status eines Experimentes mit der Möglichkeit zum Abbrechen normaler Experimente DioneTag Basisklasse für alle Tag-Klassen, die das Dione Resource-Bundle nutzen. Diese Klasse wird abgeleitet von TagSupport ExperimentOverview Zur Anzeige der Experimentenübersicht FrameTag Tag für den Beginn eines Frames GlobalnavigationTag Zur Anzeige der Navigationselemente. Zu dieser Klasse gehören vier weitere Tag-Klassen, die ebenfalls für die Navigation zuständig sind: “GlobalnavigationitemTag“, “GlobalnavigationsubitemTag“, “GlobalnavigationsubtitleTag“ und “GlobalnavigationtitleTag“. 198 5.5 Klassen des WUI Moduls HeaderTag Diese Klasse erzeugt den Kopfbereich von der Internetseite HelpboxTag Tag für die Anzeige der Hilfetextrahmen ImageContainerTag Hilfsklasse für die Einbindung von Bildern auf einer Webseite. LastLoginTag Erzeugt die Ausgabe für die Ausgabe, wann ein Benutzer das letzte Mal im System “Dione“ angemeldet war MyexperimentsTag Zur Anzeige einer Liste von eigenen Experimente NavigationTag Zusammen mit den Tags-Klassen “NavigationTabsTag“ und “NavigationTabTags“ wird hier die Ausgabe des Registerbereiches erzeugt. Sie befindet sich zwischen dem Kopfbereich und dem Arbeitsbereich. Die einzelnen Register werden je nach Status eines Experimentes Aktiv oder Passiv angezeigt. Hat ein Benutzer für ein Experiment noch keine Data-Mining-Methode ausgewählt, so kann sind die Register “Konfiguration“, “Ergebnis“ usw. passive Register. Desweiteren beinhaltet das Tag eine Schaltfläche zum Abmelden des Benutzers. NewsTag Tag zur Ausgabe von Nachrichten für den Benutzer. Diese werden nach dem Login-Vorgang angezeigt und informieren beispielsweise den Benutzer über kürzlich abgeschlossene Jobs. NodeContentTag In einem Entscheidungsbaum kann der Benutzer einzelne Knoten selektieren und bekommt mit Hilfe dieses Tags eine genaüre Beschreibung des Knoteninhaltes. Diese werden dann tabellarisch unter dem Entscheidungsbaum ausgegben. NoExperimentsTag Für die Anzeige im Falle nicht vorhandener Experimente PopupFrameTag Anzeigeformatierung eines Popupframes SmallTabsTag Darstellung eines zweiten schmalen Registerbereiches SubtreeTag Anzeigeformatierung für das Subtree-Fenster 5.5.6 Paket wui.util Dieses Paket enthält Beans, Servlets und andere Hilfsklassen. ChooseMethodBean Diese Klasse wird für die Auswahl der Methode (Algorithmus) benötigt 199 Kapitel 5 Feinentwurf CSVServlet Servlet zum Hochladen einer CSV-Datei DioneWuiConvertationException Über diese Klasse erhält man Fehlermeldungen ExperimentOverviewEditing Hilfsklasse für die Experimentenübersicht LoginUser Diese Klasse wird für den Login-Vorgang benötigt MatrixComparator Hilfsklasse zum Vergleichen zweier Matrixobjekte NewExperimentBean JavaBean, das zur Erzeugung eines neuen Experimentes benötigt wird News Klasse zum Auslesen und zur Erzeugung von Benutzernachrichten NewsQueue Realisierung einer Warteschlange für Benutzernachrichten PNGServlet Servlet zur Erzeugung eines PNG-Bildes für die visülle Ausgabe des Entscheidungsbaumes SessionListener Klasse für die Erzeugung und Zerstörung von Web-Sessions StringBean Bean zur Weitergabe von Strings StringFormatUtils Löscht diverse Zeichen aus einem String zur Vermeidung von ungewollten Eingaben des Benutzers SVGServlet Servlet zur Erzeugung eines SVG-Bildes für die visülle Ausgabe des Entscheidungsbaumes UploadCSVBean Bean für das Hochladen einer CSV-Datei 200 5.6 Klassen des Moduls Steuerung 5.6 Klassen des Moduls Steuerung Das Modul Steuerung befindet sich in dem Paket de.unioldenburg.dione.control. Es ist Teil der Steuerungsschicht und beinhaltet alle Elemente, die für das Jobmanagement notwendig sind. Außerdem wird hier die allgemeine DioneException definiert. Alle innerhalb von Dione entworfenen Ausnahmenklassen sind von dieser Klasse abgeleitet. Eine Übersicht über das Paket bietet Abbildung 5.13. control <<Singleton>> MiningJob MiningJobManager - user : User - jobManagerInstance : MiningJobManager - experiment : Experiment - jobList : List - status : int + addJob(miningJob: MiningJob) : void - startDate : Date + removeJob(miningJob: MiningJob) : void + MININGJOB_RUNNING : int = 1 + MININGJOB_NOTRUNNING : int = 2 + MININGJOB_FINISHED : int = 3 + getJoblist() : List + getuserJobList(user: User) : List + getInstance() : MiningJobManager + MININGJOB_PAUSED : int = 4 <<create>> - MiningJobManager() + MININGJOB_ERROR : int = 5 + run() : void - endDate : Date <<create>> + MiningJob(experiment: Experiment,user: User) : + getUser() : User + startJob() : int SimpleJobManager + setStatus(status: int) : void - jobList : Vector + setStartDate(start: Date) : void + stopJob() : void + pauseJob() : void + continueJob() : void + run() : void + setEndDate(end: Date) : void + getEndDate() : Date DioneException # messageLogged : boolean = false <<create>> + DioneException(message: String,log: boolean) <<create>> + DioneException(message: String,cause: Throwable,log: boolean) <<create>> + DioneException(cause: Throwable,log: boolean) Abbildung 5.13: Klassendiagramm zum Modul Steuerung 5.6.1 MiningJob Diese Klasse wird vom Jobmanager genutzt, um einen Job anzusprechen und zu bearbeiten. Nur Instanzen dieser Klasse können an den JobManager übergeben werden. Zusätzlich wird das Interface Runable implementiert, damit ggf. jeder einzelne Job als eigener Thread innerhalb der JVM laufen kann. 201 Kapitel 5 Feinentwurf Paketzugehörigkeit: de.unioldenburg.dione.control Oberklasse: Interfaces: Runable Attribute: private Experiment experiment, private DioneUser user, private int status, private Calendar startDate, private Calendar endDate Methoden: • MiningJob(Experiment,User):MiningJob Dieser Konstruktor initialisiert eine neue Instanz der Klasse mit einem Experiment, dessen Algorithmus ausgeführt werden soll und dem dazugehörigen Benutzer. • getUser(): DioneUser: gibt den Benutzer zurück, dem der Job zugeordnet ist. • getStatus(): int gibt den aktuellen Status der Ausführung in Form einer der vorher beschriebenen Konstanten zurück. • setStatus(int) Setzt den aktuellen Status in Form einer Statuskonstante. Diese Methode sollte nur von einem JobManager benutzt werden. • getStartDate():Calendar Gibt den Zeitpunkt zurück, an dem die Ausführung gestartet wurde. Wurde die Ausführung noch nicht gestartet, dann wird null zurück gegeben. • setStartDate(Calendar) Setzt den Zeitpunkt des Beginns der Ausführung. Diese Methode sollte nur von einem JobManager benutzt werden. • getEndDate():Calendar Gibt den Zeitpunkt zurück, an dem die Ausführung beendet wurde. Wurde die Ausführung noch nicht beendet oder nur pausiert, dann wird null zurück gegeben. • setEndDate(Calendar): Setzt den Zeitpunkt des Endes der Ausführung. Diese Methode sollte nur von einem JobManager benutzt werden. • startJob(): startet die Ausführung des Jobs. • run(): Diese Methode wird von Runable vererbt und ermöglicht das ein MiningJob als neuer Thread gestartet werden kann. Verhalten im Fehlerfall: Status des Experimentes wird auf Error gesetzt. 202 5.6 Klassen des Moduls Steuerung 5.6.2 MiningJobManager Mit dieser Klasse wird die Struktur beschrieben, die jeder Jobmanager implementieren muss. Damit nur genau ein Jobmanager in der JVM aktiv ist, wird die Struktur eines Singleton implementiert. Es wird das Interface Runable mit einbezogen, damit die Implementation als eigener Thread innerhalb der JVM agieren kann. Paketzugehörigkeit: de.unioldenburg.dione.control Oberklasse: Object Interfaces: Runable Attribute: Methoden: • addJob (MiningJob miningJob) Übergabe: miningJob, Rückgabe: -, Funktion: Mit dieser Methode wird ein Job zur Bearbeitung an den Jobmanager übergeben. • removeJob(MiningJob miningJob) Übergabe: miningJob, Rückgabe: -, Funktion: Diese Methode entfernt, sofern vorhanden, den übergebenen MiningJob aus der Liste der zu bearbeitenden MiningJobs. • getJobList() Übergabe: -, Rückgabe: jobList, Funktion: Es wird eine Liste mit allen Jobs, die sich zu dem Zeitpunkt des Aufrufs im Jobmanager befinden zurückgegeben. • getUserJobList(DioneUser user) Übergabe: user, Rückgabe: userJobList, Funktion: Es wird eine Liste mit allen Jobs, die dem übergebenen Benutzer zugeordnet sind, zurückgegeben. • getJob(int experimentID) Übergabe: experimentID, Rückgabe: job, Funktion: Gibt den Job zurück, der zu der übergebenen Experiment-ID gehört. • removeJob(int experimentID) Übergabe: experimentID, Rückgabe: -, Funktion: Liefert true und löscht den Job, wenn übergebenes Experiment sich im Jobmanager befindet. • isExperimentInJobManager(int experimentID) Übergabe: experimentID, Rückgabe: -, Funktion: Liefert true, wenn übergebenes Experiment sich im Jobmanager befindet, sonst false 203 Kapitel 5 Feinentwurf • run() Übergabe: -, Rückgabe: -, Funktion: Diese Methode wird von Runable vererbt und ermöglicht das ein Jobmanager als neuer Thread gestartet werden kann. Diese Methode ist abstrakt definiert und muss von der Unterklasse implementiert werden. • MiningJobManager() Übergabe: -, Rückgabe: -, Funktion: Der Konstruktur wird nur intern von getInstance() verwendet und ist deshalb als privat markiert. Diese Maßnahme ist Teil des SingletonKonzepts. • MiningJobManager getInstance() Übergabe: -, Rückgabe: -, Funktion: Diese Methode wird an Stelle eines Konstruktors aufgerufen und ist Teil des Singleton-Konzepts. Die Rückgabe ist die Referenz auf die aktuelle Jobmanagerinstanz, die in instance gespeichert ist. Sollte das Klassenattribut instance leer sein, wird eine neue Instanz eines MiningJobManager erzeugt. 5.6.3 SimpleJobManager Eine einfache Implementation der abstrakten Klasse MiningJobManager. Der SimpleJobManager verarbeitet immer nur ein Experiment zur Zeit, andere Experimente die übergeben werden, werden in eine Warteliste geschickt. Paketzugehörigkeit: de.unioldenburg.dione.control Oberklasse: MiningJobManager Interfaces: Attribute: Methoden: • run() Übergabe: -, Rückgabe: -, Funktion: Mit dieser Methode werden die Experiment aus der Joblist nacheinander gestartet. Wenn die Jobliste leer ist, wird der SimpleJobManager solange in den wait-zustand geschickt, bis ein neuer Job hinzugefügt wird. Sobald ein Job vorhanden ist und noch kein anderer Job läuft, wird ein Thread der Klasse MiningJob ausgeführt und das entsprechende Experiment wird gestartet. Der SimpleJobManager wartet nun so lange bis das Experiment fertig ist und gibt eine entsprechende Erfolgs- oder Fehlermeldung aus. Der Job wird aus der Jobliste entfernt und der nächste Job wird bearbeitet. 204 5.6 Klassen des Moduls Steuerung Verhalten im Fehlerfall: Bei einem Fehler wird der User über eine ErrorNachricht in den News benachrichtigt. 5.6.4 DioneException Diese Klasse ist die Oberklasse für alle innerhalb von Dione entworfenen Ausnahmeklassen. Sie bietet die Möglichkeit alle eigenen Ausnahmeklassen zentral um neue Funktionalität zu erweitern. Es werden drei zusätzliche Konstruktoren implementiert, die die Möglichkeit bieten zu entscheiden, ob die Ausnahme / der Fehler in der Log-Datei vermerkt werden soll. Paketzugehörigkeit: de.unioldenburg.dione.control Oberklasse: Exception Interfaces: Attribute: Methoden: • DioneException(message, log): Es wird eine neue Instanz mit der übergebenen Fehlermeldung zurück gegeben. Außerdem wird die Fehlermeldung geloggt, wenn log wahr ist. • DioneException(message, cause, log): Bei diesem Konstruktor kann zusätzlich als Auslöser für das Erzeugen der Instanz ein Throwable-Objekt übergeben werden. • DioneException(cause, log): Dieser Konstruktor setzt als Fehlermeldung der Instanz die Fehlermeldung des Auslösers. Es wird zusätzlich geprüft, ob der Auslöser auch eine Instanz von DioneException ist. Ist dies der Fall, dann wird die Fehlermeldung nur geloggt, wenn log wahr ist und die Fehlermeldung des Auslösers nicht geloggt wurde. 205 Kapitel 5 Feinentwurf 5.7 Klassen des Moduls Algorithmen 5.7.1 Paket algorithm Das Paket algorithm enthält die Dataminingstrukturen als den berechnenden Bestandteil der Dione Workbench. Diese sind in weiteren Unterpaketen nach Modellierung, Visualisierung sowie allgemeine Hilfsklassen zusammengefaßt. Das Paket model beinhaltet die abstrakten Beschreibungen zu den Resultaten und Parametern, in seinen Unterpaketen xelopes die implementierten Verfahrensklassen für den Clustering, Entscheidungsbaum und Assoziationsregeln von Xelopes/Weka und in dione den interaktiven Entscheidungsbaumalgorithmus. algorithm model transform util <<Singleton>> AlgorithmFactory - AlgorithmFactoryInstance : AlgorithmFactory + getMiningAlgorithmList() : List + getMiningParameterList(algorithmName: String) : List + getTransformationMethodList() : List + getTransformationParamterList(methodName: String) : List + getMiningAlgorithmInstance(algorithmName: String) : MiningAlgorithm + getTransformationMethodInstance(methodName: String) : TransformationMethod + getInstance() : AlgorithmFactory - AlgorithmFactory() # getAlgorithmSpec(algorithmId: int) : AlgorithmSpec # getTransformationSpec(transformationId: int) : TransformationSpec # getAlgorithmSpecList() : List # getTransformationSpecList() : List DbBasedAlgorithmFactory Abbildung 5.14: Struktur des Paketes algorithm AlgorithmFactory Eine abstrakte Klasse, die als Hauptanlaufstelle des WUI Moduls zum Algorithmen Modul. Sie ist als Singleton entworfen und dient als Schnittstelle zu den Algoritmusspezifikationen. Der Zugriff auf die Spezifikationen wird durch die abstrakten Methoden realisiert. Damit ist es möglich verschiedene Speicherarten wie Tabellen in eine Datenbank oder XML-Dateien zu realisieren ohne den restlichen Quellcode zu ändern. Alle anderen Methoden. 206 5.7 Klassen des Moduls Algorithmen sind implementiert und greifen auf die Spezifikationen durch die abstrakten Methoden zu. Paketzugehörigkeit de.unioldenburg.dione.algorithm Oberklasse Object Interfaces keine Attribute AlgorithmFactory (private static, algorithmFactoryInstance, Referenz zur Instanz der Klasse) Methoden • getMiningAlgorithmList() Rückgabe; List, Funktion: Gibt eine Liste mit Namen aller implementierten Datamining Algorithmen zurück. • getMiningParameterList(algorithmName) Übergabe: String, Rückgabe: List, Funktion: gibt eine Liste mit den Namen aller Parameter des übergebenen Algorithmus zurück. • getTransformationMethodList() Rückgabe: List, Funktion: Gibt eine Liste mit den Namen aller implementierten Attributetransformationsverfahren zurück. • getTransformationParamterList(methodName) Übergabe: String, Rückgabe: List, Funktion: Gibt eine Liste mit den Namen aller Parameter des übergebenen Verfahrens zurück. • getMiningAlgorithmInstance(algorithmName) Übergabe: String, Rückgabe: MiningAlgorithm, Funktion: Gibt ein instanziertes( die Parameter sind mit dem Standardwert initialisiert) MiningAlgorithmObjekt zurück. • getTransformationMethodInstance(methodName) Übergabe: String, Rückgabe: TransformationMethod, Funktion: Gibt ein instanziertes( die Parameter sind mit dem Standardwert initialisiert) TransformationMethod-Objekt zurück. • getInstance() Rückgabe: AlgorithmFactory, Funktion: Die aktuelle Instanz der AlgorithmFactory wird zurück gegeben. Wenn es noch keine gibt, dann wird diese erzeugt. Es wird immer eine Implementation dieser Klasse zurückgegeben. • AlgorithmFactory() Funktion: Dieser Konstruktor wurde als private markiert, da von außerhalb der Klasse nur über die Methode getInstance() eine Instanz erzeugt werden soll. 207 Kapitel 5 Feinentwurf • getAlgorithmSpec(algorithmId) Übergabe: Integer, Rückgabe: AlgorithmSpec, Funktion: Gibt ein zu der übergebenen ID passendes AlgorithmSpec-Objekt zurück. • getTransformationSpec(transformationId) Übergabe: Integer, Rückgabe: TransformationSpec, Funktion: Gibt ein zu der übergebenen ID passendes TransformationSpec-Objekt zurück. • getAlgorithmSpecList() Rückgabe: List, Funktion: Gibt eine Liste mit allen verfügbaren AlgorithmSpec-Objekten zurück. • getTransformationSpecList() Rückgabe: List, Funktion: Gibt eine Liste mit allen verfügbaren TransformationSpec-Objekten zurück Verhalten im Fehlerfall Die von den abstrakten Methoden geworfenen SpecificationRetrievalFailedException-Objekte werden an die aufrufende Klasse weitergereicht. 5.7.2 Paket algorithm.model Grundlegende Schnittstellen- und Abstraktionsbeschreibungen über die Algorithmen, Resultate und Parameter von Dione bestimmen den Inhalt von model. Diesem Paket zugeordnet sind ebenso die konkreten Parameterimplementationen für die Typen Boolean, Double, Float, Integer und String, sowie die Spezialisierungen für Konstanten und das Zeitattribut. model dione xelopes <<Interface>> MiningModelBuildResult <<Interface>> MiningPredictionResult <<Interface>> MiningInteractiveAlgorithm <<Interface>> MiningAlgorithm + getName() : String <<Interface>> MiningInteractiveNextStep + getDescription() : String + getParameterList() : List + setNextStep(nextStep: int) : void + getNextStep() : int <<Interface>> <<Interface>> MiningInteractiveStepResult MiningParameter + getName() : String <<Interface>> + getDescription() : String MiningResult + getParameterType() : String + getGraphics() : void + getValue() : Object + setValue(value: Object) : void + getDefaultValue() : Object + reset() : void <<Interface>> MiningVerificationResult Abbildung 5.15: Struktur des Paketes algorithm.model 208 5.7 Klassen des Moduls Algorithmen MiningAlgorithm Implementierungen von MiningAlgorithm kapseln verschiedene DataMiningAlgorithmen. Das MiningAlgorithm-Objekt repräsentiert den zum Experiment gehörenden Algorithmus und bietet Referenzen auf die dazugehörenden Parameter-Objekte, welche eine Parametrisierung des Algorithmus zulassen. Paketzugehörigkeit algorithm.model Oberklasse Interfaces Attribute Methoden • getName(): Rückgabe: String, Funktion: Gibt den Namen des Algorithmus zurück. • getDescription(): Rückgabe: String, Funktion: Gibt eine Beschreibung des Algorithmus zurück. • getParameters(): Rückgabe: List, Funktion: Gibt eine Liste der zum Algorithmus gehörenden Parameter (jeweils Objekte vom Typ Parameter) zurück. Verhalten im Fehlerfall Parameter In den Instanzen des Interfaces MiningParameter werden die einzelnen konfigurierbaren Einstellungen eines Algorithmus festgelegt. Paketzugehörigkeit algorithm.model Oberklasse Interfaces Attribute Methoden 209 Kapitel 5 Feinentwurf • getType(): int: Gibt je nach Typ des Parameters einen Integerwert zurück, welcher einer typspezifischen Konstanten entspricht (z.B. 1“ für Double), die innerhalb des Interfaces festgelegt ist. ” Der Typ kann ein einfaches Objekt wie Float und Integer aber z.B. auch ein MiningResult-Objekt zur Verifikation eines Modells (siehe UseCases) sein. • getName(): String: Gibt den Namen des Parameters zurück. • getDescription(): String: Liefert eine Beschreibung des Parameters. • getValue(): Object: Liefert den aktuellen Wert des Parameters in Abhängigkeit des Typs. Der Default-Wert wird beim Instaziieren gesetzt. • setValue(Object): Setzt den aktuellen Wert des Parameters. Es ist dabei auf den richtigen Typ zu achten, welcher ein einfaches Objekt wie Float und Integer aber z.B. auch ein MiningResultObjekt zur Verifikation eines Modells (siehe UseCases) sein kann. Verhalten im Fehlerfall MiningResult Implementierungen von MiningResult kapseln Ergebnisse verschiedener DataMiningAlgorithmen. Dies schließt auch Zwischenergebnisse bei interaktiven Algorithmen mit ein. Paketzugehörigkeit algorithm.model Oberklasse Interfaces Attribute privat int ResultId Methoden • isExperimentCompleted(): boolean: Liefert true, falls tatsächlich ein Endergebnis festliegt, sonst false (z.B. bei noch zu tätigenden interaktiven Schritten). • getComponent(): java.awt.Component: Liefert eine visuelle Darstellung des Ergebnis, welche mit der paint()-Methode des Component-Objekts erzeugt werden kann. 210 5.7 Klassen des Moduls Algorithmen • getExportFormats(): List: Gibt eine Liste für das MiningResult verfügbarer Exportformate zurück. Verhalten im Fehlerfall MiningModelBuildResult Als Grundlage aller modellerzeugenden Verfahren deklariert diese abstrakte Klasse die Ergebnisbereitstellung in PMML-Form. Sie implementiert desweiteren MininResult und ist klonierbar. Paketzugehörigkeit algorithm.model Oberklasse Interfaces MiningResult Attribute Methoden • getPMMLString(): Übergabe: -, Rückgabe: String, Funktion: Liefert einen String mit dem PMML-codierten Modell zurück. • clone(): Übergabe: -, Rückgabe: List, Funktion:Gibt eine Liste für das MiningResult verfügbarer Exportformate zurück. Verhalten im Fehlerfall Die abstrakte Methode clone() wirft im Fehlerfall eine CloneNotSuportedException, getPMMLString() eine DioneMiningException. 5.7.3 Paket algorithm.model.dione Das Paket algorithm.model.dione stellt Klassen und Methoden für die von DIONE implementierten Algorithmen zur verfügung. Dies ist insbesondere der Interaktive Entscheidungsbaum. 5.7.4 Paket algorithm.model.xelopes Das Paket algorithm.model.xelopes stellt Klassen und Methoden aus der Xelopes Libery zur verfügung, die für die einzelnen Algorithmen benötigt werden. 211 Kapitel 5 Feinentwurf dione InteractiveDecisionTreeAlgorithm + InteractiveDecisionTreeAlgorithm() # getClassifier() # runAlgorithm() : void InteractiveDecisionTreeMiningModel - nextStep : int + InteractiveDecisionTreeMiningModel() + setNextStep(nextStep: int) : void + getNextStep() : int Abbildung 5.16: Struktur des Paketes algorithm.model.dione 5.7.5 Paket algorithm.model.weka Das Paket algorithm.model.weka stellt Klassen und Methoden aus der WEKA Libery zur verfügung, die für die einzelnen Algorithmen benötigt werden. 5.7.6 Paket algorithm.util Das Paket algorithm.util stellt nützliche Funktionen zur verfügung, die immer wieder angesprochen werden. DioneMiningException Diese Ausnahmeklasse repräsentiert alle Formen von Ausnahmen, die während der Ausführung eines Datamining-Algorithmus oder eines Transformationsverfahren auftreten können. Paketzugehörigkeit: de.unioldenburg.dione.algorithm.util Oberklasse: DioneException Interfaces: keine Attribute: keine Methoden: 212 5.7 Klassen des Moduls Algorithmen util DioneMiningException WrongParameterTypeException SpecificationRetrievalFailedException <<Interface>> ExportFormat + getMimeType() : String + getName() : String + getDescription() : String + getExport(miningResult: MiningResult) : Object Abbildung 5.17: Struktur des Paketes algorithm.util • keine 5.7.7 Paket algorithm.visualization In diesem Paket befinden sich die grafischen Klassen. Diese stellen die Anzeigestrukturen und -informationen bereit, die sie aus den Objekten der Xelopes-Bibleothek extrahieren und als grafische Komponenten bereithalten. Arrow Die Klasse Arrow beschreibt die grafischen Pfeile, die als Verbindung zwischen den Knoten dargestellt wird. Paketzugehörigkeit: de.unioldenburg.dione.algorithm.viszualization Oberklasse: Object Attribute: private GeneralPath shape, private Component start, end, private int type, private double spikeWidth, spikeLength, private boolean deko Methoden: 213 Kapitel 5 Feinentwurf • isVisible() Übergabe: keine, Rückgabe: boolean, Funktion: Wahrheitswert wahr, wenn Anfang und Ende des Pfeils sichtbar sind, sonst falsch. • vgl. java.awt.Shape der Java API1 Verhalten im Fehlerfall: DioneVisualDecisionTreeException extends DioneException DecisionTreeDataNode Repräsentiert einen einzelnen Knoten in einem Decisiontree-Objekt. Paketzugehörigkeit: de.unioldenburg.dione.algorithm.viszualization Oberklasse: Attribute: Methoden: • addChild(DecisionTreeDataNode) • children() • getChildAt(int) • getChildCount() • getComponent() • getContent() • getContentRows() • getDepth() • getIndex() • getLeafCount() • getLevel() • getName() • getNodeID() • getParent() • getRoot() 1 http://java.sun.com/j2se/1.4.2/docs/api/ 214 5.7 Klassen des Moduls Algorithmen • isLeaf() • isRoot() • setComponent(Component) • setIndex(int) • setLeaf(boolean) • setLevel(int) • setNodeID(int) • setParent(DecisionTreeDataNode) • setRoot(boolean) Verhalten im Fehlerfall: DioneVisualDecisionTreeException extends DioneException DioneVisualDecisionTreeException Fehlerklasse für dieses Paket. Paketzugehörigkeit: de.unioldenburg.dione.algorithm.viszualization Oberklasse: DioneException Attribute: Methoden: • getMessage() VisualDecisionTree Repräsentiert einen Baumobjekt. Dieses Objekt wird auch für den interativen Algorithmus genutzt. Paketzugehörigkeit: de.unioldenburg.dione.algorithm.viszualization Oberklasse: Container Attribute: Relevante Methoden: 215 Kapitel 5 Feinentwurf • VisualDecisionTree(DecisionTreeDataNode root, boolean minimized) • deselectNode(DecisionTreeDataNode node) • deselectNodeFromID(int id) • foldBranches() • getSelectedNodes() • getSubtree() • minimizeNodeFromID(int id) • paint(java.awt.Graphics graphics) • paintAll(Graphics graphics, double scale) • paintComponents(Graphics graphics) • selectNode(DecisionTreeDataNode node) • selectNodeFromID(int id) • setMinimized(boolean minimized) • setPrintview(boolean printview) • unfoldBranches() • unfoldLevels() • unfoldTree() Verhalten im Fehlerfall: DioneVisualDecisionTreeException extends DioneException VisualDecisionTreeNode Repräsentiert einen einzelnen Knoten in einem VisualDecisiontree-Objekt. Paketzugehörigkeit: de.unioldenburg.dione.algorithm.viszualization Oberklasse: component Attribute: Relevante Methoden: • calculatePosition() • getDepth() 216 5.7 Klassen des Moduls Algorithmen • getPlaceForNode() • paint(Graphics graphic) Verhalten im Fehlerfall: DioneVisualDecisionTreeException extends DioneException 217 Kapitel 5 Feinentwurf 5.8 Klassen des Moduls Datenstrukturen Im folgenden werden die Klassen des Moduls Datenstrukturen beschrieben. Aufgeteilt wird nach den Bereichen WUI-DS, Algorithmus Konfiguration und Traitmatrix. Die einzelnen Abschnitte enthalten jeweils die zugehörigen Klassendiagramme, deren Beschreibung, die DAOs sowie die Tabellenrepräsentation in der Dione Datenbank. 5.8.1 WUI-DS Hier die Klassen die vorrangig für die WUI wichtig sind. DioneUser und DioneUserDao Die Klasse DioneUser dient als Datenstruktur um die Benutzerdaten zu halten. DioneUser Paketzugehörigkeit de.unioldenburg.dione.data.ojects Oberklasse Object Interfaces keine Attribute String username,String forename, String surname, String eMail, String password, int id Methoden • FUNKTION1 Getter und Setter Verhalten im Fehlerfall ... Die Klasse DioneUserDao dient als Data Acces Object für die DioneUser Klassen, um diese laden und speichern zu können. Wir verwenden eine Implementierung als OracleDioneUserDao für eine Oracle Datenbank. DioneUserDao de.unioldenburg.dione.data.access Oberklasse Object Interfaces keine Attribute keine 218 5.8 Klassen des Moduls Datenstrukturen Methoden • getDioneUser übergabe: int , Rückgabe: DioneUser, Funktion: gibt das zu der übergebenen ID gehörende DioneUser- Objekt zurück • getDioneUser übergabe: String, Rückgabe: DioneUser, Funktion: gibt das zu dem Namen gehörende DioneUser- Objekt zurück • getDioneUser übergabe: Experiment, Rückgabe: DioneUser, Funktion: gibt das zum Experiment gehörende DioneUser Objekte zurück • getDioneUsers übergabe: void, Rückgabe: List, Funktion: gibt eine Liste mit allen verfügbaren DioneUser Objekten zurück • destroy übergabe: void, Rückgabe: void, Funktion: schliesst evtl geöffnetet Verbindungen und Prepared Statements Verhalten im Fehlerfall Wirft DioneException im Fehlerfall Experiment und ExperimentDao Die Klasse Experiment repräsentiert ein Experiment. Experiment Paketzugehörigkeit de.unioldeburg.dione.data.objects Oberklasse keine Interfaces keine Attribute id:Integer, name:String, description: String, completed: boolean, publicExperiment: boolean, creationDate: Calendar, changeDate: Calendar, kindofMethod: Integer, config:Configuration, result: MiningResult; writeProtected: Boolean, owner: Integer, Status: Integer; sowie diverse Konstanten Methoden • Getter und Setter Alle Getter und Setter für die Attribute, ausser Set für Datumsangaben (werden von der Datenbank gesetzt) und WriteProtected (wird nur vom Jobmanager gesetzt) • createCopyForUser übergabe: DioneUser, Rückgabe: Experiment, Funktion: erzeugt eine Arbeitskopie vom Aktuellen Experiment für den übergebenen User 219 Kapitel 5 Feinentwurf Verhalten im Fehlerfall Wirft exceptions ExperimentDao de.unioldenburg.dione.data.access Oberklasse kein Interfaces keine Attribute keine Methoden • getExperiment übergabe: integer, Rückgabe: Experiment, Funktion: Gibt das Experiment mit der übergebenen id zurück • getAllPublicExperiments übergabe: void, Rückgabe: List, Funktion: gibt alle öffentlichen Experimente in einer Liste zurück • getExperimentsForUsesr übergabe: DioneUser, Rückgabe: List, Funktion: gibt eine Liste mit allen zum Benutzer gehörenden Experimenten zurück • getExperimentCount übergabe: void, Rückgabe: integer, Funktion: gibt die Anzahl aller Experimente zurück • getPublicExperimentCount übergabe: void, Rı̈ückgabe: integer, Funktion: gibt die Anzahl aller öffentlichen Experimente zurück • getExperimentCountForUser übergabe: DioneUser, Rückgabe: integer, Funktion: gibt die Anzahl der zum Benutzer vorhandenen Experimente zurück • storeExperiment übergabe: Experiment, DioneUser, Rückgabe: void, Funktion: speichert das übergebene Experiment für den übergebenen Benutzer ab • updateExperiment übergabe: Experiment, Rückgabe: void, Funktion: überschreibt das übergebene Experiment in der Datenbank • removeExperiment übergabe: Expriment, Rückgabe: void, Funktion: löscht das übergebene Experiment in der Datenquelle • destroy übergabe: void, Rückgabe: void, Funktion: schliesst evtl geöffnete Verbindungen und Prepared Statements Verhalten im Fehlerfall Wirft im Fehlerfall DioneException 220 5.8 Klassen des Moduls Datenstrukturen 5.8.2 Algorithmus Konfiguration Hier werden die Klassen der Konfigurationsinformationen von Xelopes berschrieben, sowie die dazugehörigen DAOs. AlgorithmSpec Diese Klassen repräsentiert eine Spezifikation eines Algorithmus und gibt den Typ des Algorithmus an. Oberklasse keine Interfaces keines Attribute algorithmSpecId: Integer, algorithmName: String, functionTypeId: Integer, functionTypeName: String, algorithmTypeId: Integer algorithmTypeName: String, dataMiningLibraryId: Integer, dataMiningLibraryName: String, dataMiningLibraryVersion: String, version: String, Description: String, AlgorithmClassName: String, GraphicsClassName: String, parameterList: List, librarySpecificSpecification: Objekt Methoden • Methoden: Get und Set Mehoden für alle Attribute AlgorithmSpecParameter Diese Klassen repräsentiert eine Den Wert und den Typ eines Paramters von einem Algorithmus an. Oberklasse keine Interfaces keines Attribute algorithmSpecId: Integer, algoritmSpecParameterId: Integer, parameterName: String, parameterTypeId: Integer, parameterTypeName: String, parameterDefaultValue: String, parameterMinValue: String, parameterMaxValue: String, description: String, constantValueList: ArrayList Methoden • Methoden: Get und Set Mehoden für alle Attribute 221 Kapitel 5 Feinentwurf TransformationSpecParameter Diese Klassen repräsentiert die Umwandlung von einem AttributTyp zu einem anderen. Oberklasse keine Interfaces keines Attribute transformationSpecId: Integer, transformationName: String, transformationTypeId: Integer, transformationTypeName: String, inputAttributeTypeId: Integer, inputAttributeTypeName: String, outputAttributeTypeId: Integer, outputAttributeTypeName: String, dataMiningLibraryId: Integer, dataMiningLibraryName: String, dataMiningLibraryVersion: String, transformationClassName: String, description: String, version: String Methoden • Methoden: Get und Set Mehoden für alle Attribute MiningAlgorithm Diese Klassen repräsentiert das Interface zwischen dem Dataminig Algorithmus und dem User-Interface. Es gibt an, welche Methoden von einen Algorithmus benötigt werden, so daß der User ihn benutzen kann. Oberklasse keine Interfaces Interface zwischen MinigAlgorithm und UserInterface Attribute keine Methoden • getAlgorithmSpecId übergabe: - Rückgabe: - • getName Get und Set Mehoden für alle Attribute • getDescription Get und Set Mehoden für alle Attribute • getParameterList Get und Set Mehoden für alle Attribute • getFunctionType Get und Set Mehoden für alle Attribute • getResult Get und Set Mehoden für alle Attribute • startAlgorithm übergabe: Experiment, Rückgabe: - 222 5.8 Klassen des Moduls Datenstrukturen 5.8.3 Traitmatrix Hier werden die Klassen der Traitmatrix beschrieben. AttributeDescription Diese Klasse repräsentiert ein einzelnes Attribut das Webquery aus der LedaTraitbasse bekommen kann. Variablen traitId: Integer, internalName: String, externalName: String, usedForGrouping: Integer, attributeType: Integer, valueType: Integer, isAggregationResult: Integer, usedForOrdering: Integer, shortTableName: String Methoden get, set, Konstruktor, clone Oberklasse keine Interfaces keines Beschreibung der wichtigesten Variablen attributeType Kann die Werte: ORDINAL, NOMINAL, INTEGER, DOUBLE oder String, wie in DBAccesConstants angegeben annehmen. valueType Entspricht den Konstanten aus java.sql.Types. Beschreibung der Methoden Konstruktor Initialisiert die Attributewerte getset Get-Methoden für alle Werte mit Einschränkungen (WritePtotected, Zeitangaben) 223 Kapitel 5 Feinentwurf Abbildung 5.18: Klassendiagramm AttributeDescription AtributeDescriptionList Ein Vektor mit Attributbeschreibungen(AttributeDescription) Paketzugehörigkeit Oberklasse Vector Interfaces keines Attribute Methoden • Konstruktor Funktion: ruft Superklassenkonstruktor auf • getAttributeDescription übergabe: Integer, Rückgabe: AttributeDescription, Funktion: Gibt das indizierte AttributeDescription Objekt zurück. Verhalten im Fehlerfall SingleTraitResult Repräsentiert das Ergebnis eines Traits zu der mit Webquery gestellten Anfrage. Ein SingleTraitResult kann eine oder mehrere Spalten enthalten. 224 5.8 Klassen des Moduls Datenstrukturen Attribute traitId: Integer, attributeDescriptionList: AttributeDescriptionList, resultSet : Vector Methoden Konstruktor, getset Oberklasse keine Interfaces keines Beschreibung der Attribute traitId Funktion : Id des Trait zu dem das Resultat gehört attributeDescriptionList Funktion : Enthält die Attributbeschreibungen, der Reihenfolge nach passend wie im ResultSet Vector spaltenweise. ResultSet Funktion : Enthält die Daten des Query Ergebnisses QueryResultList Repräsentiert ein vollständiges WebQuery- Ergebnis, bestehend aus einem oder mehreren SingleTraitResults. Attribute traitId: Integer, attributeDescriptionList: AttributeDescriptionList, resultSet : Vector Methoden Konstruktor, addSingleTraitResult, containsResultForTrait, getSingleTraitResult Oberklasse Vector Interfaces keines Konstruktor Funktion: ruft Superklassenkonstruktor auf addSingleTraitResult übergabe: SingleTraitResult Rückgabe:nichts, Exception wenn Trait schon vorhanden, Funktion : fügt einen Trait hinzu containsResultForTrait übergabe: Integer(traitId), Rückgabe: Boolean, Funktion: gibt True zurück wenn die übergebene TraitId bereits vorhanden ist. getSingleTraitResult übergabe: Integer(traitId), Rückgabe: SingleTraitResult, Exception wenn traitId nicht enthalten, Funktion: Gibt SingleTraitResult passend zur übergebenen TraitId zurück. 225 Kapitel 5 Feinentwurf TraitMatrix Die Klasse Traitmatrix repräsentiert die ’Traitmatrix’ an sich. Die Traitmatrix setzt sich aus Spalten (Coloumn) zusammen. de.unioldenburg.dione.data.objects TraitMatrix AttributeDescriptionList + UNUSED_ROW :int = 0 + MODEL_CREATION_ROW :int = 1 + PREDICTION_ROW :int = 2 + VERIFICATION_ROW:int = 4 ~rowsIntendedPurpose :ArrayList ~getAttributeDescription * + findColumn (anAttributeDescription :AttributeDescription ):int + removeColumn (aColumn :int ):void + removeColumn (anAttributeDescription :AttributeDescription ):void + removeRow (aRow:int ):void ~checkRowsIntendedPurpose ():void + addColumn (aColumn :Column ):void + insertColumn (aColumn :Column ,aCol:int ):void + getColumns ():List + setColumns (columns :List ):void + getDescription ():String + setDescription (description :String ):void + getTraitMatrixId ():int + setTraitMatrixId (traitMatrixId :int ):void + getRow (row :int ):List + getRowCount ():int + clone ():Object + getUserId ():int + setUserId (userId :int ):void + getRowsIntendedPurpose ():ArrayList + setRowsIntendedPurpose (rowsIntendedPurpose :ArrayList ):void + getAttributeDescriptionList ():AttributeDescriptionList AttributeDescription + getTraitId ():int + setTraitId (aTraitId :int ):void + getInternalName ():String + setInternalName (aName :String ):void + getExternalName ():String + setExternalName (aName :String ):void + getUsedForGrouping ():int + setUsedForGrouping (aTruthValue :int ):void + getIsAggregationResult ():int + setIsAggregationResult (aTruthValue :int ):void + getUsedForOrdering ():int + setUsedForOrdering (aTruthValue :int ):void + getValueType ():int + setValueType (aValueType :int ):void + getAttributeType ():int + setAttributeType (anAttributeType :int ):void + getShortTableName ():String + setShortTableName (aName :String ):void + toString ():String + getStringVal (indent :String ,topLevel :AttributeDescription + equals (obj :Object ):boolean + clone ():Object * Column + getAttributeDescription ():AttributeDescription + setAttributeDescription (attributeDescription :AttributeDescription + getData ():List + setData (data :List ):void + toArray ():Object[] + clone ():Object (anIndex :int ):AttributeDescription ):void ):String WebQueryConstants (from leda_traitbase_webquery ) + NOMINAL:int = 1 + ORDINAL:int = 2 + NUMERIC:int = 3 + DESCRIPTIVE :int = 4 Abbildung 5.19: Klassendiagramm Traitmatrix Column Die Klasse Coulumn repäsentiert eine Spalte in der Traitmatrix (eine Spalte kann wiederum meherer Spalten enthalten). Es wird jeweils eine AttributeDescription mit den Informationen gespeichert sowie eine ArrayList die die tatsächlichen Daten enthält. DataImport DataImport ist ein Interface,das die verschiedenen Import- und Reimportmöglichkeiten der Traitmatrix definiert. Implementiert werden zunächst der CSVImport, der eine vom Benutzer hochgeladenes CSV- Datei in eine Traitmatrix importieren kann, sowie der WebqueryImport, der die von WebQuery 226 5.8 Klassen des Moduls Datenstrukturen übergebenen Datenstrukturen einlesen kann. Die ReImport- Methoden dienen jeweils dazu zu einer bestehenden Matrix weitere Daten hinzuzufügen. Abbildung 5.20: Klassendiagramm DataImport DataExport DateExport ist ein Interface, dass die verschiedenen Exportmethoden der Traitmatrix darstellt. Zunächst soll ein einen XelopesExport geben, der eine Traitmatrix in einen MinigInputStream transformiert wie Xelopes in verwenden kann, sowie ein CSV- Skeleton Export, der als Headervorlage einer CSV Datei dienen kann, die dann vom Benutzer offline verändert werden kann. Abbildung 5.21: Klassendiagramm DataExport WebQueryImport Importiert eine von WebQuery erzeugte TraitMatirx de.unioldenburg.dione.data.objects 227 Kapitel 5 Feinentwurf Oberklasse Object Interfaces DataImport Attribute keine Methoden • matrixImport übergabe: Object Data (Eine Liste mit 2 Einträgen(Benutzername und Queryname)), Rückgabe :TraitMatrix, Funktion: Ruft den WebQueryCLient auf, dieser setzt dann die von WebQuery in der Datenbank gespeicherte Query auf. Die daraus erzeugte TraitMatrix wird dann in das Dione TraitMatrixformat konvertiert. Verhalten im Fehlerfall Fehlermeldung bei unbekanntem Datentyp WebqueryConstants Definiert die Zugriffskonsten für das Webquery, die in einigen anderen Klassen verwendet werden. Es werden Zwei Arten von Konstanten unterschieden: Wahrheitswerte und Wertetypen. Typ ist Integer. Attributtypen: NOMINAL = 1 Funktion : Nominalwert ORDINDAL = 2 Funktion : Ordinalwert NUMERIC = 3 Funktion : Zahlenwert DESCRIPTIVE = 4 Funktion : Text 228 5.8 Klassen des Moduls Datenstrukturen Abbildung 5.22: Klassendiagramm WebQueryConstants TraitMatrixExportStream Der TraitMatrixExportStream implementiert einen MiningInputStream von Xelopes. TraitMatrixExportStream Paketzugehörigkeit de.unioldenburg.dione.data.objects Oberklasse MiningInputStream Interfaces keine Attribute TraitMatrix traitMatrix, integer methodkind, integer usedRowCount Methoden • Konstruktor übergabe: TraitMatrix aTraitMatrix, integer kindOfMethod 229 Kapitel 5 Feinentwurf • recognize übergabe: void, Rückgabe: MiningDataSpecification, Funktion: erzeugt die MetaDaten und gibt sie zurück • reset übergabe: void, Rückgabe: void, Funktion: setzt den CursorVector zurück • next übergabe: void, Rückgabe: void, Funktion: wählt die nächste zu benutzenden Zeile an • move übergabe: integer position, Rückgabe: Boolean, Funktion: Setzt den Cursor auf die übergebene Position, liefert false wenn ungültige Position • read übergabe: void, Rückgabe: MiningVector, Funktion: Liefert einen MiningVector zurück 5.9 Datenbank In diesem Abschnit wird die DIONE Datenbank beschrieben, die eine essentielle Datenstruktur für die Workbanch darstellt. Denn in dieser Datenbank werden die Konfigurationen von Experimenten, die Experimente selbst sowie die dazugehörigen Traitmarizen und die Ergebnisse gespeichert, also alle Daten die für den Datamining Vorgang wichtig sind. Ferner wird auch die Algorithmusspezifikation in dieser Datenbank vorgehalten, welches im zweiten Abschnitt dieses Kapitel zufinden ist. Die Benutzerverwaltung ist von der LEDA Datenbank (Siehe: www.ledatraitbase.org) übernommen, da diese bereits mit vorhandenen Usern existierte. Pflanzen Merkmale und reine Daten die erst noch für das Datamining aufgearbeitet werden müssen finden sich nicht in der DIONE Datenbank, können aber in Form von Experimenten und Traitmatrizen importiert werden. Es werden folgende SQL-Skripte benötigt um die DIONE Datenbank anzulegen: 1. createDIONE.sql Dieses Skript erzeugt die benötigte Tabellenstruktur für die DIONE Datenbank, samt Triggern und Sequences. 2. insertIntoDIONE.sql Die Tabellen werden mit diesem Skript mit einem initialen Katalog der in DIONE verwendeten Algorithmen gefüllt. 230 5.9 Datenbank 5.9.1 Tabellenstruktur Experiment Dieser Abschnit widment sich den Tabellen und Datenstrukturen die notwendig sind, um Experimente in ihrem vollem Umfang, also samt Traitmatrix, Konfiguration und Ergbnis abzuspeichern und zubenutzen. Traitmatrix Schema: DIONE Typ: Tabelle Beschreibung: In dieser Tabelle werden die Traitmatrixen samt all ihrer Daten gespeichert. Attribute: Name TraitmatrixID UserID Typ NUMBER NULL NUMBER NULL NOT NOT Description VARCHAR2(4000) Traitmartix BLOB MatrixVersion NUMBER(3) Key PK Beschreibung Primärschlüsselfeld Id des Benutzers der die Traitmatrix erzeugte Beschreibung der Traitmatrix Die komplette Traitmatrix gibt die Version der Traitmatrix an Configuration Schema: DIONE Typ: Tabelle Beschreibung: Diese Tabelle beinhaltet die Configuration von DataminingAlgorithmen. Also alle Einstellungen die für ein ausführen des Experimentes notwendig sind. Attribute: 231 Kapitel 5 Feinentwurf Name ConfigID Typ NUMBER NULL NOT Key PK Beschreibung Primärschlüsselfeld wird fortgesetzt auf nächster Seite 232 5.9 Datenbank fortgesetzt von vorheriger Seite Name UserID Typ NUMBER NULL Key ResultID Name NUMBER NOT NULL VARCHAR2(500) isPublic NUMBER(3) AlgorithmSpecID NUMBER(8) NOT Beschreibung Id des Benutzers der die Konfiguration erzeugte Id des Ergebnisses von der Konfiguration Name der Konfiguration bzw. des Experimentes gibt an ob ein Experiment öffentlich ist gibt die zum Experiment dazugehörige Algorithmus Spezifikation AlgorithmSpecParameterValue Schema: DIONE Typ: Tabelle Beschreibung: Diese Tabelle beinhaltet die Werte für die Parameter der Algorithmus Spezifikation Attribute: Name Typ Key AlgorithmSpecParameterID NUMBER NOT PK NULL ConfigID NUMBER NOT PK NULL Value VARCHAR2(4000) Beschreibung Primärschlüsselfeld Primärschlüsselfeld enthält die Werte der Parameter Experiment Schema: DIONE Typ: Tabelle Beschreibung: Diese Tabelle beinhaltet alle Informationen die zu einem Experiment gehören. So zum Beispiel auch die ConfigID Attribute: 233 Kapitel 5 Feinentwurf 234 5.9 Datenbank Name ExperimentID ConfigID UserID ResultID Description TraitmartixID Typ NUMBER NULL NUMBER NULL NUMBER NULL NOT Key PK Beschreibung Primärschlüsselfeld NOT PK Primärschlüsselfeld NOT NUMBER NOT NULL VARCHAR2(4000) NUMBER NULL NUMBER NULL NOT FlorianState NUMBER NULL NOT Name VARCHAR2(500) isPublic NUMBER(3) changeDate TIMESTAMP creationDate TIMESTAMP kindOfMethod NOT Id des Benutzers der das Experiment erzeugte Id des Ergebnisses von dem Experiment Beschreibung des Experiments Die ID der zugehörigen Traitmatrix gibt die verwendete Methode bzw. Algorithmus an gibt den internen Zustand des Experimentes an Name des Experimentes gibt an ob ein Experiment öffentlich ist gibt das Änderungsdatum an gibt das Enstehungsdatum an MiningResult Schema: DIONE Typ: Tabelle Beschreibung: Diese Tabelle beinhaltet das Ergebnisses des Dataminings Attribute: 235 Kapitel 5 Feinentwurf Name ResultID Typ NUMBER NULL NOT Key PK Beschreibung Primärschlüsselfeld wird fortgesetzt auf nächster Seite 236 5.9 Datenbank fortgesetzt von vorheriger Seite Name Result Typ BLOB Key Beschreibung enthält das komplette Ergebniss des Datamining News Schema: DIONE Typ: Tabelle Beschreibung: Diese Tabelle speichert die News, News sind zum Beipiel, dass ein Experiment abgeschlossen ist. Attribute: Name NewsID News Typ Key NUMBER NOT PK NULL NUMBER NOT NULL VARCHAR2(4000) creationDate TIMESTAMP UserID Beschreibung Primärschlüsselfeld ID des Benutzers der die News erzeugte Enthält die Neuigkeiten als Text gibt das Enstehungsdatum an 5.9.2 Tabellenstruktur Algorithmusspezifikationen Die Spezifikationen der Algorithmen, die dem Modul WUI über die AlgorithmFactory zur Verfügung gestellt werden, werden in der Datenbank in einer Tabellenstruktur unter dem Schema DIONE zur Verfügung gestellt. Abbildung 5.23 zeigt diese Struktur. 237 Kapitel 5 Feinentwurf Abbildung 5.23: Tabellenstruktur Algorithmusspezifikationen 238 5.9 Datenbank Im folgenden werden die einzelnen Tabellen beschrieben. AlgorithmType Schema: DIONE Typ: Tabelle Beschreibung: Diese Tabelle beinhaltet den Typ des Datamining-Algorithmus. Beispiele für den Typ sind decisionTree“ oder centerBasedClustering“ ” ” Attribute: Name AlgorithmTypeId AlgorithmTypeName Typ NUMBER NOT NULL VARCHAR2(50) Key PK Beschreibung Primärschlüsselfeld Name des Algoritmustyps FunctionType Schema: DIONE Typ: Tabelle Beschreibung: Diese Tabelle beinhaltet die Funtktionstypen von DataminingAlgorithmen. Ein Beispiel für die Funktion wäre Classification“. ” Attribute: Name FunctionTypeId FunctionTypeName Typ NUMBER NOT NULL VARCHAR2(50) Key PK Beschreibung Primärschlüsselfeld Name des Funktionstyps AttributeType Schema: DIONE Typ: Tabelle Beschreibung: Diese Tabelle beinhaltet die einzelnen Attributtypen, die als Parameter für die Algorithmen oder Transformationsverfahren genutzt werden. Attribute: 239 Kapitel 5 Feinentwurf 240 5.9 Datenbank Name AttributeTypeId AttributeTypeName Typ NUMBER NOT NULL VARCHAR2(200) Key PK Beschreibung Primärschlüsselfeld Name des Attributtyps TransformationType Schema: DIONE Typ: Tabelle Beschreibung: Diese Tabelle beinhaltet die einzelnen Typen von Attributtransformationsverfahren. Unter anderem gehört die Nullwertersetzung“ da” zu. Attribute: Name TransformationTypeId TransformationTypeName Typ NUMBER NOT NULL VARCHAR2(50) Key PK Beschreibung Primärschlüsselfeld Name des Verfahrens DataMiningLibrary Schema: DIONE Typ: Tabelle Beschreibung: Diese Tabelle beinhaltet die Namen der einzelnen DataminingBibliotheken. Attribute: Name DataMiningLibraryId DataMiningLibrary Name Version Typ NUMBER NOT NULL VARCHAR2(50) VARCHAR2(10) Key PK Beschreibung Primärschlüsselfeld Name der Bibliothek Versionnummer Bibliothek der 241 Kapitel 5 Feinentwurf AlgorithmSpec Schema: DIONE Typ: Tabelle Beschreibung: Diese Tabelle beinhaltet die Spezifikation der Algorithmen. Die Spezifikation der Parameter zu einem Algorithmus befindet sich in der Tabelle AlgorithmSpecParameter. Attribute: Name AlgorithmSpecId AlgorithmName FunctionTypeId AlgorithmTypeId DataMiningLibraryId Typ NUMBER NOT NULL VARCHAR2(50) NUMBER NOT NULL NUMBER NOT NULL NUMBER NOT NULL AlgorithmClassName VARCHAR2(200) GraphicsClassName VARCHAR2(200) Description VARCHAR2(500) Version VARCHAR2(10) Key PK FK FK FK Beschreibung Primärschlüssel Name des Algorithmus Fremdschlüssel zur Tabelle FunctionType Fremdschlüssel zur Tabelle AlgorithmType Fremdschlüssel zur Tabelle DataMiningLibrary Name der Javaklasse, die zum Algorithmus gehört Name der JavakLasse, die Grafik des Modells erzeugt Beschreibung des Algorithmus Version des Algorithmus AlgorithmSpecParameter Schema: DIONE Typ: Tabelle Beschreibung: Diese Tabelle beschreibt die Parameter zu einem DataminingAlgorithmus. Der Primärschlüssel besteht hier aus zwei Feldern, damit eine eindeutige Zuordnung mehrerer Parameter zu einem bestimmten Algorithmus gegeben ist. Attribute: 242 5.9 Datenbank 243 Kapitel 5 Feinentwurf Name AlgorithmSpecId Typ NUMBER NOT NULL Key PK, FK AlgorithmSpecParameterId NUMBER PK NOT NULL ParameterName VARCHAR2(50) ParamterTypeId NUMBER FK NOT NULL ParameterDefaultValue VARCHAR2(50) Description VARCHAR2(500) Beschreibung Primär- und Fremdschlüsselfeld zur Tabelle AlgorithmSpec Primärschlüsselfeld Name des Parameters Fremdschlüssel zur Tabelle AttributType Standardwert des Parameters Beschreibung TransformationSpec Schema: DIONE Typ: Tabelle Beschreibung: Diese Tabelle beinhaltet die Spezifikation der Attributtransformationsverfahren. Die Spezifikation der Parameter zu einem Verfahren befindet sich in der Tabelle TransformationSpecParameter. Attribute: Name TransformationSpecId TransformationName TransformationTypeId Typ Key NUMBER PK VARCHAR2(50) NUMBER FK NOT NULL InputAttributeTypeId NUMBER NOT NULL NUMBER NOT NULL NUMBER NOT NULL OutputAttributeTypeId DataMiningLibraryId FK FK FK TransformationClassName VARCHAR2(200) Description VARCHAR2(500) Beschreibung Primärschlüssel Name des Verfahrens Fremdschlüssel zur Tabelle TransformationType Fremdschlüssel zur Tabelle AttributType Fremdschlüssel zur Tabelle AttributType Fremdschlüssel zur Tabelle DataMiningLibrary Name der Javaklasse des Verfahrens Beschreibung des Verfahrens wird fortgesetzt auf nächster Seite 244 5.9 Datenbank fortgesetzt von vorheriger Seite Name Version Typ Key VARCHAR2(10) Beschreibung Version des Verfahrens TransformationSpecParameter Schema: DIONE Typ: Tabelle Beschreibung: Diese Tabelle beschreibt die Parameter zu einem Attributtransformationsverfahren. Der Primärschlüssel besteht hier aus zwei Feldern, damit eine eindeutige Zuordnung mehrerer Parameter zu einem bestimmten Verfahren gegeben ist. Attribute: Name TransformationSpecId Typ NUMBER NULL NOT TransformationSpec ParameterId ParameterName ParamterTypeId NUMBER NOT NULL VARCHAR2(50) NUMBER NOT NULL ParameterDefaultValue VARCHAR2(50) Description VARCHAR2(500) Key PK, FK PK FK Beschreibung Primär- und Fremdschlüsselfeld zur Tabelle Transformationspec Primärschlüsselfeld Name des Parameters Fremdschlüssel zur Tabelle Attributtype Standardwert des Parameters Beschreibung 245 Kapitel 5 Feinentwurf 5.10 Ausgewählte Abläufe Für die Beschreibung der einzelnen Module der DIONE-Workbench sollen im folgenden die grundlegenden Abläufe erläutert werden. Im Vordergrund steht die modulübergreifende Interaktion der einzelnen Klassen, wodurch sich die im vorigen beschriebenen Teilfunktionalitäten zu einem Gesamtüberblick vereinen lassen. 5.10.1 Interaktiver Entscheidungsbaumalgorithmus Das Diagramm 5.24 stellt den sequenziellen Ablauf der Verfahrensnutzung dar. Der Benutzer startet ein Experiment, in dem die Konfiguration schon eingegeben wurde. Damit beginnt die Schleife, die erst beendet wird, wenn der Baum fertig aufgebaut ist. Der Algorithmus wird initialisiert und fordert die Eingabedaten aus dem Experimentobjekt an. Diese sind die Traitmatrix und das Zwischenschrittresultat des Ergebnisbaums, der im ersten Schritt nur aus einem Wurzelelement besteht. In den folgenden Schritten wird der Baum durch einen erweiterten ersetzt. Nach Darstellung der Baumstruktur und des Informationsgewinns für Attributsplitting wählt der Benutzer an dem aktuellen Knoten die nächste Eingabe aus. Diese kann entweder Pruning oder Splitting nach einem Attribut sein. Diese Eingabe wird in das Experiment eingetragen und der Algorithmus neu gestartet. Im letzten Schritt steht die Splittingfunktion nicht mehr zur Verfügung, der Baum kann durch Pruning aber in vorige Teilergebnisse zurückgeführt werden. 246 5.10 Ausgewählte Abläufe <WUI> <Steuerung> <ALG> Experiment starte IEBVerfahren starte IEB-Verfahren starte IEBA hole Traitmatrix liefereTraitmatrix hole Benutzerschritt liefere Benutzerschritt (im 1. Schritt keinen) loop erzeuge Baummodell im x+1.Schritt Erfolgreicher Interaktiver Schritt Erfolgreicher Interaktiver Schritt trage Teilbaummodel ein fordere Baummodell an liefere Baummodell Darstellung des Zwischenresultats Nicht fertig?: Bestimme nächsten Schritt frage Status ab liefere Status (fertig/nicht fertig) Trage nächsten Benutzerschritt ein Abbildung 5.24: Sequenzdiagramm zum Aufruf des Interaktiven Entscheidungsbaumalgoritmus (IEBA) 247 Kapitel 5 Feinentwurf 5.10.2 Zusammenspiel von JSP und anderen Elementen Das folgende Kapitel soll einen Einblick in die Realisierung von den JSP’s mit den Struts-Elementen (Tags und Actions), den Beans und Servlets geben. Allgemeines Um lange Pfade zu vermeiden, werden am Anfang jeder JSP einige Definitionen vorgenommen: <%@ <%@ <%@ <%@ <%@ <%@ taglib uri="/WEB-INF/DioneTags.tld" prefix=\"dione\" %> taglib uri="/WEB-INF/DioneTableTags.tld" prefix=\"table" %> taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> page import="de.unioldenburg.dione.algorithm.model.*" %> page import="de.unioldenburg.dione.data.objects.*" %> Datentransfer Unter Umstaenden mussen Daten von einer Seite zur naechsten uebergeben werden. Dieser Transfer wird auf unterschiedliche Weise realisiert: • Ueber einen Request: “request.getAttribute(String)“. Die Daten werden ueber ein an die URL angehaengt und an die naechste Seite weitergereicht. • Mit session-Variablen: session.getAttribue(String) Verwaltet wird die Session vom Tomcat-Server. • Ueber Beans: “<jsp:useBean id=“...“ class=“...“ scope=“...“/ >“ Die Weitergabe von Daten an Actions werden ueber HTML-Formulare realisiert. Mit der Methode “public ActionForward execute(...)“ wird die Action ausgefuehrt. Durch die Parameteruebergabe “ActionMapping mapping“, “ActionForm form“, “HttpServletRequest request“ und “HttpServletResponse response“ erhaehlt man die notwendigen Daten. Diese koennen dann mit “HttpSession session = request.getSession();“ und “request.getParameter( formularelementname);“ verwendet werden. Alle Uebergaben sind hierbei vom Typ String. 248 5.10 Ausgewählte Abläufe Verwendung von Tags Tags werden im Paket “wui.tags“ implementiert und koennen dann mit dem jeweiligen Namen eingebunden werden. In diesem Beispiel wird die Beschreibung eines Knoten als Tag mit Namen “nodeContent“ auf einer JSP eingebunden: <dione:nodeContent ></dione:nodeContent > Alle Tags mit Ausnahme von Tabellen-Tags werden mit “dione:NAME“ eingebunden. Dies ergibt sich auf den zuvor definierten taglibs. Fuer TabellenTags muss der Bezeichner “table:NAME“ lauten. Verwendung von Actions Actions sind ein wesentlicher Bestandteil der Funktionalitaet von Struts. Der grobe Aufbau wurde bereits erlaeutert. Actions werden normalerweise über Formulare ausgefuehrt. In dem form-Tag wird dann im Attribut action der jeweilige Name der Action eingetragen. Dieser lautet wie die Klasse mit einem angehaengten “.do“. Beispiel: <form action=“TestAction.do“ method=“post“ > In der struts-config.xml, die sich im Verzeichnis WEB-INF befindet, muss nun die Action definiert werden: <action path="/jsp/BeispielAction" type="de.unioldenburg.dione.wui.action.BeispielAction" name="BeispielAction" scope="request" input="/jsp/Beispiel.jsp"> </action> Das Attribut type legt fest, welche Klasse ausgeführt werden soll. Alle Actions befinden sich im Paket “wui.action“. Jede dieser Action-Klassen erbt von DioneAction. Ein Sonderfall bildet die Auswahl eines Knotens in einem Ergebnisbaum. Da die Selektion ueber eine Image-Map erfolgt, konnten Actions nicht über Formulare realisiert werden. HTML laesst bei Image-Maps lediglich normale Links (href) zu. In dem Link wird nach der “TreeAction.do“ eine Variable zur Identifizierung genutzt. Auch diese Action muss in der struts-config.xml eingetragen werden. 249 Kapitel 5 Feinentwurf Sprach-Bundles Die Webseiten von Dione unterstuetzen mehrere Sprachen (englisch und deutsch). Eine Erweiterung fuer weitere Sprachen ist ohne Aenderung der JSP’s möglich. Jede textuelle Ausgabe wird wie folgt in einer JSP erzeugt: “<bean:message key=“...“/>“. Dabei enthält “...“ den Schlüssel. Fuer jede Sprache gibt es eine Datei im Paket src.de.unioldenburg.dione.wui.lang, die zu diesem Schlüssel den jeweiligen Text ersetzt. Kann keine Sprache gefunden werden, wird in der Datei “Dione.properties“ nach dem Schluessel gesucht. Fuer die Ausgabe der Algorithmentexte sind gesonderte Sprachdateien vorhanden. 250 Kapitel 6 Umsetzung und Implementation 6.1 Unterschiede zum Entwurf Aufgrund geänderter Rahmenbedingungen gibt es eine Menge Differenzen zwischen der tatsächlichen Umsetzung und der Lösung, die im Entwurf forgesehen worden ist. Dies betrifft einerseits die Unterschiede die zwischen den Klassen, die implementiert worden sind, und dem Entwurf der Klassen aber vor allem geänderte Abläufe. Hauptgrund hierfür sind geänderte Anforderungen, die sich ergeben haben, als nach Abschluss der Entwurfsphase nachträglich entschieden worden ist, die Erstellung von Trait-Matrizen nicht über DIONE selbst forzunehmen, sondern LEDA WebQuery hierfür zu benutzen. Diese Entscheidung hat sich in erheblichen Maße auf Datenstrukturen und Abläufe ausgewirkt. Aus Benutzesicht bedeutet dies insbesondere, dass DIONE auf der Datenauswahlseite ausschließlich den Import von Eingabedaten anbietet. Diese können entweder über LEDA WebQuery oder per CVS-Upload importiert werden oder aus bereits erstellten Experimenten kopiert werden. Der genaue tatsächlich umgesetzte Workflow ist im der Dokumentation von DIONE begelegten Handbuch abgebildet, auf welches an dieser Stelle verwiesen wird. Weiterhin hat die Entscheidung, WebQuery zu verwenden, Änderungen an der Datenstruktur und den Schnittstellen in der Form bewirkt, dass die DIONE Datenstruktur, die eine Trait Matrix abbildet, entsprechend an die von WebQuery angepasst werden musste. Die tatsächliche Umsetzung in Form der Implementierung kann im Doxygen Onlinedokument nachgelesen werden. 251 Kapitel 6 Umsetzung und Implementation 252 Kapitel 7 Ausblick Nach einem Jahr Entwicklungsarbeit wurde dem Anwender eine umfangreiche Software zur Verfügung gestellt, die wie jede jedoch keinen Anspruch auf Vollständigkeit erhebt. Daher sollen an dieser Stelle Anregungen gegeben werden, wie die Webanwendung verbessert und erweitert werden kann. Auf die einfache Erweiterungsmöglichkeit wurde schon in der frühen Phase der Entwicklung großen Wert gelegt. 7.1 Vorschläge zur Erweiterung Auswahl der Daten für die Vorhersage Zur Zeit können nur Daten eines erstellten Modells zur Vorhersage genutzt werden. Der Anwender erstellt ein neues Experiment vom Typ MModel Predictionünd selektiert dann Daten eines zuvor erstellten Modells, in der die Daten zur Vorhersage enthalten sein müssen. Wünschenswert wäre es, dem Anwender die Möglichkeit zu geben, unabhängig vom Modell Daten zu importieren. Ergebnisanzeige für Modellvorhersage Die Ergebnisanzeige für die Modellvorhersage beschränkt sich auf eine Tabelle. Für den Anwender könnten noch weitere Informationen und Darstellungen nützlich sein. Baumergebnis als Trait-Matrix Entscheidungsbäume werden in zwei möglichen Ansichten dargeboten. Unter Umständen wäre eine Ausgabe als Trait-Matrix hilfreich. Optimierte Integration von Webquery Eine Anforderung an das Projekt war die Anbindung an dem bereits existierenden Webquery-Builder. Die Kommunikation zwischen DIONE und Webquery funktioniert ohne Problem. Eine weiterführende Integration von Web- 253 Kapitel 7 Ausblick query in DIONE wäre aus ästhetischen Gründen wünschenswert und würde auch die Benutzerfreundlichkeit erhöhen. Sortieren nach bestimmten Tabellenspalten ermöglichen Bisher ist es nicht möglich, Tabellen nach Spalten, die aus farbigen Blubbern bestehen (z.B. Art der Nutzung von Trait-Matrix-Zeilen), zu sortieren. Unabhängigkeit von biologischen Daten Zurzeit ist DIONE in einigen Punkten, wie zum Beispiel beim Import von Daten, noch nicht unabhängig vom LEDA-Projekt. Die Algorithmen können jedoch auf für andere nicht biologische Daten verwendet werden. Daher wäre eine noch flexiblerer Gestaltung der Daten- selektion eine positive Erweiterung. Sequentieller Zugriff auf Daten Zurzeit wird die gesamte Datenmenge einer Traitmatrix bei Gebrauch komplett in den Hauptspeicher geladen. Dies kann sich bei sehr großen Datenmengen negativ auf den benötigten Hauptspeicher auswirken. Deshalb wäre ein sequentieller Zugriff auf die Zeilen einer Traitmatrix wünschenswert. Dann würden zu einem Zeitpunkt nur die benötigten Zeilen im Hauptspeicher gehalten werden. Auf der anderen Seite würde sich der sequentielle Zugriff negativ auf die Dauer auswirken, die für die Modellberechnung durch einen Algorithmus beötigt wird. Außerdem sind zurzeit nicht alle verwendeten Algorithmen in der Lage die Daten sequentiell zu lesen, sondern benötigen beim Start der Modellberechnung die gesamte Datenmenge. Zusätzliche Algorithmen Da gerade bei der Entwicklung darauf geachtet wurde, die Erweiterung der Anwendung möglichst einfach zu gestalten, ist das Hinzufügen von zusätzlichen Data-Mining Algorithmen wünschenswert. Mehrsprachigkeit Aus zeitlichen Gründen wurde die deutschsprachige Version der Webseite nicht mehr gepflegt und auf den neusten Stand gehalten. Eine Übersetzung der Inhalte in mehreren Sprachen wäre eine sinnvolle Erweiterung. Bearbeitung von Daten Häufig sind die Daten, die für den Algorithmus zur Verfügung gestellt werden sollen nicht vollständig oder bedürfen noch weiterer Bearbeitung (Aggregation). Diese Funktionalität wurde bereits in der frühen Entwicklungsphase angedacht, jedoch aus zeitlichen Gründen nicht umgesetzt. Export des Modells als PMML Um die Modelle auch mit anderen Programmen nutzten zu können, wäre ein Export eines erstellten Modells im PMML-Format (basiert auf dem XMLStandard) eine weitere interessante Funktionalität. 254 7.2 Bekannte Fehler 7.2 Bekannte Fehler Nachträgliche Änderung von Konfigurationen und Verifikation / Vorhersage Wenn man eine Verifikation oder eine Verhersage eines Modellerstellungsexperimentes machen möchte, dann funktioniert dies nicht, wenn das zu verifizierende Experiment (die Quelle) geändert worden ist, ohne dieses erneut durchzuführen, so dass Ergebnis, Daten und Konfiguration zueinanderpassen. 255 Anhang Abkürzungsverzeichnis API: Application Programming Interface CORBA: Common Object Request Broker Architecture DOM: Document Object Model FK: Fremdschlüssel HTML: Hyper Text Markup Language HTTP: Hyper Text Transaction Protocol IDL: Interface Definition Language IIOP: Internet Inter Orb Protocol IMAP4: Internet Mail Application Protocol J2EE: Java 2 Enterprise Edition J2ME: Java 2 Micro Edition J2SE: Java 2 Standard Edition JAAS: Java Authentication und Authorization Service JDBC: Java Database Connectivity JEB: Java Enterprise Beans I Kapitel 7 Ausblick JMS: Java Message Service JMX: Java Management Extensions JNDI: Java Naming and Directory Interface JTA: Java Transaction API JTS: Java Transaction Service PK: Primärschlüssel POP3: Post Office Protocol SAX: Simple API for XML SMTP: Simple Mail Transfer Protocol SOAP: Simple Object Access Protocol RMI: Remote Method Invocation RPC: Remote Procedure Calls XML: Extended Markup Language II Abbildungsverzeichnis 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 2.15 2.16 2.17 2.18 2.19 2.20 2.21 2.22 2.23 2.24 2.25 2.26 2.27 2.28 2.29 2.30 2.31 LEDA Entwicklung . . . . . . . . . . . . . . . . . . . . . . . . . Literaturquellen in der Datenbank . . . . . . . . . . . . . . . . LEDA Datenbankschema . . . . . . . . . . . . . . . . . . . . . . LEDA Datenbankschema - Einteilung . . . . . . . . . . . . . . . Entitätstypen ohne die Pflanzenmerkmale . . . . . . . . . . . Entitätstypen zu Pflanzenfundort und Lebensraum . . . . . . Beispiel für einen Entitätstyp eines Pflanzenmerkmals . . . . . J2EE Architektur Diagramm . . . . . . . . . . . . . . . . . . . Übersicht über den J2EE-Aufbau . . . . . . . . . . . . . . . . Übersicht über den Aufbau des Tomcat-Servers . . . . . . . . Struktur einer SOAP-Message ohne Attachment . . . . . . . . Request-Handling in J2EE . . . . . . . . . . . . . . . . . . . . Beispiel für den Ablauf einer Anfrage an den Tomcat-Server . Model-View-Controller in Struts . . . . . . . . . . . . . . . . . Die erzeugte HTML-Seite . . . . . . . . . . . . . . . . . . . . Entscheidungstabelle für die Wetterdaten . . . . . . . . . . . . Entscheidungsbaum für die Wetterdaten . . . . . . . . . . . . Auswahl des Wurzelknoten . . . . . . . . . . . . . . . . . . . . Auswahl des Tochterknoten . . . . . . . . . . . . . . . . . . . Informationsmass . . . . . . . . . . . . . . . . . . . . . . . . . Darstellung des Abdeckungsalgorithmus . . . . . . . . . . . . Gegensandstabelle der Wetterdaten . . . . . . . . . . . . . . . Subtree-Replacement . . . . . . . . . . . . . . . . . . . . . . . Trainingsdatensätze . . . . . . . . . . . . . . . . . . . . . . . . Trainingsdaten mit gefundener Gleichung . . . . . . . . . . . . Verhalten auf Ausreißer . . . . . . . . . . . . . . . . . . . . . Beispiele für logistische Regression . . . . . . . . . . . . . . . Exponentialfunktion . . . . . . . . . . . . . . . . . . . . . . . Auswirkung einer Erhöhung der exogenen Variable auf pi . . . Beispiel für einen Modellbaum . . . . . . . . . . . . . . . . . . Ein Beispiel für die Anwendung von k-means aus [Han01], S.350 8 10 11 12 13 14 15 32 33 36 42 43 44 46 54 58 59 63 64 65 66 68 71 74 75 76 79 81 82 88 96 III Abbildungsverzeichnis 2.32 Ein Beispiel für die Anwendung von k-medoids aus [Han01], S.352 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.33 Übersicht der hierarchischen Verfahren aus [Han01], S.355 . . 2.34 Beispieldaten zur Erzeugung des Dendogrammes aus [Sto97], S.131 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.35 Dendogramm aus [Sto97], S.132 . . . . . . . . . . . . . . . . . 2.36 Beispiel eines divisiven Clustering aus [Wit01], S.232 . . . . . 2.37 Ein Beispiel für die Anwendung von CURE aus [Han01], S.360 2.38 Ein Beispiel für die Anwendung von DBSCAN aus [Han01], S.364 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.39 Beispiel für eine objektorientierte Repräsentation . . . . . . . 2.40 Beispiel für eine OO-Repräsentation mit Gewichten und Distanzmaßen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.41 Beispiel einer Baumstruktur . . . . . . . . . . . . . . . . . . . 2.42 Graphenisomorphie . . . . . . . . . . . . . . . . . . . . . . . . 2.43 Mögliche Nutzung des fallbasierten Schließens . . . . . . . . . 2.44 listentry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.45 Die Arbeitsoberfläche . . . . . . . . . . . . . . . . . . . . . . . 2.46 Der Expression-Builder . . . . . . . . . . . . . . . . . . . . . . 2.47 Patientenkartei . . . . . . . . . . . . . . . . . . . . . . . . . . 2.48 Medikamentenverteilung . . . . . . . . . . . . . . . . . . . . . 2.49 Verhältnis von Na zu K . . . . . . . . . . . . . . . . . . . . . . 2.50 Textuelle Baumdarstellung des Ergebnis . . . . . . . . . . . . 2.51 Screenshot des fertigen Stream . . . . . . . . . . . . . . . . . . IV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 98 99 100 102 103 104 109 115 115 116 117 119 123 128 129 130 131 132 133 3.1 3.2 3.3 3.4 3.5 3.6 3.7 Wesentliche Anwendungsfälle . . . Die weiteren Anwendungsfälle . . . Prozessverlauf Übersicht . . . . . . Prozessverlauf für Verfahren . . . . Prozessverlauf Trait-Matrix . . . . Prozessverlauf für Ergebnisvergleich Aufbau des Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 139 141 142 143 144 149 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 Systemüberblick der einzelnen Modulen . . . . . . . . . Schnittstelle zum Jobmanagement . . . . . . . . . . . . Grobentwurf der Seitengestaltung . . . . . . . . . . . . Schnittstelle zu Xelopes . . . . . . . . . . . . . . . . . Schnittstellen WebUserInterface - Algorithmen . . . . . Klasse des interaktiven Entscheidungsbaumalgorithmus DAO-Schema . . . . . . . . . . . . . . . . . . . . . . . DAO-Factory 1 . . . . . . . . . . . . . . . . . . . . . . DAO-Factory 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 155 156 159 160 160 161 162 163 Abbildungsverzeichnis 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17 5.18 5.19 5.20 5.21 5.22 5.23 5.24 Paketstruktur des Java-Quelltextes . . . . . . . . . . . . . . . Schnittstellen zur Kommunikation der einzelnen Module von DIONE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DIONE Login-Seite . . . . . . . . . . . . . . . . . . . . . . . . überblick über den Aufbau einer typischen DIONE-Webseite. . Navigationselement der DIONE-Webseite. . . . . . . . . . . . Die Kopfleiste der DIONE-Webapplikation . . . . . . . . . . . Statusbox, die den Status der laufenden eigenen Experimente zeigt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Das Ergebnis eines Clustering Experiment . . . . . . . . . . . Das Ergebnis eines Entscheidungsbaum Experiment . . . . . . Überblick über die öffentlichen Experimente. . . . . . . . . . . Struktur der Webordners von DIONE . . . . . . . . . . . . . . Paketstruktur des Java-Quelltextes . . . . . . . . . . . . . . . Klassendiagramm zum Modul Steuerung . . . . . . . . . . . . Struktur des Paketes algorithm . . . . . . . . . . . . . . . . . Struktur des Paketes algorithm.model . . . . . . . . . . . . . . Struktur des Paketes algorithm.model.dione . . . . . . . . . . Struktur des Paketes algorithm.util . . . . . . . . . . . . . . . Klassendiagramm AttributeDescription . . . . . . . . . . . . . Klassendiagramm Traitmatrix . . . . . . . . . . . . . . . . . . Klassendiagramm DataImport . . . . . . . . . . . . . . . . . . Klassendiagramm DataExport . . . . . . . . . . . . . . . . . . Klassendiagramm WebQueryConstants . . . . . . . . . . . . . Tabellenstruktur Algorithmusspezifikationen . . . . . . . . . . Sequenzdiagramm zum Aufruf des Interaktiven Entscheidungsbaumalgoritmus (IEBA) . . . . . . . . . . . . . . . . . . . . . 177 178 184 185 185 186 186 188 189 190 191 195 201 206 208 212 213 224 226 227 227 229 238 247 V Abbildungsverzeichnis VI Literaturverzeichnis [1] http://java.sun.com/j2ee/j2ee-1_4-fr-spec.pdf. [2] Richtlinie 92/43/ewg des rates zur erhaltung der natürlichen lebensräume sowie der wildlebenden tiere und pflanzen (habitats directive), 1992. http://europa.eu.int/comm/environment/nature/ habdirde.htm. [3] Cordis - entwicklungs- und informationsdienst der europäischen gemeinschaften, 2004. http://www.cordis.lu/de/home.html. [4] Datenbankschema des leda-traitbase-projekts, 2004. leda-traitbase.org/LEDAschema/. http://www. [5] Internet-homepage des leda-traitbase-projekts, 2004. leda-traitbase.org/. http://www. [6] Un-konferenz für umwelt und entwicklung, rio de janeiro 1992, 2004. http://www.biodiv.org/default.aspx. [7] http://www.net-lexikon.de/J2EE.html. 2004. [8] P. et al Atzeni. Database Systems – Concepts, Languages and Architectures. McGraw-Hill. [9] M. Hall. Core Servlets und Java Server Pages. München, 2001. Markt+Technik, [10] http://jakarta.apache.org/struts. The apache struts web application framework. 2004. [11] http://sourceforge.net/projects/easystruts. Easy struts plugin. 2004. [12] http://www.coreservlets.com/Apache Struts-Tutor. A quick start tutorial for jakarta struts. 2004. [13] SOAP in Netscape Gecko-based Browsers. http://devedge.netscape. com/viewsource/2003/soap/01/. 2004. VII Literaturverzeichnis [14] I.C. Knevel. Collecting and measuring standards of life-history traits of the northwest european flora, 2004. [15] Pascal Kuhn. Ausarbeitung zum Seminar: J2EE, Servlets und JSP. 2004. [16] Net-Lexikon. http://www.net-lexikon.de. 2004. [17] T. Reenskaug. Thing-model-view-editor, an example from a planningsystem, xerox parc technical note. 1979. [18] T. Reenskaug. The model-view-controller. its past and present. jaoo 2003. 2003. [19] M. et al Stadler. A common data standard for life-history traits of the northwest european flora, 2003. [20] C. Crawford und J. Kaplan. J2EE Design Patterns. O’Reilly, USA, 2003. [21] R. Haas und U. Schreiner. Java- Technologien für Unternehmensanwendungen. München, 2002. [22] Seminarvortrag: JAXR und WSDL. http://www2.informatik. uni-wuerzburg.de/mitarbeiter/eichelberger/deepJava2002/ JAXR+WSDL/ausarbeitung.pdf. Jan Junker, 2002. [23] Wikipedia. http://de.wikipedia.org. 2004. VIII