Juli 2019

Band 34, Nummer 7

[Machine Learning]

Erstellen eines Machine Learning-Vorhersagesystems mit AutoML

Von James McCaffrey

Microsoft ML.NET ist eine große Open-Source-Bibliothek mit Machine Learning-Funktionen, mit denen Sie ein Vorhersagemodell mit einem C#-Sprachprogramm erstellen können, in der Regel in Visual Studio. Das Schreiben eines Programms, das direkt ML.NET verwendet, um ein Vorhersagemodell zu erstellen, ist nicht einfach. Das AutoML-System verwendet das CLI-Tool (Command-Line Interface, Befehlszeilenschnittstelle) ML.NET, um automatisch ein Vorhersagemodell für Sie zu erstellen, und generiert auch Beispielcode, der das Modell verwendet, den Sie dann anpassen können.

Eine gute Möglichkeit, zu verstehen, worum es sich bei der ML.NET-CLI und AutoML handelt, und zu sehen, wohin dieser Artikel führt, ist die Untersuchung des Screenshots eines Demosystems in Abbildung 1. Die Demo verwendet eine Datei mit Trainingsdaten namens „people_train.tsv“, um ein Vorhersagemodell zu erstellen, und eine Datei mit Testdaten namens „people_test.tsv“, um die Genauigkeit des Vorhersagemodells auszuwerten. Ziel der Demo ist es, die politische Orientierung einer Person (konservativ, gemäßigt, liberal) aus Alter, Geschlecht, Georegion und Jahreseinkommen vorherzusagen.

AutoML und die ML.NET-CLI in Aktion
Abbildung 1: AutoML und die ML.NET-CLI in Aktion

Das Demoprogramm führt AutoML in einer Windows-CMD-Shell aus, indem der folgende Befehl ausgeführt wird:

mlnet auto-train ^
--task multiclass-classification ^
--dataset ".\Data\people_train.tsv" ^
--test-dataset ".\Data\people_test.tsv" ^
--label-column-name politic ^
--max-exploration-time 5

Das Caretzeichen wird für die Zeilenfortsetzung in einer Befehlsshell verwendet. Der gleiche AutoML-Befehl kann auch in PowerShell mithilfe des Gravis-Zeilenfortsetzungszeichens anstelle des Caretzeichens ausgeführt werden.

AutoML erstellt automatisch mehrere verschiedene Machine Learning-Modelle mit unterschiedlichen Algorithmen (z.B. mit SgdCalibratedOva („stochastic gradient descent calibrated one versus all“) und AveragedPerceptronOva) und wertet diese aus. Für die Demoausführung hat AutoML den LightGbmMulti-Algorithmus („lightweight gradient boosting machine multiclass“) mit einer Vorhersagegenauigkeit von 77,01 Prozent für die Testdaten als beste Option identifiziert.

Nach der Untersuchung der verschiedenen Vorhersagemodelle hat AutoML das beste Modell als „MLModel.zip“ gespeichert und auch C#-Beispielcode sowie eine Visual Studio-Projektdatei namens „SampleMulticlassClassification.Console.App.csproj“ generiert, die für das Modell verwendet werden kann.

Abbildung 2 zeigt ein Beispiel für die Verwendung des trainierten Modells aus einem C#-Programm. Der generierte Code wurde bearbeitet, um eine Vorhersage für eine Person zu treffen, die 33 Jahre alt und männlich ist, in der „zentralen“ Region lebt und ein Jahreseinkommen von 62.000,00 USD hat. Die Vorhersage besteht darin, dass die Person „gemäßigte“ politische Ansichten hat.

Verwenden des AutoML-Modells zum Treffen einer Vorhersage
Abbildung 2: Verwenden des AutoML-Modells zum Treffen einer Vorhersage

Das Demoprogramm zeigt auch die Vorhersagewahrscheinlichkeiten für konservative, gemäßigte und liberale Ansichten an: (0,0034, 0,9055, 0,0912). Dies sind keine echten Wahrscheinlichkeiten im mathematischen Sinn, aber sie geben Ihnen eine lockere Vorstellung von der Zuverlässigkeit der Vorhersage. Das Modell scheint in diesem Fall recht sicher (p = 0,9055) zu sein, dass die Person „gemäßigte“ Ansichten hat.

Sowohl ML.NET CLI als auch AutoML befinden sich zurzeit im Vorschaumodus und unterliegen einer schnellen Entwicklung, sodass sich einige der hier vorgestellten Informationen geändert haben können, bis Sie diesen Artikel lesen. Die meisten Änderungen sollten jedoch in Form von zusätzlichen Features und nicht in der zugrunde liegenden Architektur erfolgen.

Dieser Artikel geht davon aus, dass Sie über mittlere oder bessere Kenntnisse in C# verfügen und mit der Arbeit in einer Befehlsshell vertraut sind, setzt aber nicht voraus, dass Sie etwas über die ML.NET-CLI oder AutoML wissen. Der gesamte Democode wird in diesem Artikel vorgestellt. Die beiden Datendateien sind im Download verfügbar, der diesen Artikel begleitet.

Verstehen der Daten

Die meisten Machine Learning-Probleme beginnen mit der Analyse und Aufbereitung der verfügbaren Daten, und das ist bei Verwendung der ML.NET-CLI und von AutoML auch der Fall. Die Trainingsdaten weisen 1.000 Elemente auf und sehen wie folgt aus:

sex   age  region   income    politic
False  26  eastern  53800.00  conservative
False  19  western  39200.00  moderate
True   19  central  80800.00  liberal
False  52  eastern  86700.00  conservative
False  56  eastern  89200.00  liberal
...

Die Testdaten weisen das gleiche Format auf und bestehen aus 200 Elementen. Die Daten sind synthetisch und wurden programmgesteuert generiert. Beide Dateien weisen Tabstopptrennzeichen und die Erweiterung .tsv auf, um sie als solche für AutoML zu identifizieren. AutoML unterstützt auch Leerzeichen als Trennzeichen (.txt) und durch Kommas getrennte Dateien (.csv). AutoML unterstützt Datendateien mit oder ohne Kopfzeile. Wie Sie aber in Kürze sehen werden, ist es zweckmäßiger, eine Kopfzeile zu verwenden, als keine Kopfzeile anzugeben.

Obwohl es viele Arten von Vorhersageproblemen gibt, werden drei grundlegende Typen unterschieden: Mehrklassenklassifizierung, Binärklassifizierung und Regression. Das Ziel eines Mehrklassen-Klassifizierungsproblems ist es, einen diskreten Wert vorherzusagen, wenn es mindestens drei mögliche Werte zu berücksichtigen gibt. Beispielsweise wie im Demoprogramm bei der Vorhersage der politischen Orientierung (konservativ, gemäßigt, liberal) einer Person anhand von Alter, Geschlecht, Georegion und Jahreseinkommen.

Das Ziel eines Binärklassifizierungsproblems ist es, einen diskreten Wert vorherzusagen, der einer von nur zwei möglichen Werten sein kann. Beispielsweise möchten Sie das Geschlecht (männlich oder weiblich) einer Person anhand von Alter, Georegion, Einkommen und politischer Gesinnung vorhersagen. Wenn Machine Learning neu für Sie ist, werden Sie es vielleicht etwas seltsam finden, dass Binärklassifizierung und Mehrklassenklassifizierung als verschiedene Kategorien betrachtet werden. Es stellt sich jedoch heraus, dass die beiden Arten von Problemen einige grundlegende mathematische Unterschiede aufweisen.

Das Ziel eines Regressionsproblems besteht darin, einen einzelnen numerischen Wert vorherzusagen. Beispielsweise möchten Sie das Jahreseinkommen einer Person anhand von Alter, Geschlecht, Georegion, Einkommen und politischer Gesinnung vorhersagen. AutoML unterstützt zurzeit Mehrklassenklassifizierung, Binärklassifizierung und Regression. Unterstützung für andere Arten von Problemen (z.B. Rangfolge und Clustering) wird in Zukunft hinzugefügt.

Die Demodatendateien veranschaulichen die Verwendung von binären, ganzzahligen, kategorischen und Gleitkommadaten. Wenn Sie mit Binärdaten wie der Geschlechtsvariablen arbeiten, sollten Sie True und False (Groß- oder Kleinschreibung) anstelle von 0 und 1 verwenden. Die Demo verwendet False für „male“ (männlich) und True für „female“ (weiblich), sodass Sie sich die Geschlechtsvariable als "is-female" vorstellen können.

Es ist wichtig, dass AutoML-Dateien und -Verzeichnisse organisiert bleiben. Ich habe ein Verzeichnis auf oberster Ebene mit dem Namen „MLdotNET“ erstellt. Dann habe ich innerhalb von „MLdotNET“ ein Verzeichnis mit dem Namen „People“ erstellt, das als Stamm für AutoML-Dateien dient, die mit den Personendaten verknüpft sind. Im Verzeichnis „People“ habe ich ein Verzeichnis namens „Data“ erstellt und dort die Dateien „people_train.tsv“ und „people_test.tsv“ gespeichert. Ich habe AutoML-Befehle im Stammverzeichnis „People“ ausgeführt, da AutoML Unterverzeichnisse innerhalb des Stammverzeichnisses generiert, aus dem Befehle ausgegeben werden.

Installieren von AutoML

Bei der Installation von AutoML bin ich (wie so oft bei Vorabversionen von Software) auf mehrere kleine Fehler gestoßen, und Sie sollten auch einige Probleme erwarten. Kurz gesagt gibt es drei Schritte, um AutoML aufzusetzen. Installieren Sie zunächst Visual Studio, falls erforderlich. Installieren Sie dann das .NET Core SDK, falls erforderlich. Installieren Sie im dritten Schritt das ML.NET-CLI-Tool, das AutoML enthält.

Es ist möglich, AutoML ohne Visual Studio zu verwenden, aber die von AutoML erstellten Modelle sind speziell für Visual Studio konzipiert. Ich habe erfolgreich Visual Studio 2017 Professional und die kostenlose Edition Visual Studio 2017 Community verwendet. Die AutoML-Dokumentation besagt, dass AutoML mit Visual Studio 2019 funktioniert, aber ich konnte meine Modelle mit dieser Version nicht laden.

Das AutoML System basiert auf .NET Core Framework und insbesondere auf dem .NET Core SDK. Nach ein wenig Ausprobieren ist es mir gelungen, die SDK-Version 2.2.101 zu installieren. Der Installationsvorgang verwendet eine standardmäßige selbstextrahierende ausführbare Datei mit einer ansprechenden grafischen Benutzeroberfläche. Durch die Installation des .NET Core SDK erhalten Sie auch die Laufzeitumgebung, sodass Sie diese nicht separat installieren müssen.

Nach der Installation des .NET Core SDK ist der letzte Schritt die Installation von AutoML. AutoML ist kein eigenständiges Programm, sondern befindet sich in einem Tool namens mlnet, was etwas verwirrend ist. Um das mlnet-Tool zu installieren, starten Sie eine Shell (CMD oder PowerShell) und geben den folgenden Befehl ein: > dotnet tool install -g mlnet. Der Befehl öffnet über das Internet (Sie müssen also online sein) ein Standardrepository und installiert mlnet an einem Standardspeicherort auf Ihrem Computer. Nach einigen Fehlstarts erhielt ich schließlich eine Meldung „Tool ‘mlnet’ (version 0.3.0) was successfully installed“. Ich habe die Installation mit dem folgenden Befehl überprüft: > dotnet tool list -g.

Das Diagramm in Abbildung 3 zeigt die Beziehung zwischen den in einem AutoML-System verwendeten Hauptkomponenten.

AutoML-Komponenten
Abbildung 3: AutoML Komponenten

Mehrklassenklassifizierung

Um ein Mehrklassen-Klassifizierungsproblem mit AutoML zu erstellen, sind mindestens drei Argumente erforderlich:

mlnet auto-train ^
--task multiclass-classification ^
--dataset ".\Data\people_train.tsv" ^
--label-column-name politic ^

Der task-Typ kann „multiclass-classification“, „binary-classification“ oder „regression“ sein. Das dataset-Argument gibt den Pfad zu den Trainingsdaten an. Sie können entweder umgekehrte Schrägstriche im Windows-Stil oder Schrägstriche im Linux-Stil verwenden. Das test-dataset-Argument ist optional. Wenn test-dataset nicht vorhanden ist wertet AutoML das trainierte Modell mithilfe der Trainingsdaten aus.

Sie können ein optionales valid­ation-dataset-Argument angeben, damit AutoML das train-validate-test-Paradigma verwenden kann. Während des Trainings überwacht AutoML den mit dem Modell verbundenen Fehler für die Überprüfungsdaten, und wenn der Fehler zunimmt, kann das Training vorzeitig abgebrochen werden, damit das Modell nicht zu sehr an die Trainingsdaten angepasst wird.

Das label-column-name-Argument gibt den Namen der Spalte an, die die vorherzusagende Variable enthält. Wenn Ihr Trainingsdataset keine Kopfzeile enthält, können Sie das Argument label-column-index mit einem auf 1 basierenden Spaltenindex verwenden, z.B. --label-column-index 5.

Die Tabelle in Abbildung 4 fasst die 14 Argumente für AutoML zusammen. Jedes Argument besitzt einen vollständigen Namen, dem doppelte Bindestriche vorangestellt sind, und einen Kurzalias aus einem Buchstaben (Unterscheidung zwischen Groß- und Kleinschreibung), dem ein einzelner Bindestrich vorangestellt ist. Die Bedeutung der meisten Argumente ist selbsterklärend. Das Argument --cache weist AutoML an, alle Daten nach Möglichkeit in den Arbeitsspeicher zu laden (on) bzw. nicht zu laden (off) oder automatisch zu bestimmen, welche Aktion auszuführen ist.

Abbildung 4: Zusammenfassung der AutoML-Befehle

Argument Alias Werte Standardwert
--task -T multiclass-classification, binary-classification, regression  
--dataset -d Pfad zur Datei  
--test-dataset -t Pfad zur Datei keine
--validation-dataset -v Pfad zur Datei keine
--label-column-name -n Spaltenname in der Kopfzeile der vorherzusagenden Variablen  
--label-column-index -i Auf 1 basierender Spaltenindex in der Kopfzeile der vorherzusagenden Variablen  
--ignore-columns -I Durch Kommas getrennte, zu ignorierende Spaltennamen in der Kopfzeile keine
--has-header -h true, false true
--max-exploration-time -x Zeit in Sekunden 10
--verbosity -V quiet, minimal, diagnostic minimal
--cache -c on, off, auto auto
--name -N Name des erstellten Ausgabeprojekts Sample{task}
--output-path -o Verzeichnis, in dem das Ausgabeprojekt gespeichert werden soll Aktuelles Verzeichnis
--help -h    

Das Argument --max-exploration-time hat den größten Einfluss auf die AutoML-Ergebnisse. Im Allgemeinen gilt: Je mehr Zeit Sie AutoML für die Ausführung zur Verfügung stellen, desto besser ist das Vorhersagemodell, das generiert wird. AutoML führt eine doppelte Untersuchung durch. Zunächst probiert AutoML verschiedene Algorithmen aus, die auf die Art der Vorhersageaufgabe anwendbar sind. Beispielsweise unterstützt AutoML für ein Mehrklassen-Klassifizierungsproblem zurzeit 10 Algorithmen: AveragedPerceptronOva, FastForestOva, FastTreeOva, LbfgsLogisticRegressionOva, LbfgsMaximumEntropyMulti, LightGbmMulti, LinearSvmOva, SdcaMaximumEntropyMulti, SgdCalibratedOva, SymbolicSgdLogisticRegressionOva.

Zweitens probiert AutoML für jeden anwendbaren Algorithmus verschiedene Werte der Hyperparameter aus, die spezifisch für den Algorithmus sind. Beispielsweise verlangt der FastTreeOva-Algorithmus, dass Sie Werte für fünf Parameter angeben: NumberOfLeaves, MinimumExampleCountPerLeaf, NumberOfTrees, LearningRate und Shrinkage. Der LightGbmMulti-Algorithmus erfordert Werte für 13 Parameter, darunter Elemente wie NumberOfIterations, LearningRate und L2Regularization.

Die Anzahl der verschiedenen Kombinationen von Algorithmen und Hyperparametern ist unvorstellbar groß. Menschliche Machine Learning-Experten verlassen sich auf Intuition und Erfahrung, um einen guten Algorithmus und einen guten Satz von Hyperparametern zu finden, aber der Prozess ist äußerst mühsam und zeitaufwendig. AutoML führt eine anspruchsvolle Suche automatisch durch.

Interpretieren der Ergebnisse

Wenn Sie sich den Screenshot in Abbildung 1 ansehen, erkennen Sie, dass AutoML diese Informationen für die fünf besten gefundenen Modelle anzeigt:

Trainer                MicroAccuracy  MacroAccuracy
1  LightGbmMulti          0.7701         0.7495
2  FastTreeOva            0.7471         0.7201
3  FastForestOva          0.7471         0.7236
4  AveragedPerceptronOva  0.4598         0.3333
5  LinearSvmOva           0.4598         0.3333

Die MicroAccuracy- und MacroAccuracy-Werte bieten Ihnen zwei verschiedene Metriken für die Genauigkeit der Modellvorhersage. MicroAccruacy ist der wichtigere der beiden Werte. MicroAccuracy ist normale Genauigkeit – nur die Anzahl der richtigen Vorhersagen für die Testdaten, dividiert durch die Gesamtzahl der Elemente. Das Testdataset enthält 200 Elemente, und der beste Algorithmus (LightGbmMulti) erzielte 77,01 Prozent, also 154 richtige Ergebnisse von 200 Ergebnissen gesamt.

MacroAccuracy ist die durchschnittliche Genauigkeit für die vorherzusagenden Klassen. Angenommen, das Testdataset mit 200 Elementen enthält 60 konservative Elemente, 90 gemäßigte Elemente und 50 liberale Elemente. Und nehmen wir an, dass ein Modell 45 der 60 (0,7500) konservativen Elemente, 63 der 90 (0,7000) gemäßigten Elemente und 30 der 50 (0,6000) liberalen Elemente richtig vorhergesagt hat. Dann ist der MacroAccuracy-Wert für das Modell (0,7500 + 0,7000 + 0,6000) / 3 = 0,6833.

MacroAccuracy ist nützlich, wenn ein Datensatz stark zu einer Klasse verzerrt ist. Wenn das Testdataset beispielsweise 180 konservative Elemente, 10 gemäßigte Elemente und 10 liberale Elemente enthält, könnte ein Modell einfach konservativ für alle Elemente vorhersagen und einen Wert von 180 / 200 = 0,9000 für MicroAccuracy angeben, aber der Wert für MacroAccurcy wäre nur (0,9000 + 0,0000 + 0,0000 + 0,0000) / 3 = 0,3000. Daher sollte eine große Diskrepanz zwischen MicroAccuracy- und MacroAccuracy-Werten untersucht werden.

Verwenden des generierten Modells

Die Erstellung eines Machine Learning-Vorhersagemodells ist interessant, aber der springende Punkt besteht darin, das Modell für Vorhersagen zu verwenden. AutoML erstellt ein Unterverzeichnis namens „SampleMulticlassClassification“ im Stammverzeichnis „People“. Sie können einen aussagekräftigeren Namen mit dem Argument --name angeben. Das Unterverzeichnis enthält Verzeichnisse, die das generierte Modell im ZIP-Format enthalten, sowie eine automatisch generierte C#-Konsolenanwendung, die als Vorlage für Vorhersagen verwendet werden kann.

Der automatisch generierten Code ist klar und einfach zu interpretieren. Ich habe auf die Datei „SampleMulticlassClassification.sln“ doppelgeklickt, wodurch Visual Studio 2017 gestartet wurde, und dann die Projektmappendatei verwendet, um das C#-Projekt zu laden. Der Beispielcode trifft mit dem ersten Datenelement in der Testdatasetdatei eine Vorhersage. Ich habe den Vorlagencode bearbeitet, um eine Vorhersage der politischen Gesinnung für eine neue, bisher noch nicht gesehene Person zu machen, wie in Abbildung 2 gezeigt.

Der bearbeitete Vorhersagecode beginnt, indem er das trainierte Modell in den Arbeitsspeicher lädt und mithilfe des Modells ein PredictionEngine-Objekt erstellt:

static void Main(string[] args)
{
  MLContext mlContext = new MLContext();
  ITransformer mlModel =
    mlContext.Model.Load(GetAbsolutePath(MODEL_FILEPATH),
    out DataViewSchema inputSchema);
  var predEngine =
    mlContext.Model.CreatePredictionEngine<ModelInput,
    ModelOutput>(mlModel);...

Als nächstes richtet der benutzerdefinierte Code die Prädiktorwerte für eine Person ein:

Console.WriteLine("\nPredicting politic for Age = 33,
  Sex = Male, Region = central, Income = $62,000.00");
ModelInput X = new ModelInput();
X.Age = 33; X.Sex = false;
X.Region = "central"; X.Income = 62000.00f; ...

Erinnern Sie sich daran, dass binäre Prädiktorvariablen wie das Geschlecht als boolesche Werte codiert werden. Und beachten Sie, dass die Income-Variable ein nachfolgendes „f“ aufweist, um den Wert in den Typ float umzuwandeln, der der von ML.NET-Systemen verwendete Fließkommastandardtyp ist. Die Age-Variable ist ebenfalls vom Typ float, benötigt aber kein nachfolgendes „f“, da der Wert keinen Dezimalpunkt enthält und automatisch in den Typ float umgewandelt wird.

Die Vorhersage erfolgt folgendermaßen:

ModelOutput Y = predEngine.Predict(X);
string predPolitic = Y.Prediction;
float[] predProbs = Y.Score;...

Die Prediction-Eigenschaft ist eine Zeichenfolgendarstellung der vorhergesagten Klasse („moderate“ (gemäßigt) für die Demo) und die Bewertung (Score) ist ein Array von float-Werten, die jeder möglichen Klasse entsprechen: (0,0034, 0,9055, 0,0912). Das AutoML-System verwendet die Reihenfolge, in der die Klassenbezeichnungen zuerst in den Trainingsdaten auftauchen. Erinnern Sie sich daran, wie die Trainingsdaten aussehen:

sex   age  region   income    politic
False  26  eastern  53800.00  conservative
False  19  western  39200.00  moderate
True   19  central  80800.00  liberal
False  52  eastern  86700.00  conservative

Also ist „conservative“ [0], „moderate“ [1] und „liberal“ [2]. Wenn ich AutoML verwende, ordne ich häufig die ersten Zeilen meiner Trainingsdaten neu an, um eine bessere Reihenfolge für die Vorhersage der Werte zu erhalten.

Binärklassifizierung und Regression

Sobald Sie die Prinzipien für die Verwendung von AutoML zur Erstellung und Verwendung eines Vorhersagemodells für ein Mehrklassen-Klassifikationsproblem verstanden haben, ist es relativ einfach, mit Binärklassifizierungs- und Regressionsproblemen zu arbeiten. Sie können beispielsweise den folgenden Befehl ausgeben, um ein Modell zur Vorhersage des Geschlechts einer Person basierend auf Alter, Region, Einkommen und politischer Gesinnung zu erstellen:

mlnet auto-train ^
--task binary-classification ^
--dataset ".\Data\people_train.tsv" ^
--test-dataset ".\Data\people_test.tsv" ^
--label-column-name sex ^
--max-exploration-time 300

Und Sie könnten diesen Befehl verwenden, um das Jahreseinkommen basierend auf Alter, Geschlecht und politischer Gesinnung vorherzusagen, aber nicht anhand der Region:

mlnet auto-train ^
--task regression ^
--dataset ".\Data\people_train.tsv" ^
--test-dataset ".\Data\people_test.tsv" ^--ignore-columns region ^
--label-column-name income ^
--max-exploration-time 300

Binärklassifizierungs- und Regressionsbefehle führen zu anderen Ergebnismetriken als eine Mehrklassenklassifizierung. Binärklassifizierung zeigt Genauigkeits-, AUC-, AUPRC- und F1-Bewertungsmetriken an. Kurz gesagt: AUC ist „area under curve“ (Bereich unter der Kurve) der Funktion der Operationscharakteristik eines Beobachters (ROC-Kurve) und ein Maß dafür, wie gut zwei Klassen in einem Binärklassifizierungsproblem getrennt werden können. Größere Werte für AUC sind besser. AUPRC ist „area under the precision recall curve“ (Bereich unter der Genauigkeits-/Trefferquotenkurve), eine ähnliche Metrik, für die größere Werte ebenfalls besser sind. Die F1-Bewertung ist ein Mittelwert aus Genauigkeit und Trefferquote, beides Metriken, für die größere Werte besser sind.

Wenn AutoML für Regression verwendet wird, werden R-squared, Absolute-loss, Squared-loss und RMS-loss angezeigt. Größere Werte für R-square sind besser, und kleinere Werte für Absolute-loss, Squared-loss und RMS-loss sind besser. Wenn Sie ein relativer Neuling im Bereich Machine Learning sind, sollten Sie sich nicht zu sehr mit all diesen Statistiken beschäftigen. Es ist gängige Praxis bei Machine Learning, Ihnen viele Metriken bereitzustellen. Genauigkeit ist normalerweise die primäre Metrik, auf die geachtet werden muss.

Beachten Sie jedoch, dass es keine Genauigkeitsmetrik für ein Regressionsmodell gibt. Dies liegt daran, dass es keine inhärente Definition dafür gibt, was eine richtige Vorhersage für ein Regressionsproblem ist. Wenn beispielsweise ein vorhergesagtes Jahreseinkommen 58.001,00 USD ist und das tatsächliche Jahreseinkommen 58.000,00 USD beträgt, ist die Vorhersage dann richtig?

Für Regressionsprobleme müssen Sie eine problemabhängige Bedeutung von Genauigkeit definieren. In der Regel geben Sie eine zulässige prozentuale Abweichung an. Wenn Sie beispielsweise einen Prozentsatz von 0,10 angeben und ein richtiges Einkommen 60.000,00 USD beträgt, dann wird jedes vorhergesagte Einkommen zwischen 54.000,00 USD und 66.000,00 USD als richtige Vorhersage angesehen.

Der von AutoML generierte Vorlagencode macht es Ihnen leicht, die Genauigkeit für ein Vorhersageproblem zu berechnen. In Pseudocode sieht das folgendermaßen aus:

loop each line in test dataset file
  parse out sex, age, region, politic, and correct income
  use sex, age, region, politic to compute predicted income
  if predicted is within x% of correct
    increment number correct
  else
    increment number wrong
end-loop
return number correct / (number correct + number wrong)

Diese Beispiele sollten Ihnen einen guten Überblick über die Arten von Problemen geben, die mit AutoML und ML.NET gelöst werden können. Eine Art von Machine Learning, die AutoML und ML.NET nicht beherrschen, ist die Vorhersage auf der Grundlage eines neuronalen Netzes. Neuronale Netze sind wesentlich komplexer als die traditionellen Machine Learning-Algorithmen, die von AutoML unterstützt werden. Es wurde darüber nachgedacht, ML.NET und AutoML Funktionen neuronaler Netze hinzuzufügen, aber eine solche Funktionalität wird wahrscheinlich nicht kurzfristig verfügbar sein.

Ein interessanter Vorteil der Verwendung von AutoML besteht darin, dass AutoML nicht nur Vorlagencode generiert, um ein trainiertes Modell zu laden und mit ihm Vorhersagen zu treffen, sondern auch eine Datei „ModelBuilder.cs“ generiert, die den zugrunde liegenden Code enthält, der zum Erstellen, Trainieren und Speichern des Vorhersagemodells verwendet wurde. Dies ist beispielsweise ein Teil des Codes, der in der Datei „ModelBuilder.cs“ für das Mehrklassen-Klassififizierungsbeispiel generiert wurde:

// Set the training algorithm
var trainer =   mlContext.MulticlassClassification.Trainers.
  LightGbm(labelColumnName: "politic",
  featureColumnName: "Features").Append(mlContext.Transforms.Conversion.
  MapKeyToValue("PredictedLabel", "PredictedLabel"));

var trainingPipeline = dataProcessPipeline.Append(trainer);

Wenn Sie die manuelle Erstellung von Vorhersagemodellen mit ML.NET in Visual Studio statt automatisch mit AutoML untersuchen möchten, können Sie den Code in der Datei „ModelBuilder.cs“ als Ausgangspunkt verwenden. Dies ist wesentlich einfacher, als den Code von Grund auf neu zu schreiben.

Zusammenfassung

Ich bin ziemlich beeindruckt von meinem ersten Blick auf AutoML. Ich konnte seine coolen technischen Eigenschaften beschreiben, aber noch wichtiger ist, dass sich AutoML "einfach richtig anfühlt". Die CLI ist einfach und benutzerfreundlich, und der generierte Vorlagencode ist übersichtlich und leicht zu ändern. Anders ausgedrückt: AutoML hilft mir, anstatt gegen mich zu kämpfen.

AutoML ist nur ein Teil eines schnell wachsenden Ökosystems von Machine Learning-Tools und -Systemen. Dieses Ökosystem dehnt sich so schnell aus, dass selbst meine Kollegen und ich, die sehr nah an den Quellen dieser neuen Systeme arbeiten, es als Herausforderung betrachten, den Überblick zu behalten. Systeme, die es seit einigen Jahren gibt, z.B. Azure Cognitive Services, Azure Machine Learning Studio und Azure Data Science Virtual Machines, werden durch Neueinsteiger wie Azure Data Prep SDK, NimbusML und die ONNX Runtime ergänzt. Es ist eine aufregende Zeit, Machine Learning-Systeme mit .NET und Open-Source-Technologien zu entwickeln.


Dr. James McCaffreyist in Redmond (Washington, USA) für Microsoft Research tätig. Er hat an verschiedenen wichtigen Microsoft-Produkten mitgearbeitet, unter anderem an Azure und Bing. Dr. McCaffrey erreichen Sie unter jamccaff@microsoft.com.

Unser Dank gilt den folgenden technischen Experten von Microsoft für die Durchsicht dieses Artikels: Chris Lee, Ricky Loynd


Diesen Artikel im MSDN Magazine-Forum diskutieren