Clustering con somiglianza del coseno


8

Ho un ampio set di dati e una somiglianza del coseno tra loro. Vorrei raggrupparli usando la somiglianza del coseno che mette insieme oggetti simili senza dover specificare in anticipo il numero di cluster che mi aspetto.

Ho letto la documentazione sklearn di DBSCAN e Affinity Propagation, dove entrambi richiedono una matrice di distanza (non matrice di somiglianza del coseno).

Davvero, sto solo cercando un algoritmo che non richiede a) una metrica di distanza eb) un numero predefinito di cluster .

Qualcuno sa di un algoritmo che lo farebbe?

Risposte:


8

Innanzitutto, ogni algoritmo di clustering utilizza una sorta di metrica della distanza. Il che è davvero importante, perché ogni metrica ha le sue proprietà ed è adatta a diversi tipi di problemi.

Hai detto di avere una somiglianza del coseno tra i tuoi record, quindi questa è in realtà una matrice di distanza. È possibile utilizzare questa matrice come input in alcuni algoritmi di clustering.

Ora, suggerirei di iniziare con il clustering gerarchico: non richiede un numero definito di cluster e puoi inserire dati e selezionare una distanza o inserire una matrice di distanza (dove hai calcolato la distanza in qualche modo).

Si noti che il clustering gerarchico è costoso da calcolare, quindi se si dispone di molti dati, è possibile iniziare solo con un campione.


Grazie per la risposta utile Ho un problema simile come questo datascience.stackexchange.com/questions/20198 e vorrei utilizzare la risposta fornita. Tuttavia, per trovare i punti più vicini al centroide usa la distanza minima del coseno. Se sto usando la somiglianza del coseno, sarebbe la somiglianza del coseno più alta?
Smith Volka,

1
Puoi semplicemente convertire la distanza in somiglianza. Se la distanza da A a B è 0,3, la somiglianza sarà 1-0,3 = 0,7.
HonzaB,

3

DBSCAN può essere banalmente implementato con una misura di somiglianza anziché con una distanza. Devi solo cambiare <= epsilon in a> = epsilon.

HAC funziona anche bene con le somiglianze (almeno single-link, complete-link, UPGMA, WPGMA - non usare Ward), se si scambia "min" e "max" (si desidera unire con la massima somiglianza piuttosto che minima distanza).

Se sei pigro, puoi anche trasformare la tua somiglianza in una distanza. Se hai un limite fisso, spesso lo farà dist = max-sim.


Grazie per la risposta. cosa intendeva ypu con epsilon in <= epsilon in a> = epsilon?
Smith Volka,

Ok, il valore predefinito di eps in sklearn è 0,5. È corretto se aumento questo valore (ad es. 0,8). È quello che volevi dire nella tua risposta?
Smith Volka,

DBSCAN utilizza una soglia di distanza epsilon massima. Con GDBSCAN, puoi anche utilizzare una somiglianza minima. devi cambiare il codice, non il parametro . Sklearn non supporta una somiglianza. ELKI ha il supporto diretto per le funzioni di somiglianza in GDBSCAN tramite SimilarityNeighborPredicate.
Ha QUIT - Anony-Mousse il

Se non riesci a programmare, puoi seguire l'approccio "pigro" che ho citato. Dovrebbe dare gli stessi risultati.
Ha QUIT - Anony-Mousse il

Cosa intendi con Se hai un massimo fisso, spesso lo farà dist = max-sim? Sono interessato a provarlo.
Smith Volka,

3

Userei il clustering gerarchico di 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")

Cè il clustering dei documenti docs.

Puoi utilizzare altre metriche anziché cosinee utilizzare una soglia diversa da0.1


"docs" è la matrice di dati originale? Dove posizionare la matrice di dati o dove posizionare la matrice di somiglianza del coseno? grazie
Bill Ancalagon il nero del

1
docssono i documenti, Zè la matrice di somiglianza del coseno
Uri Goren,

3

Penso che il pacchetto clustMixType possa darti risultati / approfondimenti migliori.

Utilizzando questo pacchetto è possibile utilizzare direttamente la combinazione di dati categorici e numerici, non è necessario alcun tipo di codifica a caldo.

Devi solo inserire i dati e questi si separano automaticamente in dati categorici e numerici, se trovi problemi al momento della segregazione puoi usare funzioni come as.factor(to convert to a categorical)e as.numeric(to convert to a Numeric field).

Puoi calcolare in Lambda(mean Distance value)anticipo e inserire come input per l'algoritmo.

Se non si conosce il numero ottimale di cluster, è possibile utilizzare WSS(within Sum of Squares), plot(elbow chart)per decidere il numero ottimale di cluster.


2

Tutti i metodi di clustering utilizzano una metrica di distanza di qualche tipo. E ricorda che la distanza è essenzialmente una misura di dissomiglianza. Quindi, se normalizzi la tua somiglianza tra 0 e 1, la distanza è semplicemente 1-somiglianza

Per quanto riguarda gli algoritmi che non richiedono un numero di cluster da specificare, esistono ovviamente tecniche di clustering gerarchico, che essenzialmente costruiscono un albero come una struttura che puoi "tagliare" ovunque tu voglia (puoi usare alcune metriche di perfomance per farlo automaticamente )

X-medie è una versione di K-medie che prova un certo numero di K e sceglie quella che massimizza alcune funzioni di valutazione.

Lo spostamento medio inoltre "trova" un numero naturale di cluster, ma è sensibile ad altri parametri come ad esempio la banda con.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.