【算法周】人以类聚咋个聚!K-means了解一下~(上篇)

欢迎关注哈希大数据微信公众号【哈希大数据】


之前我们给大家讲了四篇机器学习的扫盲篇,把机器学习需要的一些常识以及需要的计算机环境理了一遍,这一周我们的系列名称是【算法周】!!毕竟算法是机器学习的灵魂嘛~~
今天我们给大家介绍算法的Chaper1——K-means~由于本文内容较长,为保证学习质量分为上下篇。

K-Means算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛。K-Means算法有大量的变体,本文就从最传统的K-Means算法讲起,在其基础上讲述K-Means的优化变体方法。包括初始化优化K-Means++, 距离计算优化elkan K-Means算法和大数据情况下的优化Mini Batch K-Means算法。

本文框架
1.K-Means原理初探
2.传统K-Means算法流程
3.K-Means初始化优化K-Means++
4.K-Means距离计算优化elkan K-Means
5大样本优化Mini Batch K-Means
6.K-Means与KNN
7.K-Means小结

1.K-Means原理初探
K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。
如果用数据表达式表示,假设簇划分为(C1,C2,...Ck),则我们的目标是最小化平方误差E:

image.png

其中μi是簇Ci的均值向量,有时也称为质心,表达式为:
image.png

如果我们想直接求上式的最小值并不容易,这是一个NP难的问题,因此只能采用启发式的迭代方法。
K-Means采用的启发式方式很简单,用下面一组图就可以形象的描述。
image.png

上图a表达了初始的数据集,假设k=2。
在图b中,我们随机选择了两个k类所对应的类别质心,即图中的红色质心和蓝色质心,然后分别求样本中所有点到这两个质心的距离,并标记每个样本的类别为和该样本距离最小的质心的类别。
如图c所示,经过计算样本和红色质心和蓝色质心的距离,我们得到了所有样本点的第一轮迭代后的类别。此时我们对我们当前标记为红色和蓝色的点分别求其新的质心,如图4所示,新的红色质心和蓝色质心的位置已经发生了变动。图e和图f重复了我们在图c和图d的过程,即将所有点的类别标记为距离最近的质心的类别并求新的质心。最终我们得到的两个类别如图f。
当然在实际K-Mean算法中,我们一般会多次运行图c和图d,才能达到最终的比较优的类别。

2.传统K-Means算法流程
在上一节我们对K-Means的原理做了初步的探讨,这里我们对K-Means的算法做一个总结。
首先我们看看K-Means算法的一些要点。
1)对于K-Means算法,首先要注意的是k值的选择,一般来说,我们会根据对数据的先验经验选择一个合适的k值,如果没有什么先验知识,则可以通过交叉验证选择一个合适的k值。
2)在确定了k的个数后,我们需要选择k个初始化的质心,就像上图b中的随机质心。由于我们是启发式方法,k个初始化的质心的位置选择对最后的聚类结果和运行时间都有很大的影响,因此需要选择合适的k个质心,最好这些质心不能太近。
好了,现在我们来总结下传统的K-Means算法流程。
输入是样本集D={x1,x2,...xm},聚类的簇树k,最大迭代次数N
输出是簇划分C={C1,C2,...Ck}

  1. 从数据集D中随机选择k个样本作为初始的k个质心向量: {μ1,μ2,...,μk}
    2)对于n=1,2,...,N
    a) 将簇划分C 初始化为Ct=∅ t=1,2...k
    b) 对于i=1,2...m,计算样本xixi和各个质心向量μj(j=1,2,...k)的距离:
    dij=||xi−μj||2 ,将xi标记最小的为dij所对应的类别λi。此时更新Cλi=Cλi∪{xi}Cλi=Cλi∪{xi}
    对于j=1,2,...,k,对Cj中所有的样本点重新计算新的质心:


    image.png

    c) 如果所有的k个质心向量都没有发生变化,则转到步骤 3)
    3) 输出簇划分C={C1,C2,...Ck}

你可能感兴趣的:(【算法周】人以类聚咋个聚!K-means了解一下~(上篇))