Eğitilmiş bir modelle tahminde bulunma

Tahminde bulunmak için eğitilmiş 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

Features ve Label giriş sütunu adları gibi ML.NET de bir model tarafından üretilen tahmin edilen değer sütunları için varsayılan adlara sahiptir. Göreve bağlı olarak ad farklı olabilir.

Bu örnekte kullanılan algoritma doğrusal bir regresyon algoritması olduğundan, çıkış sütununun Score varsayılan adı özelliğindeki ColumnNamePredictedPrice özniteliği tarafından tanımlanır.

class HousingPrediction
{
    [ColumnName("Score")]
    public float PredictedPrice { get; set; }
}

Tahmin işlem hattı ayarlama

Tek veya toplu tahminde bulunarak tahmin işlem hattının uygulamaya yüklenmesi gerekir. Bu işlem hattı hem veri ön işleme dönüştürmelerini hem de eğitilen modeli içerir. Aşağıdaki kod parçacığı, adlı model.zipbir dosyadan tahmin işlem hattını 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 tahminde bulunmak için yüklenen tahmin işlem hattını kullanarak bir PredictionEngine 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 geçirin. yöntemini kullanmanın Predict girişin bir IDataViewolması gerekmediğine dikkat edin. Bunun nedeni, giriş veri türünün nesnesini geçirebilmeniz için giriş veri türü işlemesini kolayca içselleştirmesidir. Ayrıca, yeni verileri kullanarak tahminde bulunmaya çalıştığınız hedef veya etiket olduğundan CurrentPrice , şu anda bunun için bir değer olmadığı 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 özelliğine Scoreprediction erişiyorsa, benzeri 150079bir değer almalısınız.

İpucu

PredictionEngine iş parçacığı güvenli değildir. Ayrıca, uygulamanızın içinde gerekli olduğu her yerde bunun bir örneğini oluşturmanız gerekir. Uygulamanız büyüdükçe bu işlem yönetilemez hale gelebilir. İyileştirilmiş performans ve iş parçacığı güvenliği için bağımlılık ekleme ve PredictionEnginePool hizmetinin bir bileşimini kullanın. Bu hizmet, uygulamanız genelinde kullanılmak üzere bir ObjectPool nesne oluşturur PredictionEngine .

PredictionEnginePool hizmetini kullanma örnekleri için bkz. Web API'sine model dağıtma ve modeli Azure İşlevleri dağıtma.

Daha fazla bilgi için bkz . ASP.NET Core'da bağımlılık ekleme.

Birden çok tahmin (IDataView)

Aşağıdaki verileri göz önünde bulundurarak bir içine IDataViewyükleyin. Bu durumda, öğesinin IDataView adı şeklindedir inputData. CurrentPrice Yeni verileri kullanarak tahminde bulunmaya çalıştığınız hedef veya etiket olduğundan, şu anda bunun için bir değer olmadığı 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 dönüşümlerini uygulamak ve tahminler oluşturmak için yöntemini kullanın Transform .

// Predicted Data
IDataView predictions = predictionPipeline.Transform(inputData);

yöntemini kullanarak GetColumn tahmin edilen değerleri inceleyin.

// Get Predictions
float[] scoreColumn = predictions.GetColumn<float>("Score").ToArray();

Puan sütunundaki tahmin edilen değerler aşağıdaki gibi görünmelidir:

Gözlem Tahmin
1 144638.2
2 150079.4
3 107789.8

Birden çok tahmin (PredictionEnginePool)

PredictionEnginePool kullanarak birden çok tahminde bulunmak için model girişinizin birden çok örneğini içeren bir IEnumerable tahmin alabilirsiniz. Örneğin, linq IEnumerable<HousingInput>Select yöntemini kullanarak ve yöntemini her öğeye uygulayınPredict.

Bu kod örneği, adlı bir PredictionEnginePool ve adlı predictionEnginePoolhousingDatabir IEnumerable<HousingData> sahip olduğunuzu varsayar.

IEnumerable<HousingPrediction> predictions = housingData.Select(input => predictionEnginePool.Predict(input));

Sonuç, tahminlerinizin örneklerini içeren bir IEnumerable sonuçdur. Bu durumda değer IEnumerable<HousingPrediction> olacaktır.