数据挖掘十大算法 The k-means algorithm
Posted 林海数原
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据挖掘十大算法 The k-means algorithm相关的知识,希望对你有一定的参考价值。
算法综述:
k-means algorithm算法是一个聚类算法,把n的对象根据他们的属性分为k个分割,k < n。它与处理混合正态分布的最大期望算法很相似,因为他们都试图找到数据中自然聚类的中心。它假设对象属性来自于空间向量,并且目标是使各个群组内部的均 方误差总和最小。
假设有k个群组Si, i=1,2,...,k。μi是群组Si内所有元素xj的重心,或叫中心点。
k平均聚类发明于1956年, 该算法最常见的形式是采用被称为劳埃德算法(Lloyd algorithm)的迭代式改进探索法。劳埃德算法首先把输入点分成k个初始化分组,可以是随机的或者使用一些启发式数据。然后计算每组的中心点,根据 中心点的位置把对象分到离它最近的中心,重新确定分组。继续重复不断地计算中心并重新分组,直到收敛,即对象不再改变分组(中心点位置不再改变)。
劳埃德算法和k平均通常是紧密联系的,但是在实际应用中,劳埃德算法是解决k平均问题的启发式法则,对于某些起始点和重心的组合,劳埃德算法可能实际上收敛于错误的结果。(上面函数中存在的不同的最优解)
虽然存在变异,但是劳埃德算法仍旧保持流行,因为它在实际中收敛非常快。实际上,观察发现迭代次数远远少于点的数量。然而最近,David Arthur和Sergei Vassilvitskii提出存在特定的点集使得k平均算法花费超多项式时间达到收敛。
近似的k平均算法已经被设计用于原始数据子集的计算。
从算法的表现上来说,它并不保证一定得到全局最优解,最终解的质量很大程度上取决于初始化的分组。由于该算法的速度很快,因此常用的一种方法是多次运行k平均算法,选择最优解。
k平均算法的一个缺点是,分组的数目k是一个输入参数,不合适的k可能返回较差的结果。另外,算法还假设均方误差是计算群组分散度的最佳参数。
算法原理:
聚类算法用于根据数据的特征发现数据项的相似性,并将相似的数据项放在同一个组中,相似性采用距离进行描述。
K-means聚类
K-Means算法的SAS实现
K-means算法可以用SAS的proc fastclus实现。主要涉及两个问题。
首先是初始点的选择。如果指定replace=random,则系统随机选取maxcluster选项指定个数的完整观测作为凝聚点。如果分析员对研究情景比较了解,可以利用专业知识指定初始分类,那么可以在proc fastclus中设定seed=dataset选项,SAS会从dataset中读取前k个观测作为初始凝聚点。此外,SAS还提供了系统自动选择初始凝聚点的方法,该方法需要指定maxclusters和radius选项,其中radius为凝聚点之间允许的最小距离。默认值是maxclusters=100,radius=0,效果是选取数据集中的前100个观测作为凝聚点。fastclus过程总是选择第一个完整观测作为第一个凝聚点,然后依次考察剩余观测,与第一个凝聚点的距离大于radius指定值的观测作为第二个凝聚点。当凝聚点的个数未达到maxcluster,且所考察观测与已有凝聚点间距离均大于radius指定值时,则所考察的观测成为下一个凝聚点。如果一个观测完整且与所有凝聚点距离均大于radius,但凝聚点个数已经达到最大值,此时fastclus过程进行两种替换检验,检验能否用当前观测替换已有凝聚点。第一个检验是替换距离最近两凝聚点检验,如果凝聚点与当前观测的最小距离大于已有凝聚点的最小距离,则一个已有凝聚点将被替换,当前观测将替换距离最近的两个凝聚点中的一个,使得替换后当前观测与最近距离两凝聚点中未被替换的那个距离最远。第二个检验是替换当前观测最近凝聚点检验,如果当前观测到除最近凝聚点外的所有凝聚点的最小距离大于当前观测最近凝聚点到所有其他凝聚点的最小距离,进行替换。如果两种检验都说明该观测不能替换已有凝聚点,则转向下一个观测,直到考察完数据集中的所有观测。当然,这种检测可以用replace=none|part|full来控制,none表示不进行替换检验,part表示只进行第一种替换检验;full为默认值,两种替换检验都进行。
另一个问题是分类的修改方法。默认的方法是按批修改法,即选定一批凝聚点后;将所有观测按与其距离最近的凝聚点归类;计算每一类重心,将重心作为新的凝聚点,若新凝聚点与旧凝聚点完全重合,则终止算法,否则重新归类。批量修改法是全部观测调整完毕后,才改变类的凝聚点,而逐个修改法是每个观测一旦调整后立即改变类凝聚点,而立即改变需要算法即时验证改变后的凝聚点集合是否仍然满足radius的约束。如果不满足radius的约束,SAS会将小于radius的两类合并,计算重心,作为合并后类的凝聚点,如此往复,直到凝聚点满足radius条件。要让SAS执行逐个修改法,需要声明drift选项。
补充
K-means聚类算法的问题是,均值的计算受异常点的干扰比较严重。为了克服这个问题,可以采用K中值法。
K-medoid聚类
PAM(Partition Around Medoids)是K-medoid的基础算法,基本流程如下:首先随机选择k个对象作为中心,把每个对象分配给离它最近的中心。然后随机地选择一个非中心对象替换中心对象,计算分配后的距离改进量。聚类的过程就是不断迭代,进行中心对象和非中心对象的反复替换过程,直到目标函数不再有改进为止。非中心点和中心点替换的具体类别如下图分析(用h替换i相对j的开销)。
释放数据价值,提升生活品质
www.thdata01.cn
以上是关于数据挖掘十大算法 The k-means algorithm的主要内容,如果未能解决你的问题,请参考以下文章