【机器学习】——K_means如何选择k值?

  K_means聚类是我们在无监督学习中常用的一种算法,但有一个很让人头疼的问题就是如何选择k值。在实际业务中,如果根据业务场景明确知道要得到的类数,那就好办了,但很多时候不知道K怎么办呢?下面有三种方法可以用来确定k值,其基本思想还是最小化类内距离,最大化类间距离,使同一簇内样本尽可能相似,不同簇中样本尽可能不相似。

1.肘部法

  随着k值增大,误差值会越来越小(举一个极端的例子:当每一个样本被分为一个类时,类内间距最小,但这显然不是我们想要的),因此可根据不同k值下的误差曲线选择使误差平方和下降最快的k值,当大于此k值时,k值增大,但误差减少量很小。即选择曲线上的拐点最佳。在下面这个图中即选择k=2,将样本分为两类。

在这里插入图片描述

2.轮廓系数

  结合内聚度和分离度两种因素,可以用来在相同原始数据的基础上评价不同方法,也可以评价算法不同运行方式对聚类结果所产生的影响。使用轮廓系数时先假设已经通过聚类将数据分成了k个簇,对簇中的每个向量,计算其轮廓系数。

任意点i的计算公式为:

在这里插入图片描述
  其中a(i)表示该点到其同簇其他样本的距离之和的平均值,b(i)表示该点到其他各簇的所有点的平均距离的最小值。由公式可看出轮廓系数取值在[-1.1]之间,值越大越好,越接近1表示其内聚度和分离度都较优。

  该公式只是求得了一个点的轮廓系数,将所有点的轮廓系数求平均即得到该聚类结果的轮廓系数。取轮廓系数最大的k值作为最优K。

3.Calinski-Harabasz准则

其计算公式为:

在这里插入图片描述
  其中:
      n:聚类数,K:当前的类,
      trB(k):类间协方差矩阵的迹。
      trB(k):类内协方差矩阵的迹。

  什么是矩阵的迹?一个n×n矩阵A的主对角线(从左上方至右下方的对角线)上各个元素的总和即为矩阵A的迹。

  CH值越大,类内越紧密,类间越分散,因此根据最大化类间距离最小化类内距离原则,CH值越大聚类结果越好。

  Calinski-Harabasz准则计算速度较快,而轮廓系数要计算每个样本点的距离,其计算速度很慢。

猜你喜欢

转载自blog.csdn.net/m0_46568930/article/details/111991654