Treffen von Vorhersagen mit einem trainierten ModellMake predictions with a trained model

Erfahren Sie, wie Sie ein trainiertes Modell verwenden, um Vorhersagen zu treffenLearn how to use a trained model to make predictions

Erstellen von DatenmodellenCreate data models

EingabedatenInput data

public class HousingData
{
    [LoadColumn(0)]
    public float Size { get; set; }

    [LoadColumn(1, 3)]
    [VectorType(3)]
    public float[] HistoricalPrices { get; set; }

    [LoadColumn(4)]
    [ColumnName("Label")]
    public float CurrentPrice { get; set; }
}

AusgabedatenOutput data

Für die vorhergesagten Wertspalten, die von einem Modell erstellt werden, hat ML.NET Standardnamen wie die Eingabespaltenamen Features und Label.Like the Features and Label input column names, ML.NET has default names for the predicted value columns produced by a model. Abhängig von der Aufgabe kann der Name abweichen.Depending on the task the name may differ.

Da der in diesem Beispiel verwendete Algorithmus ein linearer Regressionsalgorithmus ist, lautet der Standardname der Ausgabespalte Score und wird durch das ColumnName-Attribut für die PredictedPrice-Eigenschaft definiert.Because the algorithm used in this sample is a linear regression algorithm, the default name of the output column is Score which is defined by the ColumnName attribute on the PredictedPrice property.

class HousingPrediction
{
    [ColumnName("Score")]
    public float PredictedPrice { get; set; }
}

Einrichten einer VorhersagepipelineSet up a prediction pipeline

Die Vorhersagepipeline muss sowohl bei einer einzelnen als auch Batchvorhersage in die Anwendung geladen werden.Whether making a single or batch prediction, the prediction pipeline needs to be loaded into the application. Diese Pipeline enthält sowohl die Vorverarbeitungs-Datentransformationen als auch das trainierte Modell.This pipeline contains both the data pre-processing transformations as well as the trained model. Der folgende Codeausschnitt lädt die Vorhersagepipeline aus einer Datei namens model.zip.The code snippet below loads the prediction pipeline from a file named model.zip.

//Create MLContext
MLContext mlContext = new MLContext();

// Load Trained Model
DataViewSchema predictionPipelineSchema;
ITransformer predictionPipeline = mlContext.Model.Load("model.zip", out predictionPipelineSchema);

Einzelne VorhersageSingle prediction

Um eine einzelne Vorhersage zu machen, erstellen Sie eine PredictionEngine mithilfe der geladenen Vorhersagepipeline.To make a single prediction, create a PredictionEngine using the loaded prediction pipeline.

// Create PredictionEngines
PredictionEngine<HousingData, HousingPrediction> predictionEngine = mlContext.Model.CreatePredictionEngine<HousingData, HousingPrediction>(predictionPipeline);

Verwenden Sie dann die Predict-Methode, und übergeben Sie Ihre Eingabedaten als Parameter.Then, use the Predict method and pass in your input data as a parameter. Beachten Sie, dass die Verwendung der Predict-Methode nicht voraussetzt, dass die Eingabe eine IDataView ist.Notice that using the Predict method does not require the input to be an IDataView). Der Grund ist, dass sie die Bearbeitung des Eingabedatentyps einfach internalisiert, sodass Sie ein Objekt des Eingabedatentyps übergeben können.This is because it conveniently internalizes the input data type manipulation so you can pass in an object of the input data type. Da darüber hinaus CurrentPrice das Ziel oder Label ist, das Sie mit den neuen Daten vorhersagen möchten, wird vorausgesetzt, dass zurzeit kein Wert dafür vorhanden ist.Additionally, since CurrentPrice is the target or label you're trying to predict using new data, it's assumed there is no value for it at the moment.

// Input Data
HousingData inputData = new HousingData
{
    Size = 900f,
    HistoricalPrices = new float[] { 155000f, 190000f, 220000f }
};

// Get Prediction
HousingPrediction prediction = predictionEngine.Predict(inputData);

Wenn Sie auf die Score-Eigenschaft des prediction-Objekts zugreifen, sollten Sie einen Wert ähnlich wie 150079 erhalten.If you access the Score property of the prediction object, you should get a value similar to 150079.

Mehrere VorhersagenMultiple predictions

Laden Sie die folgenden Daten in eine IDataView.Given the following data, load it into an IDataView. In diesem Fall ist inputData der Name von IDataView.In this case, the name of the IDataView is inputData. Da CurrentPrice das Ziel oder Label ist, das Sie mit den neuen Daten vorhersagen möchten, wird vorausgesetzt, dass zurzeit kein Wert dafür vorhanden ist.Because CurrentPrice is the target or label you're trying to predict using new data, it's assumed there is no value for it at the moment.

// Actual data
HousingData[] housingData = new HousingData[]
{
    new HousingData
    {
        Size = 850f,
        HistoricalPrices = new float[] { 150000f, 175000f, 210000f }
    },
    new HousingData
    {
        Size = 900f,
        HistoricalPrices = new float[] { 155000f, 190000f, 220000f }
    },
    new HousingData
    {
        Size = 550f,
        HistoricalPrices = new float[] { 99000f, 98000f, 130000f }
    }
};

Verwenden Sie dann die Transform-Methode zum Anwenden der Datentransformationen und Generieren von Vorhersagen.Then, use the Transform method to apply the data transformations and generate predictions.

// Predicted Data
IDataView predictions = predictionPipeline.Transform(inputData);

Überprüfen Sie die vorhergesagten Werte mit der GetColumn-Methode.Inspect the predicted values by using the GetColumn method.

// Get Predictions
float[] scoreColumn = predictions.GetColumn<float>("Score").ToArray();

Die vorhergesagten Werte in der Bewertungsspalte sollten wie folgt aussehen:The predicted values in the score column should look like the following:

BeobachtungObservation VorhersagePrediction
11 144638.2144638.2
22 150079.4150079.4
33 107789.8107789.8