Menginisialisasi pusat K-means dengan cara subsampel acak dari dataset?


13

Jika saya memiliki dataset tertentu, seberapa pintarkah untuk menginisialisasi pusat cluster dengan menggunakan sampel acak dari dataset tersebut?

Misalnya, saya ingin 5 clusters. Saya 5 random sampleskatakan, size=20%dari dataset asli. Bisakah saya mengambil rata-rata dari masing-masing 5 sampel acak ini dan menggunakan rata-rata tersebut sebagai 5 pusat klaster awal saya? Saya tidak tahu di mana saya membaca ini tetapi saya ingin tahu apa yang kalian pikirkan tentang ide itu.


UPDATE: Silakan lihat utas ini Menginisialisasi K-means clustering: apa metode yang ada? untuk diskusi umum tentang berbagai metode inisialisasi.


11
Jika Anda secara acak membagi sampel menjadi 5 subsamples, berarti 5 Anda hampir akan bertepatan. Apa arti dari membuat titik-titik dekat seperti itu menjadi pusat-pusat cluster awal? Di sebagian besar implementasi K-means, pemilihan default pusat cluster awal didasarkan pada ide yang berlawanan: untuk menemukan 5 poin yang paling berjauhan dan menjadikannya pusat awal.
ttnphns

2
@ttnphns Ini akan menjadi jawaban yang bagus.

2
Saya akan berpikir akan jauh lebih baik untuk memilih mean keseluruhan sebagai satu poin dan memilih yang lain yang jauh dari pusat itu di berbagai arah.
Michael R. Chernick

1
Masuk akal. Bagaimana saya mencari-cari 5 poin yang berjauhan ini? Terima kasih!
JEquihua

@JEquihua, saya memposting komentar saya sebagai jawaban dan menambahkan rincian yang Anda minta.
ttnphns

Jawaban:


16

Jika kamu secara acak membagi sampel menjadi 5 subsamples, berarti 5 Anda hampir akan bertepatan. Apa arti dari membuat titik-titik dekat seperti itu menjadi pusat-pusat cluster awal?

Dalam banyak implementasi K-means, pemilihan default pusat cluster awal didasarkan pada ide yang berlawanan: untuk menemukan 5 poin yang paling berjauhan dan menjadikannya pusat awal. Anda mungkin bertanya apa yang mungkin menjadi cara untuk menemukan titik-titik yang jauh itu? Inilah yang dilakukan K-means SPSS untuk itu:

Ambil k case (titik) dari dataset sebagai pusat awal. Semua kasus lainnya sedang diperiksa kemampuannya untuk menggantikan mereka sebagai pusat awal, dengan ketentuan sebagai berikut:

  • a) Jika kasing jauh dari pusat terdekat dengan jarak antara dua paling dekat satu sama lain, kasing menggantikan pusat dua yang terakhir yang lebih dekat.
  • b) Jika kasing jauh dari pusat 2 yang paling dekat dengan jarak dari pusat ke terdekat dan pusat paling dekat dengan yang terakhir ini, kasing ini menggantikan pusat terdekat dengan itu.

Jika kondisi (a) tidak terpenuhi, kondisi (b) diperiksa; jika tidak puas maka kasing tidak menjadi pusat. Sebagai hasil dari run through cases tersebut kami mendapatkan k maksimal case di cloud yang menjadi pusat awal. Hasil algo ini, meskipun cukup kuat, tidak sepenuhnya tidak sensitif terhadap pilihan mulai dari "setiap k kasus" dan untuk urutan kasus dalam dataset; jadi, beberapa upaya awal acak masih diterima, karena selalu demikian halnya dengan K-means.

Lihat jawaban saya dengan daftar metode inisialisasi populer untuk k-means. Metode pemisahan menjadi subsampel acak (dikritik di sini oleh saya dan orang lain) serta metode yang dijelaskan yang digunakan oleh SPSS - termasuk dalam daftar juga.


1
Setelah saya melakukan apa yang Anda gambarkan, statistik apa yang dapat saya gunakan untuk menentukan titik inisialisasi mana yang mengarah ke partisi yang lebih baik? Terima kasih untuk semua.
JEquihua

Menggunakan titik terbaik sebagai pusat awal sekali tidak menjamin mendapatkan partisi terbaik pada akhirnya, berpikir mereka (dibandingkan dengan pusat awal acak) benar-benar mengurangi kemungkinan terperangkap dalam "lokal optimal", dan mereka mempercepat proses konvergensi . Memvariasikan urutan kasus, lakukan seluruh partisi k-means 2-5 kali, simpan pusat final yang diperoleh, rata-rata dan masukan sebagai yang awal untuk satu klasterisasi akhir. Partisi ini pasti yang terbaik. Anda sebenarnya tidak memerlukan statistik khusus untuk memeriksanya, kecuali jika Anda akan membandingkan partisi dari k yang berbeda .
ttnphns

1
Saya ingin membandingkan partisi k yang berbeda. Apa yang bisa saya gunakan? Apa ide yang bagus? terima kasih telah banyak membantu saya. @ttnphns.
JEquihua

Ada ada sebuah besar jumlah "internal" pengelompokan kriteria . Salah satu yang paling tepat untuk k-means adalah Calinski-Harabasz (F multivariat Fisher's). Google untuk itu atau untuk orang lain.
ttnphns

7

Berarti akan terlalu mirip. Anda bisa juga menemukan mean kumpulan data, dan kemudian menempatkan centroid awal dalam lingkaran kecil / bola di sekitar mean ini.

Jika Anda ingin melihat beberapa skema inisialisasi suara untuk k-means, lihatlah k-means ++. Mereka telah menemukan metode yang cukup pintar untuk menabur k-means.

  • Arthur, D. dan Vassilvitskii, S. (2007).
    k-means ++: keuntungan dari penyemaian yang hati-hati ".
    Prosiding simposium tahunan ACM-SIAM kedelapan belas pada algoritma Discrete

Slide penulis: http://www.ima.umn.edu/~iwen/REU/BATS-Means.pdf


Saya membaca ini, Kelihatannya secara intuitif sangat menguntungkan tetapi saya pikir belum terbukti bahwa itu bekerja lebih baik daripada hanya mengambil banyak poin inisialisasi acak. Saya menemukan kode sederhana ini jika Anda ingin mencobanya: kmpp <- function (X, k) {n <- nrow (X) C <- numerik (k) C [1] <- sampel (1: n, 1) untuk (i dalam 2: k) {dm <- distmat (X, X [C,]) pr <- berlaku (dm, 1, min); pr [C] <- 0 C [i] <- sampel (1: n, 1, prob = pr)} kmeans (X, X [C,])}
JEquihua

Hal ini diketahui secara signifikan mengurangi jumlah iterasi hingga konvergensi dan menghasilkan rata-rata hasil yang lebih baik. Saya dapat mengonfirmasi bahwa dalam percobaan saya sendiri, kmeans ++ adalah jalan yang harus ditempuh. Saya menggunakan implementasi ELKI.
Memiliki QUIT - Anony-Mousse

Apa implementasi ELKI? Di mana saya bisa mencarinya? Salam pembuka!
JEquihua


4

Menggunakan alat sampel acak akan memberi Anda kebalikan dari yang Anda butuhkan, seperti yang ditunjukkan ttnphns dalam komentarnya. Apa yang kita butuhkan adalah cara untuk menemukan titik data yang cukup jauh satu sama lain.

Idealnya, Anda bisa beralih di semua titik, menemukan jarak di antara mereka, menentukan di mana jarak adalah yang terbesar ...

Bukan untuk menghindari niat OP, tapi saya pikir "solusi" dibangun ke dalam algoritma k-means. Kami melakukan beberapa iterasi dan menghitung ulang centroid cluster berdasarkan iterasi sebelumnya. Kami juga biasanya menjalankan algoritma kmeans beberapa kali (dengan nilai awal acak), dan membandingkan hasilnya.

Jika seseorang memiliki pengetahuan apriori , pengetahuan domain, maka itu dapat mengarah pada metode yang lebih baik untuk mengidentifikasi di mana pusat-pusat cluster awal seharusnya. Jika tidak, itu mungkin masalah memilih titik data acak sebagai nilai awal dan kemudian menggunakan beberapa proses dan beberapa iterasi per proses.


Setelah saya melakukan apa yang Anda gambarkan, statistik apa yang dapat saya gunakan untuk menentukan titik inisialisasi mana yang mengarah ke partisi yang lebih baik? Terima kasih untuk semua.
JEquihua

2

k


Masuk akal. Bisakah saya menanyakan hal yang sama dengan yang saya minta kepada Aman. Misalkan saya mengambil jutaan poin awal acak. Apa yang bisa saya gunakan untuk menentukan partisi mana yang terbaik? Salam pembuka! @gmacfarlane
JEquihua

kAlgoritma -maksud iterate sampai mean kuadrat kesalahan (atau berarti kesalahan absolut) diminimalkan dan stabil antara iterasi. Dalam setiap dataset yang diberikan, akan ada sejumlah kombinasi terbatas yang benar-benar meminimalkan MSE ini. Jadi sejuta berjalan mungkin akan menghasilkan antara satu dan sepuluh skema partisi (tergantung pada keanehan data Anda), dan saya akan memilih yang memiliki MSE terendah di antara semua grup.
gregmacfarlane

Saya harus mencatat bahwa jika partisi Anda sangat sensitif terhadap pemilihan poin awal, itu berarti data Anda tidak memiliki kluster alami dan kAlgoritma clustering berarti cara yang terbaik untuk digunakan. Atau, Anda mencoba menyesuaikan lebih banyak cluster daripada data yang ada secara alami.
gregmacfarlane
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.