机器学习-聚类(K-Means)

  1. K-Means原理初探
  2. 传统K-Means算法流程
  3. K-Means初始化优化K-Means++
    在上节我们提到,k个初始化的质心的位置选择对最后的聚类结果和运行时间都有很大的影响,因此需要选择合适的k个质心。如果仅仅是完全随机的选择,有可能导致算法收敛很慢。K-Means++算法就是对K-Means随机初始化质心的方法的优化。
    K-Means++的对于初始化质心的优化策略也很简单,如下:
        a) 从输入的数据点集合中随机选择一个点作为第一个聚类中心 μ1 μ 1
        b) 对于数据集中的每一个点xixi,计算它与已选择的聚类中心中最近聚类中心的距离
    D(x)=argmini=0k=selected||xiμr||22 D ( x ) = a r g m i n ∑ i = 0 k = s e l e c t e d | | x i − μ r | | 2 2
        
        c) 选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大
        d) 重复b和c直到选择出k个聚类质心
        e) 利用这k个质心来作为初始化质心去运行标准的K-Means算法
        (内涵:就是尽量选择更分散的点来作为初始的聚类中心)
  4. K-Means距离计算优化elkan K-Means
    在传统的K-Means算法中,我们在每轮迭代时,要计算所有的样本点到所有的质心的距离,这样会比较的耗时。那么,对于距离的计算有没有能够简化的地方呢?elkan K-Means算法就是从这块入手加以改进。它的目标是减少不必要的距离的计算。那么哪些距离不需要计算呢?

    elkan K-Means利用了两边之和大于等于第三边,以及两边之差小于第三边的三角形性质,来减少距离的计算。

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

    第二种规律是对于一个样本点 x x 和两个质心 μ1 μ 1 , μ2 μ 2 。我们可以得到

    D(x,j2)max{0,D(x,j1)D(j1,j2)} D ( x , j 2 ) ≥ m a x { 0 , D ( x , j 1 ) − D ( j 1 , j 2 ) }

    这个从三角形的性质也很容易得到。

    利用上边的两个规律,elkan K-Means比起传统的K-Means迭代速度有很大的提高。但是如果我们的样本的特征是稀疏的,有缺失值的话,这个方法就不使用了,此时某些距离无法计算,则不能使用该算法。

  5. 大样本优化Mini Batch K-Means

    在统的K-Means算法中,要计算所有的样本点到所有的质心的距离。如果样本量非常大,比如达到10万以上,特征有100以上,此时用传统的K-Means算法非常的耗时,就算加上elkan K-Means优化也依旧。在大数据时代,这样的场景越来越多。此时Mini Batch K-Means应运而生。

    顾名思义,Mini Batch,也就是用样本集中的一部分的样本来做传统的K-Means,这样可以避免样本量太大时的计算难题,算法收敛速度大大加快。当然此时的代价就是我们的聚类的精确度也会有一些降低。一般来说这个降低的幅度在可以接受的范围之内。

    在Mini Batch K-Means中,我们会选择一个合适的批样本大小batch size,我们仅仅用batch size个样本来做K-Means聚类。那么这batch size个样本怎么来的?一般是通过无放回的随机采样得到的。

    为了增加算法的准确性,我们一般会多跑几次Mini Batch K-Means算法,用得到不同的随机采样集来得到聚类簇,选择其中最优的聚类簇。

  6. K-Means与KNN
    初学者很容易把K-Means和KNN搞混,两者其实差别还是很大的。

    K-Means是无监督学习的聚类算法,没有样本输出;而KNN是监督学习的分类算法,有对应的类别输出。KNN基本不需要训练,对测试集里面的点,只需要找到在训练集中最近的k个点,用这最近的k个点的类别来决定测试点的类别。而K-Means则有明显的训练过程,找到k个类别的最佳质心,从而决定样本的簇类别。

    当然,两者也有一些相似点,两个算法都包含一个过程,即找出和某一个点最近的点。两者都利用了最近邻(nearest neighbors)的思想。

  7. K-Means小结
    K-Means是个简单实用的聚类算法,这里对K-Means的优缺点做一个总结。

        K-Means的主要优点有:

        1)原理比较简单,实现也是很容易,收敛速度快。

        2)聚类效果较优。

        3)算法的可解释度比较强。

        4)主要需要调参的参数仅仅是簇数k。
        

        K-Means的主要缺点有:

        1)K值的选取不好把握

        2)对于不是凸的数据集比较难收敛

        3)如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳。

        4) 采用迭代方法,得到的结果只是局部最优。

        5) 对噪音和异常点比较的敏感。
        

你可能感兴趣的:(人工智能,机器学习)