Information Technology Reference
In-Depth Information
in der Datei symbolische Werte befinden. Zwei Vektoren werden verwendet, um die aus
der Datei gelesenen Rohdaten zusammen mit der normalisierten, rein numerischen Daten-
menge zu speichern. Die Hash-Tabelle
variableList
hält einen Satz von Variablen,
die die logischen Datentypen für jedes Feld der Datei definieren. Das Element
field-
List
enthält Verweise auf dieselben Variablen, die auch auf der
variableList
stehen,
doch wie die Methode
addVariable()
zeigt, werden die Variablen dem Vektor in der
gleichen Reihenfolge übergeben, wie sie der Datenmenge hinzugefügt wurden. Das er-
möglicht eine exakte Übereinstimmung der Felder in der Datei mit den Variablen, die die
Daten definieren. Das Element
numRecords
dient praktischen Zwecken und entspricht
der Größe von
fieldList
und
numRecords
wird auf die Anzahl der Datensätze in
der Datei eingestellt. Die Klasse
DataSet
hat nur einen einzigen Konstruktor. Er nimmt
den Objektnamen und den Dateinamen als Parameter an. Zur Definition der Datendatei
dient eine einfache Textdatei, die eine Liste der Felddatentypen und ihre Namen enthält.
Ein einzelnes Feld muss als
ClassField
bestimmt werden. Die Datentypen können
kontinuierlich, diskret oder kategorisch sein. In der Implementierungsvariante werden dis-
krete und kategorische Daten gleich behandelt. Beim Lesen der einzelnen Feldtypen aus
der Datendefinitionsdatei in der Methode
loadDataFileDefinition()
wird eine
Variable dieses Typs mit dem festgelegten Namen instanziiert und der Datenmenge mit
der Methode
addVariable()
hinzugefügt. Es wird vorausgesetzt, dass die Felder in
derselben Reihenfolge definiert werden wie die dazugehörigen Daten in der Datendatei.
Eine der wichtigsten Methoden in der Klasse
DataSet
ist
loadDataFile()
. Sie ver-
wendet keine Parameter, da alle Informationen, die zum Laden der Datei in den Speicher
benötigt werden, schon im Konstruktor
DataSet()
enthalten sind. Vor dem Laden der
Datendatei wird zuerst mit der Methode
loadDataFileDefinition()
die Datei-
formatdefinition eingelesen. Dabei kommt ein
FileInputStream
zum Einsatz, um
Daten aus der Datei abzurufen. Mit der Methode
readLine()
wird eine Zeile nach
der anderen eingelesen, was den Einsatz eines
StringTokenizer
bedingt, um jeden
Feldwert zu analysieren. Es wird ein neues String-Array instanziiert, in dem alle Daten-
sätze abgelegt werden. Diese wird dem Vektor
data
hinzugefügt. Beim Lesen der Datei
erfolgt auch gleichzeitig eine Prüfung bezüglich der Größe, das Ergebnis wird im Ele-
ment
numRecords
abgespeichert. Die nächsten drei Methoden verwenden normalisierte
Daten. Neuronale Netze erfordern rein numerische Eingabedaten, also müssen alle Daten-
mengen, die Symbole enthalten, einer Vorverarbeitung zugeführt werden (Haun
1998
).
Neuronale Netze erfordern auch meist, dass die Eingabedaten auf einen bestimmten Be-
reich skaliert werden, in diesem Fall auf 0,0 bis 1,0. Dieser Prozess der Konvertierung
symbolischer Werte und der Skalierung kontinuierlicher Daten wird als Normalisierung
bezeichnet. Mit den Variablendefinitionen wird festgelegt, auf welche Weise die Daten
normalisiert werden. Bei einer diskreten Variablen werden ihr Symbol oder ihre Zahl ver-
wendet, um daraus den zugehörigen Indexwert zu ermitteln. Diese wird dann in einen
Eins-aus-N-Vektor konvertiert. Wenn beispielsweise drei mögliche Strings („ja“, „nein“,
„vielleicht“) in einem Feld vorkommen, das als diskrete Variable definiert ist, konvertiert
der Algorithmus jedes Symbol in einen Code aus Einsen und Nullen, dessen Länge der