Vorlesung „Maschinelles Lernen“, WS 2006/7, Informatik LS8, Prof. Dr. Katharina Morik Übungsaufgaben Zettel 1 8 – 10P Sie haben in der Vorlesung das Instanz-basierte Klassifikationsverfahren k-nächste Nachbarn kennen gelernt. In der letzten Übungssitzung wurde das System Yale vorgestellt und Sie haben das on-line Tutorial gelesen. Wir haben in Yale im Modul exercises Rahmenklassen vorbereitet, so dass Sie den Kern eines Lernverfahrens in Java implementieren und es dann in Yale ablaufen lassen können. In dieser Aufgabe geht es um die Klasse KNearestNeighborModelExercise implements KNearestNeighborPredictor mit den Methoden predictClass(Collection<Example> trainData, Example example, int useNeighbors), getDistanceFromExample(Example to) und compare(Example example1, Example example2). Sie geben den Java-Code ab (6 Punkte) und ein Yale-Experiment mit den ripley-set.amlDaten in /app/unido-i08/share/java/yale/yale-3.4/sample/data, in dem mit Kreuzvalidierung das Ergebnis vorhergesagt wird (2 Punkte). Sie können 2 Sonderpunkte gewinnen, wenn Ihr getDistanceFromExample() auch für nominale Werte einen sinnvollen Abstand liefert (zu testen an golf.aml). Hintergrundinformation Sie starten Yale im Pool mit dem Aufruf module add yale (entfällt zu Hause) YaleGUI Sie kompilieren Ihre eigene Klasse dazu javac –cp $YALE_HOME/lib/yale.jar:$YALE_HOME/lib/plugins/yaleexercise-3.4.jar <eigene Klasse>.java Sie setzen den Klassenpfad: export CLASSPATH=pfad/zur/eigenen/klasse:$YALE_HOME/lib/plugins/yale-exercise-3.4.jar Unter Solaris entsprechend mit setenv CLASSPATH pfad/zur/eigenen/klasse:$YALE_HOME/lib/plugins/yaleexercise-3.4.jar:$CLASSPATH WICHTIG 1: Die Variable $YALE_HOME wird von dem Modulaufruf oben automatisch gesetzt, welcher daher vorher gemacht werden muss. Außerdem gibt es $YALE_HOME folglich nicht zu Hause, weswegen die Variable dort durch den richtigen Pfad ersetzt werden muss. WICHTIG 2: Die Plugin-Jar-Datei muss leider auch beim Starten noch mal in den Klassenpfad, da sonst die dynamisch dazugenerierte eigene Klasse nicht instantiiert werden kann. WICHTIG 3: Die (Re-)Definition des CLASSPATH ist vor dem Aufruf von YaleGUI nötig, da sonst die eigenen Klassen erst recht nicht gefunden werden.