Python聚类算法之基本K均值实例详解


Posted in Python onNovember 20, 2015

本文实例讲述了Python聚类算法之基本K均值运算技巧。分享给大家供大家参考,具体如下:

基本K均值 :选择 K 个初始质心,其中 K 是用户指定的参数,即所期望的簇的个数。每次循环中,每个点被指派到最近的质心,指派到同一个质心的点集构成一个。然后,根据指派到簇的点,更新每个簇的质心。重复指派和更新操作,直到质心不发生明显的变化。

# scoding=utf-8
import pylab as pl
points = [[int(eachpoint.split("#")[0]), int(eachpoint.split("#")[1])] for eachpoint in open("points","r")]
# 指定三个初始质心
currentCenter1 = [20,190]; currentCenter2 = [120,90]; currentCenter3 = [170,140]
pl.plot([currentCenter1[0]], [currentCenter1[1]],'ok')
pl.plot([currentCenter2[0]], [currentCenter2[1]],'ok')
pl.plot([currentCenter3[0]], [currentCenter3[1]],'ok')
# 记录每次迭代后每个簇的质心的更新轨迹
center1 = [currentCenter1]; center2 = [currentCenter2]; center3 = [currentCenter3]
# 三个簇
group1 = []; group2 = []; group3 = []
for runtime in range(50):
  group1 = []; group2 = []; group3 = []
  for eachpoint in points:
    # 计算每个点到三个质心的距离
    distance1 = pow(abs(eachpoint[0]-currentCenter1[0]),2) + pow(abs(eachpoint[1]-currentCenter1[1]),2)
    distance2 = pow(abs(eachpoint[0]-currentCenter2[0]),2) + pow(abs(eachpoint[1]-currentCenter2[1]),2)
    distance3 = pow(abs(eachpoint[0]-currentCenter3[0]),2) + pow(abs(eachpoint[1]-currentCenter3[1]),2)
    # 将该点指派到离它最近的质心所在的簇
    mindis = min(distance1,distance2,distance3)
    if(mindis == distance1):
      group1.append(eachpoint)
    elif(mindis == distance2):
      group2.append(eachpoint)
    else:
      group3.append(eachpoint)
  # 指派完所有的点后,更新每个簇的质心
  currentCenter1 = [sum([eachpoint[0] for eachpoint in group1])/len(group1),sum([eachpoint[1] for eachpoint in group1])/len(group1)]
  currentCenter2 = [sum([eachpoint[0] for eachpoint in group2])/len(group2),sum([eachpoint[1] for eachpoint in group2])/len(group2)]
  currentCenter3 = [sum([eachpoint[0] for eachpoint in group3])/len(group3),sum([eachpoint[1] for eachpoint in group3])/len(group3)]
  # 记录该次对质心的更新
  center1.append(currentCenter1)
  center2.append(currentCenter2)
  center3.append(currentCenter3)
# 打印所有的点,用颜色标识该点所属的簇
pl.plot([eachpoint[0] for eachpoint in group1], [eachpoint[1] for eachpoint in group1], 'or')
pl.plot([eachpoint[0] for eachpoint in group2], [eachpoint[1] for eachpoint in group2], 'oy')
pl.plot([eachpoint[0] for eachpoint in group3], [eachpoint[1] for eachpoint in group3], 'og')
# 打印每个簇的质心的更新轨迹
for center in [center1,center2,center3]:
  pl.plot([eachcenter[0] for eachcenter in center], [eachcenter[1] for eachcenter in center],'k')
pl.show()

运行效果截图如下:

Python聚类算法之基本K均值实例详解

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python实现把回车符\r\n转换成\n
Apr 23 Python
Python的函数的一些高阶特性
Apr 27 Python
python集合用法实例分析
May 30 Python
Python实现简单过滤文本段的方法
May 24 Python
Python实现打砖块小游戏代码实例
May 18 Python
安装docker-compose的两种最简方法
Jul 30 Python
Python Django2.0集成Celery4.1教程
Nov 19 Python
python各层级目录下import方法代码实例
Jan 20 Python
Eclipse配置python默认头过程图解
Apr 26 Python
Python 跨.py文件调用自定义函数说明
Jun 01 Python
python右对齐的实例方法
Jul 05 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
Dec 28 Python
Python实现将xml导入至excel
Nov 20 #Python
使用PyCharm配合部署Python的Django框架的配置纪实
Nov 19 #Python
详解在Python程序中解析并修改XML内容的方法
Nov 16 #Python
Python通过DOM和SAX方式解析XML的应用实例分享
Nov 16 #Python
Python的Flask开发框架简单上手笔记
Nov 16 #Python
python实现mysql的单引号字符串过滤方法
Nov 14 #Python
浅析Python中signal包的使用
Nov 13 #Python
You might like
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
thinkPHP的表达式查询用法详解
2016/09/14 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
js Array对象的扩展函数代码
2013/04/24 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
Vue.js -- 过滤器使用总结
2017/02/18 Javascript
使用Vue-cli 3.0搭建Vue项目的方法
2018/06/07 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
node crawler如何添加promise支持
2020/02/01 Javascript
npm全局环境变量配置详解
2020/12/15 Javascript
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
Python使用struct处理二进制的实例详解
2017/09/11 Python
python Socket之客户端和服务端握手详解
2017/09/18 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
对web.py设置favicon.ico的方法详解
2018/12/04 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
python super()函数的基本使用
2020/09/10 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
python实现图像随机裁剪的示例代码
2020/12/10 Python
台湾时尚彩瞳专门店:imeime
2019/08/16 全球购物
企划经理的岗位职责
2013/11/17 职场文书
优秀毕业自我鉴定
2014/02/15 职场文书
园艺师求职信
2014/03/10 职场文书
幼儿园开学寄语
2014/04/03 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
市场营销专业毕业生求职信
2014/07/21 职场文书
生活部的活动方案
2014/08/19 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis