k-means

   聚类算法是在不知道数据标签的情况下将相似的数据分为一类。K-means是一个经典的聚类算法,在实践中往往得到不错的效果。

K-means的算法流程:

  1. 选择K个中心点,计算样本中每个点与这K个点的距离。
  2. 比较样本点离那个中心点最近的,并将该样本点划分到离样本点最近的类别中。
  3. 根据第2步将每个样本分为K个簇,求每个簇的中心点,将其作为新的中心点。
  4. 重复的执行1到3步,直到簇的中心变化小于规定值,或者达到预定的迭代次数,或者MSE小于预定值。

​    算法的可视化如图:k-means

算法的优点:

  1. 计算的时间复杂度接近线性( O ( n k t ) O(nkt) O(nkt),N 是数据对象的数目,K是聚类的簇数,t是迭代的次数)。
  2. 收敛速度快,原理相对通俗易懂,可解释性强

算法的缺点:

  1. 受初始值和离群值的影响较大,每次迭代的结果不稳定。

k-means
  上图的数据的簇中心应该是左上,左下,右上,右下的。但因为初值的选取有问题,使得算法在聚类过程中出错。

  受离群值的影响较大,数组1,2,3,4,100的均值是22。但数据100是离群点,导致了均值过大,使得聚类准确性降低。对此我们可以使用中位数代替均值。这就是k-Mediods聚类(K 中值聚类)。

  1. 结果通常是局部最优解,不是全局最优解。

可以采用分别取不同的初值的方式解决。

  1. 无法很好的解决数据簇分布相差较大的情况。
  2. K是超参数,一般需要按经验选择

K-means的调优:

1.数据归一化和离群点处理

  因为K-means是基于距离的算法,不同的特征间的量纲需要统一,如果量纲不统一,数据就会偏向数值大的数。

  同理离群点使得个别数据对簇的中心变化影响太大,所以需要剔除

2.合理的选择K值

  不同的K值对于聚类的效果很大,特别在高维情况下,难以通过人为的观察给一个合适的K值,对此,我们可以通过“手轴法”确定K值。

  通过计算不同K值的误差平方和,得到下图。
k-means

  由上图可以看出,随着K值的增加,误差平方和减小,但在K=3以后,误差平方和几乎不变,所以选择K=3。

手肘法的缺点是不够自动化,需要人为的判断到哪一个误差的平方和几乎不变。

3.采用核函数

​   主要思想是通过一个非线性映射,将低维的空间中的点映射到高维,将高维中的点聚类。对于非凸数据集效果较好。

  要思想是通过一个非线性映射,将低维的空间中的点映射到高维,将高维中的点聚类。对于非凸数据集效果较好。

相关文章:

  • 2022-03-04
  • 2022-12-23
  • 2021-12-23
猜你喜欢
  • 2021-08-06
  • 2021-11-10
  • 2022-12-23
  • 2022-12-23
  • 2022-02-08
  • 2021-10-17
相关资源
相似解决方案