Teks lengkap 5835 Kata-kata, perkiraan waktu belajar 16 menit
Visualisasikan KMeans dengan Yellowbrick
Masalah pembelajaran mesin secara umum dapat dibagi menjadi tiga jenis, termasuk klasifikasi dan regresi yang disebut pembelajaran yang diawasi, dan pembelajaran tanpa pengawasan. Pembelajaran tanpa pengawasan biasanya mengacu pada pengelompokan dalam pembelajaran mesin.
Artikel ini akan memperkenalkan secara singkat ketiga masalah ini dan mempraktikkannya di pustaka python scikit-learn yang populer.
Sebelum memulai, jelaskan secara singkat arti istilah pembelajaran terbimbing dan tidak terbimbing.
Pembelajaran yang diawasi: Dalam pembelajaran yang diawasi, ada satu set input (fitur) yang diketahui dan satu set output yang diketahui (label). Umumnya, fitur masukan dan label keluaran disebut X dan y. Tujuan dari algoritma ini adalah untuk mempelajari fungsi pemetaan yang memetakan input ke output. Jadi, ketika contoh X baru diberikan, mesin dapat memprediksi label y terkait dengan benar.
Pembelajaran tanpa pengawasan: Dalam pembelajaran tanpa pengawasan, hanya ada satu set input (X) dan tidak ada label yang sesuai (y). Tujuan dari algoritma ini adalah untuk menemukan pola yang belum ditemukan sebelumnya dalam data. Algoritme ini sering digunakan untuk menemukan cluster yang bermakna dari sampel X yang serupa, sehingga kategori intrinsik dari data sebenarnya dapat ditemukan.
Sumber gambar: pexels
1. Klasifikasi
Dalam klasifikasi, keluaran (y) adalah kategorinya. Hanya boleh ada dua kategori, misalnya, email dapat dibagi menjadi spam dan non-spam. Jenis kategori juga bisa bermacam-macam, seperti klasifikasi jenis bunga, yang disebut klasifikasi kelas jamak.
Selanjutnya, gunakan scikit-learn untuk memberikan contoh klasifikasi sederhana. Jika Anda belum menginstal scikit-learn, Anda dapat menginstalnya melalui pip atau conda.
Scikit-learn memiliki banyak set data yang bisa langsung diakses melalui perpustakaan. Untuk kenyamanan dalam artikel ini, kumpulan data yang digunakan selama proses adalah kumpulan data sampel ini. Berikut ini menggunakan kumpulan data wine yang termasuk dalam klasifikasi kelas jamak untuk menggambarkan masalah klasifikasi. Dalam kumpulan data, input (X) berisi 13 fitur yang terkait dengan berbagai atribut dari setiap jenis wine. Output yang diketahui (y) adalah jenis wine yang diwakili oleh angka 0, 1, atau 2 yang sudah diberikan dalam kumpulan data.
Impor semua kode yang digunakan dalam artikel ini ditampilkan di bawah.
impor panda sebagai pd
impor numpy sebagai npfrom sklearn.datasets import load_wine
dari sklearn.datasets impor load_bostonfrom sklearn.model_selection importtrain_test_split
dari sklearn impor preprocessingdari sklearn.metrics import f1_score
dari sklearn.metrics impor mean_squared_error
dari impor matematika sqrt dari sklearn.neighbours impor KNeighboursClassifier
dari sklearn.svm impor SVC, LinearSVC, NuSVC
dari sklearn.tree import DecisionTreeClassifier
dari sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier
dari sklearn.discriminant_analysis import LinearDiscriminantAnalysis
dari sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis
dari sklearn import linear_model
dari sklearn.linear_model impor ElasticNetCV
dari sklearn.svm impor SVR dari sklearn.cluster import KMeans
dari yellowbrick.cluster, impor KElbowVisualizer
dari yellowbrick.cluster, impor SilhouetteVisualizer
Pada kode di bawah ini, unduh data dan ubah menjadi bingkai data pandas.
anggur = load_wine ()
wine_df = pd.DataFrame (wine.data, kolom = wine.feature_names)
wine_df = pd. Seri (wine.target)
Langkah selanjutnya dalam masalah supervised learning adalah membagi data menjadi satu set tes dan satu set pelatihan. Algoritme dapat menggunakan set pelatihan untuk mempelajari pemetaan antara masukan dan keluaran, lalu menggunakan set pengujian yang dipesan untuk mengevaluasi apakah model telah mempelajari pemetaan ini. Dalam kode berikut, fungsi scikit-learnmodel_selection train_test_split digunakan untuk melakukan operasi ini.
X_w = wine_df.drop (, sumbu = 1)
y_w = wine_df
X_train_w, X_test_w, y_train_w, y_test_w = train_test_split (X_w, y_w, test_size = 0.2)
Pada langkah berikutnya, Anda perlu memilih algoritme yang paling sesuai untuk mempelajari pemetaan dalam kumpulan data yang dipilih. Ada banyak algoritme berbeda untuk dipilih dalam scikit-learn. Algoritme ini menggunakan fungsi dan metode berbeda untuk mempelajari pemetaan. Anda dapat melihat daftar lengkapnya di sini.
Jalankan kode berikut untuk menemukan model terbaik. Gunakan serangkaian algoritme untuk melatih model dan mendapatkan skor F1 untuk setiap algoritme. Skor F1 adalah indikator yang baik untuk mengukur akurasi pengklasifikasi secara keseluruhan. Berikut adalah penjelasan rinci tentang berbagai indikator yang dapat digunakan untuk mengevaluasi pengklasifikasi.
pengklasifikasi =
untuk pengklasifikasi dalam pengklasifikasi:
model = classifier
model.fit (X_train_w, y_train_w)
y_pred_w = model.predict (X_test_w)
cetak (pengklasifikasi)
cetak ("skor model:%. 3f"% f1_score (y_test_w, y_pred_w, average = 'weighted'))
Skor F1 yang sempurna adalah 1.0, jadi semakin dekat angkanya dengan 1.0, semakin baik performa model. Hasil di atas menunjukkan bahwa Random Forest Classifier adalah model terbaik untuk kumpulan data ini.
2. Kembali
Dalam regresi, output (y) adalah nilai kontinu, bukan kategori. Contoh umum regresi adalah memprediksi penjualan bulan depan di toko, atau memprediksi harga rumah di masa mendatang.
Untuk mengilustrasikan regresi lagi, berikut ini akan menggunakan scikit-learn yang disebut kumpulan data perumahan Boston. Kumpulan data ini mencakup 13 fitur (X) yang memuat berbagai atribut rumah, seperti jumlah kamar, lokasi, umur bangunan, dan tingkat kriminalitas lokal. Output (y) adalah harga rumah.
Gunakan kode berikut untuk memproses data dan membaginya menjadi set pengujian dan pelatihan menggunakan metode yang sama yang digunakan dalam kumpulan data wine.
boston_df = pd.DataFrame (boston.data, kolom = boston.feature_names)
boston_df = pd. Seri (boston.target) X_b = boston_df.drop (, axis = 1)
y_b = boston_df
X_train_b, X_test_b, y_train_b, y_test_b = train_test_split (X_b, y_b, test_size = 0.2)
Anda dapat menggunakan lembar contekan ini untuk melihat algoritme yang tersedia untuk masalah regresi di scikit-learn. Selanjutnya, kode yang mirip dengan masalah klasifikasi akan digunakan untuk mengulang seleksi dan mencapai setiap skor.
Ada banyak indikator berbeda untuk mengevaluasi model regresi. Indikator ini pada dasarnya adalah ukuran kesalahan, digunakan untuk mengukur perbedaan antara nilai aktual dan nilai prediksi yang dicapai oleh model. Error root mean square (RMSE) digunakan di sini. Untuk metrik ini, semakin mendekati nol, semakin baik performa model. Artikel ini menjelaskan ukuran kesalahan dari masalah regresi dengan sangat baik.
regressors = untuk regressor di regressor:
model = regressor
model.fit (X_train_b, y_train_b)
y_pred_b = model.predict (X_test_b)
cetak (regressor)
print ("mean squarederror:%. 3f"% sqrt (mean_squared_error (y_test_b, y_pred_b)))
Skor RMSE menunjukkan bahwa regresi linier dan algoritma regresi ridge memiliki kinerja terbaik dalam kumpulan data ini.
3. Pembelajaran tanpa pengawasan
Ada banyak jenis pembelajaran tanpa pengawasan, tetapi demi kesederhanaan, berikut ini akan fokus pada metode pengelompokan. Ada banyak algoritme pengelompokan yang berbeda, dan algoritme ini memiliki teknik yang sedikit berbeda untuk menemukan kluster masukan.
Salah satu metode yang paling sering digunakan mungkin adalah K-means. Algoritme menjalankan proses berulang untuk mengaktifkan sejumlah generator acak tertentu. Ini menghitung metrik jarak dari sentroid ke setiap titik data, atau jarak Euclidean, untuk membuat cluster dengan nilai serupa. Sentroid dari setiap cluster kemudian menjadi rata-rata baru, dan proses tersebut diulangi untuk mendapatkan hasil terbaik.
Selanjutnya, gunakan kumpulan data wine yang digunakan dalam tugas klasifikasi, hapus label y, dan lihat apakah algoritme k-means dapat mengidentifikasi jenis wine melalui input.
Karena kami hanya menggunakan input dari model ini, saya menggunakan metode yang sedikit berbeda untuk menguraikan data menjadi set pengujian dan pelatihan.
np.random.seed (0)
msk = np.random.rand (len (X_w)) < 0.8
train_w = X_w
test_w = X_w
Karena -Kmeans bergantung pada metrik jarak untuk menentukan cluster, biasanya perlu melakukan penskalaan fitur sebelum melatih model untuk memastikan bahwa semua fitur memiliki ukuran yang sama. Kode di bawah ini menggunakan MinMaxScaler untuk menskalakan fitur, memastikan bahwa semua nilai antara 0 dan 1.
x = train_w.values
min_max_scaler = preprocessing.MinMaxScaler ()
x_scaled = min_max_scaler.fit_transform (x)
X_scaled = pd.DataFrame (x_scaled, kolom = train_w.columns)
Untuk menggunakan K-means, Anda harus menentukan jumlah cluster yang harus digunakan algoritme. Oleh karena itu, salah satu hal pertama yang harus dilakukan adalah menentukan jumlah cluster yang optimal. Ini dicapai dengan mengiterasi beberapa nilai k dan memplot hasilnya pada grafik. Ini disebut metode siku karena biasanya menghasilkan kurva yang terlihat seperti siku. Perpustakaan Yellowbrick memiliki fungsi yang sangat baik untuk visualisasi. Kode berikut menghasilkan gambar visualisasi ini. (Catatan: Pustaka Yellowbrick adalah pustaka yang baik untuk memvisualisasikan model scikit-learn, dan ini juga dapat diinstal melalui pip)
model = KMeans ()
visualizer = KElbowVisualizer (model, k = (1,8))
visualizer.fit (X_scaled)
visualizer.show ()
Umumnya tidak diketahui berapa banyak kategori yang digunakan teknik clustering dalam kumpulan data. Namun di sini, yang diketahui adalah ada tiga jenis anggur dalam data-kurva telah memilih tiga anggur dengan benar sebagai jumlah cluster optimal untuk digunakan dalam model.
Langkah selanjutnya adalah menginisialisasi algoritma K-means, menyesuaikan model dengan data pelatihan, dan mengevaluasi keefektifan algoritma untuk pengelompokan data.
Salah satu metode di sini disebut SilhouetteCoefficient. Metode ini mengukur konsistensi nilai dalam cluster. Dengan kata lain, ini mengukur seberapa mirip nilai di setiap cluster satu sama lain, dan seberapa berbeda cluster tersebut. Skor kontur dihitung untuk setiap nilai, dan kisaran skornya adalah -1 hingga +1. Nilai-nilai ini diplot sebagai plot kontur. Demikian pula, yellowbrick memberikan cara mudah untuk membuat peta kontur ini. Kode berikut menggunakan kumpulan data wine untuk menghasilkan visualisasi ini.
model = KMeans (3, random_state = 42)
visualizer = SilhouetteVisualizer (model, warna = 'yellowbrick') visualizer.fit (X_scaled)
visualizer.show ()
Diagram siluet dapat dijelaskan dengan cara berikut:
· Semakin dekat skor rata-rata (garis putus-putus merah di atas) ke +1, semakin baik poin data yang cocok dalam cluster.
· Titik data dengan skor 0 sangat dekat dengan batas keputusan cluster lain (sehingga derajat perbedaannya rendah).
· Nilai negatif menunjukkan bahwa titik data mungkin berada di cluster yang salah.
· Lebar tiap pustaka harus cukup seragam Jika tidak demikian, nilai k yang salah dapat digunakan.
Grafik kumpulan data wine di atas menunjukkan bahwa karena sebagian besar poin data berada di bawah skor rata-rata, dan beberapa poin data di bawah 0, cluster 0 mungkin tidak sekonsisten cluster lainnya.
Skor kontur sangat berguna saat membandingkan berbagai algoritme atau nilai k.
Artikel ini secara singkat memperkenalkan tiga jenis pembelajaran mesin. Semua proses ini juga melibatkan banyak langkah lain, termasuk rekayasa fitur, pemrosesan data, dan pengoptimalan hyperparameter untuk menentukan teknologi praproses data terbaik dan model penggunaan terbaik.
Terima kasih sudah membaca!
Komentar Suka Ikuti
Mari berbagi manfaat pembelajaran dan pengembangan AI
Jika mencetak ulang, silakan tinggalkan pesan di latar belakang dan ikuti spesifikasi pencetakan ulang
- Berita Lelang TanahHarga dasar 5510 yuan/! Penjualan tanah komersial mini yang sukses di daerah Yinfeng
- Seri Tahun Hidup: Animasi "Tiga Tubuh" akan terdaftar di Stasiun B pada tahun 2021, mendapatkan kartu truf terkuat di Distrik Guochuang