Sejauh yang saya tahu k-means memilih pusat awal secara acak. Karena mereka didasarkan pada keberuntungan murni, mereka dapat dipilih dengan sangat buruk. Algoritma K-means ++ mencoba untuk memecahkan masalah ini, dengan menyebarkan pusat awal secara merata.
Apakah kedua algoritma menjamin hasil yang sama? Atau ada kemungkinan bahwa centroid awal yang dipilih dengan buruk menyebabkan hasil yang buruk, tidak peduli berapa banyak iterasi.
Katakanlah ada dataset yang diberikan dan sejumlah cluster yang diinginkan. Kami menjalankan algoritme k-means selama konvergensi (tidak ada lagi gerakan tengah). Apakah ada solusi yang tepat untuk masalah klaster ini (diberikan SSE), atau k-means akan menghasilkan hasil yang kadang-kadang berbeda di jalankan kembali?
Jika ada lebih dari satu solusi untuk masalah pengelompokan (dataset yang diberikan, jumlah cluster yang diberikan), apakah K-means ++ menjamin hasil yang lebih baik, atau hanya lebih cepat? Maksud saya lebih baik SSE lebih rendah.
Alasan saya mengajukan pertanyaan ini adalah karena saya sedang mencari algoritma k-means untuk mengelompokkan kumpulan data yang sangat besar. Saya telah menemukan beberapa k-means ++, tetapi ada beberapa implementasi CUDA juga. Seperti yang sudah Anda ketahui, CUDA menggunakan GPU, dan dapat menjalankan lebih banyak ratusan utas secara paralel. (Jadi itu benar - benar dapat mempercepat seluruh proses). Tetapi tidak ada implementasi CUDA - yang saya temukan sejauh ini - memiliki inisialisasi k-means ++.
k-means picks the initial centers randomly
. Memilih pusat awal bukan bagian dari algoritma k-means itu sendiri. Pusat-pusat dapat dipilih. Implementasi k-means yang baik akan menawarkan beberapa opsi cara mendefinisikan pusat awal (acak, ditentukan pengguna, poin k-utmost, dll.)Jawaban:
K-means dimulai dengan mengalokasikan pusat-pusat cluster secara acak dan kemudian mencari solusi "lebih baik". K-means ++ dimulai dengan alokasi satu pusat cluster secara acak dan kemudian mencari pusat lain yang diberikan pertama. Jadi kedua algoritma menggunakan inisialisasi acak sebagai titik awal, sehingga dapat memberikan hasil yang berbeda pada proses yang berbeda. Sebagai contoh Anda dapat memeriksa kuliah ini: Clustering Sebagai Contoh Masalah Inferensi , sekitar menit ke-40 ada contoh k-means run, tetapi seluruh kuliah menarik.
Jadi, jawablah pertanyaan Anda:
Mengenai masalah Anda: apa arti k-++ artinya ia memilih pusat-pusat dan kemudian memulai k-sarana "klasik". Jadi yang dapat Anda lakukan adalah (1) menggunakan bagian dari algoritma yang memilih pusat dan kemudian (2) menggunakan pusat tersebut dalam implementasi GPU dari k-means. Dengan cara ini setidaknya sebagian dari masalah diselesaikan pada perangkat lunak berbasis GPU, jadi harus lebih cepat.
sumber
Melihat centroid mulai dari K-means dan K-means ++
Untuk menambahkan tampilan intuitif perbedaan antara centroid awal dari dua algoritma, pertimbangkan dataset mainan berikut yang terdiri dari tiga kotak yang dihasilkan secara seragam
Berikut adalah histogram 2D yang menunjukkan di mana algoritma k-means dan k-means ++ menginisialisasi centroid awal mereka (2000 simulasi).
Jelas k-means standar menginisialisasi titik-titik secara seragam, sedangkan k-means ++ cenderung menginisialisasi dekat pusat kotak
sumber
Banyak kali KMeans Inisialisasi acak membutuhkan waktu lebih sedikit daripada KMeans ++ tetapi memberikan hasil yang buruk. Karena inisialisasi acak banyak kali kita mendapatkan optimal lokal karena set pusat awal kami tidak didistribusikan melalui set data.
Jadi, jawab pertanyaan Anda:
sumber