数据挖掘:模型选择——K-means

K-means介绍

K-means是一种无监督的聚类算法,根据各个样本数据间距离的大小,将样本分为K个簇。(也就是K个类别)分成K个簇后,想要达到的效果是每个簇内的点尽量相近,而簇与簇之间的距离尽量较大。

算法流程

在这里插入图片描述
如下图所示。

  1. 随机选取K个样本作为最开始的质心。这样就出现了K个不同的簇。
  2. 计算每个簇内的所有样本点的均值,将这个均值点作为新的质心。
  3. 计算所有样本到这些质心的距离,选择其中离某个簇质心最近的点作为新的簇内样本点。(因为簇内质心发生变化,所以需要对每个簇内样本点进行重新分配)。
  4. 重复2-3,直到质心的位置不再发生变化,停止迭代,完成聚类。
    在这里插入图片描述

这里可以看到,由于质心是随机选择的,虽然通过不断的迭代,都能达到想要的效果,但这样计算成本会非常大,同时,是计算所有样本到质心的距离,这无疑又增加的训练得成本,因此,产生了多K-means优化的算法。

K-means的优化

K-Means初始化优化之K-Means++

K-Means++算法初始化质心的策略如下。(感觉像是先对初始质心点进行一个筛选……)
在这里插入图片描述

K-Means距离计算优化之elkan K-Means

elkan K-Means算法的使用思想是:利用两边之和大于等于第三边,两边之差小于第三边的三角形的性质,以此达到减少距离计算的目的。
以下是elkan K-Means算法利用的两个规则:
在这里插入图片描述
利用上述的两个规则,可以一定程度上提升传统K-Means聚类算法的迭代速度。但是如果样本的特征是稀疏的,并具有缺失值,由于有些距离无法计算,则无法使用该算法

大数据优化之Mini Batch K-Means

即使用优化后的elkan K-Means算法,计算开销也是非常大的。尤其是现在这个大数据的时代。因此Mini Batch K-Means算法应运而生。(采用部分样本进行多次计算,减少运行速度,提升精度)
在这里插入图片描述

关于相似性的度量

聚类后要求簇内样本相似性较大,簇与簇之间相似性较小。即簇内差异小,簇外差异大。而这个相似性/差异我们一般用样本点到其质心的距离来衡量。
对于一个簇来说,所有样本点到质心的距离之和越小,我们就认为这个簇中的样本越相似,簇内差异就越小。
距离的度量一般有以下几种。我们一般选择欧几里得距离。
在这里插入图片描述
K-means有损失函数吗?
KMeans追求的是,求解能够让簇内平方和最小化的质心。看到最小化,首先想到的就是对损失函数的优化,但通过下面的说明,可以得知,由于K-means和决策树不用求解参数,所以K-means和决策树是没有损失函数的。
在这里插入图片描述

聚类算法的评估指标

因为分类的最终目的是:簇内差异小,簇外差异大,我们就可以通过衡量簇内差异来衡量聚类的效果
之前我们是**让簇内平方和最小,**以此来衡量。但是这个指标存在以下问题:

  1. 它不是有界的。我们不知道簇内平方和是多少时,是这个模型的极限。
  2. 计算容易受特征数的影响。鉴于K-means计算的特点,当数据越来越大时,计算量会爆炸,不适合用来一次次评估模型。
  3. 易受超参数K的影响。K越大,簇内平方和必定越小,但并不是K越大聚类的效果就越好。
  4. 对数据的分布有假设,它假设数据满足凸分布(即数据在二维平面图像上看起来是一个凸函数的样子),并且它假设数据是各向同性的,即是说数据的属性在不同方向上代表着相同的含义。但是现实中的数据往往不是这样。所以使用簇内平方和作为评估指标,会让聚类算法在一些细长簇,环形簇,或者不规则形状的流形时表现不佳。

以下分两种情况来对聚类算法进行评估。

当真实标签已知的时候

轮廓系数

虽然我们在聚类中不输入真实标签,但这不代表我们拥有的数据中一定不具有真实标签,或者一定没有任何参考信息。如果拥有真实标签,我们更倾向于使用分类算法。但不排除我们依然可能使用聚类算法的可能性。
如果我们有样本真实聚类情况的数据,我们可以对于聚类算法的结果和真实结果来衡量聚类的效果。(这个作了解就好,一般都会直接用分类去做,下面真实标签未知才是要处理的)常用的有以下三种方法:
在这里插入图片描述

当真实标签未知的时候

聚类完全依赖于评价簇内的稠密程度(簇内差异小)和簇间的离散程度(簇外差异大)来评估聚类的效果。其中轮廓系数是最常用的聚类算法的评价指标。它是对每个样本来定义的,它能够同时衡量:
在这里插入图片描述
根据聚类的要求”簇内差异小,簇外差异大“,我们希望b永远大于a,并且大得越多越好
在这里插入图片描述
公式解析后,轮廓系数范围为(-1,1)。轮廓系数越接近1,聚类效果越好,越接近-1,聚类效果越差。

在sklearn中,我们使用模块metrics中的类silhouette_score来计算轮廓系数,它返回的是一个数据集中,所有样本的轮廓系数的均值。但我们还有同在metrics模块中的silhouette_sample,它的参数与轮廓系数一致,但返回的是数据集中每个样本自己的轮廓系数

轮库系数的优缺点
在这里插入图片描述

卡林斯基-哈拉巴斯指数

除了轮廓系数是最常用的,我们还有卡林斯基-哈拉巴斯指数(Calinski-Harabaz Index,简称CHI,也被称为方差比标准),戴维斯-布尔丁指数以及权变矩阵可以使用。
在这里插入图片描述
在这里我们重点来了解一下卡林斯基-哈拉巴斯指数。Calinski-Harabaz指数越高越好。其公式如下:
在这里插入图片描述
组间离散越大,Bk越大;组内离散越小,Wk越小。因此该式子的值越大,说明满足聚类的目的:簇内差异小,簇外差异大。
在这里插入图片描述
calinski-Harabaz指数没有界,在凸型的数据上的聚类也会表现虚高。但是比起轮廓系数,它有一个巨大的优点,就是计算非常快速(跟矩阵计算沾边的,速度都快)。

K-Means算法和KNN比较

  • 相同点:
    1.K-Means聚类算法和KNN(K近邻算法)都是找到离某一个点最近的点,即两者都使用了最近领的思想
  • 不同点:
    K-Means聚类算法是无监督学习算法,没有样本输出;KNN是监督学习算法,有对应的类别输出
    1.K-Means在迭代的过程中找到K个类别的最佳质心,从而决定K个簇类别;
    2.KNN则是找到训练集中离某个点最近的K个点

K-Means算法优缺点

  • 优点:
    1.简单易懂,算法收敛速度快(这个收敛速度……)
    2.算法的可解释性强
  • 缺点:
    1.K值的选取一般需要先验经验(专家经验)
    2.采用迭代的方法,得到的结果只是局部最优
    3.由于需要计算质心到所有点的距离,对噪音和异常点比较敏感
    4.如果各隐含类别的数据量严重失衡,或者个各隐含类别的方差不同,则聚类效果不佳

参考资料

https://www.bilibili.com/video/BV1vJ41187hk?from=search&seid=15670729090205346470
https://blog.csdn.net/weixin_46032351/article/details/104565711

发布了33 篇原创文章 · 获赞 45 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/AvenueCyy/article/details/105380053