python - 在 K 均值聚类中组织聚类

标签 python tensorflow machine-learning scikit-learn k-means

我正在使用 python 对 Mnist 数据库 ( http://yann.lecun.com/exdb/mnist/) 进行 k 均值聚类。我能够成功地对数据进行聚类,但无法标记聚类。意思是,我看不到什么簇号包含什么数字。例如,簇 5 可以容纳数字 7。

在完成 k-means 聚类后,我需要编写代码来正确标记聚类。还需要在代码中添加图例。 enter image description here

from __future__ import division, print_function, absolute_import

import tensorflow as tf 
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D  #only needed for 3D plots 
#scikit learn
from sklearn.cluster import KMeans

#pandas to read excel file
import pandas
import xlrd
# Import MNIST data
from tensorflow.examples.tutorials.mnist import input_data


Links:
[MNIST Dataset] http://yann.lecun.com/exdb/mnist/




df = pandas.read_csv('test_encoded_with_label.csv',header=None, 
delim_whitespace=True)
#df = pandas.read_excel('test_encoded_with_label.xls')
#print column names
print(df.columns)


df1 = df.iloc[:,0:2] #0 and 1, the last index is not used for iloc
labels = df.iloc[:,2]
labels = labels.values


dataset = df1.values
#train indices - depends how many samples
trainidx = np.arange(0,9999)
testidx = np.arange(0,9999)
train_data = dataset[trainidx,:]
test_data = dataset[testidx,:]
train_labels = labels[trainidx] #just 1D, no :
tpredct_labels = labels[testidx]


kmeans = KMeans(n_clusters=10, random_state=0).fit(train_data)
kmeans.labels_ 
#print(kmeans.labels_.shape)


plt.scatter(train_data[:,0],train_data[:,1], c=kmeans.labels_)


predct_labels = kmeans.predict(train_data)


print(predct_labels)
print('actual label', tpredct_labels)


centers = kmeans.cluster_centers_
print(centers)

plt.show()

最佳答案

要创建标记来查找标记点簇,您可以使用 annotate方法

这是在 sklearn 数字数据集上运行的示例代码,我在其中尝试标记生成的聚类的质心。请注意,出于说明目的,我只是将集群标记为 0-9:

import numpy as np
import matplotlib.pyplot as plt

from sklearn.cluster import KMeans
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.preprocessing import scale

np.random.seed(42)

digits = load_digits()
data = scale(digits.data)

n_samples, n_features = data.shape
n_digits = len(np.unique(digits.target))
labels = digits.target
h = .02
reduced_data = PCA(n_components=2).fit_transform(data)
kmeans = KMeans(init='k-means++', n_clusters=n_digits, n_init=10)
kmeans.fit(reduced_data)

centroids = kmeans.cluster_centers_
plt_data = plt.scatter(reduced_data[:, 0], reduced_data[:, 1], c=kmeans.labels_, cmap=plt.cm.get_cmap('Spectral', 10))
plt.colorbar()
plt.scatter(centroids[:, 0], centroids[:, 1],
            marker='x')
plt.title('K-means clustering on the digits dataset (PCA-reduced data)\n'
          'Centroids are marked with white cross')
plt.xlabel('component 1')
plt.ylabel('component 2')
labels = ['{0}'.format(i) for i in range(10)]
for i in range (10):
    xy=(centroids[i, 0],centroids[i, 1])
    plt.annotate(labels[i],xy, horizontalalignment='right', verticalalignment='top')
plt.show()

这是你得到的结果:

Result

关于python - 在 K 均值聚类中组织聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52752836/

相关文章:

python - 确定函数是否包含特定方法

python - 如何在每次迭代时仅从一个类中对批处理进行采样

python - 如何处理生成签名 URL 以通过 CloudFront 访问私有(private)内容的性能?

R Keras 压平层 - 得到形状为 1 的数组

tensorflow - 在离线推理(机器学习)的情况下,批处理配额是多少?

python - 在一行中捕获多个异常(除了 block )

tensorflow - 如何在 tensorflow 模型内转换后打印特征值

python - Keras:输入 0 与层 conv1d_5 不兼容:预期 ndim=3,发现 ndim=2

python - 使用 Python 绘制每小时结果

machine-learning - Keras ROC 与 Scikit ROC 不同吗?