web-dev-qa-db-fra.com

nuage de points kmeans: tracer différentes couleurs par grappe

J'essaie de faire un nuage de points d'une sortie kmeans qui regroupe des phrases du même sujet. Le problème auquel je suis confronté est de tracer des points qui appartiennent à chaque cluster d'une certaine couleur.

sentence_list=["Hi how are you", "Good morning" ...] #i have 10 setences
km = KMeans(n_clusters=5, init='k-means++',n_init=10, verbose=1) 
#with 5 cluster, i want 5 different colors
km.fit(vectorized)
km.labels_ # [0,1,2,3,3,4,4,5,2,5]

pipeline = Pipeline([('tfidf', TfidfVectorizer())])
X = pipeline.fit_transform(sentence_list).todense()
pca = PCA(n_components=2).fit(X)
data2D = pca.transform(X)
plt.scatter(data2D[:,0], data2D[:,1])

km.fit(X)
centers2D = pca.transform(km.cluster_centers_)
plt.hold(True)
labels=np.array([km.labels_])
print labels

Mon problème est dans le code du bas pour plt.scatter (); que dois-je utiliser pour le paramètre c?

  1. quand j'utilise c=labels dans le code, j'obtiens cette erreur:

number in rbg sequence outside 0-1 range

2.Lorsque je règle c= km.labels_ à la place, j'obtiens l'erreur:

ValueError: Color array must be two-dimensional

plt.scatter(centers2D[:,0], centers2D[:,1], 
            marker='x', s=200, linewidths=3, c=labels)
plt.show()
14
jxn

La propriété color= Ou c= Doit être une couleur matplotlib, comme mentionné dans la documentation de plot .

Pour mapper une étiquette entière à une couleur, faites

LABEL_COLOR_MAP = {0 : 'r',
                   1 : 'k',
                   ....,
                   }

label_color = [LABEL_COLOR_MAP[l] for l in labels]
plt.scatter(x, y, c=label_color)

Si vous ne souhaitez pas utiliser les noms de couleurs à un caractère intégrés, vous pouvez utiliser d'autres définitions de couleurs. Voir la documentation sur les couleurs matplotlib.

5
Hannes Ovrén
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# Scaling the data to normalize
model = KMeans(n_clusters=5).fit(X)

# Visualize it:
plt.figure(figsize=(8, 6))
plt.scatter(data[:,0], data[:,1], c=model.labels_.astype(float))

Vous avez maintenant une couleur différente pour différents clusters.

17
Zhenye Na

Cela devrait fonctionner:

from sklearn.cluster import KMeans;
cluster = KMeans(10);
cluster.fit(M);

cluster.labels_;

plt.scatter(M[:,0],M[:,1], c=[matplotlib.cm.spectral(float(i) /10) for i in cluster.labels_]);   
0
user3805442