本文所有实现代码均来自《Python机器学习及实战》

#-*- coding:utf-8 -*-#分别导入numpy、matplotlib、pandas,用于数学运算、作图以及数据分析
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd #第一步:使用pandas读取训练数据和测试数据
digits_train = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/optdigits/optdigits.tra',header=None)
digits_test = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/optdigits/optdigits.tes',header=None)#第二步:已知原始数据有65个特征值,前64个是像素特征,最后一个是每个图像样本的数字类别
#从训练集和测试集上都分离出64维度的像素特征和1维度的数字目标
X_train = digits_train[np.arange(64)]
y_train = digits_train[64]
X_test = digits_test[np.arange(64)]
y_test = digits_test[64]#第三步:使用KMeans模型进行训练并预测
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=10)
kmeans.fit(X_train)
kmeans_y_predict = kmeans.predict(X_test)#第四步:评估KMeans模型的性能
#如何评估聚类算法的性能?
#1.Adjusted Rand Index(ARI) 适用于被用来评估的数据本身带有正确类别的信息,ARI指标和计算Accuracy的方法类似
#2.Silhouette Coefficient(轮廓系数) 适用于被用来评估的数据没有所属类别 同时兼顾了凝聚度和分散度,取值范围[-1,1],值越大,聚类效果越好
from sklearn.metrics import adjusted_rand_score
print 'The ARI value of KMeans is',adjusted_rand_score(y_test,kmeans_y_predict)
#到此为止,手写体数字图像聚类--kmeans学习结束,下面单独讨论轮廓系数评价kmeans的性能#****************************************************************************************************
#拓展学习:利用轮廓系数评价不同累簇数量(k值)的K-means聚类实例
from sklearn.metrics import silhouette_score
#分割出3*2=6个子图,并且在1号子图作图 subplot(nrows, ncols, plot_number)
plt.subplot(3,2,1)
#初始化原始数据点
x1 = np.array([1,2,3,1,5,6,5,5,6,7,8,9,7,9])
x2 = np.array([1,3,2,2,8,6,7,6,7,1,2,1,1,3])
# a = [1,2,3] b = [4,5,6] zipped = zip(a,b) 输出为元组的列表[(1, 4), (2, 5), (3, 6)]
X = np.array(zip(x1,x2)).reshape(len(x1),2)
#X输出为:array([[1, 1],[2, 3],[3, 2],[1, 2],...,[9, 3]])
#在1号子图作出原始数据点阵的分布
plt.xlim([0,10])
plt.ylim([0,10])
plt.title('Instances')
plt.scatter(x1,x2)
colors = ['b','g','r','c','m','y','k','b']
markers = ['o','s','D','v','^','p','*','+']
clusters = [2,3,4,5,8]
subplot_counter = 1
sc_scores = []for t in clusters:subplot_counter += 1plt.subplot(3,2,subplot_counter)kmeans_model = KMeans(n_clusters=t).fit(X)for i,l in enumerate(kmeans_model.labels_):plt.plot(x1[i],x2[i],color=colors[l],marker=markers[l],ls='None')plt.xlim([0,10])plt.ylim([0,10])   sc_score = silhouette_score(X,kmeans_model.labels_,metric='euclidean')sc_scores.append(sc_score)#绘制轮廓系数与不同类簇数量的直观显示图plt.title('K=%s,silhouette coefficient = %0.03f'%(t,sc_score))
#绘制轮廓系数与不同类簇数量的关系曲线plt.figure() #此处必须空一行,表示在for循环结束之后执行!!!
plt.plot(clusters,sc_scores,'*-') #绘制折线图时的样子
plt.xlabel('Number of Clusters')
plt.ylabel('Silhouette Coefficient Score')
plt.show()
#****************************************************************************************************#总结:
#k-means聚类模型所采用的迭代式算法,直观易懂并且非常实用,但是有两大缺陷
#1.容易收敛到局部最优解,受随机初始聚类中心影响,可多执行几次k-means来挑选性能最佳的结果
#2.需要预先设定簇的数量,通过“肘部观察法”,选择拐点对应的k值


补充:

  • 由折线图可知,在k=3时 ,对应的轮廓系数值是最大的,那么我们将采用k=3时的训练模型,为此例中最佳的模型;
  • 值得一提的是,这里的折线图纵轴是轮廓系数,而不是“肘部”观察法采用的距离平方和的均值,二者不要混淆,下一讲中会详细讲解如何使用“肘部”观察法。

12.【基础】手写体数字图像聚类--KMeans相关推荐

  1. 算法杂货铺——k均值聚类(K-means)

    算法杂货铺--k均值聚类(K-means) 2010-09-20 20:05 by T2噬菌体, 57998 阅读, 48 评论, 收藏, 编辑 4.1.摘要 在前面的文章中,介绍了三种常见的分类算法 ...

  2. 【Python数据分析学习笔记Day3】(三)数据分析工具pandas,数据清洗,聚类K-Means

    Pandas学习 https://blog.csdn.net/qq_41251963/article/details/103904044 Pandas数据结构 import pandas as pd ...

  3. 基于划分的聚类----K-means算法使用(R语言)

    library(amap)#这个包里有kmeans函数 library(R2SWF) library(animation)#导入包,后两个是作动画的包 customer <- read.csv( ...

  4. 无监督聚类 -- Kmeans

    无监督聚类 – K-means Kmeans将数据划分为几个等方差的类,并且使类内方差最小(minimizing a criterion known as the inertia or within- ...

  5. K-均值聚类(K-Means) C++代码实现

    K-均值聚类(K-Means)简介可以参考: http://blog.csdn.net/fengbingchun/article/details/79276668 以下是K-Means的C++实现,c ...

  6. R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据

    R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据 目录 R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据

  7. R语言聚类分析之基于划分的聚类KMeans实战:基于菌株数据

    R语言聚类分析之基于划分的聚类KMeans实战:基于菌株数据 目录 R语言聚类分析之基于划分的聚类KMeans实战:基于菌株数据

  8. OpenCV k均值聚类kmeans clustering的实例(附完整代码)

    OpenCV k均值聚类kmeans clustering的实例 OpenCV k均值聚类kmeans clustering的实例 OpenCV k均值聚类kmeans clustering的实例 # ...

  9. C语言实现聚类K-means cluster算法(附完整源码)

    聚类K-means cluster算法 实现聚类K-means cluster算法的完整源码(定义,实现,main函数测试) 实现聚类K-means cluster算法的完整源码(定义,实现,main ...

最新文章

  1. Python报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 199: illegal multibyte s
  2. 简单易懂的 pwnable.kr 第一题[fd]Writeupt
  3. BAT Window批量重命名
  4. ftp 传输速度_ftp上传工具下载,8款优秀的ftp上传工具下载软件
  5. 初学Struts遇到的坑爹问题
  6. java shiro jwt_Springboot实现Shiro整合JWT的示例代码
  7. 关于std::string和 C-style string的一些知识点备忘
  8. Java中的引用数据类型-BigDecimal
  9. 八数码 详解(C++)
  10. php 安卓百度地图,Android百度地图开发总结
  11. 全球与中国心脏临床信息系统(CIS)市场深度研究分析报告
  12. 企业数据总线(ESB)和注册服务管理(dubbo)的区别{{1033}}
  13. 本周最新文献速递20211128
  14. java读取文件相对路径_Java相对路径读取文件
  15. 数据库第6章总结——关系数据理论
  16. 操作系统基础概念大扫盲 - 操作系统系列(一)(持续更新,争取完整)
  17. 大学物理简明教程笔记
  18. 连续时间正弦信号和离散时间正弦信号
  19. 微信支付退款接口证书使用
  20. OneNote子弹笔记(How to Bullet Journal with OneNote)

热门文章

  1. NetBeans 生成代码调用webService调用sopa
  2. Linux服务器手动搭建(ubuntu)操作简单
  3. 光盘刻录系列之假重写之文件名检测冲突
  4. Speak2Me:社会性线上英语交流系统
  5. conda常用命令(Anaconda Prompt管理员身份运行)
  6. Android中demo的编写
  7. boilerplate_完整的React Boilerplate教程-从零到英雄
  8. Heartbleed第一篇:“心脏流血”高危漏洞情况通报(4月9日结果)
  9. 使用飞桨PaddleSeg实现语义分割识别天空(一)
  10. 最强大脑——数字华容道(BFS)