k means算法C语言伪代码,K均值算法(K-Means)
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)相关推荐
- 快速排序查询第k大元素C语言,快速排序和查找第K大元素
/* 输入n个整数和一个正整数k(1<=k<=n),输出这些整数从小到大排序后的第k个(例如,k=1就是最小值).n<=10^7. 快速排序的时间复杂度为:最坏情况下:O(n^2), ...
- 二分查找算法c语言伪代码,算法-二分搜索算法
算法:二分搜索算法(折半查找算法) 时间复杂度: 二分搜索算法概述 二分搜索算法伪代码 二分搜索算法实现 二分搜索算法概述 二分搜索算法,也称折半查找算法,即在一个有序数组中查找某一个特定元素.整个搜 ...
- bwt比对算法 C语言,DNA比对算法:BWT
DNA比对算法:BWT BWT算法,实质上是前缀树的一种实现.那么什么是前缀树呢? 一.前缀树 对于问题p in S?如果S=rpq,那么p为S前缀rp的一个后缀. 于是,为了判断p in S 是否成 ...
- 数据拟合算法c语言实现,数据拟合算法剖析及C语言实现.doc
数据拟合算法剖析及C语言实现 数据拟合算法剖析及C语言实现 [摘要]数据拟合在很多地方都有应用,主要用来处理实验或观测的原始离散数据.通过拟合可以更好的分析和解释数据.在引用前人的算法基础上,采用正交 ...
- 游艇租用问题算法c语言,租用游艇问题 算法设计分析
长江游艇俱乐部在长江上设置了n 个游艇出租站1,2,-,n.游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇.游艇出租站i 到游艇出租站j 之间的租金为r(i,j),1≤i< ...
- 任务分配算法c语言程序,程序员算法基础——贪心算法
原标题:程序员算法基础--贪心算法 前言 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. 比如一道常见的算法笔试题跳一跳: 有n个盒子排成一行,每个盒子上面有一个数字a[i],表示最 ...
- 加标志量的选择排序算法c语言,置换选择排序算法详解(C语言实现)
上一节介绍了增加 k-路归并排序中的 k 值来提高外部排序效率的方法,而除此之外,还有另外一条路可走,即减少初始归并段的个数,也就是本章第一节中提到的减小 m 的值. m 的求值方法为:m=⌈n/l⌉ ...
- 旅行商问题穷举算法c语言,什么是旅行商问题——算法NP、P、NPC知识
旅行商问题 旅行商问题所描述的是这样一个场景: 有一个商品推销员,要去若干个城市推销商品.该推销员从一个城市出发,需要经过所有城市后,回到出发地.每个城市之间都有道路连通,且距离各不相同,推销员应该如 ...
- c语言程序设计 算法,C语言程序设计第二章算法
<C语言程序设计第二章算法>由会员分享,可在线阅读,更多相关<C语言程序设计第二章算法(38页珍藏版)>请在人人文库网上搜索. 1.C程序设计,主讲人:袁丽,燕大里仁基础教学部 ...
最新文章
- cpu安装_CPU是AMD的,老台式电脑可以加装固态硬盘安装Win10系统吗?
- 有重叠与无重叠序列之序列检测与序列产生
- react表格无缝滚动_js实现表格无缝滚动效果
- DS博客大作业--树
- 结合案例深入解析策略模式
- Leetcode 105. 从前序与中序遍历序列构造二叉树 解题思路及C++实现
- 1470: 区间求最值(RMQ问题,ST算法模板)
- akka2.5_播放2.0:Akka,Rest,Json和依赖项
- 【Linux使用】Centos 7 YUM仓库配置文件代理服务器设置
- 数据结构-二叉树、搜索树、平衡二叉树详解及C语言实现
- 程序员什么时候该考虑换工作
- 暗黑系游戏_暗黑系冒险游戏,剧情引人入胜!
- 再战高端智能电动化,错失先机的长安能靠华为“翻盘”?
- 如何比较两条回归直线
- lvds传输距离标准_lvds接口标准
- 计算机处理器性能排名,2019电脑cpu处理器性能排名:AMD 32核撕裂者遥遥领先(2)...
- 设计模式之代理模式之静态代理
- android 小q机器人,腾讯小Q机器人第二代,是机器人也是家人
- PHP 函数、类声明和调用
- 如何设计一个简单的KV数据库