Übung 4.4 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.dataEE01 Type: {X1, X2, X3, X4, X5, X6, X7, X8, Y1, Y2} []
X1 Relative Compactness
X2 Surface Area
X3 Wall Area
X4 Roof Area
X5 Overall Height
X6 Orientation
X7 Glazing Area
X8 Glazing Area Distribution
y1 Heating Load
y2 Cooling Load
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 |
▸
|
✗
≡
|
Benutze D=
this.data
und führe bei Datenteilung wieder die Transformation und Skalierung durch (siehe oben).
Versuche zunächst ein Modell mit den zwei Zielvariablen Y1 und Y2. Wenn es keine gute Konvergenz beim Training gibt können auch zwei getrennte Modelle für Y1 und Y2 erzeugt und trainiert werden.
this.model
). Wähle mindestens drei Konfigurationen (Variation der inneren Schichten des ANN, auch ohne innere Schicht)Eine Kodierung von numerischen Werten ist nicht erforderlich!
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)
Der letzte Trainingsfehler (mean squared error) und die Kreuzentropie können über this.model.error
und this.model.crossEntropy
abgerufen werden.
▸
|
✗
≡
|
▸
|
✗
≡
|
▸
|
✗
≡
|
▸
|
✗
≡
|