- 1.什么是层次聚类?
- 2. 如何用python实现
常用于 1维数据 的自动分组,如下图所示,
- 把数据用【主成分分析】的方法把数据从多维压缩为1维,
- 然后使用层次聚类算法,把它们的树结构计算出来,
- 然后根据树的结构,把它们分解成为我们需要的组,例如我们需要分为3组,就使用图中的黄色直线,根据树结构分成3组即可。
层次聚类算法分为两类:自上而下和自下而上。
凝聚层级聚类(HAC)是自下而上的一种聚类算法。HAC首先将每个数据点视为一>个单一的簇,然后计算所有簇之间的距离来合并簇,直到所有的簇聚合成为一个簇为止。
具体步骤:
首先我们将每个数据点视为一个单一的簇,然后选择一个测量两个簇之间距离的度量标准。例如我们使用average linkage作为标准,它将两个簇之间的距离定义为第一个簇中的数据点与第二个簇中的数据点之间的平均距离。
在每次迭代中,我们将两个具有最小average linkage的簇合并成为一个簇。
重复步骤2知道所有的数据点合并成一个簇,然后选择我们需要多少个簇。
层次聚类
优点:
(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 scipy.cluster.hierarchy.fcluster(linkage, n, criterion='maxclust') # linkage:层次聚类的结果 # n:要聚的类数量 # criterion:划分方法,使用maxclust,最大划分法
参考链接:
[1] 聚类算法——层次聚类算法 2018.2



