Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megtudhatja, hogyan használhat betanított modelleket előrejelzések készítésére.
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 Features és a Label bemeneti oszlopnevekhez hasonlóan az ML.NET alapértelmezett neveket rendel a modell által létrehozott előrejelzett értékoszlopokhoz. A nevek a tevékenységtől függően eltérhetnek.
Mivel a mintában használt algoritmus lineáris regressziós algoritmus, a kimeneti oszlop alapértelmezett neve Score, amelyet a PredictedPrice tulajdonság ColumnName attribútuma határoz meg.
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 model.zipnevű fá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 készítéséhez hozzon létre egy PredictionEngine-t a betöltött előrejelzési folyamat segítségével.
// Create PredictionEngines
PredictionEngine<HousingData, HousingPrediction> predictionEngine = mlContext.Model.CreatePredictionEngine<HousingData, HousingPrediction>(predictionPipeline);
Ezután használja a Predict metódust, és adja meg paraméterként a bemeneti adatokat. Figyelje meg, hogy a Predict metódus használatához nem szükséges, hogy a bemenet IDataViewlegyen. Ennek az az oka, hogy kényelmesen internalizálja a bemeneti adattípus-kezelést, hogy a bemeneti adattípus egy objektumát átadhassa. Emellett mivel CurrentPrice az a cél vagy címke, amelyet új adatokkal szeretne előrejelezni, feltételezzük, hogy jelenleg nincs értéke.
// 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 a prediction objektum Score tulajdonságához, a 150079értékhez hasonló értéket kell kapnia.
Borravaló
PredictionEngine nem szálbiztos. Emellett az alkalmazásban mindenhol létre kell hoznia egy példányt, ahol szükség van rá. 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 PredictionEngine objektumok ObjectPool hoz létre az alkalmazás teljes területén való használatra.
A PredictionEnginePool szolgáltatás használatának példáira, mint például: modell üzembe helyezése webes API-ra vagy modell üzembe helyezése az Azure Functions szolgáltatásba.
További információért lásd: Függőséginjektálás az ASP.NET Core-ban.
Több előrejelzés (IDataView)
A következő adatok alapján töltse be az adatokat IDataView-ba. Ebben az esetben a IDataView neve 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ék.
// 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 Transform metódust az adatátalakítások alkalmazásához és előrejelzések létrehozásához.
// Predicted Data
IDataView predictions = predictionPipeline.Transform(inputData);
A GetColumn metódussal vizsgálja meg az előrejelzett értékeket.
// Get Predictions
float[] scoreColumn = predictions.GetColumn<float>("Score").ToArray();
A pontszámoszlop előrejelzett értékeinek a következő értékekhez kell hasonlítania:
| Megfigyelés | Jóslás |
|---|---|
| 1 | 144638.2 |
| 2 | 150079.4 |
| 3 | 107789.8 |
Több előrejelzés (PredictionEnginePool)
Ha több előrejelzést szeretne készíteni PredictionEnginePoolhasználatával, a modell bemenetének több példányát tartalmazó IEnumerable is készíthet. Vegyünk például egy IEnumerable<HousingInput>, és alkalmazzuk a Predict metódust az egyes elemekre a LINQ Select metódus használatával.
Ez a kódminta feltételezi, hogy van egy PredictionEnginePool nevű predictionEnginePool, és egy housingDatanevű IEnumerable<HousingData>.
IEnumerable<HousingPrediction> predictions = housingData.Select(input => predictionEnginePool.Predict(input));
Az eredmény egy IEnumerable, amely tartalmazza a jóslatainak példányait. Ebben az esetben IEnumerable<HousingPrediction>lenne.