机器学习-聚类系列-层次聚类

层次聚类是一种聚类算法,通过计算不同类别数据点间的相似度建立聚类树。本文介绍了层次聚类的基本概念,包括自底向上和自顶向下的划分方法,以及如何通过计算距离确定数据点间的相似度。此外,还详细解释了三种计算组合数据点间距离的方法:SingleLinkage、CompleteLinkage和AverageLinkage。

层次聚类

         层次聚类(Hierarchical Clustering)是聚类算法的一种,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树。在聚类树中,不同类别的原始数据点是树的最低层,树的顶层是一个聚类的根节点。创建聚类树有自下而上合并和自上而下分裂两种方法。  

      作为一家公司的人力资源部经理,你可以把所有的雇员组织成较大的簇,如主管、经理和职员;然后你可以进一步划分为较小的簇,例如,职员簇可以进一步划分为子簇:高级职员,一般职员和实习人员。所有的这些簇形成了层次结构,可以很容易地对各层次上的数据进行汇总或者特征化。        

    

如何划分才是合适的呢?

 

 

论数据集应该聚类成多少个簇,通常是在讨论我们在什么尺度上关注这个数据集。层次聚类算法相比划分聚类算法的优点之一是可以在不同的尺度上(层次)展示数据集的聚类情况。

基于层次的聚类算法(Hierarchical Clustering)可以是凝聚的(Agglomerative)或者分裂的(Divisive),取决于层次的划分是“自底向上”还是“自顶向下”。

自底向上的合并算法

层次聚类的合并算法通过计算两类数据点间的相似性,对所有数据点中最为相似的两个数据点进行组合,并反复迭代这一过程。简单的说层次聚类的合并算法是通过计算每一个类别的数据点与所有数据点之间的距离来确定它们之间的相似性,距离越小,相似度越高。并将距离最近的两个数据点或类别进行组合,生成聚类树。

相似度的计算

  层次聚类使用欧式距离来计算不同类别数据点间的距离(相似度)。

   

实例:数据点如下

分别计算欧式距离值(矩阵)

将数据点B与数据点C进行组合后,重新计算各类别数据点间的距离矩阵。数据点间的距离计算方式与之前的方法一样。这里需要说明的是组合数据点(B,C)与其他数据点间的计算方法。当我们计算(B,C)到A的距离时,需要分别计算B到A和C到A的距离均值。

经过计算数据点D到数据点E的距离在所有的距离值中最小,为1.20。这表示在当前的所有数据点中(包含组合数据点),D和E的相似度最高。因此我们将数据点D和数据点E进行组合。并再次计算其他数据点间的距离。

后面的工作就是不断的重复计算数据点与数据点,数据点与组合数据点间的距离。这个步骤应该由程序来完成。这里由于数据量较小,我们手工计算并列出每一步的距离计算和数据点组合的结果。

两个组合数据点间的距离

计算两个组合数据点间距离的方法有三种,分别为Single Linkage,Complete Linkage和Average Linkage。在开始计算之前,我们先来介绍下这三种计算方法以及各自的优缺点。

  • Single Linkage:方法是将两个组合数据点中距离最近的两个数据点间的距离作为这两个组合数据点的距离。这种方法容易受到极端值的影响。两个很相似的组合数据点可能由于其中的某个极端的数据点距离较近而组合在一起。

  • Complete Linkage:Complete Linkage的计算方法与Single Linkage相反,将两个组合数据点中距离最远的两个数据点间的距离作为这两个组合数据点的距离。Complete Linkage的问题也与Single Linkage相反,两个不相似的组合数据点可能由于其中的极端值距离较远而无法组合在一起。

  • Average Linkage:Average Linkage的计算方法是计算两个组合数据点中的每个数据点与其他所有数据点的距离。将所有距离的均值作为两个组合数据点间的距离。这种方法计算量比较大,但结果比前两种方法更合理。

我们使用Average Linkage计算组合数据点间的距离。下面是计算组合数据点(A,F)到(B,C)的距离,这里分别计算了(A,F)和(B,C)两两间距离的均值。

由上图可知,给定不同的距离,可以得到不同的分类,比如,23,则分为两类,中国和其他国家;17,则可分成三类,中国单独一类,菲律宾和日本一类,其余国家为一类。

 

### 统计学与机器学习中的聚类算法 #### 1. 聚类分析的概念及其应用场景 聚类分析是一种无监督学习技术,旨在将一组对象划分为若干个子集(称为簇),使得同一个簇内的对象尽可能相似,而不同簇的对象差异较大。这种技术在多个领域有广泛应用,例如市场细分、图像分割、异常检测以及推荐系统等[^2]。 #### 2. 常见的聚类算法 常见的聚类算法包括但不限于 K-Means、层次聚类、DBSCAN 和 Mean Shift 等。其中,K-Means 是最常用的聚类算法之一,其基本思想是通过迭代优化的方式找到使簇内平方误差最小化的质心位置[^3]。 #### 3. K-Means 聚类算法的原理 K-Means 算法的核心目标是最小化簇内距离之和。具体而言,它试图解决如下优化问题: \[ J(C, \mu) = \sum_{i=1}^{k}\sum_{x_j \in C_i} ||x_j - \mu_i||^2 \] 其中 \(C\) 表示簇集合,\( \mu \) 表示各簇的中心点,\( k \) 是预定义的簇数量。为了求解这一问题,K-Means 使用交替优化策略:首先随机初始化簇中心,然后反复执行分配样本到最近簇和更新簇中心的操作直到收敛。 #### 4. 如何评估聚类质量? 一种常用的方法是计算 Silhouette 系数或平均轮廓系数。Silhouette 系数值介于 [-1, 1] 之间,越接近 1 表明聚类效果越好;反之,则表示可能需要重新调整参数设置或者尝试其他类型的聚类方法[^4]。 以下是 Python 中实现简单版本 K-Means 的代码片段: ```python from sklearn.cluster import KMeans import numpy as np data = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]]) kmeans = KMeans(n_clusters=2, random_state=0).fit(data) print(kmeans.labels_) print(kmeans.cluster_centers_) ``` 上述脚本展示了如何使用 `scikit-learn` 库快速构建并训练一个两分类别的 K-Means 模型。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值