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 150079
dengan .
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 ObjectPool
PredictionEngine
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 IDataView
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 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>
.