Python聚类算法之基本K均值实例详解

本文实例讲述了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程序设计有所帮助。

Python聚类算法之基本K均值实例详解的更多相关文章

  1. 【python库模块】Python subprocess模块功能与常见用法实例详解

    前言 这篇文章主要介绍了Python subprocess模块功能与常见用法,结合实例形式详细分析了subprocess模块功能.常用函数相关使用技巧. 参考 1. Python subprocess ...

  2. python数据结构之图深度优先和广度优先实例详解

    本文实例讲述了python数据结构之图深度优先和广度优先用法.分享给大家供大家参考.具体如下: 首先有一个概念:回溯 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标.但当探索到 ...

  3. python 排序算法总结及实例详解

    python 排序算法总结及实例详解 这篇文章主要介绍了python排序算法总结及实例详解的相关资料,需要的朋友可以参考下 总结了一下常见集中排序的算法 排序算法总结及实例详解"> 归 ...

  4. python聚类算法实战详细笔记 (python3.6+(win10、Linux))

    python聚类算法实战详细笔记 (python3.6+(win10.Linux)) 一.基本概念:     1.计算TF-DIF TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库 ...

  5. javascript常用经典算法实例详解

    javascript常用经典算法实例详解 这篇文章主要介绍了javascript常用算法,结合实例形式较为详细的分析总结了JavaScript中常见的各种排序算法以及堆.栈.链表等数据结构的相关实现与 ...

  6. python中argparse模块用法实例详解

    python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...

  7. python+requests接口自动化测试框架实例详解

    python+requests接口自动化测试框架实例详解   转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实 ...

  8. Python编程之列表操作实例详解【创建、使用、更新、删除】

    Python编程之列表操作实例详解[创建.使用.更新.删除] 这篇文章主要介绍了Python编程之列表操作,结合实例形式分析了Python列表的创建.使用.更新.删除等实现方法与相关操作技巧,需要的朋 ...

  9. python自定义异常实例详解

    python自定义异常实例详解 本文通过两种方法对Python 自定义异常进行讲解,第一种:创建一个新的exception类来拥有自己的异常,第二种:raise 唯一的一个参数指定了要被抛出的异常 1 ...

随机推荐

  1. [ZOJ 4025] King of Karaoke

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5766 求两个序列的相对元素的差出现次数最多的,最低出现一次. AC代 ...

  2. jQuery.ajaxSetup 全局设置ajax的header等配置信息

    描述: 设置 AJAX 请求默认地址为 "/xmlhttp/",禁止触发全局 AJAX 事件,用 POST 代替默认 GET 方法.其后的 AJAX 请求不再设置任何选项参数. j ...

  3. 使用IDA Pro逆向C++程序

    使用IDA Pro逆向C++程序 附:中科院李_硕博 : IDA用来做二进制分析还是很强大的 .lib程序是不是很容易分析出源码? 这个得看编译选项是怎么设置的 如果没混淆 没太过优化 大体能恢复源码 ...

  4. mybatis中#{}和${}的区别(转载)

    原文地址:http://www.cnblogs.com/baizhanshi/p/5778692.html 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by ...

  5. (八)zabbix获取到的数值自定义单位

    1) 查找php文件 # find / -name "func.inc.php" /usr/share/zabbix/include/func.inc.php 2)修改文件 #vi ...

  6. h5 rem计算

    设置html默认font-size: 100px,此时默认的页面的width是750px,然后根据手机大小改变html节点的font-size,从而改变rem的大小,代码如下: <script& ...

  7. Acwing-164-可达性统计(拓扑排序, 位运算统计)

    链接: https://www.acwing.com/problem/content/166/ 题意: 给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量. 思路: 先拓扑排序求 ...

  8. 清除Tomcat缓存

        删除tomcat目录下的缓存文件分别位于:                   tomcat/work                 tomcat/temp                  ...

  9. Python—数据类型之列表(List)

    列表的切片 语法:列表[:].列表[::]        综合:列表[(开始索引b):(结束索引e)(:(步长s))] 返回:列表的切片取值时,返回一个列表,规则等同于字符串切片规则. 说明: 开始索 ...

  10. Error from server (ServiceUnavailable): the server is currently unable to handle the request

    grep image /root/kubernetes-metrics-server/kubernetes-metrics-server/metrics-server-deployment.yaml ...