Modeli eğitme ve değerlendirme
ML.NET ile makine öğrenmesi modelleri oluşturmayı, ölçümleri toplamayı ve performansı ölçmeyi öğrenin. Bu örnek bir regresyon modelini eğitse de, kavramlar diğer algoritmaların çoğu boyunca geçerlidir.
Eğitim ve test için verileri bölme
Makine öğrenmesi modelinin amacı, eğitim verileri içindeki desenleri belirlemektir. Bu desenler, yeni verileri kullanarak tahminlerde bulunmak için kullanılır.
Veriler gibi HousingData
bir sınıf tarafından modellenebilir.
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; }
}
bir içine IDataView
yüklenen aşağıdaki veriler göz önünde bulundurulduğunda.
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
Verileri eğitmek ve test kümelerine bölmek için yöntemini kullanın. Sonuç, biri tren kümesi, diğeri de test kümesi için olmak üzere iki IDataView
üye içeren bir TrainTestData
nesne olacaktır. Veri bölme yüzdesi parametresi tarafından testFraction
belirlenir. Aşağıdaki kod parçacığı, test kümesi için özgün verilerin yüzde 20'sini tutuyor.
DataOperationsCatalog.TrainTestData dataSplit = mlContext.Data.TrainTestSplit(data, testFraction: 0.2);
IDataView trainData = dataSplit.TrainSet;
IDataView testData = dataSplit.TestSet;
Verileri hazırlama
Bir makine öğrenmesi modelini eğitmeden önce verilerin önceden işlenmesi gerekir. Veri hazırlama hakkında daha fazla bilgi için veri hazırlama nasıl yapılır makalesinde ve makalesinde transforms page
bulunabilir.
ML.NET algoritmaların giriş sütunu türlerinde kısıtlamaları vardır. Ayrıca, hiçbir değer belirtilmediğinde giriş ve çıkış sütun adları için varsayılan değerler kullanılır.
Beklenen sütun türleriyle çalışma
ML.NET içindeki makine öğrenmesi algoritmaları, giriş olarak bilinen boyutta bir float vektörünün olmasını bekler. VectorType
Tüm veriler zaten sayısal biçimdeyse ve birlikte işlenmek üzere tasarlandığında (görüntü pikselleri gibi) özniteliğini veri modelinize uygulayın.
Verilerin tümü sayısal değilse ve sütunların her birine ayrı ayrı farklı veri dönüştürmeleri uygulamak istiyorsanız, tüm sütunlar işlendikten sonra tek tek sütunların tümünü yeni bir sütuna çıkış olan tek bir özellik vektörünün içinde birleştirmek için yöntemini kullanın Concatenate
.
Aşağıdaki kod parçacığı, ve HistoricalPrices
sütunlarını Size
adlı Features
yeni bir sütuna çıkış olan tek bir özellik vektörlerinde birleştirir. Ölçekler farklı olduğundan, NormalizeMinMax
verileri normalleştirmek için Features
sütuna uygulanır.
// 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);
Varsayılan sütun adlarıyla çalışma
ML.NET algoritmaları, belirtilmezken varsayılan sütun adlarını kullanır. Tüm eğitmenlerin algoritma girişleri için adlı featureColumnName
bir parametresi vardır ve uygun olduğunda da adlı labelColumnName
beklenen değer için bir parametresi vardır. Varsayılan olarak bu değerler sırasıyla ve Label
şeklindedirFeatures
.
adlı yeni bir sütun Features
oluşturmak için ön işleme sırasında yöntemini kullanarakConcatenate
, önceden işlenmiş IDataView
içinde zaten mevcut olduğundan algoritmanın parametrelerinde özellik sütun adını belirtmeye gerek yoktur. Etiket sütunu olurCurrentPrice
, ancak öznitelik veri modelinde kullanıldığından ColumnName
ML.NET, parametreyi makine öğrenmesi algoritması tahmin aracına Label
sağlama labelColumnName
gereksinimini ortadan kaldıran sütunu yeniden adlandırırCurrentPrice
.
Varsayılan sütun adlarını kullanmak istemiyorsanız, sonraki kod parçacığında gösterildiği gibi makine öğrenmesi algoritması tahmin aracısını tanımlarken özellik adlarını ve etiket sütunlarını parametre olarak geçirin:
var UserDefinedColumnSdcaEstimator = mlContext.Regression.Trainers.Sdca(labelColumnName: "MyLabelColumnName", featureColumnName: "MyFeatureColumnName");
Verileri önbelleğe alma
Varsayılan olarak, veriler işlendiğinde, gevşek bir şekilde yüklenir veya akış yapılır, bu da eğitmenlerin diskten veri yükleyebileceği ve eğitim sırasında birden çok kez yineleyebilecekleri anlamına gelir. Bu nedenle önbelleğe alma, diskten veri yükleme sayısını azaltmak için belleğe sığan veri kümeleri için önerilir. Önbelleğe Alma kullanılarak AppendCacheCheckpoint
bir EstimatorChain
parçası olarak yapılır.
İşlem hattındaki herhangi bir eğitmenden önce kullanılması AppendCacheCheckpoint
önerilir.
Aşağıdakini EstimatorChain
kullanarak, eğitmenin StochasticDualCoordinateAscent
daha sonra kullanması için önceki tahmin edicilerin sonuçlarını önbelleğe almadan önce ekleyinAppendCacheCheckpoint
.
// 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());
Makine öğrenmesi modelini eğitin
Veriler önceden işlendikten sonra, makine öğrenmesi Fit
modelini regresyon algoritmasıyla StochasticDualCoordinateAscent
eğitmek için yöntemini kullanın.
// Define StochasticDualCoordinateAscent regression algorithm estimator
var sdcaEstimator = mlContext.Regression.Trainers.Sdca();
// Build machine learning model
var trainedModel = sdcaEstimator.Fit(transformedTrainingData);
Model parametrelerini ayıklama
Model eğitildikten sonra, inceleme veya yeniden eğitme için öğrenilenleri ModelParameters
ayıklayın. , LinearRegressionModelParameters
eğitilen modelin sapma ve öğrenilen katsayılarını veya ağırlıklarını sağlar.
var trainedModelParameters = trainedModel.Model as LinearRegressionModelParameters;
Not
Diğer modellerin görevlerine özgü parametreleri vardır. Örneğin, K-Means algoritması verileri centroids temelinde kümeye yerleştirir ve KMeansModelParameters
bu öğrenilen centroid'leri depolayan bir özellik içerir. Daha fazla bilgi edinmek için API Belgeleri'ni Microsoft.ML.Trainers
ziyaret edin ve adında sınıflar ModelParameters
bulun.
Model kalitesini değerlendirme
En iyi performansa sahip modeli seçmeye yardımcı olmak için test verilerinde performansını değerlendirmek önemlidir. Eğitilen modelin Evaluate
çeşitli ölçümlerini ölçmek için yöntemini kullanın.
Not
yöntemi, Evaluate
hangi makine öğrenmesi görevinin gerçekleştirildiğine bağlı olarak farklı ölçümler üretir. Daha fazla ayrıntı için API Belgeleri'ni Microsoft.ML.Data
ziyaret edin ve adında sınıflar Metrics
bulun.
// 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;
Önceki kod örneğinde:
- Test veri kümesi, önceden tanımlanmış veri hazırlama dönüşümleri kullanılarak önceden işlenir.
- Eğitilen makine öğrenmesi modeli, test verileriyle ilgili tahminlerde bulunmak için kullanılır.
- yönteminde
Evaluate
, test veri kümesininCurrentPrice
sütunundaki değerler, regresyon modelinin ölçümlerini hesaplamak için yeni çıktı tahminlerinin sütunuyla karşılaştırılırScore
ve bunlardan biri R-Squared değişkeninderSquared
depolanır.
Not
Bu küçük örnekte, verilerin sınırlı boyutu nedeniyle R-Squared değeri 0-1 aralığında olmayan bir sayıdır. Gerçek dünya senaryosunda 0 ile 1 arasında bir değer görmeniz gerekir.
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