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中操作字典之clear()方法的使用
May 21 Python
Python中atexit模块的基本使用示例
Jul 08 Python
Python3导入自定义模块的三种方法详解
Apr 13 Python
Python微信操控itchat的方法
May 31 Python
PyQt5使用QTimer实现电子时钟
Jul 29 Python
python时间日期操作方法实例小结
Feb 06 Python
Django实现celery定时任务过程解析
Apr 21 Python
python--shutil移动文件到另一个路径的操作
Jul 13 Python
详解Python中list[::-1]的几种用法
Nov 16 Python
Python Pandas知识点之缺失值处理详解
May 11 Python
上帝为你开了一扇窗之Tkinter常用函数详解
Jun 02 Python
用Python仅20行代码编写一个简单的端口扫描器
Apr 08 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
PHP4引用文件语句的对比
2006/10/09 PHP
浅析is_writable的php实现
2013/06/18 PHP
Memcached常用命令以及使用说明详解
2013/06/27 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
php array_values 返回数组的值实例详解
2016/11/17 PHP
什么是PHP7中的孤儿进程与僵尸进程
2019/04/14 PHP
JQuery 弹出框定位实现方法
2010/12/02 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
Bootstrap3 图片(响应式图片&图片形状)
2017/01/04 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
vue 添加vux的代码讲解
2017/11/30 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
Python Socket编程之多线程聊天室
2018/07/28 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
自考生毕业自我鉴定
2013/10/10 职场文书
周年庆促销方案
2014/03/15 职场文书
邀请函格式范文
2015/02/02 职场文书
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL
Rust 连接 PostgreSQL 数据库的详细过程
2022/01/22 PostgreSQL