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?
sumber
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.
sumber
SimilarityNeighborPredicate
.Saya akan menggunakan pengelompokan hierarki sklearn
C
adalah pengelompokan dokumen Andadocs
.Anda dapat menggunakan metrik lainnya
cosine
, dan menggunakan ambang berbeda dari0.1
sumber
docs
adalah dokumen,Z
adalah matriks kesamaan cosinusSaya 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)
danas.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.sumber
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.
sumber