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 IDataView
sebelumnya. 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:
- Himpunan data pengujian telah diproses sebelumnya menggunakan transformasi persiapan data yang ditentukan sebelumnya.
- Model pembelajaran mesin terlatih digunakan untuk membuat prediksi pada data pengujian.
- Dalam metode ,
Evaluate
nilai dalamCurrentPrice
kolom himpunan data pengujian dibandingkanScore
dengan kolom prediksi output baru untuk menghitung metrik untuk model regresi, salah satunya, R-Squared disimpan dalamrSquared
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.