机器学习总结(十):常用聚类算法(Kmeans、密度聚类、层次聚类)及常见问题

任务:将数据集中的样本划分成若干个通常不相交的子集。

性能度量:类内相似度高,类间相似度低。两大类:1.有参考标签,外部指标;2.无参照,内部指标。

距离计算:非负性,同一性(与自身距离为0),对称性,直递性(三角不等式)。包括欧式距离,曼哈顿距离等等。

(1)    K均值聚类步骤:1.随机选择k个样本作为初始均值向量;2.计算样本到各均值向量的距离,把它划到距离最小的簇;3.计算新的均值向量;4.迭代,直至均值向量未更新或到达最大次数。缺点:需要输入k,算法速度依赖于初始化的好坏,不能处理非球形簇。

(2)    密度聚类步骤:DBSCAN,找到几个由密度可达关系导出的最大的密度相连样本集合。1.找到任意一个核心点,对该核心点进行扩充;2.扩充方法是寻找从该核心点出发的所有密度相连的数据点;3遍历该核心的邻域内所有核心点,寻找与这些数据点密度相连的点。优点:抗噪声,处理任意形状和大小的簇。缺点:数据量大时内存消耗大,需要自定义参数多。优点:不需要确定要划分的聚类个数。

(3)    层次聚类步骤:AGNES,1.先将数据集中的每个样本看作一个初始聚类簇;2.找到距离最近的两个聚类簇进行合并。优点:无需目标函数,没有局部极小问题或是选择初始点的问题。缺点:代价大。

面试问题:

(1)Kmeans的k值如何确定?(1)枚举,由于kmeans一般作为数据预处理,所以k一般不会设置很大,可以通过枚举,令k从2到一个固定的值,计算当前k的所有样本的平均轮廓系数,最后选择轮廓系数最接近于1对应的k作为最终的集群数目;(2)数据先验知识,或者对数据进行简单的分析或可视化得到。

(2)初始点选择方法?初始的聚类中心之间相互距离尽可能远。(1)kmeans++,随机选择一个,对每一个样本计算到他的距离,距离越大的被选中聚类中心的概率也就越大,重复。(2)选用层次聚类进行出初始聚类,然后从k个类别中分别随机选取k个点。

(3)kmeans不能处理哪种数据?(1)非凸(non-convex)数据。可以用kernal k均值聚类解决。(2)非数值型数据。Kmeans只能处理数值型数据。可以用k-modes。初始化k个聚类中心,计算样本之间相似性是根据两个样本之间所有属性,如属性不同则距离加1,相同则不加,所以距离越大,样本的不相关性越大。更新聚类中心,使用一个类中每个属性出现频率最大的那个属性值作为本类的聚类中心。(3)噪声和离群值的数据。可以用kmedoids。(4)不规则形状(有些部分密度很大,有些很小),可以用密度聚类DBSCAN解决。

(4)kmeans如何处理大数据,几十亿?并行计算。MapReduce,假设有H个Mapper,把数据集分为H个子集,分布到H个Mapper上,初始化聚类中心,并同时广播到H个Mapper上。

    原文作者:聚类算法
    原文地址: https://blog.csdn.net/cppjava_/article/details/71249209
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞