机器学习-K-means聚类

发布于:2025-09-08 ⋅ 阅读:(23) ⋅ 点赞:(0)

聚类:

机器学习可以分为无监督学习与有监督学习两类,之前所了解的线性回归、逻辑回归与决策树等等,都是有监督学习,根据学习输入样本特征与标签之间映射关系来进行回归、分类等。而无监督学习则没有标签,需要自动的来寻找挖掘来一些可用的信息,对于聚类而言,则是寻找相关/相似的数据点

K-means聚类:

聚类中最常用的就是K-means聚类,以二维数据、2个聚类中心为例,它的步骤如下:

  • 首先随机猜测聚类中心A、B的位置,这个中心就是簇的质心;
  • 然后遍历所有的样本数据,分别计算数据点与聚类中心A、B的距离,将该数据点分配到距离更近的簇质心;
  • 计算上一步中得到的簇A、B中样本的均值,将聚类中心移动到这个均值位置,如下图左;
  • 之后在不断重复上面两个步骤,直至每个样本所在的簇与簇质心都不在变化,即K-means算法已收敛,或是随着不断地重复样本所在簇与簇质心的变化过下,即继续重复收益不高时,则停止算法,如下图右。

需要注意的是,实际使用K-means算法时,聚类中心不一定是两个,而可能有K个,且聚类中心与样本的维度相同,若样本有n个特征,则聚类中心就是一个n维向量。

数学表达:

对于每一个样本,它分配到的簇表示为c^{(i)},具体表达式如下:

min_{k}\left \| x^{(i)} -\mu ^{(i)}\right \|^{2}

c^{(i)}的取值为1~K。

如果一个簇中没有分配到任何一个样本,一般情况下直接删除该簇即可;如果一定要保留有K个簇,则需要重新随机初始化聚类中心,以保证每一个簇中至少分配到少量样本。

类似于回归中的成本函数,在K-means聚类中也有失真函数的定义,其表达式如下:

J=\frac{1}{m}\sum\left \| x^{(i)} -\mu_{c^{(i)}}\right \|^{2}

类比于回归中需要通过梯度下降等方法来降低成本函数,聚类中也在不断地降低失真函数。遍历每一个样本使其被分配到距离最近的聚类中心,是通过c^{(i)}来降低J;

而将聚类中心移动到簇均值位置则是通过\mu _{k}来降低J。

初始化K-means:

实际上进行初始化时,往往是随机选择样本作为\mu,而如果只进行一次随机初始化,则有可能会陷入局部最优解,如下图中右侧三种情况都已经达到了局部最优,但对比易知,实际上右上的情况要优于另外两种。因此为了避免陷入局部最优,一般需要进行多次随机初始化,每次都随机K个样本作为聚类中心,然后直至收敛后计算失真函数J,选择J最小的情况。一般需要重复50-1000轮随机初始化,至少也要保证有50-100轮。

那么实际运用时应该如何确定簇的个数K呢?有一种方法是Elbow,即通过尝试多个K的取值,绘制出K-J图像,随着K值增加,即簇个数增加,相应的J肯定会有一定的减小,但是我们需要找到的是图像的拐点,因为拐点代表着此后K值增加带来的J优化收益较小。

不过实际情况中,很有可能我们得到的图像并不会存在很明显的拐点,因此另一种更合适的方法是,聚类得结果通常需要用于后续的算法,因此可以通过后续的表现情况来选择K值。


网站公告

今日签到

点亮在社区的每一天
去签到