1. K-Means算法步骤

算法步骤

收敛性定义,畸变函数(distortion function):

伪代码:

1) 创建k个点作为K个簇的起始质心(经常随机选择)

2) 当任意一个点的蔟分配结果发生变化时(初始化为True)

对数据集中的每个数据点,重新分配质心

对每个质心

计算质心到数据点之间的距离

将数据点分配到距其最近的蔟

对每个蔟,计算蔟中所有点的均值并将均值作为新的质心

缺点:

需要提前确定K值;

对异常值敏感;

对初始聚类中心敏感;

优点:

易解释;

运行速度快;

一般效果不错;

2. K-Means改进

2.1 K-Mediods

每次选取中值作为聚类中心,排除异常值的影响;

2.2 K-Means++算法

K-Means主要有两个最重大的缺陷——都和初始值有关:

K是事先给定的,这个K值的选定是非常难以估计的。很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。(ISODATA算法通过类的自动合并和分裂,得到较为合理的类型数目K)

K-Means算法需要用初始随机种子点来搞,这个随机种子点太重要,不同的随机种子点会有得到完全不同的结果。(K-Means++算法可以用来解决这个问题,其可以有效地选择初始点)

我在这里重点说一下K-Means++算法步骤:

先从我们的数据库随机挑个随机点当“种子点”。

对于每个点,我们都计算其和最近的一个“种子点”的距离D(x)并保存在一个数组里,然后把这些距离加起来得到Sum(D(x))。

然后,再取一个随机值,用权重的方式来取计算下一个“种子点”。这个算法的实现是,先取一个能落在Sum(D(x))中的随机值Random,然后用Random -= D(x),直到其<=0,此时的点就是下一个“种子点”。

重复第(2)和第(3)步直到所有的K个种子点都被选出来。

进行K-Means算法。

3. K-Means分布式实现

算法伪代码:

k-means的每一次迭代都可以分为以下3个步骤。

第一步:Map:对于每一个点,将其对应的最近的聚类中心

第二步:Combine:刚完成map的机器在本机上都分别完成同一个聚类的点的求和,减少reduce操作的通信量和计算量。

第三步:reduce:将同一聚类中心的中间数据再进行求和,得到新的聚类中心

4. K-Means并行化

并行化思路:使用主从模式。由一个节点充当主节点负责数据的划分与分配,其他节点完成本地数据的计算,并将结果返回给主节点。大致过程如下:

进程0为主节点,先从文件中读取数据集,然后将数据集划分并传给其他进程;

进程0选择每个聚类的中心点,并发送给其他进程;

其他进程计算数据块中每个点到中心点的距离,然后标出每个点所属的聚类,并计算每个聚类所有点到其中心点的距离之和,最后将这些结果返回给进程0;

进程0计算出新的中心点并发送给其他进程,并计算其他进程传来的聚类所有点到其中心点的距离总和;

重复3和4直到,直到步骤4中的所有聚类的距离之和不变(即收敛)。

k means算法C语言伪代码,K均值算法(K-Means)相关推荐

  1. 快速排序查询第k大元素C语言,快速排序和查找第K大元素

    /* 输入n个整数和一个正整数k(1<=k<=n),输出这些整数从小到大排序后的第k个(例如,k=1就是最小值).n<=10^7. 快速排序的时间复杂度为:最坏情况下:O(n^2), ...

  2. 二分查找算法c语言伪代码,算法-二分搜索算法

    算法:二分搜索算法(折半查找算法) 时间复杂度: 二分搜索算法概述 二分搜索算法伪代码 二分搜索算法实现 二分搜索算法概述 二分搜索算法,也称折半查找算法,即在一个有序数组中查找某一个特定元素.整个搜 ...

  3. bwt比对算法 C语言,DNA比对算法:BWT

    DNA比对算法:BWT BWT算法,实质上是前缀树的一种实现.那么什么是前缀树呢? 一.前缀树 对于问题p in S?如果S=rpq,那么p为S前缀rp的一个后缀. 于是,为了判断p in S 是否成 ...

  4. 数据拟合算法c语言实现,数据拟合算法剖析及C语言实现.doc

    数据拟合算法剖析及C语言实现 数据拟合算法剖析及C语言实现 [摘要]数据拟合在很多地方都有应用,主要用来处理实验或观测的原始离散数据.通过拟合可以更好的分析和解释数据.在引用前人的算法基础上,采用正交 ...

  5. 游艇租用问题算法c语言,租用游艇问题  算法设计分析

    长江游艇俱乐部在长江上设置了n 个游艇出租站1,2,-,n.游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇.游艇出租站i 到游艇出租站j 之间的租金为r(i,j),1≤i< ...

  6. 任务分配算法c语言程序,程序员算法基础——贪心算法

    原标题:程序员算法基础--贪心算法 前言 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. 比如一道常见的算法笔试题跳一跳: 有n个盒子排成一行,每个盒子上面有一个数字a[i],表示最 ...

  7. 加标志量的选择排序算法c语言,置换选择排序算法详解(C语言实现)

    上一节介绍了增加 k-路归并排序中的 k 值来提高外部排序效率的方法,而除此之外,还有另外一条路可走,即减少初始归并段的个数,也就是本章第一节中提到的减小 m 的值. m 的求值方法为:m=⌈n/l⌉ ...

  8. 旅行商问题穷举算法c语言,什么是旅行商问题——算法NP、P、NPC知识

    旅行商问题 旅行商问题所描述的是这样一个场景: 有一个商品推销员,要去若干个城市推销商品.该推销员从一个城市出发,需要经过所有城市后,回到出发地.每个城市之间都有道路连通,且距离各不相同,推销员应该如 ...

  9. c语言程序设计 算法,C语言程序设计第二章算法

    <C语言程序设计第二章算法>由会员分享,可在线阅读,更多相关<C语言程序设计第二章算法(38页珍藏版)>请在人人文库网上搜索. 1.C程序设计,主讲人:袁丽,燕大里仁基础教学部 ...

最新文章

  1. cpu安装_CPU是AMD的,老台式电脑可以加装固态硬盘安装Win10系统吗?
  2. 有重叠与无重叠序列之序列检测与序列产生
  3. react表格无缝滚动_js实现表格无缝滚动效果
  4. DS博客大作业--树
  5. 结合案例深入解析策略模式
  6. Leetcode 105. 从前序与中序遍历序列构造二叉树 解题思路及C++实现
  7. 1470: 区间求最值(RMQ问题,ST算法模板)
  8. akka2.5_播放2.0:Akka,Rest,Json和依赖项
  9. 【Linux使用】Centos 7 YUM仓库配置文件代理服务器设置
  10. 数据结构-二叉树、搜索树、平衡二叉树详解及C语言实现
  11. 程序员什么时候该考虑换工作
  12. 暗黑系游戏_暗黑系冒险游戏,剧情引人入胜!
  13. 再战高端智能电动化,错失先机的长安能靠华为“翻盘”?
  14. 如何比较两条回归直线
  15. lvds传输距离标准_lvds接口标准
  16. 计算机处理器性能排名,2019电脑cpu处理器性能排名:AMD 32核撕裂者遥遥领先(2)...
  17. 设计模式之代理模式之静态代理
  18. android 小q机器人,腾讯小Q机器人第二代,是机器人也是家人
  19. PHP 函数、类声明和调用
  20. 如何设计一个简单的KV数据库

热门文章

  1. 4444445555
  2. ofo陷多重困境 公司将以诽谤罪名起诉腾讯科技
  3. Ubuntu20.4安装百度云盘
  4. 微信小程序底层框架实现原理
  5. Vue+python+django高校田径运动会成绩报名系统pycharm源码lw
  6. unable to register MBean
  7. Golang 027. 佩尔数列Pell(n)
  8. 37来电号码归属地的显示
  9. 企业运维实战之k8s(HPA、Helm)初学者必看,点赞关注后期不迷路
  10. 方便ppt制作--iSlide插件