聚类算法k-means、k-modes和k-prototype介绍

聚类算法k-means、k-modes和k-prototype介绍

之前分享了数学宅通过数据分析方法约会女神的故事,大家会不会觉得很酷呢!该宅所用的贝尔实验室k-modes算法看起来不明觉厉,那么我们今天就和大家讨论一下这个算法。同时,我们还会介绍另两个类似的算法,k-means和k-prototype。

由于k-means更容易理解,所以我们从它开始。k-means聚类算法简单易行,时间复杂度低,它主要用于以数值为单位的数据集合,也可以适用于大规模的数据集,但同时只能处理数值的属性限制了它的应用范围。它的具体算法步骤如下:1.确立最终聚类处理得到簇的个数,如果有先验知识,如实现知道一个数据集为有3类,则可设k=3;如果不清楚,有一些指导性方法可确定估计值。2.选取k条初始记录作为质心,这k条记录要求彼此之间的相关性D尽量大,而由于记录的属性使用数值表示,故我们可以使用欧式距离(Euclidean distance)来计算相关性D,这样可以保证记录的相关性低,提高聚类效果。3.从数据集读取一条记录,计算它与k个质心的欧式距离,并归并到距离最短的一个簇内;同时,更新该簇的质心。重复第三部直至将数据集读取完。4.重新调整记录所属的簇,这一步比较难理解。因为每个簇的质心随着加入记录而更新,这个更新可能会导致原先属于这个簇的记录会在改变后与另外一个簇的质心距离更短,所以也应该重新将它分配到更短距离的那个簇上。分配后更新所有簇的质心,不断重复第四步直到没有记录需要重新分配。

K-means算法有2个核心问题:1.度量记录之间的相关性的计算公式,此处采用欧式距离。2.更新簇内质心的方法,此处采用平均值法,即means。

K-modes算法可以看做是k-means算法在非数值属性集合上的版本。它的具体算法步骤如下:1.度量记录之间的相关性D的计算公式是比较两记录之间所有属性,如属性不同则给D加1,如相同则不加,所以D越大,记录间的不相关程度越强(与欧式距离代表的意义是一样的);2.更新modes,使用一个簇的每个属性出现频率最大的那个属性值作为代表簇的属性值(如{[a,1] [a,2] [b,1] [a,1] [c,3]})代表模式为[a,1];3.类似k-means的第四步,对次调整每条记录所属的簇。

K-Prototype算法是结合K-Means与K-modes算法,针对混合属性的,解决2个核心问题如下:1.度量具有混合属性的方法是,数值属性采用K-means方法得到P1,分类属性采用K-modes方法P2,那么D=P1+a*P2,a是权重。如果觉得分类属性重要,则增加a,否则减少a,a=0时即只有数值属性2.更新一个簇的中心的方法,方法是结合K-Means与K-modes的更新。

方法总结:这三种方法将只针对数值属性的k-means算法扩展到可以解决分类属性与混合属性,实验结果表明k-modes的算法时间复杂度比其余两者低。三者时间复杂度成线性增长。但在使用时,还存在问题如下:1.K值的确立2.k-prototype中权重a的确立3.k条初始记录的选取。 

http://c.blog.sina.com.cn/profile.php?blogid=e178070b89000vcp

你可能感兴趣的:(聚类算法k-means、k-modes和k-prototype介绍)