Apakah mungkin untuk menentukan fungsi jarak Anda sendiri menggunakan scikit-learn K-Means Clustering?
172
Apakah mungkin untuk menentukan fungsi jarak Anda sendiri menggunakan scikit-learn K-Means Clustering?
Jawaban:
Berikut ini adalah kman kecil yang menggunakan salah satu dari jarak 20-aneh di scipy.spatial.distance , atau fungsi pengguna.
Komentar akan diterima (sejauh ini hanya memiliki satu pengguna, tidak cukup); khususnya, apa metrik N, redup, k, Anda?
Beberapa catatan menambahkan 26mar 2012:
1) untuk jarak cosinus, pertama-tama normalkan semua vektor data ke | X | = 1; kemudian
cepat. Untuk vektor bit, jaga norma-norma secara terpisah dari vektor alih-alih meluas ke float (meskipun beberapa program mungkin meluas untuk Anda). Untuk vektor jarang, katakan 1% dari N, X. Y harus mengambil waktu O (2% N), ruang O (N); tapi saya tidak tahu program mana yang melakukan itu.
2) Scikit-learn clustering memberikan gambaran yang sangat baik tentang k-means, mini-batch-k-means ... dengan kode yang berfungsi pada matriks scipy.sparse.
3) Selalu periksa ukuran cluster setelah k-means. Jika Anda mengharapkan cluster berukuran hampir sama, tetapi mereka keluar
[44 37 9 5 5] %
... (suara menggaruk-garuk kepala).sumber
Sayangnya tidak: scikit-pelajari implementasi k-means saat ini hanya menggunakan jarak Euclidean.
Bukan hal sepele untuk memperluas k-means ke jarak lain dan jawaban denis 'di atas bukanlah cara yang benar untuk mengimplementasikan k-means untuk metrik lainnya.
sumber
Cukup gunakan nltk sebagai gantinya di mana Anda bisa melakukan ini, mis
sumber
repeats
), 1.5k poin membutuhkan 2 menit, dan 2k membutuhkan ... terlalu lama.Ya, Anda dapat menggunakan fungsi metrik perbedaan; Namun, menurut definisi, algoritma klaster k-means bergantung pada jarak eucldiean dari rata-rata setiap klaster.
Anda bisa menggunakan metrik yang berbeda, jadi meskipun Anda masih menghitung rata-rata, Anda bisa menggunakan sesuatu seperti jarak mahalnobis.
sumber
Ada pyclustering yang merupakan python / C ++ (begitu cepat!) Dan memungkinkan Anda menentukan fungsi metrik khusus
Sebenarnya, saya belum menguji kode ini, tetapi menggabungkannya dari kode tiket dan contoh .
sumber
k-means dari Spectral Python memungkinkan penggunaan jarak L1 (Manhattan).
sumber
Sklearn Kmeans menggunakan jarak Euclidean . Tidak memiliki parameter metrik. Ini mengatakan, jika Anda mengelompokkan time series , Anda dapat menggunakan
tslearn
paket python, ketika Anda dapat menentukan metrik (dtw
,softdtw
,euclidean
).sumber