2016-04-05 23 views
1

ben sadece i K-ortalama scikit kullanmak yürütmek için internette arama kodu var benzersiz renkler

piton

yılında Newb i görselleştirmek arsa 3d kodunu modifiye çalıştı ve (her küme renklendirmek 3 küme), ancak sonuç aynı renk ile tüm küme içindir, kod ve aşağıda görselleştirmek:

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import style 
style.use("ggplot") 
from sklearn.cluster import KMeans 
from collections import Counter 
from mpl_toolkits.mplot3d import Axes3D 
from pylab import * 

X = np.array([[1, 2, 5], 
       [5, 8, 2], 
       [1.5, 1.8, 6], 
       [8, 8, 9], 
       [1, 0.6, 10], 
       [2.5, 3.8, 6], 
       [2.5, 5.8, 9], 
       [5, 8, 3], 
       [4, 0.6, 7], 
       [2.5, 1.8, 4.6], 
       [6.5, 1.8, 12], 
       [7, 8, 9], 
       [2, 0.6, 7], 
       [5.5, 1.8, 4], 
       [4.8, 6.9, 6], 
       [4.9, 9.8, 2], 
       [9, 11, 12]]) 


cluster_num = 3 

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

centroids = kmeans.cluster_centers_ 
labels = kmeans.labels_ 

print "centroids : " 
print centroids 
print "labels : " 
print labels 

colors = ["g.","r.","c.","y."] 

color = np.random.rand(cluster_num) 

c = Counter(labels) 


fig = figure() 
ax = fig.gca(projection='3d') 


for i in range(len(X)): 
    print("coordinate:",X[i], "label:", labels[i]) 
    print "i : ",i 
    print "color[labels[i]] : ",color[labels[i]] 
    ax.scatter(X[i][0], X[i][1], X[i][2], c=color[labels[i]]) 


for cluster_number in range(cluster_num): 
    print("Cluster {} contains {} samples".format(cluster_number, c[cluster_number])) 

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

plt.show() 

enter image description here nasıl ben her küme için görselleştirmek kendi rengini var yapabilir? thx

cevap

0

Şu anda color = np.random.rand(cluster_num) üç rastgele sayı üretiyor ve ax.scatter(X[i][0], X[i][1], X[i][2], c=color[labels[i]]) içinde rasgele sayıları renkler olarak atamaya çalışıyorsunuz.

Bunun yerine, color = ["g", "r", "b"] değiştirebilir, böylece ilk küme yeşil, ikinci kırmızı ve üçüncü mavi olur.

ax.scatter(centroids[:, 0],centroids[:, 1], centroids[:, 2], marker = "x", s=150, linewidths = 5, zorder = 100, c=color) 

enter image description here

+0

bu şekilde çalışır: Küme merkezleri için

, aynı parametre olarak geçirmek! thx @ayhan – ihsansat

+0

Merhaba @ayhan, scatter arsada her noktayı nasıl gösterir? Teşekkürler – ihsansat