1. import numpy as np
  2.  
  3. from sklearn.datasets import make_blobs
  4. from sklearn.cluster import KMeans
  5. from sklearn.metrics import pairwise_distances
  6. import matplotlib.pyplot as plt
  7. import matplotlib as mpl
  8. from cycler import cycler
  9.  
  10. from .tools import discrete_scatter
  11. from .plot_2d_separator import plot_2d_classification
  12. from .plot_helpers import cm3
  13.  
  14. def plot_kmeans_algorithm():
  15.  
  16. X, y = make_blobs(random_state=1)
  17. # we don't want cyan in there
  18. with mpl.rc_context(rc={'axes.prop_cycle': cycler('color', ['#0000aa',
  19. '#ff2020',
  20. '#50ff50'])}):
  21. fig, axes = plt.subplots(3, 3, figsize=(10, 8), subplot_kw={'xticks': (), 'yticks': ()})
  22. axes = axes.ravel()
  23. axes[0].set_title("Input data")
  24. discrete_scatter(X[:, 0], X[:, 1], ax=axes[0], markers=['o'], c='w')
  25.  
  26. axes[1].set_title("Initialization")
  27. init = X[:3, :]
  28. discrete_scatter(X[:, 0], X[:, 1], ax=axes[1], markers=['o'], c='w')
  29. discrete_scatter(init[:, 0], init[:, 1], [0, 1, 2], ax=axes[1],
  30. markers=['^'], markeredgewidth=2)
  31.  
  32. axes[2].set_title("Assign Points (1)")
  33. km = KMeans(n_clusters=3, init=init, max_iter=1, n_init=1).fit(X)
  34. centers = km.cluster_centers_
  35. # need to compute labels by hand. scikit-learn does two e-steps for max_iter=1
  36. # (and it's totally my fault)
  37. labels = np.argmin(pairwise_distances(init, X), axis=0)
  38. discrete_scatter(X[:, 0], X[:, 1], labels, markers=['o'],
  39. ax=axes[2])
  40. discrete_scatter(init[:, 0], init[:, 1], [0, 1, 2],
  41. ax=axes[2], markers=['^'], markeredgewidth=2)
  42.  
  43. axes[3].set_title("Recompute Centers (1)")
  44. discrete_scatter(X[:, 0], X[:, 1], labels, markers=['o'],
  45. ax=axes[3])
  46. discrete_scatter(centers[:, 0], centers[:, 1], [0, 1, 2],
  47. ax=axes[3], markers=['^'], markeredgewidth=2)
  48.  
  49. axes[4].set_title("Reassign Points (2)")
  50. km = KMeans(n_clusters=3, init=init, max_iter=1, n_init=1).fit(X)
  51. labels = km.labels_
  52. discrete_scatter(X[:, 0], X[:, 1], labels, markers=['o'],
  53. ax=axes[4])
  54. discrete_scatter(centers[:, 0], centers[:, 1], [0, 1, 2],
  55. ax=axes[4], markers=['^'], markeredgewidth=2)
  56.  
  57. km = KMeans(n_clusters=3, init=init, max_iter=2, n_init=1).fit(X)
  58. axes[5].set_title("Recompute Centers (2)")
  59. centers = km.cluster_centers_
  60. discrete_scatter(X[:, 0], X[:, 1], labels, markers=['o'],
  61. ax=axes[5])
  62. discrete_scatter(centers[:, 0], centers[:, 1], [0, 1, 2],
  63. ax=axes[5], markers=['^'], markeredgewidth=2)
  64.  
  65. axes[6].set_title("Reassign Points (3)")
  66. labels = km.labels_
  67. discrete_scatter(X[:, 0], X[:, 1], labels, markers=['o'],
  68. ax=axes[6])
  69. markers = discrete_scatter(centers[:, 0], centers[:, 1], [0, 1, 2],
  70. ax=axes[6], markers=['^'],
  71. markeredgewidth=2)
  72.  
  73. axes[7].set_title("Recompute Centers (3)")
  74. km = KMeans(n_clusters=3, init=init, max_iter=3, n_init=1).fit(X)
  75. centers = km.cluster_centers_
  76. discrete_scatter(X[:, 0], X[:, 1], labels, markers=['o'],
  77. ax=axes[7])
  78. discrete_scatter(centers[:, 0], centers[:, 1], [0, 1, 2],
  79. ax=axes[7], markers=['^'], markeredgewidth=2)
  80. axes[8].set_axis_off()
  81. axes[8].legend(markers, ["Cluster 0", "Cluster 1", "Cluster 2"], loc='best')
  82.  
  83. def plot_kmeans_boundaries():
  84. X, y = make_blobs(random_state=1)
  85. init = X[:3, :]
  86. km = KMeans(n_clusters=3, init=init, max_iter=2, n_init=1).fit(X)
  87. discrete_scatter(X[:, 0], X[:, 1], km.labels_, markers=['o'])
  88. discrete_scatter(km.cluster_centers_[:, 0], km.cluster_centers_[:, 1],
  89. [0, 1, 2], markers=['^'], markeredgewidth=2)
  90. plot_2d_classification(km, X, cm=cm3, alpha=.4)
  91.  
  92. def plot_kmeans_faces(km, pca, X_pca, X_people, y_people, target_names):
  93. n_clusters = 10
  94. image_shape = (87, 65)
  95. fig, axes = plt.subplots(n_clusters, 11, subplot_kw={'xticks': (), 'yticks': ()},
  96. figsize=(10, 15), gridspec_kw={"hspace": .3})
  97.  
  98. for cluster in range(n_clusters):
  99. center = km.cluster_centers_[cluster]
  100. mask = km.labels_ == cluster
  101. dists = np.sum((X_pca - center) ** 2, axis=1)
  102. dists[~mask] = np.inf
  103. inds = np.argsort(dists)[:5]
  104. dists[~mask] = -np.inf
  105. inds = np.r_[inds, np.argsort(dists)[-5:]]
  106. axes[cluster, 0].imshow(pca.inverse_transform(center).reshape(image_shape), vmin=0, vmax=1)
  107. for image, label, asdf, ax in zip(X_people[inds], y_people[inds],
  108. km.labels_[inds], axes[cluster, 1:]):
  109. ax.imshow(image.reshape(image_shape), vmin=0, vmax=1)
  110. ax.set_title("%s" % (target_names[label].split()[-1]), fontdict={'fontsize': 9})
  111.  
  112. # add some boxes to illustrate which are similar and which dissimilar
  113. rec = plt.Rectangle([-5, -30], 73, 1295, fill=False, lw=2)
  114. rec = axes[0, 0].add_patch(rec)
  115. rec.set_clip_on(False)
  116. axes[0, 0].text(0, -40, "Center")
  117.  
  118. rec = plt.Rectangle([-5, -30], 385, 1295, fill=False, lw=2)
  119. rec = axes[0, 1].add_patch(rec)
  120. rec.set_clip_on(False)
  121. axes[0, 1].text(0, -40, "Close to center")
  122.  
  123. rec = plt.Rectangle([-5, -30], 385, 1295, fill=False, lw=2)
  124. rec = axes[0, 6].add_patch(rec)
  125. rec.set_clip_on(False)
  126. axes[0, 6].text(0, -40, "Far from center")

过程解析:

在大数据集的情况下还可以使用scikit-learn 提供了MiniBatchKMeans算法,大致思想就是对数据进行抽样,每次不使用所有的数据来计算,这就会导致准确率的损失。

MiniBatchKmeans 继承自Kmeans 因为MiniBathcKmeans 本质上还利用了Kmeans 的思想.从构造方法和文档大致能看到这些参数的含义,了解了这些参数会对使用的时候有很大的帮助。batch_size 是每次选取的用于计算的数据的样本量,默认为100.Mini Batch K-Means算法是K-Means算法的变种,采用小批量的数据子集减小计算时间,同时仍试图优化目标函数,这里所谓的小批量是指每次训练算法时所随机抽取的数据子集,采用这些随机产生的子集进行训练算法,大大减小了计算时间,与其他算法相比,减少了k-均值的收敛时间,小批量k-均值产生的结果,一般只略差于标准算法。

代码只需要修改一行:

  1. clf = MiniBatchKMeans(n_clusters = 3)

聚类K-Means和大数据集的Mini Batch K-Means算法的更多相关文章

  1. 转载: scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法

    版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...

  2. 数学建模及机器学习算法(一):聚类-kmeans(Python及MATLAB实现,包括k值选取与聚类效果评估)

    一.聚类的概念 聚类分析是在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好.我们事先并不知道数据的正确结果(类标),通过聚类算法来发现和挖掘数据本身的结 ...

  3. R处理大数据集

    R会把所有的对象读存入虚拟内存中.对我们大多数用户来说,这种设计可以提高与R相互的速度,但是当分析大数据集时,这种设计会降低程序运行速度有时还会产生跟内存相关的错误. 内存限制主要取决于R的build ...

  4. centos7 ambari2.6.1.5+hdp2.6.4.0 大数据集群安装部署

    前言 本文是讲如何在centos7(64位) 安装ambari+hdp,如果在装有原生hadoop等集群的机器上安装,需要先将集群服务停掉,然后将不需要的环境变量注释掉即可,如果不注释掉,后面虽然可以 ...

  5. CDH版本大数据集群下搭建Hue(hadoop-2.6.0-cdh5.5.4.gz + hue-3.9.0-cdh5.5.4.tar.gz)(博主推荐)

    不多说,直接上干货! 我的集群机器情况是 bigdatamaster(192.168.80.10).bigdataslave1(192.168.80.11)和bigdataslave2(192.168 ...

  6. 大数据集群Linux CentOS 7.6 系统调优篇

    大数据集群Linux CentOS 7.6 系统调优篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.设置主机hosts文件 1>.修改主机名 [root@node100 ...

  7. 使用ansible部署CDH 5.15.1大数据集群

    使用ansible离线部署CDH 5.15.1大数据集群 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在此之前,我之前分享过使用shell自定义脚本部署大数据集群,不管是部署CD ...

  8. FineReport层式报表解决大数据集展示问题攻略

    本文以填报报表为例,通过分页的方式,来解决大数据集展示的问题. 实现的思想就是通过在SQL里筛选部分数据库数据,以达到浏览器可以合理的展示报表页面.(数据分段,语句我这采用的是MYSQL,如果要用其他 ...

  9. 【网站运营】网站被K的原因大总结

    对于广大的站长来说网站被K或者是被降权是经常有的事情,不过我基本上还没有看见过Google的K站情况,也就是给网站降个权什么的处罚.如果你是用了很严重的作弊手段的话,那指定会是被Google给K掉的. ...

随机推荐

  1. PHP导出数据库sql文件,add和update

    /*** 导出sql文件*/public function exportSql(){   //需要导出的数据库表存入到数组当中   $tables =array("T_CRM_QUEUE_F ...

  2. service worker(二)之主页面与service worker通信

    实现一个主页面发送消息,worker搜到信息向所有的页面派发消息(当前页面除外) msg.html <!DOCTYPE html> <html lang="en" ...

  3. drf框架 - 解析模块 | 异常模块 | 响应模块

    解析模块 为什么要配置解析模块 1)drf给我们提供了多种解析数据包方式的解析类 2)我们可以通过配置,来控制前台提交的哪些格式的数据后台在解析,哪些数据不解析 3)全局配置就是针对每一个视图类,局部 ...

  4. restful接口规范 | 基于restful的原生django接口

    restful接口规范 接口 接口:联系两个物质的媒介,完成信息交互 web程序中:联系前台页面与后台数据库的媒介 web接口组成: - url:长得像返回数据的url链接 - 请求参数:前台按照指定 ...

  5. LightOJ - 1246 - Colorful Board(DP)

    链接: https://vjudge.net/problem/LightOJ-1246 题意: You are given a rectangular board. You are asked to ...

  6. springboot开发人员工具(自动重启及相关的配置)

    导入依赖: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> ...

  7. ArrayList 集合的几种遍历的方法

    ArrayList 集合  也可称作动态数组(长度可变),在新建的时候是没有默认长度的,在新增数据长度小于10的时候,ArrayList 的长度会自动设置为10 //了解更多可以按住Ctrl 再点击你 ...

  8. 97: cf 983E 倍增+树套树

    $des$一棵 $n$ 个点的树,树上有 $m$ 条双向的公交线路,每条公交线路都在两个节点之间沿最短路径往返.$q$ 次询问从一个点要到达另一个点,在只坐公交的情况下,至少需要坐几辆公交车:或者判断 ...

  9. 洛谷P1039侦探推理题解

    #include<cstdio> #include<cstring> #include<string> #include<iostream> using ...

  10. 笔记-读官方Git教程(1)~认识Git

    小书匠版本管理 教程内容基本来自git官方教程,认真都了系列的文章,然后对一些重点的记录下来,做了简单的归纳并写上自己的思考. 目录: 1.Git介绍 2.Git版本控制原理 3.Git特点 4.Gi ...