Bagikan melalui


Membuat prediksi dengan model terlatih

Pelajari cara menggunakan model terlatih untuk membuat prediksi.

Membuat model data

Data masukan

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

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

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

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 dan model terlatih. Cuplikan kode berikut 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 Predict dan masukkan data input Anda sebagai parameter. Perhatikan bahwa menggunakan metode Predict tidak mengharuskan input menjadi IDataView. Itu karena dengan mudah mengintegrasikan pengelolaan tipe data masukan sehingga Anda dapat meneruskan objek dari tipe data masukan tersebut. Selain itu, karena CurrentPrice adalah target atau label yang coba Anda 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 properti Score objek prediction, Anda harus mendapatkan nilai yang mirip dengan 150079.

Saran

PredictionEngine tidak aman untuk utas. Selain itu, Anda harus membuat instansnya di mana pun diperlukan dalam aplikasi Anda. Seiring bertambahnya aplikasi Anda, proses ini dapat menjadi tidak dapat diatur. Untuk meningkatkan performa dan keamanan utas, gunakan kombinasi injeksi dependensi dan layanan PredictionEnginePool, yang membuat ObjectPool objek PredictionEngine untuk digunakan di seluruh aplikasi Anda.

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

Untuk informasi selengkapnya, lihat injeksi Dependensi di ASP.NET Core.

Beberapa prediksi (IDataView)

Diberikan data berikut, muatlah ke dalam IDataView. Dalam hal ini, nama IDataView adalah inputData. 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 metode Transform untuk menerapkan transformasi data dan menghasilkan prediksi.

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

Periksa nilai yang diprediksi dengan menggunakan metode GetColumn.

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

Nilai yang diprediksi dalam kolom skor harus menyerupai nilai berikut:

Pengamatan Prediksi
1 144638.2
2 150079.4
3 107789.8

Beberapa prediksi (PredictionEnginePool)

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

Sampel kode ini mengasumsikan Anda memiliki PredictionEnginePool yang disebut dan yang disebut .

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

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