2016-11-08 4 views
0

ich jupyter Notebook verwenden hier ist die Kernel InformationenK-Means Clustering Farbwechsel nicht

Python 3.5.2 | Anaconda 4.1.1 (64-Bit) | (Standard, 2. Juli 2016, 17:53:06) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]

Ich verwende k-Means-Clustering. Wenn ich cluster, ist die einzige Farbe, die verwendet wird, blau. Das ist kein großes Problem mit der Einrichtung im Moment, aber ich muss es skalieren, damit die Farben anders sein müssen. Ich bin einem Tutorial gefolgt, daher verstehe ich den ganzen Code nicht 100%. Der Code ist unten.

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import style 
style.use("ggplot") 
from sklearn.cluster import KMeans 

x = [1,5,1.5,8,1,9] 
y = [2,8,1.8,8,.6,11] 

plt.scatter(x,y) 
plt.show() 

X = np.array([[1,2],[5,8],[1.5,1.8],[8,8],[1,.6],[9,11]]) 

kmeans = KMeans(n_clusters=2) 
kmeans.fit(X) 

centroids = kmeans.cluster_centers_ 
labels = kmeans.labels_ 

print(centroids) 
print(labels) 

colors = ['r','b','y','g','c','m'] 

for i in range(len(X)): 
    print("coordinate:",X[i], "label:", labels[i]) 
    plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize = 10) 

plt.scatter(centroids[:, 0],centroids[:, 1], marker = "x", s=150, linewidths = 5, zorder = 10) 

plt.show() 

plt.scatter(x,y) 
plt.scatter(centroids[:, 0],centroids[:, 1], marker = "x", s=150, linewidths = 5, zorder = 10) 

plt.show() 

Ich denke, mein Problem liegt es dieses Stück.

colors = ['r','b','y','g','c','m'] 

for i in range(len(X)): 
    print("coordinate:",X[i], "label:", labels[i]) 
    plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize = 10) 

Antwort

1

Ich war tatsächlich falsch. Meine vorherige Lösung war falsch. Ich könnte mir endlich die Rückkehr von Labels und Zentroiden ansehen, und ich denke, das sollte tun, was Sie gefragt haben.

Sie können eine Sequenz als Argument geben für die Farbe = Argument, so gibt es keine Notwendigkeit für die fol-Schleife

colors = ['r','b','y','g','c','m'] 
plt.scatter(x,y, color=[colors[l_] for l_ in labels], label=labels) 
plt.scatter(centroids[:, 0],centroids[:, 1], color=[c for c in colors[:len(centroids)]], marker = "x", s=150, linewidths = 5, zorder = 10)