Was ist ML.NET, und wie funktioniert es?What is ML.NET and how does it work?

ML.NET ermöglicht es Ihnen, .NET-Anwendungen in Online- oder Offlineszenarien mit Machine Learning zu versehen.ML.NET gives you the ability to add machine learning to .NET applications, in either online or offline scenarios. Mit dieser Funktion können Sie automatische Vorhersagen unter Verwendung der Daten treffen, die für Ihre Anwendung verfügbar sind.With this capability, you can make automatic predictions using the data available to your application.

Zentraler Bestandteil von ML.NET ist ein Machine Learning-Modell.Central to ML.NET is a machine learning model. Das Modell gibt die Schritte an, die erforderlich sind, um Ihre Eingabedaten in eine Vorhersage umzuwandeln.The model specifies the steps needed to transform your input data into a prediction. Mit ML.NET können Sie ein benutzerdefiniertes Modell trainieren, indem Sie einen Algorithmus angeben, oder Sie können bereits trainierte TensorFlow- und ONNX-Modelle importieren.With ML.NET, you can train a custom model by specifying an algorithm, or you can import pre-trained TensorFlow and ONNX models.

Sobald Sie über ein Modell verfügen, können Sie es Ihrer Anwendung hinzufügen, um Vorhersagen zu treffen.Once you have a model, you can add it to your application to make the predictions.

ML.NET kann unter Windows, Linux und macOS mit .NET Core oder unter Windows mit .NET Framework ausgeführt.ML.NET runs on Windows, Linux, and macOS using .NET Core, or Windows using .NET Framework. 64-Bit wird auf allen Plattformen unterstützt.64 bit is supported on all platforms. 32-Bit wird unter Windows unterstützt (mit Ausnahme der Funktionen TensorFlow, LightGBM und ONNX).32 bit is supported on Windows, except for TensorFlow, LightGBM, and ONNX related functionality.

Beispiele für den Typ von Vorhersagen, die Sie mit ML.NET treffen können:Examples of the type of predictions that you can make with ML.NET:

Klassifizierung/KategorisierungClassification/Categorization Automatisches Unterteilen von Kundenfeedback in positive und negative KategorienAutomatically divide customer feedback into positive and negative categories
Regression/Vorhersagen kontinuierlicher WerteRegression/Predict continuous values Vorhersagen des Hauspreises basierend auf Größe und StandortPredict the price of houses based on size and location
AnomalieerkennungAnomaly Detection Erkennen von betrügerischen BanktransaktionenDetect fraudulent banking transactions
EmpfehlungenRecommendations Empfehlen von Produkten, die Onlinekäufern basierend auf ihren vorherigen Käufen wahrscheinlich gerne erwerben würdenSuggest products that online shoppers may want to buy, based on their previous purchases
Zeitreihen/sequenzielle DatenTime series/sequential data Wettervorhersagen/Produktumsatz-VorhersagenForecast the weather/product sales
BildklassifizierungImage classification Kategorisieren von Pathologien in medizinischen BildernCategorize pathologies in medical images

Hallo ML.NET-WeltHello ML.NET World

Der Code im folgenden Codeausschnitt veranschaulicht die einfachste ML.NET-Anwendung.The code in the following snippet demonstrates the simplest ML.NET application. In diesem Beispiel erstellt ein Modell der linearen Regression Hauspreisvorhersagen auf der Basis von Größe- und Preisdaten.This example constructs a linear regression model to predict house prices using house size and price data.

   using System;
   using Microsoft.ML;
   using Microsoft.ML.Data;

   class Program
   {
       public class HouseData
       {
           public float Size { get; set; }
           public float Price { get; set; }
       }

       public class Prediction
       {
           [ColumnName("Score")]
           public float Price { get; set; }
       }

       static void Main(string[] args)
       {
           MLContext mlContext = new MLContext();

           // 1. Import or create training data
           HouseData[] houseData = {
               new HouseData() { Size = 1.1F, Price = 1.2F },
               new HouseData() { Size = 1.9F, Price = 2.3F },
               new HouseData() { Size = 2.8F, Price = 3.0F },
               new HouseData() { Size = 3.4F, Price = 3.7F } };
           IDataView trainingData = mlContext.Data.LoadFromEnumerable(houseData);

           // 2. Specify data preparation and model training pipeline
           var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Size" })
               .Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Price", maximumNumberOfIterations: 100));

           // 3. Train model
           var model = pipeline.Fit(trainingData);

           // 4. Make a prediction
           var size = new HouseData() { Size = 2.5F };
           var price = mlContext.Model.CreatePredictionEngine<HouseData, Prediction>(model).Predict(size);

           Console.WriteLine($"Predicted price for size: {size.Size*1000} sq ft= {price.Price*100:C}k");

           // Predicted price for size: 2500 sq ft= $261.98k
       }
   }

CodeworkflowCode workflow

Im folgenden Diagramm werden die Anwendungscodestruktur und der iterative Prozess der Modellentwicklung dargestellt:The following diagram represents the application code structure, as well as the iterative process of model development:

  • Sammeln und Laden von Trainingsdaten in einem IDataView-ObjektCollect and load training data into an IDataView object
  • Angeben einer Pipeline von Vorgängen zum Extrahieren von Features und Anwenden eines Machine Learning-AlgorithmusSpecify a pipeline of operations to extract features and apply a machine learning algorithm
  • Trainieren eines Modells durch Aufrufen von Fit() auf der PipelineTrain a model by calling Fit() on the pipeline
  • Auswerten des Modells und Iterieren zur VerbesserungEvaluate the model and iterate to improve
  • Speichern des Modells im Binärformat zur Verwendung in einer AnwendungSave the model into binary format, for use in an application
  • Rückladen des Modells in ein ITransformer-ObjektLoad the model back into an ITransformer object
  • Treffen von Vorhersagen durch Aufrufen von CreatePredictionEngine.Predict()Make predictions by calling CreatePredictionEngine.Predict()

ML.NET-Anwendungsentwicklungsfluss einschließlich Komponenten für Datengenerierung, Pipelineentwicklung, Modelltraining, Modellauswertung und Modellverwendung

Wir werden diese Konzepte nun näher betrachten.Let's dig a little deeper into those concepts.

Machine Learning-ModellMachine learning model

Ein ML.NET-Modell ist ein Objekt, das Transformationen enthält, die auf Ihre Eingabedaten angewendet werden, damit sie die vorhergesagte Ausgabe erreichen.An ML.NET model is an object that contains transformations to perform on your input data to arrive at the predicted output.

StandardBasic

Das einfachste Modell ist die zweidimensionale lineare Regression, wobei wie im obigen Hauspreisbeispiel eine kontinuierliche Menge zu einer anderen proportional ist.The most basic model is two-dimensional linear regression, where one continuous quantity is proportional to another, as in the house price example above.

Modell der linearen Regression mit Trend- und Gewichtungsparametern

Das Modell ist einfach: $Price = b + Size * w$.The model is simply: $Price = b + Size * w$. Die Parameter „$b$“ und „$w$“ werden durch Anpassung einer Linie an eine Gruppe von (size, price)-Paaren geschätzt.The parameters $b$ and $w$ are estimated by fitting a line on a set of (size, price) pairs. Die zum Finden der Parameter des Modells verwendeten Daten werden als Trainingsdaten bezeichnet.The data used to find the parameters of the model is called training data. Die Eingaben eines Machine Learning-Modells werden als Features bezeichnet.The inputs of a machine learning model are called features. In diesem Beispiel ist $Size$ das einzige Feature.In this example, $Size$ is the only feature. Die zum Trainieren eines Machine Learning-Modells verwendeten Ground-Truth-Werte werden als Labels bezeichnet.The ground-truth values used to train a machine learning model are called labels. Hier sind die $Price$-Werte im Trainingsdataset die Labels.Here, the $Price$ values in the training data set are the labels.

KomplexerMore complex

Ein komplexeres Modell klassifiziert finanzielle Transaktionen mithilfe der Transaktionstextbeschreibung in Kategorien.A more complex model classifies financial transactions into categories using the transaction text description.

Jede Transaktionsbeschreibung wird durch Entfernen redundante Wörter und Zeichen und Zählen von Kombinationen aus Word und Zeichen in einen Satz von Features aufgeschlüsselt.Each transaction description is broken down into a set of features by removing redundant words and characters, and counting word and character combinations. Die Featuregruppe wird zum Trainieren eines linearen Modells auf der Basis des Kategoriensatzes in den Trainingsdaten verwendet.The feature set is used to train a linear model based on the set of categories in the training data. Je mehr eine neue Beschreibung denjenigen im Trainingssatz ähnelt, desto eher wird sie derselben Kategorie zugewiesen.The more similar a new description is to the ones in the training set, the more likely it will be assigned to the same category.

Textklassifizierungsmodell

Hauspreismodell und Textklassifizierungsmodell sind beide lineare Modelle.Both the house price model and the text classification model are linear models. Je nach Art Ihrer Daten und des Problems, das Sie lösen, können Sie auch Entscheidungsstrukturmodelle, verallgemeinert additive Modelle, und andere verwenden.Depending on the nature of your data and the problem you are solving, you can also use decision tree models, generalized additive models, and others. Weitere Informationen zu den Modellen finden Sie unter Aufgaben.You can find out more about the models in Tasks.

DatenvorbereitungData preparation

In den meisten Fällen können die Daten, die Ihnen zur Verfügung stehen, nicht direkt zum Trainieren von Machine Learning-Modellen verwendet werden.In most cases, the data that you have available isn't suitable to be used directly to train a machine learning model. Die unformatierten Daten müssen vorbereitet, d.h. vorverarbeitet werden, bevor Sie sie verwenden können, um die Parameter Ihres Modells zu finden.The raw data needs to be prepared, or pre-processed before it can be used to find the parameters of your model. Möglicherweise müssen Ihre Daten von Zeichenfolgenwerten in eine numerische Darstellung konvertiert werden.Your data may need to be converted from string values to a numerical representation. Vielleicht enthalten Ihre Eingabedaten redundante Informationen.You might have redundant information in your input data. Sie müssen möglicherweise die Dimensionen der Eingabedaten reduzieren oder erweitern.You may need to reduce or expand the dimensions of your input data. Ihre Daten müssen vielleicht normalisiert oder skaliert werden.Your data might need to be normalized or scaled.

Die ML.NET-Tutorials informieren Sie über verschiedene Datenverarbeitungspipelines für Text-, Bild-, numerische und Zeitreihendaten, die für bestimmte Machine Learning-Aufgaben verwendet werden.The ML.NET tutorials teach you about different data processing pipelines for text, image, numerical, and time-series data used for specific machine learning tasks.

Unter Vorbereiten von Daten finden Sie allgemeinere Informationen zur Anwendung der Datenvorbereitung.How to prepare your data shows you how to applied data preparation more generally.

Im Ressourcenabschnitt finden Sie einen Anhang mit allen verfügbaren Transformationen.You can find an appendix of all of the available transformations in the resources section.

ModellauswertungModel evaluation

Wie können Sie nach dem Trainieren Ihres Modells wissen, wie gut es zukünftige Vorhersagen treffen wird?Once you have trained your model, how do you know how well it will make future predictions? Mit ML.NET können Sie Ihr Modell anhand einiger neuer Testdaten auswerten.With ML.NET, you can evaluate your model against some new test data.

Jede Art von Machine Learning-Aufgabe verfügt über Metriken zum Auswerten der Genauigkeit des Modells anhand eines Testdatasets.Each type of machine learning task has metrics used to evaluate the accuracy and precision of the model against the test data set.

In unserem Hauspreisbeispiel haben wir die Regressionsaufgabe verwendet.For our house price example, we used the Regression task. Um das Modell auszuwerten, fügen Sie dem ursprünglichen Beispiel den folgenden Code hinzu.To evaluate the model, add the following code to the original sample.

        HouseData[] testHouseData =
        {
            new HouseData() { Size = 1.1F, Price = 0.98F },
            new HouseData() { Size = 1.9F, Price = 2.1F },
            new HouseData() { Size = 2.8F, Price = 2.9F },
            new HouseData() { Size = 3.4F, Price = 3.6F }
        };

        var testHouseDataView = mlContext.Data.LoadFromEnumerable(testHouseData);
        var testPriceDataView = model.Transform(testHouseDataView);

        var metrics = mlContext.Regression.Evaluate(testPriceDataView, labelColumnName: "Price");

        Console.WriteLine($"R^2: {metrics.RSquared:0.##}");
        Console.WriteLine($"RMS error: {metrics.RootMeanSquaredError:0.##}");

        // R^2: 0.96
        // RMS error: 0.19

Die Auswertungsmetriken zeigen, dass der Fehler gering ist, und dass die Korrelation zwischen der vorhergesagten Ausgabe und der Testausgabe hoch ist.The evaluation metrics tell you that the error is low-ish, and that correlation between the predicted output and the test output is high. Nun, das war einfach.That was easy! In realen Beispielen sind weitere Optimierungen erforderlich, um gute Modellmetriken zu erzielen.In real examples, it takes more tuning to achieve good model metrics.

ML.NET-ArchitekturML.NET architecture

In diesem Abschnitt behandeln wir die Architekturmuster von ML.NET.In this section, we go through the architectural patterns of ML.NET. Wenn Sie ein erfahrener .NET-Entwickler sind, werden Ihnen einige dieser Muster vertraut und einige weniger vertraut sein.If you are an experienced .NET developer, some of these patterns will be familiar to you, and some will be less familiar. Halten Sie sich fest, es geht sofort los!Hold tight, while we dive in!

Eine ML.NET-Anwendung beginnt mit einem MLContext-Objekt.An ML.NET application starts with an MLContext object. Dieses Singletonobjekt enthält Kataloge.This singleton object contains catalogs. Ein Katalog ist eine Factory zum Laden und Speichern von Daten, für Transformationen, Trainer und Modellvorgangskomponenten.A catalog is a factory for data loading and saving, transforms, trainers, and model operation components. Jedes Katalogobjekt verfügt über Methoden, um die verschiedenen Typen von Komponenten zu erstellen:Each catalog object has methods to create the different types of components:

Laden und Speichern von DatenData loading and saving DataOperationsCatalog
DatenvorbereitungData preparation TransformsCatalog
TrainingsalgorithmenTraining algorithms Binäre KlassifizierungBinary classification BinaryClassificationCatalog
MultiklassenklassifizierungMulticlass classification MulticlassClassificationCatalog
AnomalieerkennungAnomaly detection AnomalyDetectionCatalog
ClusterbildungClustering ClusteringCatalog
VorhersagenForecasting ForecastingCatalog
RangfolgeRanking RankingCatalog
RegressionRegression RegressionCatalog
EmpfehlungRecommendation RecommendationCatalog Microsoft.ML.Recommender-NuGet-Paket hinzufügenadd the Microsoft.ML.Recommender NuGet package
TimeSeriesTimeSeries TimeSeriesCatalog Microsoft.ML.TimeSeries-NuGet-Paket hinzufügenadd the Microsoft.ML.TimeSeries NuGet package
ModellverwendungModel usage ModelOperationsCatalog

Sie können in jeder der oben genannten Kategorien zu den Erstellungsmethoden navigieren.You can navigate to the creation methods in each of the above categories. Bei Verwendung von Visual Studio werden die Kataloge über IntelliSense angezeigt.Using Visual Studio, the catalogs show up via IntelliSense.

IntelliSense für Regressionstrainer

Erstellen der PipelineBuild the pipeline

In jedem Katalog befindet sich eine Reihe von Erweiterungsmethoden.Inside each catalog is a set of extension methods. Wir untersuchen, wie Erweiterungsmethoden zum Erstellen einer Trainingspipeline verwendet werden.Let's look at how extension methods are used to create a training pipeline.

    var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Size" })
        .Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Price", maximumNumberOfIterations: 100));

Im Codeausschnitt sind Concatenate und Sdca Methoden im Katalog.In the snippet, Concatenate and Sdca are both methods in the catalog. Sie erstellen jeweils ein IEstimator-Objekt, das der Pipeline angefügt wird.They each create an IEstimator object that is appended to the pipeline.

An diesem Punkt werden die Objekte nur erstellt.At this point, the objects are created only. Es hat keine Ausführung stattgefunden.No execution has happened.

Trainieren des ModellsTrain the model

Nachdem die Objekte in der Pipeline erstellt wurden, können Daten zum Trainieren des Modells verwendet werden.Once the objects in the pipeline have been created, data can be used to train the model.

    var model = pipeline.Fit(trainingData);

Beim Aufruf von Fit() werden die Eingabetrainingsdaten verwendet, um die Parameter des Modells zu schätzen.Calling Fit() uses the input training data to estimate the parameters of the model. Dies wird als Trainieren des Modells bezeichnet.This is known as training the model. Beachten Sie, dass das Modell der linearen Regression oben zwei Modellparameter hatte: Trend und Gewichtung.Remember, the linear regression model above had two model parameters: bias and weight. Nach dem Fit()-Aufruf sind die Werte der Parameter bekannt.After the Fit() call, the values of the parameters are known. Die meisten Modelle haben viel mehr Parameter als dieses.Most models will have many more parameters than this.

Weitere Informationen über das Modelltraining finden Sie unter Trainieren und Auswerten eines Modells.You can learn more about model training in How to train your model

Das resultierende Modellobjekt implementiert die ITransformer-Schnittstelle.The resulting model object implements the ITransformer interface. Das Modell transformiert also Eingabedaten in Vorhersagen.That is, the model transforms input data into predictions.

   IDataView predictions = model.Transform(inputData);

Verwenden des ModellsUse the model

Sie können Eingabedaten in einem Massenvorgang in Vorhersagen umwandeln oder jede Eingabe einzeln.You can transform input data into predictions in bulk, or one input at a time. Im Hauspreisbeispiel haben wir beides getan: im Massenvorgang zum Auswerten des Modells und einzeln, um eine neue Vorhersage zu treffen.In the house price example, we did both: in bulk for the purpose of evaluating the model, and one at a time to make a new prediction. Wir betrachten nun die einzelnen Vorhersagen.Let's look at making single predictions.

    var size = new HouseData() { Size = 2.5F };
    var predEngine = mlContext.CreatePredictionEngine<HouseData, Prediction>(model);
    var price = predEngine.Predict(size);

Die CreatePredictionEngine()-Methode nimmt eine Eingabe- und eine Ausgabeklasse entgegen.The CreatePredictionEngine() method takes an input class and an output class. Die Feldnamen und/oder Codeattribute bestimmen die Namen der Datenspalten, die beim Trainieren des Modells und der Vorhersage verwendet werden.The field names and/or code attributes determine the names of the data columns used during model training and prediction. Weitere Informationen finden Sie unter Treffen von Vorhersagen mit einem trainierten Modell.You can read about How to make a single prediction in the How-to section.

Datenmodelle und SchemaData models and schema

Das Herzstück einer ML.NET-Machine Learning-Pipeline sind DataView-Objekte.At the core of an ML.NET machine learning pipeline are DataView objects.

Jede Transformation in der Pipeline weist ein Eingabeschema (Datennamen, -typen und -größen, die die Transformation bei der Eingabe erwartet) und ein Ausgabeschema (nach der Transformation erzeugte Datennamen, -typen und -größen) auf.Each transformation in the pipeline has an input schema (data names, types, and sizes that the transform expects to see on its input); and an output schema (data names, types, and sizes that the transform produces after the transformation). Das folgende Dokument enthält eine ausführliche Erläuterung der Schnittstelle IDataView und deren Typsystem.The following document provides an in-depth explanation of the IDataView interface and its type system.

Wenn das Ausgabeschema einer Transformation in der Pipeline nicht dem Eingabeschema der nächsten Transformation entspricht, löst ML.NET eine Ausnahme aus.If the output schema from one transform in the pipeline doesn't match the input schema of the next transform, ML.NET will throw an exception.

Ein Datenansichtsobjekt enthält Spalten und Zeilen.A data view object has columns and rows. Jede Spalte hat einen Namen, einen Typ und eine Länge.Each column has a name and a type and a length. Beispiel: die Eingabespalten im Hauspreisbeispiel sind Size und Price („Größe“ und „Preis“).For example: the input columns in the house price example are Size and Price. Beide sind Typen, und sie sind eher Skalar- als Vektormengen.They are both type and they are scalar quantities rather than vector ones.

Beispiel der ML.NET-Datenansicht mit Hauspreis-Vorhersagedaten

Alle ML.NET-Algorithmen suchen nach einer Eingabespalte, die ein Vektor ist.All ML.NET algorithms look for an input column that is a vector. Standardmäßig wird diese Vektorspalte mit Features bezeichnet.By default this vector column is called Features. Darum haben wir in unserem Hauspreisbeispiel die Spalte Size in eine neue Spalte namens Features verkettet.This is why we concatenated the Size column into a new column called Features in our house price example.

   var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Size" })

Alle Algorithmen erstellen auch neue Spalten, nachdem sie eine Vorhersage ausgeführt haben.All algorithms also create new columns after they have performed a prediction. Die festgelegten Namen dieser neuen Spalten hängen vom Typ des Machine Learning-Algorithmus ab.The fixed names of these new columns depend on the type of machine learning algorithm. Für die Regressionsaufgabe wird eine der neuen Spalten mit Score.For the regression task, one of the new columns is called Score. Darum haben wir unseren Preisdaten diesen Namen zugeordnet.This is why we attributed our price data with this name.

    public class Prediction
    {
        [ColumnName("Score")]
        public float Price { get; set; }
    }

Weitere Informationen über Ausgabespalten anderer Machine Learning-Aufgaben finden Sie im Handbuch Machine Learning-Aufgaben in ML.NET.You can find out more about output columns of different machine learning tasks in the Machine Learning Tasks guide.

Eine wichtige Eigenschaft von DataView-Objekten ist, dass sie verzögert ausgewertet werden.An important property of DataView objects is that they are evaluated lazily. Datenansichten werden nur beim Trainieren und Auswerten des Modells und bei der Datenvorhersage geladen und verarbeitet.Data views are only loaded and operated on during model training and evaluation, and data prediction. Beim Schreiben und Testen Ihrer ML.NET-Anwendung können Sie mit dem Visual Studio-Debugger einen Blick auf jedes Datenansichtsobjekt werfen, indem Sie die Preview-Methode aufrufen.While you are writing and testing your ML.NET application, you can use the Visual Studio debugger to take a peek at any data view object by calling the Preview method.

    var debug = testPriceDataView.Preview();

Sie können die debug-Variable im Debugger beobachten und ihren Inhalt untersuchen.You can watch the debug variable in the debugger and examine its contents. Verwenden Sie die Preview-Methode nicht im Produktionscode, da sie die Leistung erheblich beeinträchtigt.Do not use the Preview method in production code, as it significantly degrades performance.

ModellbereitstellungModel Deployment

In realen Anwendungen sind Ihr Modelltrainings- und Auswertungscode von Ihrer Vorhersage getrennt.In real-life applications, your model training and evaluation code will be separate from your prediction. Diese beiden Aktivitäten werden in der Tat häufig durch separate Teams ausgeführt.In fact, these two activities are often performed by separate teams. Ihr Modellbereitstellungsteam kann das Modell zur Verwendung in der Vorhersageanwendung speichern.Your model development team can save the model for use in the prediction application.

   mlContext.Model.Save(model, trainingData.Schema,"model.zip");

Nächste SchritteNext steps

  • Erfahren Sie in den Tutorials, wie Sie mit anderen Machine Learning-Aufgaben Anwendungen mit realistischeren Datasets erstellen.Learn how to build applications using different machine learning tasks with more realistic data sets in the tutorials.

  • Informieren Sie sich in den Schrittanleitungen ausführlicher über bestimmte Themen.Learn about specific topics in more depth in the How To Guides.

  • Wenn Sie extrem interessiert sind, können Sie direkt in die API-Referenzdokumentation eintauchen.If you're super keen, you can dive straight into the API Reference documentation.