Melatih dan mengevaluasi model

Pelajari cara membuat model pembelajaran mesin, mengumpulkan metrik, dan mengukur performa dengan ML.NET. Meskipun sampel ini melatih model regresi, konsepnya berlaku di sebagian besar algoritma lainnya.

Memisahkan data untuk pelatihan dan pengujian

Tujuan dari model pembelajaran mesin adalah untuk mengidentifikasi pola dalam data pelatihan. Pola-pola ini digunakan untuk membuat prediksi menggunakan data baru.

Data dapat dimodelkan oleh kelas seperti 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; }
}

Mengingat data berikut yang dimuat ke dalam 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
    }
};

TrainTestSplit Gunakan metode untuk membagi data menjadi kumpulan pelatihan dan pengujian. Hasilnya akan menjadi TrainTestData objek yang berisi dua IDataView anggota, satu untuk rangkaian kereta dan yang lainnya untuk set pengujian. Persentase pemisahan data ditentukan oleh testFraction parameter . Cuplikan di bawah ini menyimpan 20 persen data asli untuk set pengujian.

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

Menyiapkan data

Data perlu diproses sebelumnya sebelum melatih model pembelajaran mesin. Informasi lebih lanjut tentang persiapan data dapat ditemukan pada artikel panduan persiapan data serta transforms page.

ML.NET algoritma memiliki batasan pada jenis kolom input. Selain itu, nilai default digunakan untuk nama kolom input dan output saat tidak ada nilai yang ditentukan.

Bekerja dengan tipe kolom yang diharapkan

Algoritma pembelajaran mesin di ML.NET mengharapkan vektor float dengan ukuran yang diketahui sebagai input. VectorType Terapkan atribut ke model data Anda saat semua data sudah dalam format numerik dan dimaksudkan untuk diproses bersama -sama (yaitu piksel gambar).

Jika data tidak semuanya numerik dan Anda ingin menerapkan transformasi data yang berbeda pada setiap kolom satu per satu, gunakan Concatenate metode setelah semua kolom diproses untuk menggabungkan semua kolom individual ke dalam vektor fitur tunggal yang merupakan output ke kolom baru.

Cuplikan berikut menggabungkan Size kolom dan HistoricalPrices ke dalam vektor fitur tunggal yang merupakan output ke kolom baru yang disebut Features. Karena ada perbedaan dalam skala, NormalizeMinMax diterapkan ke Features kolom untuk menormalkan 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);

Bekerja dengan nama kolom default

ML.NET algoritma menggunakan nama kolom default saat tidak ada yang ditentukan. Semua pelatih memiliki parameter yang dipanggil featureColumnName untuk input algoritma dan jika berlaku, mereka juga memiliki parameter untuk nilai yang diharapkan yang disebut labelColumnName. Secara default nilai-nilai tersebut adalah Features dan Label masing-masing.

Dengan menggunakan Concatenate metode selama pra-pemrosesan untuk membuat kolom baru yang disebut Features, tidak perlu menentukan nama kolom fitur dalam parameter algoritma karena sudah ada di yang telah diproses IDataViewsebelumnya. Kolom label adalah CurrentPrice, tetapi karena ColumnName atribut digunakan dalam model data, ML.NET mengganti nama CurrentPrice kolom Label yang menghapus kebutuhan untuk memberikan labelColumnName parameter ke estimator algoritma pembelajaran mesin.

Jika Anda tidak ingin menggunakan nama kolom default, teruskan nama kolom fitur dan label sebagai parameter saat menentukan estimator algoritma pembelajaran mesin seperti yang ditunjukkan oleh cuplikan berikutnya:

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

Cache data

Secara default, ketika data diproses, data dimuat atau dialirkan dengan malas yang berarti bahwa pelatih dapat memuat data dari disk dan mengulanginya beberapa kali selama pelatihan. Oleh karena itu, penembolokan direkomendasikan untuk himpunan data yang sesuai dengan memori untuk mengurangi berapa kali data dimuat dari disk. Penembolokan dilakukan sebagai bagian EstimatorChain dari dengan menggunakan AppendCacheCheckpoint.

Disarankan untuk digunakan AppendCacheCheckpoint sebelum pelatih mana pun dalam alur.

Menggunakan berikut EstimatorChain, menambahkan AppendCacheCheckpoint sebelum StochasticDualCoordinateAscent pelatih menyimpan hasil estimator sebelumnya untuk digunakan nanti oleh pelatih.

// 1. Concatenate Size and Historical into a single feature vector output to a new column called Features
// 2. Normalize Features vector
// 3. Cache prepared data
// 4. Use Sdca trainer to train the model
IEstimator<ITransformer> dataPrepEstimator =
    mlContext.Transforms.Concatenate("Features", "Size", "HistoricalPrices")
        .Append(mlContext.Transforms.NormalizeMinMax("Features"))
        .AppendCacheCheckpoint(mlContext);
        .Append(mlContext.Regression.Trainers.Sdca());

Melatih model pembelajaran mesin

Setelah data diproses sebelumnya, gunakan Fit metode untuk melatih model pembelajaran mesin dengan StochasticDualCoordinateAscent algoritma regresi.

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

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

Mengekstrak parameter model

Setelah model dilatih, ekstrak yang dipelajari ModelParameters untuk inspeksi atau pelatihan ulang. LinearRegressionModelParameters menyediakan bias dan koefisien yang dipelajari atau bobot model terlatih.

var trainedModelParameters = trainedModel.Model as LinearRegressionModelParameters;

Catatan

Model lain memiliki parameter yang khusus untuk tugasnya. Misalnya, algoritma K-Means menempatkan data ke dalam kluster berdasarkan sentroid dan KMeansModelParameters berisi properti yang menyimpan sentroid yang dipelajari ini. Untuk mempelajari lebih lanjut Microsoft.ML.Trainers , kunjungi Dokumentasi API dan cari kelas yang terkandung ModelParameters dalam namanya.

Mengevaluasi kualitas model

Untuk membantu memilih model berkinerja terbaik, penting untuk mengevaluasi performanya pada data pengujian. Gunakan metode , Evaluate untuk mengukur berbagai metrik untuk model terlatih.

Catatan

Metode ini Evaluate menghasilkan metrik yang berbeda tergantung pada tugas pembelajaran mesin mana yang dilakukan. Untuk detail selengkapnya, kunjungi Microsoft.ML.Data Dokumentasi API dan cari kelas yang terkandung Metrics dalam namanya.

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

Dalam sampel kode sebelumnya:

  1. Himpunan data pengujian telah diproses sebelumnya menggunakan transformasi persiapan data yang ditentukan sebelumnya.
  2. Model pembelajaran mesin terlatih digunakan untuk membuat prediksi pada data pengujian.
  3. Dalam metode , Evaluate nilai dalam CurrentPrice kolom himpunan data pengujian dibandingkan Score dengan kolom prediksi output baru untuk menghitung metrik untuk model regresi, salah satunya, R-Squared disimpan dalam rSquared variabel.

Catatan

Dalam contoh kecil ini, R-Squared adalah angka yang tidak dalam rentang 0-1 karena ukuran data yang terbatas. Dalam skenario dunia nyata, Anda harus mengharapkan untuk melihat nilai antara 0 dan 1.