Çapraz doğrulama kullanarak makine öğrenmesi modelini eğitin
ML.NET'da daha güçlü makine öğrenmesi modelleri eğitmek için çapraz doğrulamayı kullanmayı öğrenin.
Çapraz doğrulama, verileri birkaç bölüme bölen ve bu bölümlerde birden çok algoritma eğiten bir eğitim ve model değerlendirme tekniğidir. Bu teknik, eğitim sürecindeki verileri tutarak modelin sağlamlığını artırır. Veri kısıtlanmış ortamlarda, görünmeyen gözlemlerde performansı artırmanın yanı sıra, daha küçük bir veri kümesine sahip modelleri eğitmek için etkili bir araç olabilir.
Veri ve veri modeli
Aşağıdaki biçime sahip bir dosyadan verilen veriler:
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
Veriler gibi HousingData
bir sınıf tarafından modellenebilir ve içine IDataView
yüklenebilir.
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; }
}
Verileri hazırlama
Makine öğrenmesi modelini oluşturmak için kullanmadan önce verileri önceden işleyin. Bu örnekte ve HistoricalPrices
sütunları, Size
yöntemi kullanılarak adlı Features
yeni bir sütuna çıkış olan tek bir özellik vektörlerinde Concatenate
birleştirilir. Sütunları birleştirmek, verileri ML.NET algoritmalar tarafından beklenen biçime getirmenin yanı sıra, işlemi ayrı sütunların her biri yerine birleştirilmiş sütun için bir kez uygulayarak işlem hattındaki sonraki işlemleri iyileştirir.
Sütunlar tek bir vektörde birleştirildikten sonra, NormalizeMinMax
0-1 arasında aynı aralıkta ve HistoricalPrices
almak Size
için sütuna uygulanırFeatures
.
// 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);
Çapraz doğrulama ile modeli eğitin
Veriler önceden işlendikten sonra modeli eğitmek gerekir. İlk olarak, gerçekleştirilecek makine öğrenmesi göreviyle en yakından uyumlu algoritmayı seçin. Tahmin edilen değer sayısal olarak sürekli bir değer olduğundan, görev regresyondur. ML.NET tarafından uygulanan regresyon algoritmalarından biri algoritmadır StochasticDualCoordinateAscentCoordinator
. Modeli çapraz doğrulama ile eğitmek için yöntemini kullanın CrossValidate
.
Not
Bu örnek doğrusal regresyon modeli kullansa da CrossValidate, Anomali Algılama dışında ML.NET'daki diğer tüm makine öğrenmesi görevleri için geçerlidir.
// 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şağıdaki işlemleri gerçekleştirir:
- Verileri parametresinde belirtilen değere eşit sayıda bölüme
numberOfFolds
ayırır. Her bölümün sonucu birTrainTestData
nesnedir. - Bir model, eğitim veri kümesinde belirtilen makine öğrenmesi algoritması tahmin aracı kullanılarak bölümlerin her birinde eğitilir.
- Her modelin performansı test veri kümesindeki
Evaluate
yöntemi kullanılarak değerlendirilir. - Model, ölçümleriyle birlikte modellerin her biri için döndürülür.
içinde cvResults
depolanan sonuç bir nesne koleksiyonudur CrossValidationResult
. Bu nesne, eğitilen modelin yanı sıra sıra ve Metrics
özellikleri için Model
erişilebilir olan ölçümleri içerir. Bu örnekte özelliği Model
türünde ITransformer
ve Metrics
özelliği türündedir RegressionMetrics
.
Modeli değerlendirme
Farklı eğitilen modellerin ölçümlerine tek tek CrossValidationResult
nesnenin Metrics
özelliği aracılığıyla erişilebilir. Bu durumda R-Squared ölçümüne erişilir ve değişkeninde rSquared
depolanır.
IEnumerable<double> rSquared =
cvResults
.Select(fold => fold.Metrics.RSquared);
Değişkenin rSquared
içeriğini incelerseniz, çıkış 0-1 arasında beş değer olmalıdır ve 1'e yakın olması en iyi anlama gelir. R-Squared gibi ölçümleri kullanarak en iyiden en kötü performansa kadar modelleri seçin. Ardından tahminde bulunmak veya ek işlemler gerçekleştirmek için en iyi modeli seçin.
// Select all models
ITransformer[] models =
cvResults
.OrderByDescending(fold => fold.Metrics.RSquared)
.Select(fold => fold.Model)
.ToArray();
// Get Top Model
ITransformer topModel = models[0];
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin