Membuat prediksi dengan model terlatih

Pelajari cara menggunakan model terlatih untuk membuat prediksi

Membuat model data

Memasukan data

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; }
}

Data output

Features Seperti nama kolom input dan Label , ML.NET memiliki nama default untuk kolom nilai yang diprediksi yang dihasilkan oleh model. Bergantung pada tugas, nama mungkin berbeda.

Karena algoritma yang digunakan dalam sampel ini adalah algoritma regresi linier, nama default kolom output didefinisikan Score oleh ColumnName atribut pada PredictedPrice properti .

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

Menyiapkan alur prediksi

Baik membuat prediksi tunggal atau batch, alur prediksi perlu dimuat ke dalam aplikasi. Alur ini berisi transformasi pra-pemrosesan data serta model terlatih. Cuplikan kode di bawah ini memuat alur prediksi dari file bernama model.zip.

//Create MLContext
MLContext mlContext = new MLContext();

// Load Trained Model
DataViewSchema predictionPipelineSchema;
ITransformer predictionPipeline = mlContext.Model.Load("model.zip", out predictionPipelineSchema);

Prediksi tunggal

Untuk membuat satu prediksi, buat PredictionEngine menggunakan alur prediksi yang dimuat.

// Create PredictionEngines
PredictionEngine<HousingData, HousingPrediction> predictionEngine = mlContext.Model.CreatePredictionEngine<HousingData, HousingPrediction>(predictionPipeline);

Kemudian, gunakan metode dan teruskan Predict data input Anda sebagai parameter. Perhatikan bahwa menggunakan Predict metode ini tidak mengharuskan input menjadi ).IDataView Ini karena dengan mudah menginternisasi manipulasi jenis data input sehingga Anda dapat meneruskan objek jenis data input. Selain itu, karena CurrentPrice adalah target atau label yang anda coba prediksi menggunakan data baru, diasumsikan tidak ada nilai untuk itu saat ini.

// Input Data
HousingData inputData = new HousingData
{
    Size = 900f,
    HistoricalPrices = new float[] { 155000f, 190000f, 220000f }
};

// Get Prediction
HousingPrediction prediction = predictionEngine.Predict(inputData);

Jika Anda mengakses Score properti prediction objek, Anda harus mendapatkan nilai yang mirip 150079dengan .

Tip

PredictionEngine tidak aman untuk utas. Selain itu, Anda harus membuat instansnya di mana pun diperlukan dalam aplikasi Anda. Saat aplikasi Anda berkembang, proses ini bisa menjadi tidak terkendali. Untuk meningkatkan performa dan keamanan utas, gunakan kombinasi injeksi dependensi dan layanan PredictionEnginePool , yang membuat ObjectPoolPredictionEngine objek untuk digunakan di seluruh aplikasi Anda.

Misalnya tentang cara menggunakan layanan PredictionEnginePool , lihat menyebarkan model ke API web dan menyebarkan model ke Azure Functions.

Lihat injeksi dependensi di ASP.NET Core untuk informasi selengkapnya.

Beberapa prediksi (IDataView)

Mengingat data berikut, muat ke dalam IDataView. Dalam hal ini, nama adalah IDataViewinputData. Karena CurrentPrice adalah target atau label yang coba Anda prediksi menggunakan data baru, diasumsikan tidak ada nilai untuk saat ini.

// 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 }
    }
};

Kemudian, gunakan Transform metode untuk menerapkan transformasi data dan menghasilkan prediksi.

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

Periksa nilai yang diprediksi dengan menggunakan GetColumn metode .

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

Nilai yang diprediksi dalam kolom skor akan terlihat seperti berikut ini:

Pengamatan Prediksi
1 144638.2
2 150079.4
3 107789.8

Beberapa prediksi (PredictionEnginePool)

Untuk membuat beberapa prediksi menggunakan PredictionEnginePool, Anda dapat mengambil IEnumerable beberapa instans input model Anda. Misalnya dan IEnumerable<HousingInput> terapkan metode ke Predict setiap elemen menggunakan metode LINQ Select .

Sampel kode ini mengasumsikan Anda memiliki PredictionEnginePool yang disebut predictionEnginePool dan disebut IEnumerable<HousingData>housingData.

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

Hasilnya adalah instans yang IEnumerable berisi prediksi Anda. Dalam hal ini, itu akan menjadi IEnumerable<HousingPrediction>.