Vytvoření předpovědi s poučeným modelemMake predictions with a trained model

Naučte se používat trained model k vytváření předpovědiLearn how to use a trained model to make predictions

Vytváření datových modelůCreate data models

Vstupní dataInput 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; }
}

Výstupní dataOutput data

Podobně jako u názvů vstupních sloupců Features a Label má ML.NET výchozí názvy pro předpovězené hodnoty sloupce vytvářené modelem.Like the Features and Label input column names, ML.NET has default names for the predicted value columns produced by a model. V závislosti na úloze se název může lišit.Depending on the task the name may differ.

Vzhledem k tomu, že algoritmus použitý v této ukázce je lineární regresní algoritmus, výchozí název výstupního sloupce je Score, který je definován atributem ColumnName vlastnosti PredictedPrice.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; }
}

Nastavení kanálu předpovědiSet up a prediction pipeline

Bez ohledu na to, jestli se provádí jedna nebo dávková předpověď, je potřeba do aplikace načíst kanál předpovědi.Whether making a single or batch prediction, the prediction pipeline needs to be loaded into the application. Tento kanál obsahuje transformaci předběžného zpracování dat i vyškolený model.This pipeline contains both the data pre-processing transformations as well as the trained model. Fragment kódu níže načte kanál předpovědi ze souboru s názvem 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);

Jedna předpověďSingle prediction

Chcete-li vytvořit jedinou předpověď, vytvořte PredictionEngine pomocí načteného kanálu předpovědi.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);

Pak použijte metodu Predict a předejte vstupní data jako parametr.Then, use the Predict method and pass in your input data as a parameter. Všimněte si, že použití metody Predict nevyžaduje vstup jako IDataView).Notice that using the Predict method does not require the input to be an IDataView). Důvodem je to, že pohodlně internalizes manipulaci s datovým typem vstupu, takže můžete předat objekt vstupního datového typu.This is because it conveniently internalizes the input data type manipulation so you can pass in an object of the input data type. Vzhledem k tomu, že CurrentPrice je cílem nebo návěští, které se pokoušíte odhadnout pomocí nových dat, předpokládáme, že v tuto chvíli není k dispozici žádná hodnota.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);

Pokud přistupujete k vlastnosti Score objektu prediction, měli byste získat hodnotu podobnou 150079.If you access the Score property of the prediction object, you should get a value similar to 150079.

Několik předpovědiMultiple predictions

Když se dostanou následující data, načtou se do IDataView.Given the following data, load it into an IDataView. V tomto případě je název IDataView inputData.In this case, the name of the IDataView is inputData. Vzhledem k tomu, že CurrentPrice je cílem nebo návěští, které se pokoušíte odhadnout pomocí nových dat, předpokládá se, že v tuto chvíli není k dispozici žádná hodnota.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 }
    }
};

Pak použijte metodu Transform pro použití transformace dat a generování předpovědi.Then, use the Transform method to apply the data transformations and generate predictions.

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

Zkontrolujte předpovězené hodnoty pomocí metody GetColumn .Inspect the predicted values by using the GetColumn method.

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

Předpovídané hodnoty ve sloupci skóre by měly vypadat takto:The predicted values in the score column should look like the following:

PříležitostnýObservation PředpovědiPrediction
první1 144638,2144638.2
odst2 150079,4150079.4
33 107789,8107789.8