机器学习算法-KMeans聚类算法解析及伪代码实现。

机器学习算法-KMeans聚类算法解析及伪代码实现。

徐小狗在文末附上了几条大神们关于KMeans聚类算法的博文,欲详细研究请前往浏览~

作为初学者,许多地方可能笨拙或有误,希望有大神看到后给予优化和指点!~

Why - KMeans:现实中的聚类分析问题 - 总统大选

 假设 M 国又开始全民选举总统了,目前 Mr.OBM 的投票率为48%(投票数占所有选民人数的百分比),而 Mr.MKN 的为47%,而剩下的一部分出于【种种原因】没有投票。        

 做为其中某个阵营的人,自然是希望能够尽可能的争取到这些剩余的票 -因为这完全可能影响最终选举结果。        

 然而,你不可能争取到这些人的所有投票,因为你满足某个群体的人,也许就伤害到了另一群人的利益。        

 一个很不错的想法是将这些人分为 K 个群体,然后主要对其中人数最多的几个群体做工作。        

 这就需要使用到聚类的策略了。        

 聚类策略是搜集剩余选民的用户信息(各种满意/不满意的信息),将这些信息输入进聚类算法,然后对聚类结果中人数最多的簇的选民做思想工作。        

 可能你会发现某个簇的选民都是一个社区的,一个宗教信仰的,或者具有某些共性。这样就方便各种各样的拉票活动了。

What - KMeans聚类算法:

 聚类:给事物打标签,寻找同一组内的个体之间的一些潜在的相似模式,力图找到数据的自然分组。

   聚类是一种无监督的机器学习任务,它可以自动将数据划分成类。
 因此聚类分组不需要提前被告知组应该是什么样的(比如总统大选的例子),因为我们甚至都不知道我们在寻找什么,所以聚类是应用于知识探索而不是预测。
 KMeans聚类算法思想:以空间中K个点为中心进行聚类,对最靠近他们的对象归类,通过迭代,逐次更新各聚类中心的值,直到最好的聚类结果。

How - KMeans聚类算法:

 KMeans聚类算法流程:
  机器学习算法-KMeans聚类算法解析及伪代码实现。_第1张图片

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聚类算法。

你可能感兴趣的:(机器学习)