Berkelompok dengan kesamaan cosinus

8

Saya memiliki satu set data besar dan persamaan cosinus di antara mereka. Saya ingin mengelompokkannya menggunakan cosine similarity yang menyatukan objek-objek serupa tanpa perlu menentukan sebelumnya jumlah cluster yang saya harapkan.

Saya membaca dokumentasi sklearn DBSCAN dan Affinity Propagation, di mana keduanya membutuhkan matriks jarak (bukan cosine similarity matrix).

Sungguh, saya hanya mencari algoritma yang tidak memerlukan a) metrik jarak dan b) jumlah cluster yang ditentukan sebelumnya .

Adakah yang tahu algoritma yang akan melakukan itu?

Smith Volka
sumber

Jawaban:

8

Pertama, setiap algoritma pengelompokan menggunakan semacam metrik jarak. Yang sebenarnya penting, karena setiap metrik memiliki sifatnya sendiri dan cocok untuk berbagai jenis masalah.

Anda bilang Anda memiliki kesamaan cosinus antara catatan Anda, jadi ini sebenarnya adalah matriks jarak. Anda dapat menggunakan matriks ini sebagai input ke dalam beberapa algoritma pengelompokan.

Sekarang, saya akan menyarankan untuk memulai dengan pengelompokan hierarkis - tidak memerlukan jumlah cluster yang ditentukan dan Anda dapat memasukkan data dan memilih jarak, atau memasukkan matriks jarak (di mana Anda menghitung jarak dengan beberapa cara).

Perhatikan bahwa pengelompokan hierarkis mahal untuk dihitung, jadi jika Anda memiliki banyak data, Anda bisa mulai hanya dengan sampel.

HonzaB
sumber
Terima kasih atas jawaban yang bermanfaat. Saya memiliki masalah yang sama seperti ini datacience.stackexchange.com/questions/20198 dan ingin menggunakan jawaban yang diberikan di dalamnya. Namun, untuk menemukan titik terdekat ke pusat massa ia menggunakan jarak kosinus minimum. Jika saya menggunakan kesamaan cosinus, akankah ini merupakan kesamaan cosinus tertinggi?
Smith Volka
1
Anda cukup mengubah jarak menjadi kesamaan. Jika jarak dari A ke B adalah 0,3, maka kesamaannya adalah 1-0,3 = 0,7.
HonzaB
3

DBSCAN dapat secara sepele diimplementasikan dengan ukuran kesamaan alih-alih jarak. Anda hanya perlu mengubah <= epsilon menjadi a> = epsilon.

HAC juga berfungsi dengan baik dengan kesamaan (setidaknya tautan tunggal, tautan lengkap, UPGMA, WPGMA - jangan gunakan Ward), jika Anda menukar "min" dan "max" (Anda ingin bergabung dengan kemiripan maksimum daripada minimum jarak).

Jika Anda malas, Anda juga bisa mengubah kesamaan Anda menjadi jarak. Jika Anda memiliki maksimum tetap, dist = max-sim akan sering dilakukan.

Memiliki QUIT - Anony-Mousse
sumber
Terima kasih atas jawabannya. apa yang ypu maksud dengan epsilon di <= epsilon menjadi a> = epsilon?
Smith Volka
Ok, nilai default eps di sklearn adalah 0,5. Apakah benar jika saya meningkatkan nilai ini (mis., 0.8). Apakah itu yang Anda maksudkan dalam jawaban Anda?
Smith Volka
DBSCAN menggunakan ambang batas epsilon maksimum. Dengan GDBSCAN, Anda juga dapat menggunakan kesamaan minimum. Anda perlu mengubah kode, bukan parameter . Sklearn tidak mendukung kesamaan. ELKI memiliki dukungan langsung untuk fungsi kesamaan di GDBSCAN via SimilarityNeighborPredicate.
Memiliki QUIT - Anony-Mousse
Jika Anda tidak dapat membuat kode, Anda dapat melakukan pendekatan "malas" yang saya sebutkan. Itu harus memberikan hasil yang sama.
Memiliki QUIT - Anony-Mousse
Apa yang Anda maksud dengan Jika Anda memiliki maksimum tetap, dist = max-sim akan sering dilakukan? Saya tertarik untuk mencobanya.
Smith Volka
3

Saya akan menggunakan pengelompokan hierarki sklearn

from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from scipy.cluster import  hierarchy

#Vectorizing
X = CountVectorizer().fit_transform(docs)
X = TfidfTransformer().fit_transform(X)
#Clustering
X = X.todense()
threshold = 0.1
Z = hierarchy.linkage(X,"average", metric="cosine")
C = hierarchy.fcluster(Z, threshold, criterion="distance")

Cadalah pengelompokan dokumen Anda docs.

Anda dapat menggunakan metrik lainnya cosine, dan menggunakan ambang berbeda dari0.1

Uri Goren
sumber
itu "dokumen" adalah matriks data asli? Di mana harus meletakkan matriks data, atau di mana harus meletakkan matriks kesamaan cosinus? terima kasih
Bill Ancalagon si hitam
1
docsadalah dokumen, Zadalah matriks kesamaan cosinus
Uri Goren
3

Saya pikir paket clustMixType mungkin memberi Anda hasil / wawasan yang lebih baik.

Dengan menggunakan paket ini, Anda dapat menggunakan kombinasi Data Kategorikal dan Numerik secara langsung, tidak memerlukan pengodean panas apa pun.

Anda hanya perlu memberi makan dalam data dan secara otomatis memisahkan ke dalam Data Kategori dan Numerik, jika Anda menemukan masalah pada saat pemisahan Anda dapat menggunakan fungsi seperti as.factor(to convert to a categorical)dan as.numeric(to convert to a Numeric field).

Anda dapat menghitung Lambda(mean Distance value)sebelum tangan dan dimasukkan sebagai input ke algoritma.

Jika Anda tidak tahu jumlah cluster optimal, Anda dapat menggunakan WSS(within Sum of Squares), plot(elbow chart)untuk memutuskan jumlah cluster optimal.

Toros91
sumber
2

Semua metode pengelompokan menggunakan metrik jarak atau sejenisnya. Dan ingat bahwa jarak pada dasarnya adalah ukuran ketidaksamaan. Jadi, jika Anda menormalkan kesamaan Anda antara 0 dan 1, jarak Anda hanyalah 1-kesamaan

Adapun algoritma yang tidak memerlukan sejumlah cluster untuk ditentukan, tentu saja ada teknik pengelompokan hierarkis, yang pada dasarnya membangun struktur seperti pohon yang dapat Anda "potong" di mana pun Anda mau (Anda dapat menggunakan beberapa metrik kinerja untuk melakukannya secara otomatis )

X-means adalah versi K-means yang mencoba sejumlah K dan memilih yang memaksimalkan beberapa fungsi evaluasi.

Pergeseran rata-rata juga "menemukan" sejumlah cluster alami tetapi masuk akal untuk parameter lain seperti bandwidth misalnya.

Valentin Calomme
sumber