Information Technology Reference
In-Depth Information
Zahl der diskreten Werte entspricht. „Ja“ würde dann also
1 0 0
ergeben, „nein“ wäre
0
1 0
und „vielleicht“ entspräche
0 0 1
. Ein Eingabedatensatz mit zehn diskreten Variab-
lenfeldern, von denen jedes drei mögliche Werte annehmen kann, würde auf diesem Wege
für die Eingabe in ein Neuronales Netz zu einem Array von 30 Elementen expandieren.
Eine weitere Konvertierung, die vorgenommen werden muss, ist die Skalierung der konti-
nuierlichen Daten, die nicht im Bereich 0,0 bis 1,0 liegen. Auch hierzu wird eine einfache
lineare Skalierung durchgeführt. Mit der Methode
getNormalizedRecordSize()
wird die Expansion berechnet, die während des Normalisierungsvorgangs auftritt. Die Me-
thode
normalizeData()
übernimmt das eigentliche Skalieren und die Übersetzung in
Eins-aus-N-Codes.
rawData
sind die Daten, die aus der Datei eingelesen werden. Das
Resultat der Vorverarbeitung ist das Doubles-Array
NormNumRec
. Wenn diese Vorgänge
abgeschlossen sind, enthält der Vektor
normalizedData
einen vollständigen Daten-
satz, der dem Original entspricht und im Neuronalen Netz eingesetzt werden kann. Die
Methoden
getClassField()
werden verwendet, um nach einem Übungsdurchgang
im Neuronalen Netz die Ergebnisse darzustellen. Die erste Methode nimmt den Index des
Datensatzes und gibt den ursprünglichen „Klassenfeld“-Wert zurück. Die zweite Methode
nimmt ein Array mit Gleitkommazahlen und den Startindex der Ausgabeeinheit. Mit der
Methode
DiscreteVariable.getDecodedValue()
wird das Element mit dem
höchsten Wert im Array ausgewählt, in den Index einer diskreten Variable konvertiert
und dann mit dem entsprechenden Stringwert abgerufen. Das sind im Grunde dieselben
Schritte in umgekehrter Reihenfolge wie bei
normalizeData()
, wo ein diskreter Wert
in einen Eins-aus-N-Code konvertiert wird.
Die Klasse
BackPropagation
besitzt vier verschiedene Gruppen von Elementen
oder Parametern. Der erste Satz ist für die Datenverwaltung zuständig: Er enthält einen
Verweis auf
dataset
, einem Objekt von
DataSet
, den Vektor
data
, in dem die Daten
zur Übung enthalten sind,
recinx
, den Index des aktuellen Datensatzes,
numRecs
, die
Gesamtzahl von Datensätzen in der Datenmenge sowie
fieldsPerRec
, die Anzahl der
Felder pro Datensatz. Der nächste Satz enthält eine Reihe von Netzparametern, darunter
numInputs
,
numHidl
und
numOutputs
, mit denen die Zahl der Einheiten in jeder
der drei Netzschichten definiert wird. Manche Problemstellungen erfordern mehrere ver-
deckte Schichten, insofern kann diese Implementierungsvariante leicht erweitert werden,
um dies zu ermöglichen.
numUnits
ist die Summe der drei Schichten und
numWeights
die Gesamtzahl aller Gewichte im Netz. In der Implementierungsvariante sind die fol-
genden Parameter enthalten:
mode
,
lernRate
,
momentum
und
toleranz
. Wenn der
Parameter
mode
den Wert 0 hat, befindet sich das Netz im Trainingsmodus und die Ver-
bindungsgewichte werden entsprechend angepasst. Steht
mode
auf 1, sind die Netzge-
wichte gesperrt. Mit den Parametern
lernRate
und
momentum
wird das Ausmaß der
Gewichtsaktualisierungen gesteuert, wie zuvor beschrieben. Mit dem Parameter
tole-
ranz
wird festgelegt, wie nah der erwartete Ausgabewert dem erwünschten Wert kom-
men muss, bevor das Fehlersignal als 0 angenommen wird. Wenn
toleranz
zum Bei-
spiel auf 0,1 steht und der erwünschte Ausgabewert 1,0 beträgt, würden alle Ausgabewer-
te, die größer sind als 0,9 keine Fehlermeldung auslösen. Der nächste Satz enthält Arrays