K-means&PCA on handwritten digits

关键技术

  • PCA降维
  • K-means聚类
from time import time
import numpy as np
import matplotlib.pyplot as plt

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

np.random.seed(7)

digits = load_digits()
data = scale(digits.data)
n_samples, n_features = data.shape
n_digits = len(np.unique(digits.target))
labels = digits.target
sample_size = 300

print("n_digits: %d, \t n_samples %d, \t n_features %d" % (n_digits, n_samples, n_features))

reduce_data = PCA(n_components=2).fit_transform(data)
kmeans = KMeans(init='k-means++', n_clusters=n_digits, n_init=10)
kmeans.fit(reduce_data)

plt.figure()
plt.clf()
colors = ['b', 'c', 'g', 'k', 'm', 'r', 'navy', 'y', 'darkorange', 'turquoise']
target_names = range(10)
centroids = kmeans.cluster_centers_
for (color, i, target_name) in zip(colors, target_names, target_names):
    plt.scatter(reduce_data[labels == i, 0], reduce_data[labels == i, 1], s=2, color=color, lw=2, label=target_name)
plt.legend(loc='best', shadow=False, scatterpoints=1)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='v', s=100, linewidths=3, color=colors, zorder=10)
plt.show()

使用sklearn库发现非常简单
结果如下


clustering_on_hw_digits.png

虽然没有分的很开,但是相同数字还是聚合在一起的。可以使用其他聚类方法实现,效果会更好,后面介绍。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 无监督学习 利用无标签的数据学习数据的分布或数据与数据之间的关系被称作无监督学习 有监督学习和无监督学习的最大区别...
    不做大哥好多年阅读 4,656评论 0 9
  • 很多机器学习的问题都会涉及到有着几千甚至数百万维的特征的训练实例。这不仅让训练过程变得非常缓慢,同时还很难找到一个...
    城市中迷途小书童阅读 3,798评论 0 2
  • 一、PCA 【Principle Component Analysis】 以下内容大部分出自这里,这里。主成分分...
    喔蕾喔蕾喔蕾蕾蕾阅读 3,108评论 0 5
  • 原来的云不躲风雨, 原来的火不识红曲。 原来的你不曾哭泣, 原来的我不懂别离。 我走在喧闹的街头, 穿过人群, 望...
    徐達開阅读 217评论 2 5
  • 通过听王菲老师《网络助我成长》的课,我受益匪浅。王老师在乡村从教十多年,从应试教育到素质教育再到网络教育,让...
    松阳310叶扬舟阅读 148评论 0 0