2015-10-08 8 views
5

Ho una matrice di similarità tra quattro utenti. Voglio fare un clustering agglomerato. il codice è come questo:sklearn dati di input clustering agglomerato

lena = np.matrix('1 1 0 0;1 1 0 0;0 0 1 0.2;0 0 0.2 1') 
X = np.reshape(lena, (-1, 1)) 

print("Compute structured hierarchical clustering...") 
st = time.time() 
n_clusters = 3 # number of regionsle 


ward = AgglomerativeClustering(n_clusters=n_clusters, 
     linkage='complete').fit(X) 
print ward 
label = np.reshape(ward.labels_, lena.shape) 
print("Elapsed time: ", time.time() - st) 
print("Number of pixels: ", label.size) 
print("Number of clusters: ", np.unique(label).size) 
print label 

il risultato di stampa di etichette è simile:

[[1 1 0 0] 
[1 1 0 0] 
[0 0 1 2] 
[0 0 2 1]] 

Significa questo dà un elenco di possibili risultato cluster, possiamo scegliere uno da loro? come scegliere: [0,0,2,1]. Se è sbagliato, potresti dirmi come fare l'algoritmo agglomerato basato sulla somiglianza? Se è vero, la matrice di similarità è enorme, come posso scegliere il risultato ottimale del clustering da una lista enorme? Grazie

risposta

1

Credo che il problema qui è che si adatta il modello con i dati errati

# This will return a 4x4 matrix (similarity matrix) 
lena = np.matrix('1 1 0 0;1 1 0 0;0 0 1 0.2;0 0 0.2 1') 

# However this will return 16x1 matrix 
X = np.reshape(lena, (-1, 1)) 

Il vero risultato che si ottiene è questo:

ward.labels_ 
>> array([1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 2, 0, 0, 2, 1]) 

che è l'etichetta di ogni elemento in il vettore X e non ha senso

Se ho ben compreso il tuo problema, devi classificare i tuoi utenti per distanza tra loro (somiglianza). Bene, in questo caso suggerirò di utilizzare il cluster spettrale in questo modo:

import numpy as np 
from sklearn.cluster import SpectralClustering 

lena = np.matrix('1 1 0 0;1 1 0 0;0 0 1 0.2;0 0 0.2 1') 

n_clusters = 3 
SpectralClustering(n_clusters).fit_predict(lena) 

>> array([1, 1, 0, 2], dtype=int32) 
+0

Ma cosa succede se ha bisogno di un clustering gerarchico? – Itay