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分割TXT文件成4K的TXT文件
May 23 Python
初步讲解Python中的元组概念
May 21 Python
一篇文章读懂Python赋值与拷贝
Apr 19 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
Jul 03 Python
详解python中的生成器、迭代器、闭包、装饰器
Aug 22 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
Aug 23 Python
Python 复平面绘图实例
Nov 21 Python
tensorflow 环境变量设置方式
Feb 06 Python
使用numpy nonzero 找出非0元素
May 14 Python
你喜欢篮球吗?Python实现篮球游戏
Jun 11 Python
Pycharm连接远程服务器并远程调试的全过程
Jun 24 Python
Python matplotlib多个子图绘制整合
Apr 13 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
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
PHP实现字符串大小写转函数的功能实例
2019/02/06 PHP
php查询内存信息操作示例
2019/05/09 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
2019/05/31 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
JS 创建对象(常见的几种方法)
2008/11/03 Javascript
javascript 表单规则集合对象
2009/07/21 Javascript
Javascript学习笔记4 Eval函数
2010/01/11 Javascript
js 居中漂浮广告
2010/03/21 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
2011/07/28 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
2016/08/05 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
Python类属性与实例属性用法分析
2015/05/09 Python
分享一下Python 开发者节省时间的10个方法
2015/10/02 Python
深入探究Django中的Session与Cookie
2017/07/30 Python
Python for循环与getitem的关系详解
2020/01/02 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
2020/04/21 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
报名委托书
2015/01/29 职场文书
世界环境日活动总结
2015/02/11 职场文书
银行自荐信怎么写
2015/03/05 职场文书