K-means、手肘法与K-means优化(K-means++、elkan-means、mini batch k-means)

目录

  • 一、k-means
    • 1、简介
    • 2、步骤
    • 3、总结
  • 二、手肘法
    • 1、指标
    • 2、原理
  • 三、k-means++
    • 1、简介
    • 2、流程
  • 四、elkan-means
  • 五、mini batch k-means
  • 六、ISODATA

一、k-means

1、简介

k-means是一个简单常用的聚类方法,属于无监督学习。
通过给定的超参数k,将数据集分成k个簇。k值的选取可以通过交叉验证的方式,多次测试取最优值。

示例:
k = 3

K-means、手肘法与K-means优化(K-means++、elkan-means、mini batch k-means)_第1张图片
假设有k个簇,C1、C2、…Ck。
簇Ci的均值向量,称为质心或者簇心,表示为:在这里插入图片描述
于是我们的目标可以设为,使所有簇内数据到它对应的簇心的距离最小:
在这里插入图片描述
求E的最小值是一个NP难问题,于是采用迭代方法直到质心收敛。
K-means、手肘法与K-means优化(K-means++、elkan-means、mini batch k-means)_第2张图片

2、步骤

由于k-means算法的计算依赖于距离,所以在聚类前要进行归一化处理
k-means的步骤:
(1)从数据集中随机选取k的点作为初始质心。
(2)计算数据集中剩余点xi到这k个质心的距离,找到距离最近的质心,并将该点归类到这个质心所属的簇中。
(3)对于每一个簇,用其中所有点重新计算质心。
(4)迭代(2)、(3)步,直到达到停止条件(质心不再发生变化,或者打到指定的迭代轮数)。

时间复杂度:
O(m * n * k),其中m为样本个数,n为迭代轮数,k为质心个数。

3、总结

优点:
(1)简单
(2)效果较好
(3)超参数少(k值)
(4)模型可解释性强。

缺点:
(1)对初始质心敏感,初始值的选取会影响到聚类的效果。
(2)对k值敏感,k值的选取会影响到聚类效果。
(3)对噪音和异常点敏感。
(4)数据类别不均衡时效果不够好。
(5)可能得到局部最优解。
(6)对特殊分布的数据值效果不好。
例如:
K-means、手肘法与K-means优化(K-means++、elkan-means、mini batch k-means)_第3张图片

二、手肘法

1、指标

SSE(sum of the square errors,误差平方和)
K-means、手肘法与K-means优化(K-means++、elkan-means、mini batch k-means)_第4张图片
其中Ci为dii个簇,mi为第i个质心,p为属于Ci的数据点。
SSE代表了聚类效果。

2、原理

当聚类个数未达到最优个数k时,随着聚类个数的增加,SSE下降较快。达到最优个数以后,SSE下降缓慢。
斜率变化最大处即为最优k值。

如图,此时k = 4:
K-means、手肘法与K-means优化(K-means++、elkan-means、mini batch k-means)_第5张图片

三、k-means++

1、简介

由于k-means的效果与初始值的选取有关,所以产生了k-means++对初始值的生成作了优化。

2、流程

k-means++算法与k-mean算法的不同在于初始k个质心的选择。
步骤:
(1)随机选取一个质心
(2)对于数据集中剩余的每一个点xi,计算其与已有的质心的最近的距离D(xi)
(3)选择新的质心,选择标准是:D值大的数据点被选取的概率大。
(4)迭代(2)、(3)步直到选取完成k个质心。

四、elkan-means

k-means的时间复杂度之一体现在两个点之间距离的计算上,elkan-means算法就是对距离计算的优化。其利用了三角形两边之和小于第三边的原理来减少计算。

对于一个样本点x和两个质心μj1,μj2。如果我们预先计算出了这两个质心之间的距离D(j1,j2),则如果计算发现2D(x,j1)≤D(j1,j2),我们立即就可以知道D(x,j1)≤D(x,j2)。此时我们不需要再计算D(x,j2)。

五、mini batch k-means

k-means中要计算所有数据点到质心的距离,这是一个很大的工程,mini batch k-means就是对其做的优化。

选择一个合适的batch,用batch size个数据来做聚类,这样做加快了收敛速度,并且精度的降低在可接受的范围内。

mini batch k-means子数据集的选取采用无放回的随机采样获得,并且为了增加算法的准确性,我们一般会多跑几次Mini Batch K-Means算法,用得到不同的随机采样集来得到聚类簇,选择其中最优的聚类簇。

六、ISODATA

当遇到高纬度、海量的数据集时,往往很难估计K的大小。ISODATA算法很直观,当属于某个类别的样本数过少时,把该类别去除;当某个类别样本过多、分散程度较大时,分为两个子类别。

你可能感兴趣的:(机器学习,机器学习,kmeans算法,聚类算法,无监督学习)