美文网首页Hello Data, Hello Math!
Mean-Shift和K-Means结合的实践

Mean-Shift和K-Means结合的实践

作者: Rethinkpossible | 来源:发表于2018-08-10 10:16 被阅读0次

            我们谈及数据挖掘,无非是“分类”,“关联”,“聚类”,“异常值检验”等。今天我想聊聊对聚类的认识,以及基于密度聚类下生成的初始化簇心与K-Means的结合。

           不同的聚类算法有不同的应用场景,适合不同分布、不同属性、不同数量级的数据集,从这个角度就意味着聚类算法可以进行各种各样的变形和改进。Mean-Shift算法能根据数据自身的密度分布,自动学习到类的数目,但类别数目不一定是我们想要的。而K-Means对噪声的鲁棒性没有Mean-Shift强,且Mean-Shift是一个单参数算法,容易作为一个模块和别的算法集成。因此我在这里,将Mean-Shift聚类后的质心作为K-Means的初始中心进行聚类。下图是Mean-Shift和K-Means结合的步骤。

           对于非监督降维算法,可以参考网址(1)。那降多少维呢?如果不多,性能提升不大;如果目标维度太小,则又丢失了很多信息。我在这里选取了99%的主成分贡献度作为标准,来选择目标维度大小。除了PCA线性方法外,对于非线性数据集,sklearn也有改进的Kernel PCA。除了PCA外,还有就是Feature Agglomeration的降维方法,直接对特征进行聚类,从而起到降维效果。关于降维在聚类中的应用,感觉谱聚类(Spectral Clustering)效果较好。简单的说,就是构建拉普拉斯矩阵,并归一化,再进行特征分解,最后用K-Means对最小的N个特征向量进行聚类。 

           在代码实验中,单独用Mean-Shift以及根据Silhouette评分自动选择k值的K-Means在聚类结果上几乎一样。

    用Mean-Shift结合K-Means的效果如下。左一图表示,在没设定最终聚类个数下,MSK认为聚两类的Silhouette分数最高。而中间图与右一图表示,分别在人工设定聚类数维3和4下的聚类效果。实验代码放在Github上,参考网址(2)。

    参考网址:

    (1) http://scikit-learn.org/stable/modules/unsupervised_reduction.html

    (2) https://github.com/DemonDamon/meanshift-kmeans-cluster

    相关文章

      网友评论

        本文标题:Mean-Shift和K-Means结合的实践

        本文链接:https://www.haomeiwen.com/subject/drtcaxtx.html