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 Tkinter基础控件用法
Sep 03 Python
深入Python解释器理解Python中的字节码
Apr 01 Python
Python冒泡排序注意要点实例详解
Sep 09 Python
python 实现批量xls文件转csv文件的方法
Oct 23 Python
如何使用python实现模拟鼠标点击
Jan 06 Python
使用python的turtle函数绘制一个滑稽表情
Feb 28 Python
python实现贪吃蛇游戏源码
Mar 21 Python
Tensorflow tf.tile()的用法实例分析
May 22 Python
python如何读取.mtx文件
Apr 22 Python
上手简单,功能强大的Python爬虫框架——feapder
Apr 27 Python
python自动化之如何利用allure生成测试报告
May 02 Python
Python上下文管理器Content Manager
Jun 26 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
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
由Javascript实现的页面日历
2011/11/04 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
文本框回车提交与禁止提交示例
2013/09/27 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
2017/07/06 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
详解Python中的静态方法与类成员方法
2017/02/28 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
python matlibplot绘制多条曲线图
2021/02/19 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
2019/12/13 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
村级环境卫生整治方案
2014/05/04 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
三年级学生期末评语
2014/12/26 职场文书
茶楼服务员岗位职责
2015/02/09 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书
opencv读取视频并保存图像的方法
2021/06/04 Python
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技