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 相关文章推荐
高效测试用例组织算法pairwise之Python实现方法
Jul 19 Python
python机器学习案例教程——K最近邻算法的实现
Dec 28 Python
tensorflow创建变量以及根据名称查找变量
Mar 10 Python
python2与python3共存问题的解决方法
Sep 18 Python
python得到电脑的开机时间方法
Oct 15 Python
Python中Numpy ndarray的使用详解
May 24 Python
Python中的单下划线和双下划线使用场景详解
Sep 09 Python
pygame实现五子棋游戏
Oct 29 Python
在OpenCV里使用Camshift算法的实现
Nov 22 Python
在python shell中运行python文件的实现
Dec 21 Python
Django如何使用redis作为缓存
May 21 Python
Python  word实现读取及导出代码解析
Jul 09 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
DedeCms模板安装/制作概述
2007/03/11 PHP
php中定时计划任务的实现原理
2013/01/08 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
YII实现分页的方法
2014/07/09 PHP
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
2009/03/26 Javascript
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
2013/06/13 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
三种方式实现瀑布流布局
2017/02/10 Javascript
jQuery中on方法使用注意事项详解
2017/02/15 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
pyramid配置session的方法教程
2013/11/27 Python
浅谈Python 中整型对象的存储问题
2016/05/16 Python
用Python实现随机森林算法的示例
2017/08/24 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
2018/05/30 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
2019/02/07 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
Python jieba库分词模式实例用法
2021/01/13 Python
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
一组SQL面试题
2016/02/15 面试题
简历的自荐信
2013/12/19 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
2014年财政所工作总结
2014/11/22 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL