对应书上的P84页的代码

# 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('optdigits.tra', header=None)
digits_test = pd.read_csv('optdigits.tes', header=None)# 从训练与测试数据集上都分离出64维度的像素特征与1维度的数字目标。
X_train = digits_train[np.arange(64)]#64个属性值
y_train = digits_train[64]#一个结果值X_test = digits_test[np.arange(64)]
y_test = digits_test[64]# 从sklearn.cluster中导入KMeans模型。
from sklearn.cluster import KMeans# 初始化KMeans模型,并设置聚类中心数量为10。
kmeans = KMeans(n_clusters=10)
kmeans.fit(X_train)# 逐条判断每个测试图像所属的聚类中心。
y_pred = kmeans.predict(X_test)# In[2]:# 从sklearn导入度量函数库metrics。
from sklearn import metrics
# 使用ARI进行KMeans聚类性能评估。
print metrics.adjusted_rand_score(y_test, y_pred)# 导入numpy。
import numpy as np
# 从sklearn.cluster中导入KMeans算法包。
from sklearn.cluster import KMeans
# 从sklearn.metrics导入silhouette_score用于计算轮廓系数。
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt# 分割出3*2=6个子图,并在1号子图作图。
plt.subplot(3,2,1)#这里的意思是这六个子图是呈3行2列排序的。# 初始化原始数据点。
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])
X = np.array(zip(x1, x2)).reshape(len(x1), 2)#zip(x1, x2)的意思就是拼接起来变成一个坐标。
#X就是点的坐标的集合
#reshape的作用就是让列表的元素也是列表,如果没有reshape这个函数,那么列表的元素是元组
#所以reshape对输出功能没有影响,只是让输出的形式发生了改变。# 在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:#t表示上面list中的某个参数的具体值print('t=',t)subplot_counter += 1print('subplot_counter=',subplot_counter)#参数subplot_counter之所以从2开始计数,是因为前面已经画过一个图了plt.subplot(3, 2, subplot_counter)#subplot表示画在同一张图中的子图kmeans_model = KMeans(n_clusters=t).fit(X)#表示将数据集X,分成t类for i, l in enumerate(kmeans_model.labels_):#i和l都是标记,一个用来指代坐标值,一个用来指代颜色和标记。plt.plot(x1[i], x2[i], color=colors[l], marker=markers[l], ls='None')#i用来选定坐标,color表示画marker时填充的颜色,marker表示画图时用的图形标记plt.xlim([0, 10])plt.ylim([0, 10])sc_score = silhouette_score(X, kmeans_model.labels_, metric='euclidean')#这个讲的是轮廓系数sc_scores.append(sc_score)#sc_scores是前面定义的# 绘制轮廓系数与不同类簇数量的直观显示图。plt.title('K = %s, silhouette coefficient= %0.03f' %(t, sc_score))#句子中两个%分别对应后面得t和sc_score# 绘制轮廓系数与不同类簇数量的关系曲线。对应书本P88图2-12中的曲线
plt.figure()
plt.plot(clusters, sc_scores, '*-')
plt.xlabel('Number of Clusters')
plt.ylabel('Silhouette Coefficient Score')plt.show()# 导入必要的工具包。
import numpy as np
from sklearn.cluster import KMeans
from scipy.spatial.distance import cdist
import matplotlib.pyplot as plt# 使用均匀分布函数随机三个簇,每个簇周围10个数据样本。
cluster1 = np.random.uniform(0.5, 1.5, (2, 10))#random.uniform(x, y)表示随机范围在x和y之间
cluster2 = np.random.uniform(5.5, 6.5, (2, 10))
cluster3 = np.random.uniform(3.0, 4.0, (2, 10))# 绘制30个数据样本的分布图像。
X = np.hstack((cluster1, cluster2, cluster3)).T#hstack用来串行连接3个数组
print('X=',X)
plt.scatter(X[:,0], X[:, 1])
print('X[:,0]=',X[:,0])#取得X中的第一列数据
print('X[:,1]=',X[:,1])#取得X中的第二列数据
plt.xlabel('x1')
plt.ylabel('x2')
plt.show()# 测试9种不同聚类中心数量下,每种情况的聚类质量,并作图。
#下面代码就是为了绘制图2-15的
K = range(1, 10)
print("------------------------------")
print("K=",K)
meandistortions = []for k in K:#K是个范围kmeans = KMeans(n_clusters=k)#这里的意思是分成k类kmeans.fit(X)meandistortions.append(sum(np.min(cdist(X, kmeans.cluster_centers_, 'euclidean'), axis=1))/X.shape[0])#cdist来自scipy,用来计算距离,这里特别代指欧氏距离
plt.plot(K, meandistortions, 'bx-')
plt.xlabel('k')
plt.ylabel('Average Dispersion')
plt.title('Selecting k with the Elbow Method')
plt.show()

K-means算法在手写体数字图像数据上的使用示例-代码详解相关推荐

  1. 【OpenCV/C++】KNN算法识别数字的实现原理与代码详解

    KNN算法识别数字 一.KNN原理 1.1 KNN原理介绍 1.2 KNN的关键参数 二.KNN算法识别手写数字 2.1 训练过程代码详解 2.2 预测分类的实现过程 三.KNN算法识别印刷数字 2. ...

  2. kmeans改进 matlab,基于距离函数的改进k―means 算法

    摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...

  3. Android实战:CoolWeather酷欧天气(加强版数据接口)代码详解(上)

    -----------------------------------该文章代码已停更,可参考浩比天气(更新于2019/6/25)----------------------------------- ...

  4. 【目标检测算法-锚框公式推导及代码详解】

    目标检测算法-锚框公式推导及代码详解 0 沐神对锚框的宽高计算并未推导以及讲解 1 锚框宽高公式推导 1.1 基础概念 1.2 锚框宽高公式推导 1.3 图片验证计算 1.4 小结 2 代码详解 2. ...

  5. 史上最简单MySQL教程详解(进阶篇)之索引及失效场合总结

    史上最简单MySQL教程详解(进阶篇)之索引及其失效场合总结 什么是索引及其作用 索引的种类 各存储引擎对于索引的支持 简单介绍索引的实现 索引的设置与分析 普通索引 唯一索引(Unique Inde ...

  6. 大数据是什么和大数据技术十大核心原理详解

     一.数据核心原理   从"流程"核心转变为"数据"核心   大数据时代,计算模式也发生了转变,从"流程"核心转变为"数据&quo ...

  7. kmeans python interation flag_机器学习经典算法-logistic回归代码详解

    一.算法简要 我们希望有这么一种函数:接受输入然后预测出类别,这样用于分类.这里,用到了数学中的sigmoid函数,sigmoid函数的具体表达式和函数图象如下: 可以较为清楚的看到,当输入的x小于0 ...

  8. 史上最小白之BM25详解与实现

    史上最小白之BM25详解与实现 原理 BM25算法是一种计算句子与文档相关性的算法,它的原理十分简单:将输入的句子sentence进行分词,然后分别计算句子中每个词word与文档doc的相关度,然后进 ...

  9. 史上最小白之Transformer详解

    1.前言 博客分为上下两篇,您现在阅读的是下篇史上最小白之Transformer详解,在阅读该篇博客之前最好你能够先明白Encoder-Decoder,Attention机制,self-Attenti ...

最新文章

  1. iphone退款申请教程_王者荣耀账号注销退钱吗?王者荣耀账号注销100%退款教程...
  2. Kubernetes Service 对象的使用
  3. webpack、rollup、parcel 它们的优劣?_尾货批发与正价批发优劣势,你有二者兼顾吗?...
  4. 关于PHP安装扩展pdo_odbc
  5. 1.8 小飞的电梯调度算法
  6. Cannot resolve field [content], input field list:[contents].
  7. 38 NoSQL-memcached
  8. 折纸机器人的步骤图解_折纸图解公牛
  9. 数据库备份与恢复 之四 选择数据库还原方案
  10. 【快速迭代】【原型开发】
  11. 地图,GPS位置地图坐标系:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图),OpenGIS
  12. 基于matlab摄像毕业设计,基于MATLAB的车牌识别毕业设计
  13. 井下三专两闭锁的内容_三专两闭锁
  14. Web攻防之业务安全指南(网盘下载)
  15. CorelDRAW2021新增功能及增强内容
  16. gee学习2数据获取、数据筛选、创建地理要素
  17. 微信开发小程序报wxss编译错误
  18. python ez setup.py_python 安装 ez_setup.py出现的问题及解决办法
  19. Windows server 2016 AD域的安装和升级域控制器
  20. 如何逃脱老鼠奔跑试的工作?

热门文章

  1. js 进阶篇 代码等级提升
  2. Vue项目实战01: vue里父传子 传事件(easy)
  3. php ssc 源码_吃透这篇,你也能搭建出一个高并发和高性能的系统
  4. java中HashMap遍历详解
  5. onclick 传参,用转义符进行转义。
  6. 原生ajax请求及readyState的几种状态
  7. 分布式机器学习框架:MxNet
  8. 充电网完成数千万元Pre-B轮融资,将会聚焦新能源乘用车市场
  9. SAP面向iOS设备推Cloud Platform SDK工具
  10. linux运维决心书!