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中的迭代器和生成器
Oct 26 Python
详解Python的Lambda函数与排序
Oct 25 Python
详解python3实现的web端json通信协议
Dec 29 Python
python 获取网页编码方式实现代码
Mar 11 Python
对python抓取需要登录网站数据的方法详解
May 21 Python
python实现时间o(1)的最小栈的实例代码
Jul 23 Python
Python中一些深不见底的“坑”
Jun 12 Python
python自动化测试之DDT数据驱动的实现代码
Jul 23 Python
如何让python的运行速度得到提升
Jul 08 Python
python 无损批量压缩图片(支持保留图片信息)的示例
Sep 22 Python
Python中免验证跳转到内容页的实例代码
Oct 23 Python
Python 读取千万级数据自动写入 MySQL 数据库
Jun 28 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(2)--重访过去
2006/10/09 PHP
php curl_init函数用法
2014/01/31 PHP
php断点续传之如何分割合并文件
2014/03/22 PHP
PHP中4种常用的抓取网络数据方法
2015/06/04 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
php使用pecl方式安装扩展操作示例
2019/08/12 PHP
JavaScript TO HTML 转换
2006/06/26 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
jQuery如何获取动态添加的元素
2016/06/24 Javascript
jquery 多个radio的click事件实例
2016/12/03 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
基于vue的tab-list类目切换商品列表组件的示例代码
2020/02/14 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
python利用smtplib实现QQ邮箱发送邮件
2020/05/20 Python
numpy.linspace函数具体使用详解
2019/05/27 Python
python标记语句块使用方法总结
2019/08/05 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
2019/08/18 Python
python框架flask表单实现详解
2019/11/04 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
2020/11/05 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
采购部部门职责
2013/12/15 职场文书
酒吧创业计划书
2014/01/18 职场文书
实习生自我评价
2014/01/18 职场文书
先进集体获奖感言
2014/02/13 职场文书
旅游文化节策划方案
2014/06/06 职场文书
会计岗位职责范本
2015/04/02 职场文书
2015年学校心理健康教育工作总结
2015/05/11 职场文书
学会掌握自己命运的十条黄金法则:
2019/08/08 职场文书