Kmeans、DBSCAN、层次聚类等三种聚类算法笔记


一、Kmeans模型

聚类算法,该算法利用距离远近的思想将目标数据聚为指定的k个簇,簇内样本越相似,表明聚类效果越好。

算法对应python的sklearn的子模块cluster中的Kmeans类

1 算法思想及步骤

该聚类算法的思路非常通俗易懂,就是不断地计算各样本点与簇中心之间的距离,直到收敛为止,其具体的步骤如下:

  • (1)从数据中随机挑选k个样本点作为原始的簇中心。
  • (2)计算剩余样本与簇中心的距离,并把各样本标记为离k个簇中心最近的类别。
  • (3)重新计算各簇中样本点的均值,并以均值作为新的k个簇中心。
  • (4)不断重复(2)和(3),直到簇中心的变化趋于稳定,形成最终的k个簇。

Kmeans聚类算法构造的目标函数:该目标函数的思想是,所有簇内样本的离差平方和之和达到最小,而簇间样本的离差平方和尽可能大。

2 最佳k值的确定方法

  • 簇内离差平方和拐点法
  • 轮廓系数法
  • 间隔统计量法

2.1 拐点法

该方法思想比较简单,指通过在不同k值下计算簇内的离差平方和,然后通过可视化技术找到“拐点”对应的k值。通过可视化方法,重点关注的是斜率的变化.

2.2 轮廓系数法

该方法综合考虑了簇的密集性与分散性两个信息,如果数据集被分割为理想的k个簇,那么对应的簇内样本会很密集,而簇间样本会很分散。轮廓系数的计算公式可以表示为:
S(i)=b(i)a(i)max(a(i),b(i))S(i)=\frac{b(i)-a(i)}{max(a(i),b(i))}
其中,a(i)体现了簇内的密集性,代表样本i与同簇内其他样本点距离的平均值;b(i)反映了簇间的分散性,它的计算过程是,样本i与其他非同簇样本点距离的平均值,然后从平均值中挑选出最小值。
有关轮廓系数的计算,可以直接调用sklearn子模块metrics中的函数,即silhouette_score函数.

2.3 间隔统计量法

算法优缺点:

  • 该方法可以适用于任何聚类算法。
  • 对大数据集而言,其k值的确定会比较慢。

3 Kmeans算法的缺点

  • 需要用户指定该算法的聚类个数。
  • 如果原始数据集存在量纲上的差异,就必须对其进行标准化的预处理
  • 算法对异常点非常敏感
  • 该算法** 不适合发现非球形**的簇

二、DBSCAN算法

DBSCAN(Density-Based Special Clustering of Applications with Noise),基于密度的聚类算法,解决针对KMeans算法的两个缺点(一是聚类效果容易受到异常样本点的影响;二是无法准确地将非球形样本进行合理的聚类)。通常可以使用该算法实现异常点的检测
算法优点

  • 密度聚类算法可以发现任何形状的样本簇
  • 该算法具有很强的抗噪声能力

算法缺点

  • 需要用户设定合理的半径ε
  • 设定对应领域内最少的样本数量MinPts

算法对应python的sklearn的子模块cluster中的DBSCAN类

三、层次聚类算法

层次聚类算法,该算法比较适合小样本的聚类,它是通过计算各个簇内样本点之间的相似度,进而构建一棵有层次的嵌套聚类树。
算法优点: 可以通过人为设定聚类个数实现样本点的聚合
算法缺点: 该算法仍然不适合非球形样本的聚类;不太适合大样本的聚类

算法对应python的sklearn的子模块cluster中的AgglomerativeClustering类

1 层次聚类需要回答的两个问题

  • 一个是样本点之间通过什么指标衡量它们之间的相似性
    答:通过样本点之间的欧氏距离或曼哈顿距离来衡量它们的相似性
  • 另一个是如何衡量簇与簇之间的距离
    答:在sklearn模块中,为层次聚类所涉及的簇间距离提供了三种度量方法,分别是:最小距离法、最大距离法和平均距离法

1.1 最小距离法

最小距离法是指以所有簇间样本点距离的最小值作为簇间距离的度量。
该方法非常容易受到极端值的影响。

1.2 最大距离法

最大距离法是指以所有簇间样本点距离的最大值作为簇间距离的度量。
该方法也容易受到极端值的影响。

1.3 平均距离法

平均距离法指以所有簇间样本点距离的平均值作为簇间距离的度量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章