加权 Kmeans#
术语解释#
加权 Kmeans(Weighted Kmeans, WKmeans) 是一种基于 Kmeans 框架改进的聚类算法。它通过给每个特征维度赋予权重,来调节不同特征对聚类结果的影响。
加权 Kmeans 在原始 Kmeans 的基础上引入了一个权重向量 $W$,其核心思想是为每一个特征维度初始化一个权重值。 其目标函数在计算样本到簇中心的距离时,引入了权重项 $w_j^\beta$:
$$ P(U,Z,W)=\sum_{p=1}^{k}{\sum_{i=1}^{n}{u_{ip}}}\sum_{j=1}^{m}{w_{j}^{\beta }}(x_{ij}-z_{pj})^{2} $$其中 $w_j$ 表示第 $j$ 个维度的权重,$\beta$ 是控制权重分布的超参数。
在迭代过程中,算法不仅更新簇分配矩阵 $U$ 和簇中心矩阵 $Z$,还会根据当前聚类状态重新计算特征权重 $W$。当目标函数收敛时,模型能自动识别各维度的重要性。
更多相关内容原理介绍可参见「11.7 加权Kmeans聚类算法:特征权重与软聚类」。
出现动机#
-
解决噪声维度干扰:传统 Kmeans 算法等权对待所有特征维度。但在包含冗余特征或噪声维度的数据集中,噪声会扭曲样本间的距离计算,导致聚类精度大幅下降。
-
自动特征筛选需求:在处理高维数据时,人工剔除噪声维度非常困难。开发者需要一种能够自动识别并忽略噪声维度的算法,使得在聚类过程中能聚焦于对簇结构起决定性作用的特征。
直观示例#
现在我们人为地来构造一个数据集,其一共包含3个明显的簇结构,可视化后的结果如图11-14所示。

进一步,在图11-14所示的数据集中再加入一个噪声维度,这样便得到了另外一个新的数据集,其可视化结果如图11-15所示,其中左右两边为不同视角下的结果。

此时,对于图11-15中的结果,人眼几乎已经无法分辨其中所存在的簇结构。如果此时通过聚类对其进行聚类会出现什么样的结果呢?在通过Kmeans算法对其进行聚类后发现,此时的ARI结果已经从0.912骤然降到了0.721。为什么混入噪声维度后Kmeans聚类算法就不怎么管用了呢?
假如现在有两个簇中心$c_1=[2,3]$和$c_2=[3,5]$,样本点$x=[4,4]$。在这种情况下$d_{x{{c}_{1}}}^{2}=5$大于$d_{x{{c}_{2}}}^{2}=2$,因此样本点$x$应该被划入簇$c_2$中,但如果此时加入一列噪声维度,变成$c_1=[2,3,2]$和$c_2=[3,5,9]$,样本点变成$x=[4,4,1]$。那么在这样的情况下$d_{x{{c}_{1}}}^{2}=6$就会小于$d_{x{{c}_{2}}}^{2}=66$,此时$x$就会被错误地划分到簇$c_1$中。
可以发现,正是由于噪声维度的出现,使得Kmeans聚类算法在计算样本间的距离时把噪声维度所在的距离也一并地考虑到了结果中,最终导致聚类精度下降。有没有什么好的办法解决这个问题,使在聚类过程中尽量忽略噪声维度的影响呢?当然有,答案就是给每个特征维度赋予一个权重。
加权Kmeans聚类算法出自于2005年的一篇论文。这篇论文的核心思想就是给每个特征维度初始化一个权重值,等到目标函数收敛时噪声维度所对应的权重就会趋于0,从而使在计算样本间的距离时能够尽可能地忽略噪声维度的影响。
在上面的例子中,如果给算法
$$W=[w_1,w_2,w_3]=[0.49,0.49,0.02]$$这样一个特征权重,并且在计算样本间距离的时候考虑的是加权距离,则有
$$ \begin{aligned} & d_{x{{c}_{1}}}^{2}=0.49\times {{(4-2)}^{2}}+0.49\times {{(4-3)}^{2}}+0.02\times {{(1-2)}^{2}}=2.47 \\[1ex] & d_{x{{c}_{2}}}^{2}=0.49\times {{(4-3)}^{2}}+0.49\times {{(4-5)}^{2}}+0.02\times {{(1-9)}^{2}}=2.26 \end{aligned}\tag{11-28} $$此时可以发现,在特征权重的作用下,加权后的距离$d^2_{xc_1}$仍旧大于$d^2_{xc_2}$,$x$依然会被划分到簇$c_2$中,因此也就避免了被划分错误的情况。
优点缺点#
-
优点
-
对噪声数据鲁棒性强:在含有噪声维度的数据集中,加权 Kmeans 能够使噪声维度的权重趋于 0,从而抵消其负面影响,保持较高的聚类精度。
-
自动评估特征重要性:算法能通过学习得到的权重向量反映各特征对聚类的贡献度,起到了一定的特征筛选作用。
-
性能提升显著:相较于传统 Kmeans,该算法在处理复杂、高维且含噪的数据集时表现更优,能够维持稳定的 ARI 指标。
-
-
缺点:
-
引入额外超参数:加权 Kmeans 增加了一个关键超参数 $\beta$,该参数需要开发者根据经验设置或通过交叉验证等繁琐手段进行寻找。
-
计算开销增加:由于在每次迭代中都需要根据公式重新计算和更新特征权重向量 $W$,相比原始 Kmeans,其单步迭代的计算量有所增加。
-
仍受初始值影响:作为类 Kmeans 算法,它依然存在可能陷入局部最优解的问题(通常可结合 Kmeans++ 的初始化策略来缓解)。
-
相关术语#
-
Kmeans
-
Kmeans++