Vytváření předpovědí pomocí natrénovaného modelu
Naučte se používat natrénovaný model k vytváření předpovědí.
Vytváření datových modelů
Vstupní 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í data
Stejně jako názvy vstupních Features
Label
sloupců má ML.NET výchozí názvy sloupců predikovaných hodnot vytvořených modelem. V závislosti na úkolu se název může lišit.
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
definován atributem ColumnName
vlastnosti PredictedPrice
.
class HousingPrediction
{
[ColumnName("Score")]
public float PredictedPrice { get; set; }
}
Nastavení kanálu předpovědi
Ať už vytváříte jednu nebo dávkovou předpověď, musí se kanál předpovědi načíst do aplikace. Tento kanál obsahuje transformace předběžného zpracování dat i natrénovaný model. Následující fragment kódu načte kanál předpovědi ze souboru s názvem 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ěď
Pokud chcete vytvořit jednu předpověď, vytvořte PredictionEngine
pomocí načteného kanálu předpovědi.
// Create PredictionEngines
PredictionEngine<HousingData, HousingPrediction> predictionEngine = mlContext.Model.CreatePredictionEngine<HousingData, HousingPrediction>(predictionPipeline);
Pak použijte metodu Predict
a předejte vstupní data jako parametr. Všimněte si, že použití Predict
metody nevyžaduje vstup jako IDataView
). Je to proto, že pohodlně interně interně zvládá manipulaci se vstupním datovým typem, abyste mohli předat objekt vstupního datového typu. Vzhledem k tomu, že CurrentPrice
se jedná o cíl nebo popisek, který se pokoušíte předpovědět pomocí nových dat, předpokládá se, že v tuto chvíli neexistuje žádná hodnota.
// 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 Score
vlastnosti objektu prediction
, měli byste získat hodnotu podobnou 150079
.
Tip
PredictionEngine
není bezpečný pro přístup z více vláken. Kromě toho musíte vytvořit instanci všude, kde je potřeba v aplikaci. S rostoucím růstem aplikace se tento proces může stát nespravovatelným. Pro zvýšení výkonu a bezpečnosti vláken použijte kombinaci injektáže závislostí a služby PredictionEnginePool , která vytváří ObjectPool
PredictionEngine
objekty pro použití v celé aplikaci.
Příklady použití služby PredictionEnginePool najdete v tématu Nasazení modelu do webového rozhraní API a nasazení modelu do azure Functions.
Další informace najdete v části injektáž závislostí v ASP.NET Core .
Více predikcí (IDataView)
Vzhledem k následujícím datům je načtěte do objektu IDataView
. V tomto případě je název IDataView
inputData
. Vzhledem k tomu CurrentPrice
, že se jedná o cíl nebo popisek, který se pokoušíte předpovědět pomocí nových dat, předpokládá se, že v tuto chvíli neexistuje žádná hodnota.
// 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
k použití transformací dat a generování předpovědí.
// Predicted Data
IDataView predictions = predictionPipeline.Transform(inputData);
Pomocí metody zkontrolujte predikované hodnoty GetColumn
.
// Get Predictions
float[] scoreColumn = predictions.GetColumn<float>("Score").ToArray();
Předpovězené hodnoty ve sloupci skóre by měly vypadat takto:
Pozorování | Predikce |
---|---|
0 | 144638.2 |
2 | 150079.4 |
3 | 107789.8 |
Více predikcí (PredictionEnginePool)
Pokud chcete vytvořit více předpovědí pomocí PredictionEnginePool, můžete vzít IEnumerable
obsahující více instancí vstupu modelu. Například IEnumerable<HousingInput>
a použít metodu Predict
pro každý prvek pomocí LINQ Select
metody.
V této ukázce kódu se předpokládá, že máte název predictionEnginePool
PredictionEnginePool a volána IEnumerable<HousingData>
housingData
.
IEnumerable<HousingPrediction> predictions = housingData.Select(input => predictionEnginePool.Predict(input));
Výsledkem je IEnumerable
obsahující instance vašich předpovědí. V tomto případě by to bylo IEnumerable<HousingPrediction>
.