Künstliche neuronale Netzwerke in SQL Server einsetzen – Teil 2

Erstellung des Netzwerkmodells

Nachdem in Teil 1 die notwendige technische Umgebung aufgebaut wurde, zeige ich nun, wie ein neuronales Netz erzeugt, trainiert und bewertet wird.

Definition des Modells

  1. Laden Sie mit dem Befehl library(MASS) das Paket mit den Beispieldaten.
  2. Mithilfe von View(biopsy) erhalten Sie einen Überblick über die Datenstruktur (Abbildung 3). V1 bis V9 bezeichnen die gemessenen Laborwerte, die sich auf einer Skala von 1 bis 10 bewegen (Details siehe https://cran.r-project.org/web/packages/MASS/MASS.pdf, Seite 18). Das Feld class enthält die Diagnose; sie lautet entweder benign oder malignant. Diesen Wert soll das neuronale Netz später aus neuen Messdaten voraussagen.

    Abbildung 3: Einige Datensätze aus dem Beispiel „biopsy“
  3. Definieren Sie das Netzwerk mithilfe von Net#, einer von Microsoft speziell für diesen Zweck ins Leben gerufene deklarative Sprache.net <- (“
    input In auto;
    hidden Hidden [200] sigmoid from In all;
    output Out [1] sigmoid from Hidden all;
    „)Das so definierte Netz besteht aus einer Eingabe-, einer verborgenen und einer Ausgabe-Schicht. Die Anzahl an Neuronen in der Eingabeschicht wird dynamisch bei Zuweisung der Eingangsdaten festgelegt (auto). Die verborgene Schicht erhält 200 Neuronen, die Ausgabeschicht ein einzelnes Neuron. Alle Neuronen der Eingangsschicht werden mit allen Neuronen der verborgenen Schicht verknüpft (all), welche wiederum alle mit dem Neuron der Ausgabeschicht verknüpft werden. Für die verborgene und die Ausgabeschicht wurde eine sigmoide Aktivierungsfunktion festgelegt.

Training und Bewertung

  1. Trennen Sie die vorliegenden Daten in zwei Mengen auf: Die erste Menge (Trainingsmenge) dient zum Trainieren des Netzes, die zweite (Testmenge) zur Bewertung der Qualität. Das Verhältnis soll 85% zu 15% sein (siehe Listing 2).

    Listing 2: Erzeugung einer Trainings- und einer Testmenge 
  2. Trainieren Sie das Netz mithilfe der Funktion rxNeuralNet:trained_net <- rxNeuralNet(
    class ~ V1 + V2 + V3 + V4 + V5 + V6 + V7 + V8 + V9,
    data = train_data,
    netDefinition = net
    )
  3. Überprüfen Sie mit der Testmenge und der Funktion rxPredict, ob das trainierte Netz realistische Voraussagen trifft.predict_net <- rxPredict(
    trained_net,
    test_data,
    writeModelVars = TRUE,
    extraVarsToWrite = „ID“
    )Die Ausgabe von predict_net enthält unter anderem die Voraussage benign oder malignant (PredictedLabel) und die Wahrscheinlichkeit dafür, dass eine Zuordnung zu malignant korrekt ist (malignant). Vergleichen Sie die Voraussage mit dem tatsächlichen Ergebnis, indem Sie die vorausgesagten Werte für Probability.malignant gegen den Wertebereich 0 bis 1 auftragen, und zwar getrennt nach gutartigen und bösartigen Tumoren (Listing 3).

    Listing 3: Grafische Qualitätskontrolle durch Auftragen der vorausgesagten Wahrscheinlichkeit für das Vorliegen eines bösartigen Tumors
  4. Das Ergebnis zeigt Abbildung 4. Im oberen Diagramm sind Voraussagen über jene Tumorproben dargestellt, die bekanntermaßen gutartig sind. Werte, die größer als 0,5 sind, werden vom Modell jedoch als bösartig eingestuft. Somit sind zwei falsch positive Diagnosen zu erkennen. Im unteren Diagramm sind Voraussagen über bösartige Tumorproben dargestellt. Hier liegt keine Fehlzuordnung vor – alle Werte liegen oberhalb der 0,5-Marke. Dies ist insgesamt ein zufriedenstellendes Ergebnis.

    Abbildung 4: Bewertung des trainierten Modells. Dargestellt sind die vorausgesagten Wahrscheinlichkeiten für das Vorliegen eines bösartigen Tumors für bekanntermaßen gutartige (grün) und bösartige (rot) Tumoren. 

In Teil 3 des Artikels soll das Modell in SQL Server eingesetzt werden.

Artikelserie "Smarte Datenbank"

Künstliche neuronale Netzwerke in SQL Server einsetzen - Teil 1
Künstliche neuronale Netzwerke in SQL Server einsetzen - Teil 2
Künstliche neuronale Netzwerke in SQL Server einsetzen - Teil 3

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.