Hi Rekan Makers,
Bertemu lagi di series ML.NET, kali ini kita akan mencoba fitur AutoML dari ML.NET. Seperti rekan-rekan ketahui proses pembuatan model ML banyak memakan waktu saat persiapan dataset, pemilihan algoritma ML dan optimasi hyper-parameter agar memperoleh model yang memiliki akurasi tinggi. Nah, AutoML ini akan membuat hidup rekan-rekan lebih mudah karena tool ini akan mengotomatisasi proses ini. Kita cukup mempersiapkan dataset, lalu menentukan tugas yang akan dilakukan saat ini baru tersedia untuk prediksi nilai (regression) atau klasifikasi (binary classification dan multiclass-classification). Sedangkan anomaly detection, recommendation akan disupport pada masa yang akan datang, saat artikel ini ditulis, ML.NET baru versi 1.2.
Nah, tool ini tersedia dalam berbagai jenis:
- Model Builder, ini akan berbentuk ekstension untuk visual studio (belum tersedia untuk versi Mac).
- CLI, ini yang asyik karena menggunakan .NET Core otomatis tool ini bisa run di windows, linux dan mac. CLI ini berbentuk command-line interface yang jalan di terminal atau command prompt.
- API, ini bentuknya API yang dapat dipanggil dengan koding. Saya rasa model builder dibangun diatas API ini.
Beberapa skenario yang dapat rekan-rekan lakukan dengan AutoML antara lain:
- Memprediksi harga saham, memprediksi penggunaan BBM, memprediksi cuaca, memprediksi rating produk, dan sebagainya
- Mengklasifikasi email spam, deteksi penyakit tertentu berdasarkan symptom, deteksi fraud
- Kategorisasi issue untuk helpdesk, memprediksi jenis spesies tanaman tertentu, mengkategorisasi tipe pasangan idaman haha…
Ok kita langsung mulai mencoba saja ya untuk ketiga tipe AutoML diatas.
AutoML dengan ML Model Builder
- Silakan install visual studio dari link ini jika belum terpasang, bukan visual studio code lho ya..
- Update versi dotnet core dengan install yang terbaru disini
- Install ekstension ML.NET Model Builder dari sini
- Lalu buka Visual Studio lalu create project baru dengan tipe Console Application. File > New > Project > Pilih Console App (.NET Core)
- Pada solution explorer, klik kanan pada nama project rekan-rekan, lalu Add > Machine Learning
- Lalu muncul jendela “Build Your Machine Learning Model” disitu terdapat beberapa template : Sentiment Analysis, Issue Classification, Price Prediction, dan Custom Scenario. Kita pilih yang Sentiment Analysis.
- Lalu download dataset contoh dari sini. Dataset ini tentang komen di youtube yang sudah dilabel dengan spam atau bukan. Keterangan datasetnya bisa lihat disini.
- Kemudian masukan file csv tersebut pada kolom Select a File, dan pilih kolom “CLASS” pada Column to Predict. Di bagian bawah terlihat preview dari data yang kita pilih. Kemudian klik link “Train”
- Kemudian biarkan nilai 10 detik pada kolom Time to Train. Nah dibawah ini adalah estimasi waktu yang diperlukan untuk melakukan evaluasi training model ML berdasarkan ukuran dataset training.
- Setelah itu muncul beberapa algoritma bersama dengan score metrik evaluasinya. Terlihat pada baris pertama memiliki akurasi tertinggi, beberapa parameter metrik tersebut juga sudah pernah dijelaskan pada artikel pada link berikut.
- Selanjutnya klik code, dan tekan button Add Project. Tool ini akan menambahkan 2 project baru yaitu Model dan ConsoleApp. Pada project Model berisikan model dalam format binary (.zip) dan class untuk input dan output untuk digunakan dalam training dan prediksi. Sedangkan project ConsoleApp berisikan contoh kode untuk melakukan training dan prediksi. Silakan buka ConsoleApp > ModelBuilder.cs, dalam class ini terdapat beberapa method untuk melakukan training model, save model, evaluasi model yang terpenting adalah method CreateModel, karena method ini berisi seluruh proses dalam pembuatan model. Method ini dapat dipanggil dari Program.cs untuk me-rebuild model kita jika diperlukan, misalnya ketika ada penambahan/perubahan dataset, alternatif lain selain mengulang proses pembuatan model dengan ModelBuilder. Sedangkan pada “Program.cs” secara default berisi kode untuk melakukan single prediction dengan data contoh. Data contoh ini sebenarnya diambil dari data baris pertama yang kita masukan pada saat menggunakan model builder.
- Nah contoh kode ini menjadi referensi untuk rekan-rekan masukan pada aplikasi seperti web, IoT, desktop (winform, wpf, uwp), dan lainnya.
AutoML dengan CLI
Instalasi CLI Tool
Berikut adalah langkah untuk instalasinya:
- Install dotnet core dengan install yang terbaru disini
- Install VSCode jika menggunakan mac atau linux dari sini
- Lalu buka terminal atau command prompt / powershell
- Ketik “dotnet tool install -g mlnet”
- Cek hasil instalasi dengan mengetik “dotnet tool list -g” jika muncul mlnet maka instalasi berhasil
Berikut adalah perintah untuk menghapus instalasi mlnet :
dotnet tool uninstall mlnet -g
Sedangkan ini perintah untuk update tool ke versi yang lebih baru:
dotnet tool update -g mlnet
Jika rekan-rekan menggunakan bash atau powershell, bisa ditambahkan fitur tab based auto-completion berikut caranya:
- Untuk Bash, tambahkan kode dari link ini ke profile (~/.bash_profile)
- Untuk Powershell, tambahkan kode dari link ini ke profile. Untuk lihat path ke file profile gunakan command “echo $profile”
Mengevaluasi dan membuat model ML dengan AutoML CLI
Nah, AutoML CLI ini mendukung platform windows, linux dan mac. Saat ini task yang di dukung antara lain : regresi, binary classification dan multiclass-classification. Sedangkan untuk masa yang akan datang akan ditambahkan untuk clustering, recommendation, ranking, anomaly detection.
Kita akan mencoba mengklasifikasi kualitas dari kendaraan berdasarkan beberapa kriteria : harga pembelian, harga maintenance, jumlah pintu, kapasitas penumpang, space bagasi, safety.
Ikuti langkah berikut
Buka command line / terminal, lalu buat folder dengan perintah berikut:
mkdir CarAutoML
Lalu masuk ke folder dengan perintah:
cd CarAutoML
Lalu download file car.data dari link ini dan masukan ke folder diatas. Lalu ketik perintah berikut:
mlnet auto-train --task multiclass-classification --dataset "car.data" --label-column-index 6 --has-header false --max-exploration-time 10
Beberapa parameter tersebut:
- task adalah jenis task ML : regression, binary-classification, multiclass-classification
- dataset adalah path ke file training (file ini akan dibagi menjadi data training dan evaluasi dengan proporsi 80:20)
- label-column-index adalah kolom yang dijadiin label, jika memiliki kolom header bisa menggunakan parameter label-column-name dilanjutkan dengan nama kolomnya
- –has-header di isi true jika ada kolom header, false jika tidak memiliki kolom header.
- –max-exploration waktu evaluasi dalam detik
Nah dari perintah diatas akan menghasilkan solution dengan struktur seperti ini:
Terdapat 2 project:
- ConsoleApp : terdapat 2 file, ModelBuilder.cs berisi method-method untuk melakukan training dan evaluasi, ini dapat digunakan untuk melakukan re-training. Sedangkan Program.cs berisi contoh code untuk melakukan prediksi tunggal.
- Model : ModelInput.cs untuk data training dan evaluasi, ModelOutput.cs menampung hasil prediksi. MLModel.zip adalah model ML terakurat dengan bentuk binary.
Dari project ini bisa rekan-rekan gunakan sebagai referensi untuk melakukan proses inferensi model ML pada aplikasi web, desktop, uwp, IoT. Rekan-rekan bisa menggunakan DI (dependency injection) untuk model ML dalam bentuk objek ITransformer dengan Singleton. Sedangkan untuk class PredictionEngine tidak dapat dengan Singleton. Untuk beberapa metrik pengukuran hasil dari AutoML itu bisa dilihat juga dari artikel terdahulu tentang regresi, binary-classification, dan multiclass-classification.
AutoML dengan API
API ini memudahkan kita membangun ModelML dengan akurasi terbaik secara otomatis, untuk contoh kali ini kita akan gunakan dataset tentang estimasi lalu lintas saat liburan. Ikuti langkah berikut:
Buka command line / terminal, lalu buat folder dengan perintah berikut:
mkdir TrafficVolumeAutoMLAPI
Lalu masuk ke folder dengan perintah:
cd TrafficVolumeAutoMLAPI
Lalu buat folder “Data” dengan perintah:
mkdir Data
Lalu download file csv dari link ini dan masukan ke folder diatas.
Selanjutnya buat aplikasi console dengan mengetik:
dotnet new console
Kita perlu menambahkan nuget package ML.NET dan AutoML dengan mengetik:
dotnet add package Microsoft.ML dotnet add package Microsoft.ML.AutoML
Bukalah solution dengan visual studio atau vscode.
Tambah data class dengan nama “TrafficData.cs”, isi dengan kode berikut:
using Microsoft.ML.Data;
using System;
using System.Collections.Generic;
using System.Text;
namespace TrafficVolumeAutoMLAPI
{
class TrafficData
{
[LoadColumn(0), ColumnName("holiday")]public string holiday { get; set; }
[LoadColumn(1), ColumnName("temp")]public float temp { get; set; }
[LoadColumn(2), ColumnName("rain")]public float rain { get; set; }
[LoadColumn(3), ColumnName("snow")]public float snow { get; set; }
[LoadColumn(4), ColumnName("cloud")]public float cloud { get; set; }
[LoadColumn(5), ColumnName("weather")]public string weather { get; set; }
[LoadColumn(6), ColumnName("weather_desc")]public string weather_desc { get; set; }
[LoadColumn(7), ColumnName("Label")]public float traffic_volume { get; set; }
}
}
Lalu buka “Program.cs” isi dengan kode berikut:
MLContext mlContext = new MLContext();
IDataView trainDataView = mlContext.Data.LoadFromTextFile<TrafficData>(GetAbsolutePath("../../../Data/Metro_Interstate_Traffic_Volume.csv"), hasHeader: true,separatorChar:',');
Kode diatas untuk membuat pipeline dan memuat data yang akan digunakan untuk eksperiment (training dan test). Lalu masukan kode berikut:
//configure experiment settings
var experimentSettings = new RegressionExperimentSettings();
experimentSettings.MaxExperimentTimeInSeconds = 10;
var cts = new CancellationTokenSource();
experimentSettings.CancellationToken = cts.Token;
experimentSettings.OptimizingMetric = RegressionMetric.MeanSquaredError;
experimentSettings.CacheDirectory = null;
Eksperiment settings kita gunakan untuk mengatur beberapa konfigurasi, kita dapat mengatur lamanya waktu eksperiment, metrik pengukuran yang dijadikan dasar untuk optimasi model, jika cachedirectory dibuat null, maka selama training data cache akan disimpan dalam memory. CancellationToken untuk memberhentikan proses training. Nah untuk experiment lain seperti binary-classification dan multi-class classification memiliki setting eksperiment sendiri. Jika ingin memilih algoritma trainer bisa ditambah/kurang melalui trainer collection di experimentSettings.Trainers. Kita lanjutkan dengan masukan kode berikut:
// Cancel experiment after the user presses any key
CancelExperimentAfterAnyKeyPress(cts);
//create experiment
RegressionExperiment experiment = mlContext.Auto().CreateRegressionExperiment(experimentSettings);
var handler = new RegressionExperimentProgressHandler();
//execute experiment
ExperimentResult<RegressionMetrics> experimentResult = experiment.Execute(trainDataView, labelColumnName: "Label", progressHandler:handler);
Kita assign method untuk membatalkan proses training, lalu kita membuat object RegressionExperiment dan masukan konfigurasi yang kita buat sebagai parameter. Untuk memulai proses panggil method execute, untuk memantau progress kita gunakan handler dan jangan lupa menentukan kolom yang dijadikan sebagai label. Lalu kita evaluasi hasil model terbaik dengan kode berikut:
//Evaluate
RegressionMetrics metrics = experimentResult.BestRun.ValidationMetrics;
Console.WriteLine($"Best Algorthm: {experimentResult.BestRun.TrainerName}");
Console.WriteLine($"R-Squared: {metrics.RSquared:0.##}");
Console.WriteLine($"Root Mean Squared Error: {metrics.RootMeanSquaredError:0.##}");
BestRun.Model berisi model dengan nilai metrik terbaik, nah jika rekan-rekan ingin mencoba silakan unduh full source codenya dari sini, ada beberapa method helper yang rekan-rekan butuhkan untuk menjalankan solusi.
Nah itu semua adalah beberapa cara menggunakan fitur AutoML dengan ML.NET.
Semoga bermanfaat dan selamat berkreasi.
Salam Makers ;D