implementasi python dari pengelompokan k-means. k-means adalah teknik pembelajaran tanpa pengawasan yang mencoba mengelompokkan titik data serupa ke dalam sejumlah kelompok yang ditentukan pengguna. Contoh di bawah ini menunjukkan perkembangan cluster untuk kumpulan data Iris menggunakan algoritma inisialisasi k-means++ centroid.
k-means mencoba mengidentifikasi jumlah cluster k(<N) yang ditentukan pengguna dari sekumpulan vektor bernilai nyata berdimensi N d. Algoritma ini melanjutkan dengan mencoba meminimalkan jumlah kuadrat jarak dari pusat cluster, ke anggota cluster. Algoritme kanonik berlangsung dalam tiga fase:
Output dari algoritme ini adalah penetapan cluster untuk setiap titik data, dan tingkat "distorsi" akhir. Algoritme ini tidak menghasilkan solusi yang terbukti optimal, dan pusat cluster awal dapat menyebabkan algoritma terjebak dalam solusi optimal lokal yang jelas-jelas sub-optimal (lihat contoh dasar 2d di bagian Hasil).
Banyak penelitian berfokus pada:
Daripada menginisialisasi centroid acak seperti pada langkah 1 di atas, k-means++ secara probabilistik menyebarkan centroid awal untuk menghindari konfigurasi awal yang buruk, algoritmanya adalah:
Teknik ini mengutamakan titik data yang tidak berada di dekat pusat massa awal lainnya, dan menggunakan kebijakan seleksi yang mengingatkan pada seleksi roda roulette (atau proporsional kebugaran) yang sering digunakan dalam algoritma genetika.
K-Means dijelaskan dalam 10 Algoritma Teratas untuk Penambangan Data;
K-Means dituangkan dalam Teori Informasi, Inferensi, dan Algoritma Pembelajaran, kutipan di sini;
Profesor Andrew Moore dari CMU mempunyai beberapa catatan bagus di sini;
Contoh Edureka, menggunakan data kejahatan
K-Means++, dan makalah lengkap di sini
Studi Perbandingan Metode Inisialisasi yang Efisien untuk Algoritma K-Means Clustering
SciPy memiliki implementasi k-means. Tujuan dari pekerjaan ini adalah untuk membangun implementasi python murni untuk tujuan pembelajaran, dan membantu orang lain mempelajari algoritma k-means. Pembaca yang tertarik dengan pengalaman python minimal akan dapat membaca, dan melangkahi kode ini tanpa kerumitan tambahan dari perpustakaan seperti SciPy. Ini sama sekali tidak dimaksudkan untuk penggunaan produksi :)
Jalankan kode dengan juru bahasa python:
python kmeans.py ./resources/<config.cfg>
Dimana config.cfg adalah file konfigurasi teks biasa. Format file konfigurasi adalah dict python dengan kolom berikut:
{
'data_file' : '\resources\iris.csv',
'data_project_columns' : ['sepal_length','sepal_width','petal_length','petal_width','class'],
'k' : 3,
'cluster_atts' : ['sepal_length','sepal_width','petal_length','petal_width'],
'init_cluster_func' : 'kmeans_plus_plus',
'plot_config' :
{'output_file_prefix' : 'iris',
'plots_configs': [
{'plot_atts' : ['sepal_length','sepal_width']},
{'plot_atts' : ['sepal_length','petal_length']},
{'plot_atts' : ['sepal_length','petal_width']},
{'plot_atts' : ['sepal_width','petal_length']},
{'plot_atts' : ['sepal_width','petal_width']},
{'plot_atts' : ['sepal_width','petal_width']}
]
}
}
Anda harus menentukan:
Kumpulan data Iris (iris.config), dari Lichman, M. (2013). Repositori Pembelajaran Mesin UCI. Irvine, CA: University of California, School of Information and Computer Science., adalah kumpulan data yang sangat terkenal dalam komunitas pembelajaran mesin. Berikut hasil cluster awal acak saya:
Data ini dihasilkan untuk tujuan debugging (lihat basic2d.config), dan mengilustrasikan dampak dari pilihan cluster acak awal yang buruk. Hasil di bawah ini menunjukkan konfigurasi centroid awal yang mencegah algoritma mencapai penetapan cluster yang jelas. Dalam hal ini penempatan centroid merah berarti centroid biru menangkap semua titik data di kuadran kiri bawah dan kanan bawah.
Kumpulan data kejahatan (crime.config) berasal dari Edureka, di sini.