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实现根据窗口标题调用窗口的方法
Mar 13 Python
python使用Tkinter显示网络图片的方法
Apr 24 Python
python操作ssh实现服务器日志下载的方法
Jun 03 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
Python数据集切分实例
Dec 08 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
Jun 17 Python
Django 1.10以上版本 url 配置注意事项详解
Aug 05 Python
python并发编程多进程之守护进程原理解析
Aug 20 Python
如何基于Python实现电子邮件的发送
Dec 16 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
Jan 28 Python
浅谈盘点5种基于Python生成的个性化语音方法
Feb 05 Python
Python作用域和名称空间的详细介绍
Apr 13 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
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
网页javascript精华代码集
2007/01/24 Javascript
豆瓣网的jquery代码实例
2008/06/15 Javascript
document.getElementById的简写方式(获取id对象的简略写法)
2010/09/10 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
Javascript实现找不同色块的游戏
2017/07/17 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
2018/01/31 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
2018/08/14 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
javascript中call()、apply()的区别
2019/03/21 Javascript
Python 随机生成中文验证码的实例代码
2013/03/20 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
python装饰器原理与用法深入详解
2019/12/19 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
Python执行时间的几种计算方法
2020/07/31 Python
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
6号汽车旅馆预订:Motel 6
2018/02/11 全球购物
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
介绍一下SQL Server的全文索引
2013/08/15 面试题
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
质检的岗位职责
2013/11/17 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
感谢信的格式
2015/01/21 职场文书
求职自我推荐信
2015/03/24 职场文书
2015年科室工作总结
2015/04/10 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书