1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Mon Sep 17 16:41:46 2018
  4.  
  5. @author: zhen
  6. """
  7.  
  8. import numpy as np
  9. import matplotlib.pyplot as plt
  10. import sklearn.datasets as ds
  11. import matplotlib.colors
  12. from sklearn.cluster import KMeans
  13. from sklearn.cluster import MiniBatchKMeans
  14.  
  15. def expand(a, b):
  16. d = (b - a) * 0.1
  17. return a-b, b+d
  18.  
  19. if __name__ == "__main__":
  20. N = 400
  21. centers = 4
  22. data, y = ds.make_blobs(N, n_features=2, centers=centers, random_state=2)
  23. data2, y2 = ds.make_blobs(N, n_features=2, centers=centers, cluster_std=(1, 2.5, 0.5, 2), random_state=2)
  24. # 按行拼接numpy数组
  25. data3 = np.vstack((data[y == 0][:], data[y == 1][:50], data[y == 2][:20], data[y == 3][:5]))
  26. y3 = np.array([0] * 100 + [1] * 50 + [2] * 20 + [3] * 5)
  27. cls = KMeans(n_clusters=4, init='k-means++')
  28. y_hat = cls.fit_predict(data)
  29. y2_hat = cls.fit_predict(data2)
  30. y3_hat = cls.fit_predict(data3)
  31.  
  32. m = np.array(((1, 1),(1, 3)))
  33. data_r = data.dot(m)
  34. y_r_hat = cls.fit_predict(data_r)
  35.  
  36. matplotlib.rcParams['font.sans-serif'] = [u'SimHei']
  37. matplotlib.rcParams['axes.unicode_minus'] = False
  38. cm = matplotlib.colors.ListedColormap(list('rgbm'))
  39. plt.figure(figsize=(9, 10), facecolor='w')
  40. plt.subplot(421)
  41. plt.title(u'原始数据')
  42. plt.scatter(data[:, 0], data[:, 1], c=y, s=30, cmap=cm, edgecolors='none')
  43. x1_min, x2_min = np.min(data, axis=0)
  44. x1_max, x2_max = np.max(data, axis=0)
  45. x1_min, x1_max = expand(x1_min, x1_max)
  46. x2_min, x2_max = expand(x2_min, x2_max)
  47. plt.xlim((x1_min, x1_max))
  48. plt.ylim((x2_min, x2_max))
  49. plt.grid(True)
  50.  
  51. plt.subplot(422)
  52. plt.title(u'KMeans++聚类')
  53. plt.scatter(data[:, 0], data[:, 1], c=y_hat, s=30, cmap=cm, edgecolors='none')
  54. plt.xlim((x1_min, x1_max))
  55. plt.ylim((x2_min, x2_max))
  56. plt.grid(True)
  57.  
  58. plt.subplot(423)
  59. plt.title(u'旋转后数据')
  60. plt.scatter(data[:, 0], data[:, 1], c=y, s=30, cmap=cm, edgecolors='none')
  61. #x1_min, x2_min = np.min(data_r, axis=0)
  62. #x1_max, x2_max = np.max(data_r, axis=0)
  63. #x1_min, x1_max = expand(x1_min, x1_max)
  64. #x2_min, x2_max = expand(x2_min, x2_max)
  65. plt.ylim((x1_min, x1_max))
  66. plt.xlim((x2_min, x2_max))
  67. plt.grid(True)
  68.  
  69. plt.subplot(424)
  70. plt.title(u'旋转后KMeans++聚类')
  71. plt.scatter(data[:, 0], data[:, 1], c=y_hat, s=30, cmap=cm, edgecolors='none')
  72. plt.ylim((x1_min, x1_max))
  73. plt.xlim((x2_min, x2_max))
  74. plt.grid(True)
  75.  
  76. plt.subplot(425)
  77. plt.title(u'方差不相等数据')
  78. plt.scatter(data2[:, 0], data2[:, 1], c=y2, s=30, cmap=cm, edgecolors='none')
  79. #x1_min, x2_min = np.min(data2, axis=0)
  80. #x1_max, x2_max = np.max(data2, axis=0)
  81. #x1_min, x1_max = expand(x1_min, x1_max)
  82. #x2_min, x2_max = expand(x2_min, x2_max)
  83. plt.xlim((x1_min, x1_max))
  84. plt.ylim((x2_min, x2_max))
  85. plt.grid(True)
  86.  
  87. plt.subplot(426)
  88. plt.title(u'方差不相等KMeans++聚类')
  89. plt.scatter(data2[:, 0], data2[:, 1], c=y2_hat, s=30, cmap=cm, edgecolors='none')
  90. plt.xlim((x1_min, x1_max))
  91. plt.ylim((x2_min, x2_max))
  92. plt.grid(True)
  93.  
  94. plt.subplot(427)
  95. plt.title(u'数量不相等数据')
  96. plt.scatter(data3[:, 0], data3[:, 1], c=y3, s=30, cmap=cm, edgecolors='none')
  97. #x1_min, x2_min = np.min(data3, axis=0)
  98. #x1_max, x2_max = np.max(data3, axis=0)
  99. #x1_min, x1_max = expand(x1_min, x1_max)
  100. #x2_min, x2_max = expand(x2_min, x2_max)
  101. plt.xlim((x1_min, x1_max))
  102. plt.ylim((x2_min, x2_max))
  103. plt.grid(True)
  104.  
  105. plt.subplot(428)
  106. plt.title(u'数量不相等KMeans++聚类')
  107. plt.scatter(data3[:, 0], data3[:, 1], c=y3_hat, s=30, cmap=cm, edgecolors='none')
  108. plt.xlim((x1_min, x1_max))
  109. plt.ylim((x2_min, x2_max))
  110. plt.grid(True)
  111.  
  112. plt.tight_layout(2, rect=(0, 0, 1, 0.97))
  113. plt.suptitle(u'数据分布对KMeans聚类的影响', fontsize=18)
  114. plt.show()

结果:

总结:可知不同的超参数对聚类的效果影响很大,因此在聚类之前采样的数据要尽量保持均匀,各类的方差最好先进行预研,以便达到较好的聚类效果!

Python之聚类(KMeans,KMeans++)的更多相关文章

  1. 机器学习算法与Python实践之(五)k均值聚类(k-means)

    机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学 ...

  2. Python笔记11------一个K-means聚类的小例子

    #导入scipy库,库中已经有实现的kmeans模块,直接使用, #根据六个人的分数分为学霸或者学渣两类 import numpy as np from scipy.cluster.vq import ...

  3. [聚类算法] K-means 算法

    聚类 和 k-means简单概括. 聚类是一种 无监督学习 问题,它的目标就是基于 相似度 将相似的子集聚合在一起. k-means算法是聚类分析中使用最广泛的算法之一.它把n个对象根据它们的属性分为 ...

  4. 机器学习(二)——K-均值聚类(K-means)算法

    最近在看<机器学习实战>这本书,因为自己本身很想深入的了解机器学习算法,加之想学python,就在朋友的推荐之下选择了这本书进行学习,在写这篇文章之前对FCM有过一定的了解,所以对K均值算 ...

  5. K-均值聚类(K-means)算法

    https://www.cnblogs.com/ybjourney/p/4714870.html 最近在看<机器学习实战>这本书,因为自己本身很想深入的了解机器学习算法,加之想学pytho ...

  6. 【数据挖掘】聚类之k-means(转载)

    [数据挖掘]聚类之k-means 1.算法简述 分类是指分类器(classifier)根据已标注类别的训练集,通过训练可以对未知类别的样本进行分类.分类被称为监督学习(supervised learn ...

  7. 【机器学习】机器学习入门08 - 聚类与聚类算法K-Means

    时间过得很快,这篇文章已经是机器学习入门系列的最后一篇了.短短八周的时间里,虽然对机器学习并没有太多应用和熟悉的机会,但对于机器学习一些基本概念已经差不多有了一个提纲挈领的了解,如分类和回归,损失函数 ...

  8. 机器学习——详解经典聚类算法Kmeans

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第12篇文章,我们一起来看下Kmeans聚类算法. 在上一篇文章当中我们讨论了KNN算法,KNN算法非常形象,通过距离公 ...

  9. R与数据分析旧笔记(十四) 动态聚类:K-means

    动态聚类:K-means方法 动态聚类:K-means方法 算法 选择K个点作为初始质心 将每个点指派到最近的质心,形成K个簇(聚类) 重新计算每个簇的质心 重复2-3直至质心不发生变化 kmeans ...

随机推荐

  1. 公共技术点( View 事件传递)

    转载地址:http://p.codekk.com/blogs/detail/54cfab086c4761e5001b253e 本文为 Android 开源项目源码解析 公共技术点中的 View 事件传 ...

  2. ListView中的TextView实现跑马灯效果

    1.TextView首先添加android:ellipsize="marquee"   android:marqueeRepeatLimit="marquee_forev ...

  3. go程序性能测量和分析

    性能测量 在很多情况之下,通过分析代码是很难确定某个模块性能好坏的.请看下面的例子,你觉得哪一个函数性能最优? //斐波那契数 package fib import "math" ...

  4. Unix/Linux系统管理技术手册学习笔记——shell

    创建日期:2016/02/29 更新日期:2016/02/29 shell变量赋值时不能在等号两边留空白,否则shell会把变量名误认为是命令名 双引号括起来的变量可以进行替换(用*和?这样的文件名匹 ...

  5. es6学习笔记12--Class

    Class基本语法 概述 JavaScript语言的传统方法是通过构造函数,定义并生成新对象.下面是一个例子. function Point(x,y){ this.x = x; this.y = y; ...

  6. Docker基础-端口映射与容器互联

    1.端口映射实现访问容器 1.从外部访问容器应用 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的. 当容器中运行一些网络应用,要让外部访问这些应用时, ...

  7. [转]史上最佳 Mac+PhpStorm+XAMPP+Xdebug 集成开发和断点调试环境的配置

    本文转自:https://www.cnblogs.com/lishiyun19/p/4470086.html 在上一篇 PHP 系列的文章<PHP 集成开发环境比较>中,我根据自己的亲身体 ...

  8. python模块之xlrd

    python处理excel的模块,xlrd读取excel,xlwt写入excel 一.安装 pip install xlrd 二.使用 1. 打开excel,得到Book对象 import xlrd ...

  9. Sales_item.h

    下列是<C++primer>书中介绍和使用的Sales_item.h类 经测试可以使用,现在贴在这里,分享给大家! 版本一: #ifndef SALESITEM_H#define SALE ...

  10. JS DOM 操作 项目总结 【超链接】【数列】【span】

      超链接   每次定义链接样式时务必确认定义的顺序,link--visited--hover-active,也就是我们常说到的LoVe HAte原则(大写字母就是它们的首字母). “爱恨原则”(Lo ...