Кластеризация Python / K-означает: Центроиды цвета со случайными цветами - PullRequest
0 голосов
/ 29 января 2019

Я построил кластеризацию Kmeans в Python на основе данных, импортированных из файла .txt.Я сгенерировал 100 центроидов, и с помощью Matplotlib построены две фигуры, на которых показаны эти центроиды: одна фигура, связывающая облако точек (созданная из файла .txt), которая представляет данные до кластеризациии еще одна фигура, содержащая черные звезды для обозначения каждого центроида.

Что я должен сделать, чтобы нанести каждый центроид на определенный цвет, выбранный случайным образом, вместо черных звезд?Что означает, что каждая группа точек центроидов будет иметь разные цвета.

Код:

import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.cluster import KMeans


#building the 22797x3 array: 


#loading the first array from .txt file, 22797x400 long.
array = np.loadtxt('C:\Scripts/final_array_2.txt', usecols=range(400))  

array = np.float32(array)



#plotting data before the clustering:
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

ax.scatter(result[:, 0], result[:, 1], result[:, 2], alpha = 0.1)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')



# Initializing KMeans, plotting clusters
kmeans = KMeans(n_clusters=100)
# Fitting with inputs
kmeans = kmeans.fit(result)
# Predicting the clusters
labels = kmeans.predict(result)
# Getting the cluster centers
C = kmeans.cluster_centers_
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(result[:, 0], result[:, 1], result[:, 2])
ax.scatter(C[:, 0], C[:, 1], C[:, 2], marker='*', c='#050505', s=1000)

plt.show()

Результаты кода выше

Данные до скопления: https://i.stack.imgur.com/IXa7R.png

Данные после скопления с черными звездами: https://i.stack.imgur.com/1u4JY.png

Что мне нужно получить (аналогичный пример, а не то же облако точек): https://i.stack.imgur.com/K5oDT.png В этом случае это будет 100 цветов, а не только три.

Любая помощь

1 Ответ

0 голосов
/ 24 февраля 2019

Проблема в том, что kmeans.cluster_centers_ возвращает центр каждого найденного кластера.Вам нужно изменить цвет каждой точки данных по ее метке.Используя набор данных iris в качестве примера

from sklearn import datasets
from sklearn.cluster import KMeans
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D


iris = datasets.load_iris()
data = iris.data[:,0:3]
x=data[:,0]
y=data[:,1]
z=data[:,2]
kmeans = KMeans(n_clusters=5)
kmeans = kmeans.fit(data)
labels = kmeans.predict(data)

fig=plt.figure()
ax = fig.add_subplot(111, projection='3d')
ColorsA=plt.cm.viridis(np.linspace(0, 1,5),alpha=0.8) #Equally spaced color 
for i in range(5): #Labels of the clusters 
    xL=[]
    yL=[]
    zL=[]
    for k in range(len(x)):
        if labels[k]==i: #Data points of each cluster 
            xL.append(x[k])
            yL.append(y[k])
            zL.append(z[k])

    ax.scatter(xL,yL,zL,c=ColorsA[i])

enter image description here

Надеюсь, это поможет

...