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 Features
Label
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.zip
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 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 Score
prediction
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 ObjectPool
PredictionEngine
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>
.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: