无监督学习 | 层次聚类 之凝聚聚类原理及Sklearn实现


相关文章:

机器学习 | 目录

机器学习 | 聚类评估指标

机器学习 | 距离计算

无监督学习 | KMeans 与 KMeans++ 原理

无监督学习 | DBSCAN 原理及Sklearn实现

无监督学习 | GMM 高斯混合聚类原理及Sklearn实现

1. 层次聚类

层次聚类(hierarchical clustering)试图在不同层次对数据集进行划分,从而形成树形的聚类结构。数据集的划分可采用“自底向上”的聚合策略,也可采用“自顶向下”的分拆策略。[1]

因此其优点是可以层次化聚类,将聚类结构视觉化;而缺点是计算量大,我们将在后面提到这一点。

1.1 凝聚聚类

凝聚聚类(Agglomerative Clustering)是一种采用自底向上聚类策略的层次聚类算法。它先将数据集中的每个样本看作一个初始聚类簇,然后在算法运行的每一步中找出距离最近的两个聚类簇进行合并。该过程不断重复,直到达到预设的聚类簇个数。这里的关键是如何计算聚类簇之间的距离。实际上,每个簇是一个样本集合,因此,只需要采用关于集合的某种距离即可。例如,给定聚类簇 C i C_i Ci C j C_j Cj,可通过下面的式子来计算距离:

最 小 距 离 : d min ⁡ ( C i , C j ) = min ⁡ x ∈ C i , z ∈ C j dist ⁡ ( x , z ) (1) 最小距离:d_{\min }\left(C_{i}, C_{j}\right)=\min _{\boldsymbol{x} \in C_{i}, \boldsymbol{z} \in C_{j}} \operatorname{dist}(\boldsymbol{x}, \boldsymbol{z}) \tag{1} dmin(Ci,Cj)=xCi,zCjmindist(x,z)(1)

最 大 距 离 : d max ⁡ ( C i , C j ) = max ⁡ x ∈ C i , z ∈ C j dist ⁡ ( x , z ) (2) 最大距离:d_{\max }\left(C_{i}, C_{j}\right)=\max _{\boldsymbol{x} \in C_{i}, \boldsymbol{z} \in C_{j}} \operatorname{dist}(\boldsymbol{x}, \boldsymbol{z}) \tag{2} dmax(Ci,Cj)=xCi,zCjmaxdist(x,z)(2)

平 均 距 离 : d avg ⁡ ( C i , C j ) = 1 ∣ C i ∣ ∣ C j ∣ ∑ x ∈ C i ∑ z ∈ C j dist ⁡ ( x , z ) (3) 平均距离:d_{\operatorname{avg}}\left(C_{i}, C_{j}\right)=\frac{1}{\left|C_{i}\right|\left|C_{j}\right|} \sum_{\boldsymbol{x} \in C_{i}} \sum_{\boldsymbol{z} \in C_{j}} \operatorname{dist}(\boldsymbol{x}, \boldsymbol{z}) \tag{3} davg(Ci,Cj)=CiCj1xCizCjdist(x,z)(3)

显然,最小距离两个簇的最近样本决定最大距离两个簇的最远样本决定,而平均距离则由两个簇的所有样本共同决定

此外,也可以使用离差平方和 ESS(Error Sum of Squares)来进行聚类,通过最小化聚类前后的离方平方和之差 Δ ( C i , C j ) \Delta(C_i,C_j) Δ(Ci,Cj),来寻找最近的簇。[2]

离 差 平 方 和 : E S S = ∑ i = 1 n x i 2 − 1 n ( ∑ i = 1 n x i ) 2 (4) 离差平方和:ESS=\sum_{i=1}^n x_i^2-\frac{1}{n}\big(\sum_{i=1}^n x_i\big)^2 \tag{4} ESS=i=1nxi2n1(i=1nxi)2(4)

Δ ( C i , C j ) = E S S ( C i ∪ C j ) − E S S ( C i ) − E S S ( C j ) (5) \Delta(C_i,C_j)=ESS(C_i \cup C_j)-ESS(C_i)-ESS(C_j) \tag{5} Δ(Ci,Cj)=ESS(CiCj)ESS(Ci)ESS(Cj)(5)


当聚类簇距离由 d m i n d_{min} dmin d m a x d_{max} dmax d a v g d_{avg} davg Δ ( C i , C j ) \Delta(C_i,C_j) Δ(Ci,Cj) 计算时,凝聚聚类算法被相应地称为单链接(single-linkage)、全链接(complete-linkage))均链接(average-linkage)和 Ward-linkage 算法。

凝聚聚类算法描述如下图所示:

  • 在第 1-9 行,算法先对仅包含一个样本的初始聚类簇和相应的距离矩阵进行初始化;

  • 在第 11-23 行,凝聚算法不断合并距离最近的聚类簇,并对合并得到的聚类簇的距离矩阵进行更新;

上述过程不断重复,直到达到预设的聚类簇数。

图1 凝聚聚类算法

1.2 层次图

下面以单链接为例子,介绍层次聚类的层次图(系统图,dendrogram)。假设我们有以下八个点,使用单链接聚为 3 个类。

首先将每个点设为一个单独的簇类,因此此时有 8 个簇,大于预期 3 个簇,故需要继续进行聚类。

图2 初始化聚类簇

因此我们重复算法 11-23 行 3 次,每次将距离最近的两个样本聚为同一簇,对应右图的层次图。此时仍剩下 5 个簇,因此需要继续进行聚类。

图3 5个聚类簇

可以看到,此时样本 7 与簇 {6,8} 的距离( d i s t m i n = d i s t ( 6 , 7 ) dist_{min}=dist(6,7) distmin=dist(6,7))最近,因此可以将他们聚为一簇,如下图所示:

图4 4个聚类簇

同理,继续进行聚类,考虑各个簇之间的距离,可以看出,样本 3 与簇 {4,5} 的距离( d i s t m i n = d i s t ( 3 , 4 ) dist_min=dist(3,4) distmin=dist(3,4))最近,因此有:

图5 3个聚类簇

此时已经达到了我们所要求的聚类簇数,故算法停止,对应的层次图如右方所示。


1.3 不同凝聚算法比较

通过下面图片,我们可以看到各类凝聚算法在不同类型数据上的聚类效果,

需要注意的是,由于单链接和全链接只考虑簇中两个代表性的点,故受噪声和异常点影响大;而单链接容易出现一个簇囊括大多数样本(左下方图),而全链接则比单链接更紧凑些。

图6 不同凝聚算法比较

2. Sklearn 实现

sklearn.cluster.AgglomerativeClustering(n_clusters=2, affinity=‘euclidean’, memory=None, connectivity=None, compute_full_tree=‘auto’, linkage=‘ward’, distance_threshold=None)

n_clusters:聚类簇数

affinity: string or callable, default: “euclidean” 【距离计算参数】

Metric used to compute the linkage. Can be “euclidean”, “l1”, “l2”, “manhattan”, “cosine”, or “precomputed”. If linkage is “ward”, only “euclidean” is accepted. If “precomputed”, a distance matrix (instead of a similarity matrix) is needed as input for the fit method.

linkage: {“ward”, “complete”, “average”, “single”}, optional (default=”ward”)

Which linkage criterion to use. The linkage criterion determines which distance to use between sets of observation. The algorithm will merge the pairs of cluster that minimize this criterion.

  • ward minimizes the variance of the clusters being merged.

  • average uses the average of the distances of each observation of the two sets.

  • complete or maximum linkage uses the maximum distances between all observations of the two sets.

  • single uses the minimum of the distances between all observations of the two sets.

2.1 层次图可视化

由于 Sklearn 中并不支持可视化层次图,因此我们使用 Scipy:

from scipy.cluster.hierarchy import dendrogram, ward, single
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

X = load_iris().data[:10]

linkage_matrix = ward(X)

dendrogram(linkage_matrix)

plt.show

<function matplotlib.pyplot.show(*args, **kw)>
图7 层次树可视化

参考文献

[1] 周志华. 机器学习[M]. 北京: 清华大学出版社, 2016: 214.

[2] Ward J H , Jr. Hierarchical Grouping to Optimize an Objective Function[J]. Journal of the American Statistical Association, 1963, 58(301):236-244.

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: K-means聚类算法是一种简单且常用的聚类算法,其原理图可用以下步骤进行解释: 1. 初始化:随机选择K个数据点作为初始的聚类中心。这些中心点被称为质心。 2. 分配数据点:将每个数据点分配给与其最近的质心。这个步骤通过计算数据点与每个质心之间的距离来完成。 3. 更新质心:计算每个聚类的所有数据点的平均值,将这个平均值作为新的质心。这个步骤通过重新计算质心的坐标来完成。 4. 迭代更新:重复步骤2和3,直到质心不再发生变化或达到提前停止的条件。 5. 结果输出:每个数据点根据最终的质心分配到一个聚类中。 K-means聚类算法的原理图描述了以上的步骤。首先,在原始数据空间中,随机选择K个数据点(用不同的符号表示)作为初始的质心。接着,根据每个数据点与每个质心之间的距离,将数据点划分到与其最近的质心所代表的聚类中(用相同的颜色表示)。然后,根据每个聚类中的数据点的坐标计算平均值,更新质心的坐标。在重新计算质心后,重复进行分配数据点和更新质心的步骤,直到质心稳定下来,即质心不再发生变化为止。最终,根据最终质心的位置将数据点分配到对应的聚类中。 K-means聚类算法的原理图直观地展示了聚类的过程和分组的结果,使人们更容易理解和掌握这一算法的工作原理。 ### 回答2: kmeans聚类算法是一种基于距离的无监督学习算法,主要用于将数据集中的样本分成多个不同的类别。其原理图如下: 1. 初始化:首先确定要分成的类别数K,并随机选择K个样本作为初始的聚类中心点。 2. 分类:对于每个样本数据,计算其与每个聚类中心点的距离,并将其归属为与其距离最近的聚类中心的类别。 3. 更新聚类中心点:对于每个类别,计算属于该类别的所有样本的平均值,将这些平均值作为新的聚类中心点。 4. 重复步骤2和3:重复执行步骤2和3,直到聚类中心点不再发生变化或达到预先设定的迭代次数。 5. 输出结果:得到经过聚类的样本类别结果,即每个样本被归为哪一个类别。 kmeans聚类算法的核心思想是通过最小化样本数据点与所属聚类中心点之间的距离,来实现样本点的聚类。该算法的优点在于简单和高效,适用于大规模数据集。然而,kmeans算法也有一些不足之处,比如对初始聚类中心点的选择敏感,容易陷入局部最优解,并且对噪声和异常值敏感。 总而言之,kmeans聚类算法通过将样本点分配到距离最近的聚类中心点,实现对数据集的聚类,是一种常用的聚类算法。 ### 回答3: K均值聚类算法是一种无监督的机器学习算法,其原理图如下: 1. 首先,选择k个初始的聚类中心点,可以是随机选择或自定义选择。 2. 将数据样本点根据与聚类中心点的距离,分配给最近的聚类中心点所属的类别。 3. 根据划分后的数据点集计算每个类别的质心,即计算每个类别中所有样本点的均值。 4. 将每个类别的质心作为新的聚类中心点。 5. 重复步骤2和步骤3,直到聚类中心点不再变化或者达到事先设定的迭代次数。 6. 最终得到聚类结果,即将每个数据点分配到相应的聚类中心点所属的类别。 K均值聚类算法的原理是通过不断迭代优化聚类中心点的位置,使得样本点与所属聚类中心点之间的距离最小化。算法的过程可以用原理图简单描述。 原理图中有两个主要的步骤:数据点的分配和质心的更新。在数据点的分配步骤中,每个数据点会根据与聚类中心点的距离选择属于哪个聚类中心点所代表的类别。而在质心的更新步骤中,根据分配后的数据点集,计算每个类别中所有样本点的均值,即得到每个类别的质心。 通过不断迭代这两个步骤,最终得到的聚类中心点和样本点之间的距离最小化,同时使得每个聚类中心点所代表的类别内部的样本点尽量相似,而不同类别之间的样本点尽量不相似。 K均值聚类算法原理图直观地展示了算法通过逐步分配和更新聚类中心点,不断优化聚类结果的过程,从而得到数据的聚类结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值