Trénování a vyhodnocení modeluTrain and evaluate a model

Naučte se sestavovat modely strojového učení, shromažďovat metriky a měřit výkon pomocí ML.NET.Learn how to build machine learning models, collect metrics, and measure performance with ML.NET. I když tato ukázka nasazuje regresní model, koncepce se použijí v rámci většiny ostatních algoritmů.Although this sample trains a regression model, the concepts are applicable throughout a majority of the other algorithms.

Rozdělit data pro školení a testováníSplit data for training and testing

Cílem modelu strojového učení je identifikovat vzory v rámci školicích dat.The goal of a machine learning model is to identify patterns within training data. Tyto vzory slouží k vytváření předpovědi pomocí nových dat.These patterns are used to make predictions using new data.

Data je možné modelovat podle třídy, jako je HousingData.The data can be modeled by a class like HousingData.

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

S ohledem na následující data, která jsou načtena do IDataView.Given the following data which is loaded into an IDataView.

HousingData[] housingData = new HousingData[]
{
    new HousingData
    {
        Size = 600f,
        HistoricalPrices = new float[] { 100000f ,125000f ,122000f },
        CurrentPrice = 170000f
    },
    new HousingData
    {
        Size = 1000f,
        HistoricalPrices = new float[] { 200000f, 250000f, 230000f },
        CurrentPrice = 225000f
    },
    new HousingData
    {
        Size = 1000f,
        HistoricalPrices = new float[] { 126000f, 130000f, 200000f },
        CurrentPrice = 195000f
    },
    new HousingData
    {
        Size = 850f,
        HistoricalPrices = new float[] { 150000f,175000f,210000f },
        CurrentPrice = 205000f
    },
    new HousingData
    {
        Size = 900f,
        HistoricalPrices = new float[] { 155000f, 190000f, 220000f },
        CurrentPrice = 210000f
    },
    new HousingData
    {
        Size = 550f,
        HistoricalPrices = new float[] { 99000f, 98000f, 130000f },
        CurrentPrice = 180000f
    }
};

Použijte metodu TrainTestSplit pro rozdělení dat do vlakových a testovacích sad.Use the TrainTestSplit method to split the data into train and test sets. Výsledkem bude TrainTestData objekt, který obsahuje dva členy IDataView , jeden pro sadu vlaků a druhý pro sadu testů.The result will be a TrainTestData object which contains two IDataView members, one for the train set and the other for the test set. Procentuální hodnota rozdělení dat je určena parametrem testFraction.The data split percentage is determined by the testFraction parameter. Níže uvedený fragment kódu vydrží 20% původních dat pro sadu testů.The snippet below is holding out 20 percent of the original data for the test set.

DataOperationsCatalog.TrainTestData dataSplit = mlContext.Data.TrainTestSplit(data, testFraction: 0.2);
IDataView trainData = dataSplit.TrainSet;
IDataView testData = dataSplit.TestSet;

Příprava datPrepare the data

Data musí být před školením modelu Machine Learning předem zpracovaná.The data needs to be pre-processed before training a machine learning model. Další informace o přípravě dat najdete v článku o postupu pro přípravu dat a na transforms page.More information on data preparation can be found on the data prep how-to article as well as the transforms page.

ML.NET algoritmy mají omezení na vstupních typech sloupců.ML.NET algorithms have constraints on input column types. Kromě toho se pro vstupní a výstupní názvy sloupců použijí výchozí hodnoty, pokud nejsou zadány žádné hodnoty.Additionally, default values are used for input and output column names when no values are specified.

Práce s očekávanými typy sloupcůWorking with expected column types

Algoritmy strojového učení v ML.NET očekávají jako vstup plovoucí vektor známé velikosti.The machine learning algorithms in ML.NET expect a float vector of known size as input. Použijte atribut VectorType pro datový model, pokud jsou všechna data již v číselném formátu a mají být zpracována společně (tj. obrazové body).Apply the VectorType attribute to your data model when all of the data is already in numerical format and is intended to be processed together (i.e. image pixels).

Pokud data nejsou všechna číselná a chcete u každého sloupce použít různé transformace dat, použijte metodu Concatenate po zpracování všech sloupců pro zkombinování všech jednotlivých sloupců do jediného vektoru funkce, který je výstupem do nového sloupce.If data is not all numerical and you want to apply different data transformations on each of the columns individually, use the Concatenate method after all of the columns have been processed to combine all of the individual columns into a single feature vector that is output to a new column.

Následující fragment kódu kombinuje Size a HistoricalPrices sloupce do jednoho vektoru funkce, který je výstupem do nového sloupce s názvem Features.The following snippet combines the Size and HistoricalPrices columns into a single feature vector that is output to a new column called Features. Vzhledem k tomu, že existuje rozdíl v měřítku,NormalizeMinMaxpro Features sloupce použít k normalizaci dat NormalizeMinMax .Because there is a difference in scales, NormalizeMinMax is applied to the Features column to normalize the data.

// Define Data Prep Estimator
// 1. Concatenate Size and Historical into a single feature vector output to a new column called Features
// 2. Normalize Features vector
IEstimator<ITransformer> dataPrepEstimator =
    mlContext.Transforms.Concatenate("Features", "Size", "HistoricalPrices")
        .Append(mlContext.Transforms.NormalizeMinMax("Features"));

// Create data prep transformer
ITransformer dataPrepTransformer = dataPrepEstimator.Fit(trainData);

// Apply transforms to training data
IDataView transformedTrainingData = dataPrepTransformer.Transform(trainData);

Práce s názvy výchozích sloupcůWorking with default column names

Algoritmy ML.NET používají výchozí názvy sloupců, pokud nejsou zadané žádné.ML.NET algorithms use default column names when none are specified. Všechny školitele mají parametr s názvem featureColumnName pro vstupy algoritmu a pokud je to možné, mají také parametr pro očekávanou hodnotu s názvem labelColumnName.All trainers have a parameter called featureColumnName for the inputs of the algorithm and when applicable they also have a parameter for the expected value called labelColumnName. Ve výchozím nastavení jsou tyto hodnoty Features a Label v uvedeném pořadí.By default those values are Features and Label respectively.

Pomocí metody Concatenate během předběžného zpracování pro vytvoření nového sloupce s názvem Featuresnení nutné zadávat název sloupce funkce v parametrech algoritmu, protože již existuje v předem zpracovaném IDataView.By using the Concatenate method during pre-processing to create a new column called Features, there is no need to specify the feature column name in the parameters of the algorithm since it already exists in the pre-processed IDataView. Sloupec popisku je CurrentPrice, ale vzhledem k tomu, že se v datovém modelu používá atribut ColumnName , ml.NET přejmenuje sloupec CurrentPrice na Label, který eliminuje nutnost zadat parametr labelColumnName pro Estimator algoritmus Machine Learning.The label column is CurrentPrice, but since the ColumnName attribute is used in the data model, ML.NET renames the CurrentPrice column to Label which removes the need to provide the labelColumnName parameter to the machine learning algorithm estimator.

Pokud nechcete používat výchozí názvy sloupců, předejte při definování Estimator algoritmu pro strojové učení, které ukazuje následující fragment kódu, názvy sloupců funkce a popisku jako parametry:If you don't want to use the default column names, pass in the names of the feature and label columns as parameters when defining the machine learning algorithm estimator as demonstrated by the subsequent snippet:

var UserDefinedColumnSdcaEstimator = mlContext.Regression.Trainers.Sdca(labelColumnName: "MyLabelColumnName", featureColumnName: "MyFeatureColumnName");

Výuka modelu Machine LearningTrain the machine learning model

Jakmile jsou data předem zpracovaná, použijte metodu Fit k výuce modelu Machine learning pomocí StochasticDualCoordinateAscent regresního algoritmu.Once the data is pre-processed, use the Fit method to train the machine learning model with the StochasticDualCoordinateAscent regression algorithm.

// Define StochasticDualCoordinateAscent regression algorithm estimator
var sdcaEstimator = mlContext.Regression.Trainers.Sdca();

// Build machine learning model
var trainedModel = sdcaEstimator.Fit(transformedTrainingData);

Extrahovat parametry modeluExtract model parameters

Po výuce modelu vyextrahujte získanou ModelParameters pro kontrolu nebo opětovné školení.After the model has been trained, extract the learned ModelParameters for inspection or re-training. LinearRegressionModelParameters poskytuje posun a zjištěné koeficienty nebo váhy vyškolených modelů.The LinearRegressionModelParameters provide the bias and learned coefficients or weights of the trained model.

var trainedModelParameters = trainedModel.Model as LinearRegressionModelParameters;

Poznámka

Další modely mají parametry, které jsou specifické pro jejich úkoly.Other models have parameters that are specific to their tasks. Například algoritmus k znamená , že data do clusteru jsou založena na centroids a KMeansModelParameters obsahuje vlastnost, která je uložena se zjištěnými centroids.For example, the K-Means algorithm puts data into cluster based on centroids and the KMeansModelParameters contains a property that stores these learned centroids. Další informace najdete v dokumentaci k rozhraní APIMicrosoft.ML.Trainers a hledejte třídy, které v názvu obsahují ModelParameters.To learn more, visit the Microsoft.ML.Trainers API Documentation and look for classes that contain ModelParameters in their name.

Vyhodnocení kvality modeluEvaluate model quality

Chcete-li si vybrat nejlepší model provádění, je nezbytné vyhodnotit jeho výkon na testovacích datech.To help choose the best performing model, it is essential to evaluate its performance on test data. Použijte metodu Evaluate k měření různých metrik pro vyškolený model.Use the Evaluate method, to measure various metrics for the trained model.

Poznámka

Metoda Evaluate vytváří různé metriky v závislosti na tom, který úkol strojového učení byl proveden.The Evaluate method produces different metrics depending on which machine learning task was performed. Další podrobnosti najdete v dokumentaci k rozhraní APIMicrosoft.ML.Data a hledejte třídy, které v názvu obsahují Metrics.For more details, visit the Microsoft.ML.Data API Documentation and look for classes that contain Metrics in their name.

// Measure trained model performance
// Apply data prep transformer to test data
IDataView transformedTestData = dataPrepTransformer.Transform(testData);

// Use trained model to make inferences on test data
IDataView testDataPredictions = trainedModel.Transform(transformedTestData);

// Extract model metrics and get RSquared
RegressionMetrics trainedModelMetrics = mlContext.Regression.Evaluate(testDataPredictions);
double rSquared = trainedModelMetrics.RSquared;

V předchozím příkladu kódu:In the previous code sample:

  1. Testovací sada dat je předem zpracovaná pomocí transformací přípravných dat, které byly dříve definovány.Test data set is pre-processed using the data preparation transforms previously defined.
  2. K předpovědií testovacích dat se používá školicí model strojového učení.The trained machine learning model is used to make predictions on the test data.
  3. V metodě Evaluate jsou hodnoty ve sloupci CurrentPrice testovacích dat porovnány se sloupcem Score nově výstupního předpovědi pro výpočet metriky pro regresní model, přičemž jedna z nich je v rSquared proměnné uložena pomocí R-čtverce.In the Evaluate method, the values in the CurrentPrice column of the test data set are compared against the Score column of the newly output predictions to calculate the metrics for the regression model, one of which, R-Squared is stored in the rSquared variable.

Poznámka

V tomto malém příkladu je R-kvadrát číslo, které není v rozsahu 0-1, protože je omezená velikost dat.In this small example, the R-Squared is a number not in the range of 0-1 because of the limited size of the data. Ve scénáři reálného světa byste měli očekávat zobrazení hodnoty mezi 0 a 1.In a real-world scenario, you should expect to see a value between 0 and 1.