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中的random()方法的使用介绍
May 15 Python
在Python的Django框架下使用django-tagging的教程
May 30 Python
SVM基本概念及Python实现代码
Dec 27 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
Python subprocess库的使用详解
Oct 26 Python
Django渲染Markdown文章目录的方法示例
Jan 02 Python
Python二叉搜索树与双向链表转换算法示例
Mar 02 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
Aug 31 Python
python 使用shutil复制图片的例子
Dec 13 Python
详谈tensorflow gfile文件的用法
Feb 05 Python
Flask处理Web表单的实现方法
Jan 31 Python
python 多态 协议 鸭子类型详解
Nov 27 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 获取select下拉列表框的值
2010/05/08 PHP
php xml常用函数的集合(比较详细)
2013/06/06 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
laravel 自定义常量的两种方案
2019/10/14 PHP
JavaScript 入门基础知识 想学习js的朋友可以参考下
2009/12/26 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
Javascript中克隆一个数组的实现代码
2013/12/06 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
Vue组件的使用教程详解
2018/01/05 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
python3.0 字典key排序
2008/12/24 Python
数据挖掘之Apriori算法详解和Python实现代码分享
2014/11/07 Python
python映射列表实例分析
2015/01/26 Python
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
VSCode下配置python调试运行环境的方法
2018/04/06 Python
破解安装Pycharm的方法
2018/10/19 Python
对python 调用类属性的方法详解
2019/07/02 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
Bowflex美国官方网站:高级家庭健身器材
2017/12/22 全球购物
实习教师自我鉴定
2013/12/09 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android