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检测QQ在线状态的方法
May 09 Python
Python实现短网址ShortUrl的Hash运算实例讲解
Aug 10 Python
Windows下使Python2.x版本的解释器与3.x共存的方法
Oct 25 Python
Python使用爬虫爬取静态网页图片的方法详解
Jun 05 Python
python查询文件夹下excel的sheet名代码实例
Apr 02 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
Jul 03 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
Jun 04 Python
通过实例解析Python文件操作实现步骤
Sep 21 Python
Python 创建守护进程的示例
Sep 29 Python
python自动从arxiv下载paper的示例代码
Dec 05 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代码
2013/03/24 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
2016/02/21 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
2017/10/27 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
详解webpack4升级指南以及从webpack3.x迁移
2018/06/12 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
3分钟学会一个Python小技巧
2018/11/23 Python
python用opencv批量截取图像指定区域的方法
2019/01/24 Python
python在回调函数中获取返回值的方法
2019/02/22 Python
python实现可变变量名方法详解
2019/07/01 Python
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
英国打印机墨盒销售网站:Ink Factory
2019/10/07 全球购物
一套C++笔试题面试题
2012/06/06 面试题
请介绍一下WSDL的文档结构
2013/03/17 面试题
计算机网络专业推荐信
2013/11/24 职场文书
《果园机器人》教学反思
2014/04/13 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
创先争优演讲稿
2014/09/15 职场文书
国庆节促销广告语2014
2014/09/19 职场文书
艺术节开幕词
2015/01/28 职场文书
西湖英语导游词
2015/02/06 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL