Diagtwig de dispersión de kmeans: trazar diferentes colores por grupo

Estoy tratando de hacer un diagtwig de dispersión de una salida kmeans que agrupa las oraciones del mismo tema juntas. El problema al que me enfrento es trazar puntos que pertenecen a cada grupo de un color determinado.

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 

Mi problema está en el código inferior para plt.scatter () ; ¿Qué debo usar para el parámetro c ?

  1. cuando uso c=labels en el código, obtengo este error:

number in rbg sequence outside 0-1 range

2. Cuando establezco c= km.labels_ en c= km.labels_ lugar, me c= km.labels_ el error:

ValueError: Color array must be two-dimensional

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

La propiedad color= o c= debe ser un color matplotlib, como se menciona en la documentación para la plot .

Para mapear una etiqueta entera a un color solo hazlo

 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 no desea utilizar los nombres de color de un carácter integrados, puede usar otras definiciones de color. Consulte la documentación sobre los colores de matplotlib.

 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)) 

Ahora tienes diferentes colores para diferentes grupos.

Deberia de funcionar:

 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_]);