Eğitilmiş bir modelle tahmin yapma
Tahmin yapmak için eğitilmiş bir modeli kullanmayı öğrenin
Veri modelleri oluşturma
Giriş verileri
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; }
}
Çıktı verileri
ve giriş sütun adları gibi ML.NET de model tarafından üretilen tahmin edilen değer Features Label sütunları için varsayılan adlara sahip olur. Göreve bağlı olarak ad farklı olabilir.
Bu örnekte kullanılan algoritma bir doğrusal regresyon algoritması olduğundan, çıkış sütununu varsayılan adı özelliğinde özniteliği Score ColumnName tarafından PredictedPrice tanımlanır.
class HousingPrediction
{
[ColumnName("Score")]
public float PredictedPrice { get; set; }
}
Tahmin işlem hattı ayarlama
İster tek ister toplu tahmin olsun, tahmin işlem hattının uygulamaya yüklenmiş olması gerekir. Bu işlem hattı hem veri ön işleme dönüşümlerini hem de eğitilen modeli içerir. Aşağıdaki kod parçacığı, adlı bir dosyadan tahmin işlem hattını model.zip yükler.
//Create MLContext
MLContext mlContext = new MLContext();
// Load Trained Model
DataViewSchema predictionPipelineSchema;
ITransformer predictionPipeline = mlContext.Model.Load("model.zip", out predictionPipelineSchema);
Tek tahmin
Tek bir tahmin yapmak için yüklenen tahmin PredictionEngine işlem hattını kullanarak bir oluşturun.
// Create PredictionEngines
PredictionEngine<HousingData, HousingPrediction> predictionEngine = mlContext.Model.CreatePredictionEngine<HousingData, HousingPrediction>(predictionPipeline);
Ardından yöntemini kullanın Predict ve giriş verilerinizi parametre olarak girin. yöntemini kullanarak Predict girişin bir olması gerektirm olmadığını fark IDataView edersiniz. Bunun nedeni, giriş veri türü işlemesini rahatça içselleştirip giriş veri türünün bir nesnesini geçebilirsiniz. Buna ek olarak, yeni verileri kullanarak tahmin etmeye çalıştığın hedef veya etiket olduğu için, bu değer için şu anda bir CurrentPrice değer olmadığını varsayılır.
// Input Data
HousingData inputData = new HousingData
{
Size = 900f,
HistoricalPrices = new float[] { 155000f, 190000f, 220000f }
};
// Get Prediction
HousingPrediction prediction = predictionEngine.Predict(inputData);
nesnesinin Score özelliğine prediction erişersiniz, ile benzer bir değer elde 150079 edersiniz.
İpucu
PredictionEngine iş parçacığı güvenli değildir. Ayrıca, uygulamanıza gereken her yerde bunun bir örneğini oluşturmanız gerekir. Uygulama büyüdükçe bu işlem artık kullanılamaz hale geldi. Gelişmiş performans ve iş parçacığı güvenliği için, uygulamanız genelinde kullanmak üzere bir nesne oluşturan bağımlılık ekleme ve PredictionEnginePool ObjectPool PredictionEngine hizmetinin bir birleşimini kullanın.
PredictionEnginePool hizmetini kullanma örnekleri için bkz. Bir modeli web API'sinde dağıtma ve bir modeliAzure İşlevleri. .
Daha fazla bilgi için bkz. ASP.NET Core bağımlılık ekleme.
Birden çok tahmin (IDataView)
Aşağıdaki veriler dikkate alınarak bir içine yük IDataView dengelemesi yapın. Bu durumda, adı IDataView inputData olur. Yeni verileri kullanarak tahmin etmeye çalıştığın hedef veya etiket olduğundan, şu anda bunun bir değeri CurrentPrice olmadığını varsayılır.
// Actual data
HousingData[] housingData = new HousingData[]
{
new HousingData
{
Size = 850f,
HistoricalPrices = new float[] { 150000f, 175000f, 210000f }
},
new HousingData
{
Size = 900f,
HistoricalPrices = new float[] { 155000f, 190000f, 220000f }
},
new HousingData
{
Size = 550f,
HistoricalPrices = new float[] { 99000f, 98000f, 130000f }
}
};
Ardından, veri Transform dönüşümlerini uygulamak ve tahminler oluşturmak için yöntemini kullanın.
// Predicted Data
IDataView predictions = predictionPipeline.Transform(inputData);
yöntemini kullanarak tahmin edilen değerleri GetColumn inceler.
// Get Predictions
float[] scoreColumn = predictions.GetColumn<float>("Score").ToArray();
Puan sütunundaki tahmin edilen değerler aşağıdaki gibi görünüyor olmalı:
| Gözlem | Tahmin |
|---|---|
| 1 | 144638.2 |
| 2 | 150079.4 |
| 3 | 107789.8 |
Birden çok tahmin (PredictionEnginePool)
PredictionEnginePoolkullanarak birden çok tahmin yapmak için, model girişinizin birden çok örneğini IEnumerable içeren bir alır. Örneğin ve IEnumerable<HousingInput> Predict linq yöntemini kullanarak her öğeye Select yöntemini uygulama.
Bu kod örneğinde adlı bir PredictionEnginePool ve adlı bir olduğu predictionEnginePool IEnumerable<HousingData> housingData varsayıldı.
IEnumerable<HousingPrediction> predictions = housingData.Select(input => predictionEnginePool.Predict(input));
Sonuç, IEnumerable tahminlerinizi içeren bir örnektir. Bu durumda değer IEnumerable<HousingPrediction> olacaktır.