k-means vs k-means ++

10

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 ++.

pengguna1930254
sumber
5
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.)
ttnphns

Jawaban:

9

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:

  • Tidak, karena ada inisialisasi acak, run yang berbeda dapat memberikan hasil yang berbeda (lihat contoh dalam kuliah). Mereka harus memberikan hasil yang sebanding tetapi ini tidak dijamin. Juga, karena semua pusat diinisialisasi secara acak dalam k-means, dapat memberikan hasil yang berbeda dari k-means ++.
  • K-means dapat memberikan hasil yang berbeda pada proses yang berbeda.
  • The k-means ++ kertas memberikan hasil simulasi monte carlo yang menunjukkan bahwa k-means ++ adalah baik lebih cepat dan memberikan kinerja yang lebih baik, sehingga tidak ada jaminan, tapi mungkin lebih baik.

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.

Tim
sumber
4

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

masukkan deskripsi gambar di sini

Berikut adalah histogram 2D ​​yang menunjukkan di mana algoritma k-means dan k-means ++ menginisialisasi centroid awal mereka (2000 simulasi).

masukkan deskripsi gambar di sini

Jelas k-means standar menginisialisasi titik-titik secara seragam, sedangkan k-means ++ cenderung menginisialisasi dekat pusat kotak

Xavier Bourret Sicotte
sumber
2

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:

  1. Tidak, karena pusat KMeans ++ didistribusikan melalui data, maka lebih besar kemungkinannya untuk mengurangi biaya (dalam jumlah cluster kuadrat) daripada inisialisasi acak.
  2. karena inisialisasi acak dalam KMeans itu memberikan hasil yang berbeda tergantung pada set pusat awal Anda
  3. pertama-tama tidak ada solusi yang pasti untuk KMeans karena ini adalah pembelajaran tanpa pengawasan, yang dapat kita lakukan adalah mengurangi biaya KMeans (SSE). KM dapat memilih pusat awal dengan cerdas. Diperlukan iterasi yang lebih sedikit untuk berkumpul dan memberikan hasil yang lebih baik daripada Acak
Sanket Badhe
sumber