Selbst lernt die Maschine

Beurteilung

Führt man das Experiment mehrmals durch, fällt schnell auf, dass die einzelnen Durchläufe zu unterschiedlichen Ergebnissen führen. Das ist ein erwartetes Verhalten, da bei der Erzeugung des MLContext-Objekts kein Seed benutzt wurde. Interessant ist, dass schon bei kurzen Trainingszeiten von wenigen Sekunden Modelle generiert werden, die keine falsch negativen Ergebnisse liefern. Es ist aber schwierig, Modelle zu finden, die gleichzeitig auch wenige falsch positive Ergebnisse ausgeben. Bei vielfacher Wiederholung des Gesamt­experiments, aber auch bei deutlicher Verlängerung der Trainingsdauer auf 1000 Sekunden pro Iteration erreichte das beste Modell eine positive Genauigkeit von 0,96 (96 %). Dies ist eine leichte Verschlechterung gegenüber dem Referenzwert, der in [12] mit einem neuronalen Netz in kürzester Zeit erreicht wurde (negative Genauigkeit = 1 und positive Genauigkeit = 0,98). Hier macht sich bemerkbar, dass AutoML noch keine neuronalen Netze unterstützt.

Einsatz des Modells

Um das trainierte Modell in der Praxis konkret einzusetzen, sind nur wenige Schritte nötig (Listing 4). Nach dem Laden des Modells erzeugen Sie zunächst ein PredictionEngine-Objekt, das sowohl auf die Eingangsdaten (BiopsyData) als auch Ausgabedaten (BiopsyPredicition, Listing 5) typisiert ist. Die Klasse BiopsyPredicition erbt von BiopsyData, wobei dies lediglich dazu dient, dass die Ausgabedaten auch die ursprünglichen Eingangswerte enthalten. Entscheidend ist die zu ermittelnde Eigenschaft IsMalignant (ist bösartig), die mit dem Attribut ColumnName(”PredictedLabel”) dekoriert werden muss. Im Beispiel wurde darüber hinaus noch die Eigenschaft Score hinzugefügt, die die Zuverlässigkeit des Ergebnisses angibt.
Listing 4: Einsatz eines trainierten Modells
MLContext mlContext = new MLContext();

// Load model
ITransformer model = mlContext.Model.Load(
  modelFilename, out var schema);

// Create PredictionEngine
PredictionEngine<BiopsyData, BiopsyPrediction>
  predictionEngine = mlContext.Model.CreatePrediction
  Engine<BiopsyData, BiopsyPrediction>(model);

BiopsyData inputData = new BiopsyData
{
  ID = 1f,
  V1 = 2f,
  V2 = 4f,
  V3 = 10f,
  V4 = 10f,
  V5 = 10f,
  V6 = 10f,
  V7 = 2f,
  V8 = 2f,
  V9 = 3f
};

BiopsyPrediction prediction = predictionEngine.
  Predict(inputData);

Console.Write($"ID: {prediction.ID}\t");
Console.Write($"Is malignant: {
  prediction.IsMalignant}\t");
Console.Write($"Score: {prediction.Score}\t");
Listing 5: Modell mit separater Klasse für das Resultat
using Microsoft.ML.Data;

namespace AutoMLExample
{
  public class BiopsyPrediction : BiopsyData
  {
    [ColumnName("PredictedLabel")]
    public bool  IsMalignant { get; set; }

    public float Score      { get; set; }
  }
}
Nach diesen Vorbereitungen können Sie das Modell nutzen, indem Sie die Predict-Methode von PredictionEngine aufrufen. Aus dem zurückgelieferten Objekt BiopsyPrediction lässt sich dann das Resultat auslesen.

Fazit

AutoML-Tools sind pragmatische Lösungen für reale Pro­blemstellungen. Der Ansatz des Durchprobierens vieler Lösungsvarianten ist bei nicht trivialen Optimierungsproblemen durchaus sinnvoll. Microsofts Ansatz ML.NET AutoML macht hier schon einiges richtig, und Sie kommen als Entwickler mit sehr wenig Code aus.
Natürlich dauert das Probieren seine Zeit, und Sie verlieren beim Einsatz solcher Tools an Einfluss auf den Trainingsvorgang. Benötigen Sie diesen Einfluss, dann können Sie AutoML immer noch für eine Vorauswahl vielversprechender Modelle nutzen und diese dann mit den weiteren Möglichkei­ten des ML.NET Frameworks untersuchen und optimieren.
Es wird interessant sein zu sehen, welche Trainingsalgorithmen Microsoft bis zum offiziellen Release noch hinzufügen wird. Besonders neuronale Netze müssen hier nachgeliefert werden. Nützlich wäre auch, weitere Aspekte des Trainingsprozesses automatisieren zu können, so zum Beispiel eine automatische Korrektur und Ergänzung von Eingangswerten, eine eigenständige Erkennung des Problemtyps (Klassifikation versus Regression) oder die Berücksichtigung des Ressourcenverbrauchs (Speicher und Trainingszeit) einzelner Algorithmen.
Dokumente
Artikel als PDF herunterladen
Downloads
Projektdateien herunterladen

Martin Gossen
Autor(in) Martin Gossen




Das könnte Sie auch interessieren