Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tutorial ini menggambarkan cara menggunakan ML.NET untuk membangun model pengklusteran untuk himpunan data bunga iris .
Dalam tutorial ini, Anda mempelajari cara:
- Memahami masalahnya
- Pilih tugas pembelajaran mesin yang sesuai
- Menyiapkan data
- Memuat dan mengubah data
- Pilih algoritma pembelajaran
- Melatih model
- Menggunakan model untuk prediksi
Prasyarat
Memahami masalahnya
Masalah ini adalah tentang membagi kumpulan bunga iris ke dalam kelompok yang berbeda berdasarkan karakteristik bunga. Fitur-fitur tersebut adalah panjang dan lebar sepal dan panjang dan lebar kelopak. Untuk tutorial ini, asumsikan bahwa jenis setiap bunga tidak diketahui. Anda ingin mempelajari struktur himpunan data dari fitur dan memprediksi bagaimana instans data sesuai dengan struktur ini.
Pilih tugas pembelajaran mesin yang sesuai
Karena Anda tidak tahu ke kelompok mana setiap bunga termasuk, Anda memilih tugas pembelajaran mesin tidak diawasi. Untuk membagi himpunan data dalam grup-sehingga elemen dalam grup yang sama lebih mirip satu sama lain daripada yang ada di grup lain, gunakan pengklusteran tugas pembelajaran mesin.
Membuat aplikasi konsol
Buat Aplikasi Konsol
C# yang disebut "IrisFlowerClustering". Klik tombol Berikutnya. Pilih .NET 8 sebagai kerangka kerja yang akan digunakan. Klik tombol Buat.
Buat direktori bernama Data di proyek Anda untuk menyimpan himpunan data dan file model:
Di
Penjelajah Solusi, klik kanan proyek dan pilih Tambahkan Folder Baru . Ketik "Data" dan pilih Masukkan.Instal paket nuget Microsoft.ML:
Nota
Sampel ini menggunakan versi stabil terbaru dari paket NuGet yang disebutkan kecuali dinyatakan lain.
Di Solution Explorer, klik kanan proyek dan pilih Kelola Paket NuGet. Pilih "nuget.org" sebagai sumber Paket, pilih tab Telusuri, cari Microsoft.ML dan pilih Instal. Pilih tombol OK pada dialog Pratinjau Perubahan lalu pilih tombol Saya Terima pada dialog Penerimaan Lisensi jika Anda setuju dengan ketentuan lisensi untuk paket yang tercantum.
Menyiapkan data
Unduh himpunan data
iris.data dan simpan ke folder Data yang telah Anda buat pada langkah sebelumnya. Untuk informasi selengkapnya tentang himpunan data iris, lihat halaman Himpunan Data Iriskumpulan data bunga Iris Wikipedia dan halaman, yang merupakan sumber himpunan data. Di
Solution Explorer , klik kanan fileiris.data dan pilih properti . Di bawah Tingkat Lanjut, ubah nilai Salin ke Direktori Output menjadi Salin jika lebih baru.
File iris.data
- panjang sepal dalam sentimeter
- lebar sepal dalam sentimeter
- panjang petal dalam sentimeter
- lebar petal dalam sentimeter
- jenis bunga iris
Demi contoh pengklusteran, tutorial ini mengabaikan kolom terakhir.
Membuat kelas data
Buat kelas untuk data input dan prediksi:
Di
Penjelajah Solusi, klik kanan proyek, lalu pilih Tambahkan Item Baru .Dalam kotak dialog
Tambahkan Item Baru , pilih Kelasdan ubah bidang Nama menjadi IrisData.cs . Kemudian, pilih Tambahkan.Tambahkan arahan
using
berikut ke file baru:using Microsoft.ML.Data;
Hapus definisi kelas yang ada dan tambahkan kode berikut, yang menentukan kelas IrisData
dan ClusterPrediction
, ke file IrisData.cs:
public class IrisData
{
[LoadColumn(0)]
public float SepalLength;
[LoadColumn(1)]
public float SepalWidth;
[LoadColumn(2)]
public float PetalLength;
[LoadColumn(3)]
public float PetalWidth;
}
public class ClusterPrediction
{
[ColumnName("PredictedLabel")]
public uint PredictedClusterId;
[ColumnName("Score")]
public float[]? Distances;
}
IrisData
adalah kelas data input dan memiliki definisi untuk setiap fitur dari himpunan data. Gunakan atribut
Kelas ClusterPrediction
mewakili output model pengklusteran yang diterapkan ke instans IrisData
. Gunakan atribut
- Kolom PredictedLabel berisi ID dari kluster yang diprediksi.
- kolom Skor berisi array dengan jarak Euclidean kuadrat ke sentroid kluster. Panjang array sama dengan jumlah kluster.
Nota
Gunakan jenis float
untuk mewakili nilai floating-point dalam kelas data input dan prediksi.
Menentukan jalur data dan model
Kembali ke file Program.cs dan tambahkan dua bidang untuk menyimpan jalur ke file himpunan data dan ke file untuk menyimpan model:
-
_dataPath
berisi jalur ke file dengan himpunan data yang digunakan untuk melatih model. -
_modelPath
berisi jalur ke file tempat model terlatih disimpan.
Tambahkan kode berikut di bawah arahan using
untuk menentukan jalur tersebut:
string _dataPath = Path.Combine(Environment.CurrentDirectory, "Data", "iris.data");
string _modelPath = Path.Combine(Environment.CurrentDirectory, "Data", "IrisClusteringModel.zip");
Membuat konteks ML
Tambahkan arahan using
tambahan berikut ke bagian atas file Program.cs:
using Microsoft.ML;
using IrisFlowerClustering;
Ganti baris Console.WriteLine("Hello World!");
dengan kode berikut:
var mlContext = new MLContext(seed: 0);
Kelas Microsoft.ML.MLContext mewakili lingkungan pembelajaran mesin dan menyediakan mekanisme untuk pencatatan dan titik masuk untuk pemuatan data, pelatihan model, prediksi, dan tugas lainnya. Ini sebanding secara konseptual dengan menggunakan DbContext
dalam Kerangka Kerja Entitas.
Menyiapkan pemuatan data
Tambahkan kode berikut di bawah MLContext
untuk menyiapkan cara memuat data:
IDataView dataView = mlContext.Data.LoadFromTextFile<IrisData>(_dataPath, hasHeader: false, separatorChar: ',');
Metode ekstensi MLContext.Data.LoadFromTextFile
generik menyimpulkan skema himpunan data dari jenis IrisData
yang disediakan dan mengembalikan IDataView yang dapat digunakan sebagai input untuk transformator.
Membuat alur pembelajaran
Untuk tutorial ini, alur pembelajaran tugas pengklusteran terdiri dari dua langkah berikut:
- menggabungkan kolom yang dimuat ke dalam satu kolom Fitur, yang digunakan oleh pengelola pengklusteran;
- gunakan pelatih KMeansTrainer untuk melatih model menggunakan algoritma pengklusteran k-means++.
Tambahkan yang berikut ini setelah memuat data:
string featuresColumnName = "Features";
var pipeline = mlContext.Transforms
.Concatenate(featuresColumnName, "SepalLength", "SepalWidth", "PetalLength", "PetalWidth")
.Append(mlContext.Clustering.Trainers.KMeans(featuresColumnName, numberOfClusters: 3));
Kode menentukan bahwa himpunan data harus dibagi dalam tiga kluster.
Melatih model
Langkah-langkah yang ditambahkan di bagian sebelumnya menyiapkan alur untuk pelatihan, namun, tidak ada yang dijalankan. Tambahkan baris berikut di bagian bawah file untuk melakukan pemuatan data dan pelatihan model:
var model = pipeline.Fit(dataView);
Simpan model
Pada titik ini, Anda memiliki model yang dapat diintegrasikan ke dalam salah satu aplikasi .NET anda yang sudah ada atau baru. Untuk menyimpan model Anda ke file .zip, tambahkan kode berikut di bawah ini dengan memanggil metode Fit
:
using (var fileStream = new FileStream(_modelPath, FileMode.Create, FileAccess.Write, FileShare.Write))
{
mlContext.Model.Save(model, dataView.Schema, fileStream);
}
Menggunakan model untuk prediksi
Untuk membuat prediksi, gunakan kelas PredictionEngine<TSrc,TDst> yang mengambil instans jenis input melalui alur transformator dan menghasilkan instans jenis output. Tambahkan baris berikut untuk membuat instans kelas tersebut:
var predictor = mlContext.Model.CreatePredictionEngine<IrisData, ClusterPrediction>(model);
PredictionEngine
tidak aman untuk akses bersamaan. Dapat diterima untuk digunakan di lingkungan utas tunggal atau prototipe. Untuk meningkatkan performa dan keselamatan thread di lingkungan produksi, gunakan layanan PredictionEnginePool
, yang membuat ObjectPool
objek dari tipe PredictionEngine
untuk digunakan di seluruh aplikasi Anda. Berikut panduan ini tentang bagaimana menggunakan PredictionEnginePool
diASP.NET Core Web API.
Nota
Ekstensi layanan PredictionEnginePool
saat ini sedang dalam pratayang.
Buat kelas TestIrisData
untuk menampung instans data pengujian:
Di Penjelajah Solusi, klik kanan pada proyek, lalu pilih Tambah>Item Baru.
Dalam kotak dialog Tambahkan Item Baru
, pilih Kelas dan ubah bidang Nama menjadi TestIrisData.cs . Kemudian, pilih Tambahkan.Ubah kelas menjadi statis seperti dalam contoh berikut:
static class TestIrisData
Tutorial ini memperkenalkan satu instans data iris dalam kelas ini. Anda dapat menambahkan skenario lain untuk bereksperimen dengan model. Tambahkan kode berikut ke kelas TestIrisData
:
internal static readonly IrisData Setosa = new IrisData
{
SepalLength = 5.1f,
SepalWidth = 3.5f,
PetalLength = 1.4f,
PetalWidth = 0.2f
};
Untuk mengetahui kluster tempat item yang ditentukan berada, kembali ke file Program.cs dan tambahkan kode berikut di bagian bawah file:
var prediction = predictor.Predict(TestIrisData.Setosa);
Console.WriteLine($"Cluster: {prediction.PredictedClusterId}");
Console.WriteLine($"Distances: {string.Join(" ", prediction.Distances ?? Array.Empty<float>())}");
Jalankan program untuk melihat kluster mana yang berisi instans data yang ditentukan dan jarak kuadrat dari instans tersebut ke sentroid kluster. Hasil Anda harus mirip dengan yang berikut ini:
Cluster: 2
Distances: 11.69127 0.02159119 25.59896
Selamat! Anda sekarang telah berhasil membangun model pembelajaran mesin untuk pengklusteran iris dan menggunakannya untuk membuat prediksi. Anda dapat menemukan kode sumber untuk tutorial ini di dotnet/samples repositori GitHub.
Langkah berikutnya
Dalam tutorial ini, Anda belajar cara:
- Memahami masalahnya
- Pilih tugas pembelajaran mesin yang sesuai
- Menyiapkan data
- Memuat dan mengubah data
- Pilih algoritma pembelajaran
- Melatih model
- Menggunakan model untuk prediksi
Lihat repositori GitHub dotnet/machinelearning untuk terus mempelajari dan menemukan lebih banyak sampel.