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 taníthat be robusztusabb gépi tanulási modelleket ML.NET keresztérvényesítés használatával.
A keresztérvényesítés egy betanítási és modellértékelési technika, amely több partícióra osztja az adatokat, és több algoritmust tanít be ezeken a partíciókon. Ez a technika a betanítási folyamatból származó adatok visszatartásával javítja a modell robusztusságát. A nem látott megfigyelések teljesítményének javítása mellett az adatkorlátozott környezetekben hatékony eszköz lehet a kisebb adatkészlettel rendelkező modellek betanítására.
Az adat- és adatmodell
Megadott adatok a következő formátumú fájlból:
Size (Sq. ft.), HistoricalPrice1 ($), HistoricalPrice2 ($), HistoricalPrice3 ($), Current Price ($)
620.00, 148330.32, 140913.81, 136686.39, 146105.37
550.00, 557033.46, 529181.78, 513306.33, 548677.95
1127.00, 479320.99, 455354.94, 441694.30, 472131.18
1120.00, 47504.98, 45129.73, 43775.84, 46792.41
Az adatokat egy osztályhoz hasonló HousingData osztály modellezheti, és betöltheti egy IDataViewadott osztályba.
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; }
}
Az adatok előkészítése
Az adatok előzetes feldolgozása a gépi tanulási modell létrehozása előtt. Ebben a mintában az Size oszlopok egyetlen HistoricalPrices jellemzővektorba vannak kombinálva, amely egy új, metódussal nevezett Features oszlop kimenete Concatenate . Amellett, hogy az adatokat az ML.NET algoritmusok által elvárt formátumba helyezi, az oszlopok összefűzésével optimalizálható a folyamat későbbi műveletei, ha a műveletet egyszer alkalmazza az összefűzött oszlopra a különálló oszlopok helyett.
Miután az oszlopokat egyetlen vektorba egyesítették, NormalizeMinMax a rendszer az oszlopra alkalmazza a Features 0 és 1 közötti tartományba való beolvasáshoz Size és HistoricalPrices ugyanabban a tartományban.
// Define data prep estimator
IEstimator<ITransformer> dataPrepEstimator =
mlContext.Transforms.Concatenate("Features", new string[] { "Size", "HistoricalPrices" })
.Append(mlContext.Transforms.NormalizeMinMax("Features"));
// Create data prep transformer
ITransformer dataPrepTransformer = dataPrepEstimator.Fit(data);
// Transform data
IDataView transformedData = dataPrepTransformer.Transform(data);
Modell betanítása keresztérvényesítéssel
Az adatok előzetes feldolgozása után ideje betaníteni a modellt. Először válassza ki azt az algoritmust, amely a leginkább igazodik az elvégzendő gépi tanulási feladathoz. Mivel az előrejelzett érték numerikusan folyamatos érték, a tevékenység regresszió. Az ML.NET által implementált regressziós algoritmusok egyike az StochasticDualCoordinateAscentCoordinator algoritmus. Ha keresztérvényesítéssel szeretné betaníteni a modellt, használja a metódust CrossValidate .
Feljegyzés
Bár ez a minta lineáris regressziós modellt használ, a CrossValidate az Anomáliadetektálás kivételével minden más gépi tanulási feladatra alkalmazható ML.NET.
// Define StochasticDualCoordinateAscent algorithm estimator
IEstimator<ITransformer> sdcaEstimator = mlContext.Regression.Trainers.Sdca();
// Apply 5-fold cross validation
var cvResults = mlContext.Regression.CrossValidate(transformedData, sdcaEstimator, numberOfFolds: 5);
CrossValidate A következő műveleteket hajtja végre:
- Az adatokat több partícióra particionálja, amely megegyezik a
numberOfFoldsparaméterben megadott értékkel. Az egyes partíciók eredménye egyTrainTestDataobjektum. - A rendszer betanított egy modellt az egyes partíciókra a betanítási adathalmaz megadott gépi tanulási algoritmusát becslő használatával.
- A rendszer az egyes modellek teljesítményét a
Evaluatetesztadatkészlet metódusával értékeli ki. - A modell és a metrikái az egyes modellekhez lesznek visszaadva.
A tárolt cvResults eredmény objektumok gyűjteménye CrossValidationResult . Ez az objektum tartalmazza a betanított modellt, valamint azokat a metrikákat, amelyek egyaránt hozzáférhetők, és Metrics amelyek a Model tulajdonságokat is alkotják. Ebben a mintában a Model tulajdonság típus ITransformer , a Metrics tulajdonság pedig típus RegressionMetrics.
A modell értékelése
A különböző betanított modellek metrikái az Metrics egyes CrossValidationResult objektumok tulajdonságán keresztül érhetők el. Ebben az esetben az R-Squared metrika a változóban rSquaredérhető el és tárolható.
IEnumerable<double> rSquared =
cvResults
.Select(fold => fold.Metrics.RSquared);
Ha megvizsgálja a rSquared változó tartalmát, a kimenetnek öt, 0 és 1 közötti értéknek kell lennie, ahol az 1-hez közelebbi érték a legjobb. Az R-Squaredhez hasonló metrikák használatával válassza ki a legjobbtól a legrosszabb teljesítményt nyújtó modellekig. Ezután válassza ki a felső modellt előrejelzések készítéséhez vagy további műveletek végrehajtásához.
// Select all models
ITransformer[] models =
cvResults
.OrderByDescending(fold => fold.Metrics.RSquared)
.Select(fold => fold.Model)
.ToArray();
// Get Top Model
ITransformer topModel = models[0];