引言
前面我们讲了k-means, k-means属于一种硬聚类的方法,也就是说一个样本属于哪个类了后,他就是哪个类别的了,非此即彼,来不得半点马虎。但是现实生活中,哪有这么多的确定的事啊,身不由己经常发生,因此引入了模糊聚类,英文名Fuzzy c-means clustering, 模糊聚类意味着样本不再是刚性的属于某一类别了,而是给出其属于各个类别的概率。因此称之为模糊聚类。
模糊聚类
在k-means算法中我们尝试给每个样本聚到某一个类中,也就是给样本一个标签。在模糊聚类中,对于某一个样本,不再是将其赋予某一个标签,而是一个概率向量,这个向量表示样本分别属于这k个类别的概率。
正常将,我们要将n个样本模糊聚类到c个类中,就是要学习一个隶属度矩阵,矩阵表示的就是n个样本模糊聚类到c个类中的概率。
令:
表示 个样本
表示个类别
那么所谓的隶属度矩阵就如下所示:
其中 其中
也就是说每一个样本,他属于所有类别的概率的和为1。明显这是合理的。
下面我们来推导一下如何学习这个隶属度矩阵。
隶属度矩阵
在任何的机器学习算法中,都有一个核心点,那就是把在数据集上构建机器学习模型的问题转化为最小化代价函数的问题,模糊聚类也是一样的。
首先我们定义下代价函数:
其中 表示聚类的中心点 为模糊系数
我们的目标就是最小化函数, 即
在约束条件下求极值,自然想到了拉格朗日乘子法。
求偏导:
所以
所以在函数取极小值。
而将此值带如到函数中,有:
所以有:
将其带入到中,可得
这个表示样本到k个类的中心点的距离的和除以样本到第q个分类点的距离的次方的倒数。
这里我们得到了隶属度矩阵的求解方法,但是这里面需要计算 这里面需要求解,因此继续对拉格朗日函数求偏导,有
因此有:
因此我们得到了更新聚类中心点和隶属度矩阵的方程,如下所示:
因此模糊聚类算法如下:
模糊聚类算法步骤
1) 根据给定的聚类类别个数 ,随机初始化隶属度矩阵
2) 计算
3) 更新初始化隶属度矩阵
4) 重复上面的步骤,直到满足停止条件为止,停止条件可以是中心点不再变化或者初始化隶属度矩阵 变化很小为止。