Adakah yang bisa menunjukkan saya implementasi k-means (akan lebih baik jika di matlab) yang dapat mengambil matriks jarak dalam input? Implementasi matlab standar membutuhkan matriks observasi dalam input dan tidak mungkin mengubah ukuran kesamaan secara kustom.
clustering
matlab
k-means
Eugenio
sumber
sumber
Jawaban:
Karena k-means perlu dapat menemukan sarana dari himpunan bagian yang berbeda dari poin yang ingin Anda klaster, itu tidak benar-benar masuk akal untuk meminta versi k-means yang mengambil matriks jarak sebagai input.
Anda bisa mencoba k-medoid sebagai gantinya. Ada beberapa implementasi matlab yang tersedia.
sumber
Anda bisa mengubah matriks jarak menjadi data mentah dan memasukkannya ke pengelompokan K-Means. Langkah-langkahnya adalah sebagai berikut:
1) Jarak antara titik N Anda harus kuadratkan dengan euclidean. Melakukan " double centering " dari matriks: Mengurangi mean baris dari setiap elemen; dalam hasilnya, rata-rata kolom pengurangan dari setiap elemen; dalam hasilnya, tambahkan mean matriks ke setiap elemen; bagi dengan minus 2. Matriks yang Anda miliki sekarang adalah matriks SSCP (jumlah-kuadrat-dan-silang) antara titik-titik Anda di mana titik asal diletakkan di pusat geometris awan titik N. (Baca penjelasan tentang pemusatan ganda di sini .)
2) Lakukan PCA (Analisis komponen utama) pada matriks itu dan dapatkan matriks pemuatan komponen NxN . Beberapa kolom terakhir cenderung berjumlah 0, - jadi potong saja. Yang Anda pertahankan sekarang sebenarnya adalah skor komponen utama, koordinat titik N Anda ke komponen utama yang lulus, sebagai sumbu, melalui cloud Anda. Data ini dapat diperlakukan sebagai data mentah yang cocok untuk input K-Means.
PS Jika jarak Anda tidak benar secara geometris kuadrat euclidean Anda mungkin mengalami masalah: matriks SSCP mungkin tidak positif (semi) pasti. Masalah ini dapat diatasi dengan beberapa cara tetapi dengan kehilangan presisi.
sumber
X
(katakanlah N * N) akan menjadi simetris, sehinggacolMeans(X) =rowMeans(X)
dan setelah Anda mengurangi baris atau col berarti:Y=X-rowMeans(X)
,mean(Y)
0You could turn your matrix of distances into raw data
(poin 1 dan 2) saya merujuk, pada dasarnya, untuk penskalaan multidimensi Torgerson (MDS) , di mana pemusatan ganda adalah langkah awal. Silakan cari situs ini (dan Google juga) tentang prosedur itu. "Double centering" adalah konversi jarak (kuadrat) ke dalam matriks produk skalar yang sesuai yang ditentukan pada titik asal dimasukkan ke dalam pusat massa awan titik.Silakan lihat artikel ini, yang ditulis oleh salah satu kenalan saya;)
http://arxiv.org/abs/1304.6899
Ini adalah tentang implementasi k-means umum, yang mengambil matriks jarak sewenang-wenang sebagai input. Ini bisa berupa matriks nonnegatif simetris dengan nol diagonal. Perhatikan bahwa itu mungkin tidak memberikan hasil yang masuk akal untuk matriks jarak aneh. Program ini ditulis dalam C #.
Kode sumber dapat diperoleh dengan mengunjungi tautan di atas, lalu mengklik Format Lain, lalu mengklik Sumber Unduh. Maka Anda akan mendapatkan .tar.gz yang berisi Program.cs. Atau, kode sumber juga dapat disalin dari PDF.
sumber
Anda bisa menggunakan Java Machine Learning Library. Mereka memiliki implementasi K-Means. Salah satu konstruktor menerima tiga argumen
Seseorang dapat dengan mudah memperluas kelas DistanceMeasure untuk mencapai hasil yang diinginkan. Idenya adalah untuk mengembalikan nilai dari matriks jarak kustom dalam metode ukuran (Instance x, Instance y) dari kelas ini.
K-Means ditandai untuk konvergen dengan asumsi sifat-sifat tertentu dari metrik jarak. Jarak Euclidean, jarak Manhattan atau metrik standar lainnya memenuhi asumsi ini. Karena metrik jarak khusus mungkin tidak memenuhi asumsi ini, konstruktor memiliki parameter ketiga yang menentukan jumlah iterasi yang akan dijalankan untuk membangun clusterer.
sumber