Előrejelzések készítése betanított modellel

Ismerje meg, hogyan használhat betanított modellt előrejelzések készítéséhez

Adatmodellek létrehozása

Bemeneti adatok

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; }
}

Kimeneti adatok

A bemeneti és a FeaturesLabel bemeneti oszlopnevekhez hasonlóan a ML.NET alapértelmezett nevei vannak a modell által előállított előrejelzett értékoszlopoknak. A tevékenységtől függően a név eltérhet.

Mivel a mintában használt algoritmus lineáris regressziós algoritmus, a kimeneti oszlop alapértelmezett neve a Score tulajdonság attribútuma PredictedPrice által ColumnName meghatározott.

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

Előrejelzési folyamat beállítása

Akár egyetlen, akár kötegelt előrejelzést készít, az előrejelzési folyamatot be kell tölteni az alkalmazásba. Ez a folyamat az adatelőfeldolgozási átalakításokat és a betanított modellt is tartalmazza. Az alábbi kódrészlet betölti az előrejelzési folyamatot egy nevesített model.zipfájlból.

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

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

Egyetlen előrejelzés

Egyetlen előrejelzés létrehozásához hozzon létre egy PredictionEngine betöltéses előrejelzési folyamatot.

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

Ezután használja a metódust Predict , és adja meg a bemeneti adatokat paraméterként. Figyelje meg, hogy a Predict metódus használata nem igényli a bemenetet IDataView. Ennek az az oka, hogy kényelmesen internalizálja a bemeneti adattípus-kezelést, hogy átadhassa a bemeneti adattípus egy objektumát. Emellett mivel CurrentPrice a cél vagy címke, amelyet új adatok használatával szeretne előrejelezni, feltételezzük, hogy jelenleg nincs rá érték.

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

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

Ha hozzáfér az Scoreprediction objektum tulajdonságához, a következőhöz hasonló értéket kell kapnia 150079.

Tipp.

PredictionEngine nincs szálbiztos. Emellett mindenhol létre kell hoznia egy példányt, amire szükség van az alkalmazásban. Az alkalmazás növekedésével ez a folyamat kezelhetetlenné válhat. A jobb teljesítmény és a szálbiztonság érdekében használja a függőséginjektálás és a PredictionEnginePool szolgáltatás kombinációját, amely objektumokat hoz létre ObjectPoolPredictionEngine az alkalmazás teljes területén való használatra.

A PredictionEnginePool szolgáltatás használatára vonatkozó példákért tekintse meg a modellek webes API-ban való üzembe helyezését és a modell Azure Functionsben való üzembe helyezését.

További információ: függőséginjektálás a ASP.NET Core-ban .

Több előrejelzés (IDataView)

Az alábbi adatok alapján töltse be egy IDataView. Ebben az esetben a név az IDataView .inputData Mivel CurrentPrice az a cél vagy címke, amelyet új adatok használatával szeretne előrejelezni, feltételezzük, hogy jelenleg nincs értéke.

// 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 }
    }
};

Ezután használja a módszert az Transform adatátalakítások alkalmazására és előrejelzések létrehozására.

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

A metódus használatával vizsgálja meg az GetColumn előrejelzett értékeket.

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

A pontszámoszlop előrejelzett értékeinek a következőképpen kell kinéznie:

Megfigyelés előrejelzés
0 144638.2
2 150079.4
3 107789.8

Több előrejelzés (PredictionEnginePool)

Ha több előrejelzést szeretne készíteni a PredictionEnginePool használatával, IEnumerable a modell bemenetének több példányát is felhasználhatja. Például egy IEnumerable<HousingInput> és alkalmazza a metódust az egyes elemekre a Predict LINQ metódusával Select .

Ez a kódminta feltételezi, hogy egy PredictionEnginePool nevű predictionEnginePool és egy IEnumerable<HousingData> úgynevezett housingData.

IEnumerable<HousingPrediction> predictions = housingData.Select(input => predictionEnginePool.Predict(input));

Az eredmény az előrejelzések egy IEnumerable példányát tartalmazza. Ez ebben az esetben IEnumerable<HousingPrediction>.