赞
踩
专业一点来说,层次聚类通过 计算不同类别数据点间的相似度 来创建一棵有层次的嵌套聚类树。
层次聚类的好处是不需要指定具体类别数目的,其得到的是一颗树,聚类完成之后,可在任意层次横切一刀,得到指定数目的簇。
按照 层次分解是自下而上,还是自顶向下,层次的聚类方法可以进一步分为以下两种:
自下而上的 凝聚方法(agglomerative:先将所有样本的每个点都看成一个簇,然后找出距离最小的两个簇进行合并,不断重复到预期簇或者其他终止条件),
凝聚方法的代表算法:AGNES,Agglomerative Nesting
自顶向下的 分裂方法(divisive:先将所有样本当作一整个簇,然后找出簇中距离最远的两个簇进行分裂,不断重复到预期簇或者其他终止条件)。
分裂方法的代表算法:DIANA,Divisive Analysis。
AGNES 算法步骤:
(1) 初始化,每个样本当做一个簇。
(2) 计算任意两簇距离,找出 距离最近的两个簇,合并这两簇。
(3) 重复步骤 2……
直到,最远两簇距离超过阈值,或者簇的个数达到指定值,终止算法
DIANA 算法步骤:
(1) 初始化,所有样本集中归为一个簇
(2) 在同一个簇中,计算任意两个样本之间的距离,找到 距离最远 的两个样本点a,b,将 a,b 作为两个簇的中心;
(3) 计算原来簇中剩余样本点距离 a,b 的距离,距离哪个中心近,分配到哪个簇中
(4) 重复步骤2、3 ……
直到,最远两簇距离不足阈值,或者簇的个数达到指定值,终止算法
在上面说的 AGNES 提到了 合并距离最近的两簇,这里的距离是如何度量的呢?
簇间距离的计算方法有许多,包括:
最小距离,最大距离,均值距离,(类)平均距离,中间距离,重心距离
补充:
当算法选择“最小距离”作为簇间距离时,有时称之为 最近邻聚类算法。并且,当最近两个簇之间的距离超过阈值时,算法终止,则称其为 单连接算法。
当算法选择“最大距离”作为簇间距离时,有时称之为 最远邻聚类算法。并且,当最近两个簇之间的最大距离超过阈值时,算法终止,则称其为全连接算法。
常用于 1维数据 的自动分组,如下图所示,
层次聚类算法分为两类:自上而下和自下而上。
凝聚层级聚类(HAC)是自下而上的一种聚类算法。HAC首先将每个数据点视为一>个单一的簇,然后计算所有簇之间的距离来合并簇,直到所有的簇聚合成为一个簇为止。
具体步骤:
层次聚类
优点:
(1)不需要知道有多少个簇
(2)对于距离度量标准的选择并不敏感
缺点:
效率低
import scipy.cluster.hierarchy as hcluster
linkage = hcluster.linkage(data, method='single')
# data:训练样本
# method:类距离的计算方式(single:两个类之间最短距离的点的距离、complete:两个类之间最长距离的点的距离、centroid:两个类之间所有点的中点的距离)
import scipy.cluster.hierarchy as hcluster
hcluster.dendrogram(linkage)
#linkage:层次聚类的结果
# dendrogram()方法为我们展示层次聚类得到的层次图
import scipy.cluster.hierarchy as hcluster
pTarget = hcluster.fcluster(linkage, n, criterion='maxclust')
# linkage:层次聚类的结果
# n:要聚的类数量
# criterion:划分方法,使用maxclust,最大划分法
[1] 聚类算法——层次聚类算法 2018.2
[2] 层次聚类python,scipy(dendrogram, linkage,fcluster函数)总算有博文说清楚层次聚类Z矩阵的意义了 2021.6
[3] Python scipy.cluster.hierarchy.dendrogram用法及代码示例 ;
[4] python dendrogram_Python中的凝聚层次聚类示例 2020.11
[5] 聚类分析python画树状图–Plotly(dendrogram)用法解析 2018.8
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。