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如何为图片添加水印
Nov 25 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
Mar 14 Python
Python实现合并两个列表的方法分析
May 28 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
python 画函数曲线示例
Dec 04 Python
python 实现批量替换文本中的某部分内容
Dec 13 Python
PyTorch中topk函数的用法详解
Jan 02 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
Jun 10 Python
Python偏函数Partial function使用方法实例详解
Jun 17 Python
没编程基础可以学python吗
Jun 17 Python
OpenCV灰度化之后图片为绿色的解决
Dec 01 Python
Python面向对象之内置函数相关知识总结
Jun 24 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
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
javascript生成/解析dom的CDATA类型的字段的代码
2007/04/22 Javascript
转一个日期输入控件,支持FF
2007/04/27 Javascript
javascript 读取图片文件的大小
2009/06/25 Javascript
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
Node.js和MongoDB实现简单日志分析系统
2015/04/25 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
2016/10/05 Javascript
JS+HTML5 FileReader实现文件上传前本地预览功能
2020/03/27 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
Python实现决策树C4.5算法的示例
2018/05/30 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
Python退火算法在高次方程的应用
2018/07/26 Python
python-opencv颜色提取分割方法
2018/12/08 Python
扩展Django admin的list_filter()可使用范围方法
2019/08/21 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
python 错误处理 assert详解
2020/04/20 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
python文件编写好后如何实践
2020/07/07 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
HTML5实现文件断点续传的方法
2017/01/04 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
英国奢侈品牌时尚购物平台:Farfetch(支持中文)
2020/02/18 全球购物
幼儿园中班教师寄语
2014/04/03 职场文书
李敖北大演讲稿
2014/05/24 职场文书
预防艾滋病宣传活动总结
2015/05/09 职场文书
人力资源部工作计划
2019/05/14 职场文书
大学生暑期社会实践的个人总结!
2019/07/17 职场文书
Mysql Online DDL的使用详解
2021/05/20 MySQL