K-means算法,也称为K平均或K均值算法;
K平均聚类的目的是:把n个点(可以是样本的一次观察或一个实例)划分到k个聚类中,使得每个点都属于离他最近中心点的距离最近(或者说相似度上更相近的)对应的聚类。
1.从定义可以看出Kmeans主要是通过K中心和对K中心的距离计算进行聚类;所以K-means主要问题是K值选取和距离(相似度衡量)使用
2.由于每次都要计算所有的样本与每一个质心之间的距离(相似度),故在大规模的数据集上,K-Means算法的收敛速度比较慢。
1.选择聚类的个数k(kmeans算法传递超参数的时候,只需设置最大的K值)
2.任意产生k个聚类,然后确定聚类中心,或者直接生成k个中心。
3.对每个点确定其聚类中心点。
4.再计算其聚类新中心。
5.重复以上步骤直到满足收敛要求。(通常就是确定的中心点不再改变,或者损失函数达到预期范围)
举例如下样本,通过Kmeans对其分为两类:
样本 | Xֵ | Yֵ |
---|---|---|
p1 | 7 | 7 |
p2 | 2 | 3 |
p3 | 6 | 8 |
p4 | 1 | 4 |
p5 | 1 | 2 |
p6 | 3 | 1 |
p7 | 8 | 8 |
p8 | 9 | 10 |
p9 | 10 | 7 |
p10 | 5 | 5 |
p11 | 7 | 6 |
p12 | 9 | 3 |
p13 | 2 | 8 |
p14 | 5 | 11 |
p15 | 5 | 2 |
数据点分布在坐标轴上的图像如下:
1.使用K-means中分两类K=2;
2.选择p1,p2为初始的两个中心点
3.对相似度的计算选择欧式距离作为相似度分类计算
4.第一轮计算:
1)通过距离公式计算进行每个点距离P1,P2的距离远近
2) 选取距离较近的点整理进入相应队列:
P1 | P3 | P7 | P8 | P9 | P10 | P11 | P12 | P14 |
---|---|---|---|---|---|---|---|---|
P2 | P4 | P5 | P6 | P13 | P15 |
3) 计算出新一轮的队列中心,代替原来的P1,P2(找出分为两类的中心点,这个中心点比P1,P2更适合)
得出两个中心点为:
第一个中心点为
同理:
4)重复上述步骤,开始新一轮迭代,算距离,取最近:这次算的是p1~p15到的距离
5)当每次迭代结果不变时,认为算法收敛,聚类完成:
优点:
1、原理简单(靠近中心点),实现容易
2、聚类效果中上
3、空间复杂度o(N)时间复杂度o(I*K*N) N为样本点个数,K为中心点个数,I为迭代次数
缺点:
1、对离群点, 噪声敏感 (中心点易偏移)
2、很难发现大小差别很大的簇及进行增量计算
3、结果不一定是全局最优,只能保证局部最优(与K的个数及初值选取有关)
4、K值选取对迭代次数和聚类效果有一定影响
对于n个点的数据集,迭代计算k from 1 to n,每次聚类完成后计算每个点到其所属的簇中心的距离的平方和,可以想象到这个平方和是会逐渐变小的,直到k==n时平方和为0,因为每个点都是它所在的簇中心本身。但是在这个平方和变化过程中,会出现一个拐点也即“肘”点,下图可以看到下降率突然变缓时即认为是最佳的k值。