首页 » python机器学习 » python机器学习全文在线阅读

《python机器学习》11.1.2 硬聚类与软聚类

关灯直达底部

硬聚类(hard clustering)指的是数据集中每个样本只能划至一个簇的算法,例如我们在上一小节中讨论过的k-means算法。相反,软聚类(soft clustering,有时也称作模糊聚类(fuzzy clustering))算法可以将一个样本划分到一个或者多个簇。一个常见的软聚类算法是模糊C-means(fuzzy C-means,FCM)算法(也称为soft k-means或者fuzzy k-means)。关于软聚类的最初构想可以追溯到20世纪70年代,当时Joseph C.Dunn第一个提出了模糊聚类的早期版本,以提高k-means的性能[1]。10年之后,James C.Bedzek发表了他对模糊聚类算法进行改进的研究成果,即FCM算法[2]。

FCM的处理过程与k-means十分相似。但是,我们使用每个样本点隶属于各簇的概率来替代硬聚类的划分。在k-means中,我们使用二进制稀疏向量来表示各簇所含样本:

其中,位置索引的值为1表示样本属于簇中心μ(j)所在的簇(假定k=3,则j∈{1,2,3})。相反,FMC中的成员隶属向量可以表示如下:

这里,每个值都在区间[0,1]内,代表样本属于相应簇中心所在簇的概率。对于给定样本,其隶属于各簇的概率之和为1。与k-means算法类似,我们可以将FCM算法总结为四个核心步骤:

1)指定k个中心点,并随机将每个样本点划分至某个簇。

2)计算各簇中心μ(j),j∈{1,…,k}。

3)更新各样本点所属簇的成员隶属度。

4)重复步骤2、3,直到各样本点所属簇成员隶属度不变,或是达到用户自定义的容差阈值或最大迭代次数。

可以将FCM的目标函数简写为Jm,它看起来与k-means中需要进行最小化计算的簇内误差平方和(within cluster sum-squared-error)很相似:

不过请注意:此处的成员隶属度w(i,j)不同于k-means算法中的二进制值(w(i,j)∈{0,1}),它是一个实数,表示样本隶属于某个簇的概率(w(i,j)∈[0,1])。读者也许注意到了,我们在w(i,j)中增加了额外的一个指数m,一般情况下其取值范围是大于等于1的整数(通常m=2),也称为模糊系数(fuzziness coefficient,或直接就叫模糊器(fuzzzifier)),用来控制模糊的程度。模糊聚类中,m的值越大则成员隶属度w(i,j)越小。样本点属于某个簇的概率计算公式如下:

如同前面的k-means例子,在此依旧使用3个簇中心,可通过以下方式计算出样本x(i)属于簇μ(j)的隶属度:

以样本属于特定簇的隶属度为权重,此簇中心μ(j)可以通过所有样本的加权均值计算得到:

仅就计算样本数据簇的隶属度公式来说,直观上看,FCM的单次迭代计算成本比k-means的要高,但是FCM通常只需较少的迭代次数便能收敛。遗憾的是,scikit-learn目前还未实现FCM算法。不过,正如Soumi Ghosh与Sanjay K.Dubey的研究[3]所述,实际应用中k-means和FCM算法通常会得到较为相似的结果。

[1] J. C. Dunn. A Fuzzy Relative of the Isodata Process and its Use in Detecting Compact Well-separated Clusters. 1973.

[2] J. C. Bezdek. Pattern Recognition with Fuzzy Objective Function Algorithms. Springer Science & Business Media, 2013.

[3] S. Ghosh and S. K. Dubey. Comparative Analysis of k-means and Fuzzy c-means Algorithms. IJACSA, 4:35-38, 2013.