机器学习算法-KMeans聚类算法解析及伪代码实现。
徐小狗在文末附上了几条大神们关于KMeans聚类算法的博文,欲详细研究请前往浏览~
作为初学者,许多地方可能笨拙或有误,希望有大神看到后给予优化和指点!~
Why - KMeans:现实中的聚类分析问题 - 总统大选
假设 M 国又开始全民选举总统了,目前 Mr.OBM 的投票率为48%(投票数占所有选民人数的百分比),而 Mr.MKN 的为47%,而剩下的一部分出于【种种原因】没有投票。
做为其中某个阵营的人,自然是希望能够尽可能的争取到这些剩余的票 -因为这完全可能影响最终选举结果。
然而,你不可能争取到这些人的所有投票,因为你满足某个群体的人,也许就伤害到了另一群人的利益。
一个很不错的想法是将这些人分为 K 个群体,然后主要对其中人数最多的几个群体做工作。
这就需要使用到聚类的策略了。
聚类策略是搜集剩余选民的用户信息(各种满意/不满意的信息),将这些信息输入进聚类算法,然后对聚类结果中人数最多的簇的选民做思想工作。
可能你会发现某个簇的选民都是一个社区的,一个宗教信仰的,或者具有某些共性。这样就方便各种各样的拉票活动了。
What - KMeans聚类算法:
聚类:给事物打标签,寻找同一组内的个体之间的一些潜在的相似模式,力图找到数据的自然分组。
How - KMeans聚类算法:
KMeans聚类算法流程:
KMeans聚类算法缺点:
1.初始选择中心点的位置是随机的,不同的随机初始中心点会有不同的迭代次数,有时候会计算很多次,而且结果也会不同;
2.KMeans需要人为的确定初始聚类中心,不同的初始聚类中心可能导致完全不同的聚类结果;
3.聚类中心的个数K需要事先给定,但在实际中这个K值的选定是非常难以估计的,很多时候,事先并不知道给定的数据集应该分成多少个类别才合适;
KMeans聚类算法优化:KMenas++算法
KMeans++算法思想:
1.假设分为K类;
2.从输入的数据点集合中随机选择一个点作为第一个聚类中心;
3.对于数据集中的每一个点x,计算其与最近的聚类中心(指已选择的聚类中心)的距离D(x);
4.选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点被选取为聚类中心的概率较大;
5.重复3和4两个步骤直到K个聚类中心被选出来;
6.利用这K个初始的聚类中心运行标准的K-Means算法;
简单来说就是选择中心点时各中心点的距离要做到尽可能的远。
KMeans聚类算法伪代码实现:
简单的伪代码实现:选择K个点作为初始质心
repeat
将每个点指派到最近的质心,形成K个簇
重新计算每个簇的质心
until 簇不发生变化或达到最大迭代次数
详细的伪代码实现:
创建 k 个点作为起始质心 (随机选择):
当任意一个点的簇分配结果发生改变的时候:
对数据集中的每个数据点:
对每个质心:
计算质心与数据点之间的距离
将数据点分配到距其最近的簇
对每一个簇:
求出均值并将其更新为质心
大神的KMeans剖析博文分享:
大神-穆晨: 第十三篇:K-Means 聚类算法原理分析与代码实现。大神-yqtaowhu:深入理解K-Means聚类算法。