Übung 4.8 zu Einführung in Maschinelles Lernen (PD Stefan Bosse) |
Daten können als Elemente der this
Variable gespeichert und wieder geladen werden (wie z.B. bereits verarbeitete Daten, Modelle, usw.)
Wenn in einer Funktion (im Körper) auf das Notebook this
zugegriffen werden soll, muss außerhalb der Funktion eine Referenz zu einer lokalen Variable var self=this;
hergestellt werden. Z. B.
this.data=[];
var self=this;
function foo( ) {
self.push([1,2,3,4])
}
DATA: Variable State.dataTI01 Type: {pclass, survived, name, sex, age, sibsp, parch, ticket, fare, cabin, embarked, boat, body, home.dest} []
X: { class,name,sex,age,sibsp,parch,ticket,fare,cabin,embarked,boat,body }
Y: { survival }
"This is a classic dataset used in many data mining tutorials and demos --
perfect for getting started with exploratory analysis and building binary
classification models to predict survival."
Data covers passengers only, not crew.
Features
survival - Survival (0 = No; 1 = Yes)
class - Passenger Class (1 = 1st; 2 = 2nd; 3 = 3rd)
name - Name
sex - Sex
age - Age
sibsp - Number of Siblings/Spouses Aboard
parch - Number of Parents/Children Aboard
ticket - Ticket Number
fare - Passenger Fare
cabin - Cabin
embarked - Port of Embarkation (C = Cherbourg; Q = Queenstown; S = Southampton)
boat - Lifeboat (if survived)
body - Body number (if did not survive and body was recovered)
Instances: 1309 (one instance per passenger)
X,Y=Klasse={N,P}
▸
|
✗
≡
|
this
(eine Datenstruktur) ausgetauscht. D.h. wenn z.B. in einem Snippet Daten erzeugt werden dann dort this.data=[1,2,3]
, und in einem anderen Snippet können diese dann mit this.data
wieder abgerufen (und natürlich auch verändert) werden.Nachfolgend wird gezeigt wie auf einfachen numerischen oder kategorischen Daten eine einfache Prädiktorfunktion algorithmisch durch Tarining erzeugt werden kann.
ML
verwendet.Es gibt für alle Algorithmen und Verfahren einen gemeinsamen Satz an Operationen:
ML.learner
: Eine neue Trainingsinatanz erstellen ML.train
: Mit Trainingsdaten trainierenML.predict
: Inferenz eines trainiertesnModellsML.test
: Inferenz eines trainiertesn Modells mit Testdaten und Ausgabe von Fehlerstatistiken (momentan unvollstänig; daher mit ML.predict
arbeiten und eigene Fehleranalyse durchführen)ML.print
: Ausgabe der Modellstruktur (wird nicht für alle Algorithmen unterstützt)Anders als bei Entscheidungsbaumlernern wird hier zwischen Modellerzeugung und Modellanpassung (Training) unterschieden
Neuronale Netze können nur numerische Variablen verarbeiten (sowohl Eingabeattribute als auch Zielvariablen)
Eine Datennormalisierung ist ratsam, d.h. alle Ein- und Ausgabevariablen sollen einen Wertebereich von [0,1] abdecken
Kategorische Variablen müssen in numerische Werte kodiert werden;
Zunächst werden bereits normalisierte Daten angenommen werden.
Mittels der ML.split
Funktion können Datentabellen randomisiert in zwei Partitionen aufgeteilt werden (Training und Test)
▸
|
✗
≡
|
Nachfolgend eine beispielhafte Implementierung der Modellfunktion M(x): x → y durch den MLP Algorithmus (MLP: Multilayer Perceptron)
Der MLP Algorithmus basiert auf einem vereinfachten SMO Trainingsverfahren
Die Konfiguration des MLP Netzwerkes erfordert die Angabe der Eingangsneuronen (hier 6), der inenren Schichten (wenn überhaupt), und der Anzahl der Ausgangsneuronen (hier 2)
▸
|
✗
≡
|
Beispiel Training Prädiktorfunktion MLPAnders als bei Entscheidungsbäumen können KNN mehrere Zielvariablen ausgeben!
▸
|
✗
≡
|
▸
|
✗
≡
|
▸
|
✗
≡
|
Math.scale0(datacolumn)
bestimmt den Skalierungsdeskriptor für [0,1], der für ML benötigt wirdML.preprocess(data,format,options)
Funktion können nun alle Datenvariablen und Instanzen transformiert und sklaiert werdenxmy
(d.h. zwei x/y Matrizen und liefert {x:number [][], y:number [][]}
)
▸
|
✗
≡
|
Frage. Warum ist die automatische Skalierung der Trainings- und Testdaten evtl. problematisch?
ML.unscale
Funktion wieder expandiert werden:
▸
|
✗
≡
|
▸
|
✗
≡
|
▸
|
✗
≡
|
▸
|
✗
≡
|
▸
|
✗
≡
|
Punkte: | 1. | /2 | 2. | /2 | 3. | /2 | 4. | /2 | 5. | /2 |
▸
|
✗
≡
|
Benutze D=
this.data
und führe bei Datenteilung wieder die Transformation und Skalierung durch (siehe oben).
Versuche zunächst ein Modell mit einem Ausgangsneuron für y. Wenn es keine gute Fehlerkonvergenz beim Training gibt können auch zwei getrennte Ausgangsneuronen für y=0 und y=1 erzeugt und trainiert werden (d.h. One-hot Kodierung der y-Variable für die beiden Klassensymbol 0 und 1) Dann muss die y-Spalte der Datentabelle entsprechend überarbeitet werden.
this.model
). Wähle mindestens drei Konfigurationen (Variation der inneren Schichten des KNN, auch ohne innere Schicht)Eine Kodierung von numerischen Werten ist nicht erforderlich! Aber von kat. Eingabevariablen
Im folgenden Eingabefeld die Ergebnisse zusammentragen (geeignete Features, verschiedene Versuche, Fehler, Rechenzeit für das Training, Inferenzzeit beim Test):
Alle Elemente von der this
Variable werden in der JSON Datei gespeichert und können wieder geladen werden (also Daten, Modelle usw).
Die Rechenzeiten für das Training können schon empfindlich ansteigen (bei ca. 400 Instanzen ungefähr 1s pro 1000 Epochen)
Eventuell werden mehr als 100000 Trainingsepochen benötigt (sollte partitioniert ausgeführt werden, nicht auf einmal durchführen). Hängt vom Fortschritt beim Training ab. Immer wieder den Test durchführen und Fehlerraten bewerten.
Der letzte Trainingsfehler (mean squared error) und die Kreuzentropie können über this.model.error
und this.model.crossEntropy
abgerufen werden.
▸
|
✗
≡
|
▸
|
✗
≡
|
▸
|
✗
≡
|
▸
|
✗
≡
|