一、层次聚类简介
层次聚类方法属于无监督学习,将数据集分成指定的聚类个数。
根据具体实现方法的不同,分为凝聚聚类(自底向上)、分裂聚类(自顶向下)
1、凝聚聚类(自底向上)
例如,AGNES,Agglomerative Nesting
算法步骤:
- 将每个样本点都看作一个独立的簇,
- 计算所有簇之间的距离,
- 找到距离最近的两个簇进行合并,,重复2,直到达到聚类个数或其他终止条件
2、分裂聚类(自顶向下)
例如,DIANA,Divisive Analysis
算法步骤:
- 将所有样本点都看作一个簇
- 计算簇中所有样本之间的距离
- 找到簇中距离最远的两个样本点i、j,并将其设置为两个新簇的中心点
- 对于原簇中剩余的所有点,计算其与i、j之间的距离,并将其划分到距离更近的那个点的簇中
- 重复2、3、4,直到达到指定簇数,或满足终止条件
二、距离
1、欧氏距离
2、曼哈顿距离
3、余弦距离
三、度量方法
1、最小距离
最小距离由两个簇的最近样本决定 => 单链接(single-linkage)算法
2、最大距离
最大距离由两个簇的最远样本决定 => 全链接(complete-linkage)算法
3、平均距离
平均距离由两个簇的所有样本共同决定 => 均链接(average-linkage)算法
4、均值距离
均值距离由两个簇的中心点之间的距离决定,其中,簇的中心点为其中所有样本点的平均值
四、 优缺点
优点
- 规则简单
- 可以发现样本点之间的层次关系
缺点
- 计算复杂度高
- 对异常点敏感
- 对异形样本点可能聚类效果不好
五、工具-sklearn
工具-sklearn sklearn.cluster.AgglomerativeClustering(n_clusters=2, affinity=‘euclidean’, memory=None, connectivity=None, compute_full_tree=‘auto’, linkage=‘ward’, distance_threshold=None)
- n_clusters:聚类簇数,默认为2
- affinity:距离计算参数,默认为"euclidean"。可选参数包括l1、l2、“manhattan”, “cosine”,“precomputed”。
- linkage: {“ward”, “complete”, “average”, “single”}, optional (default=”ward”)
其中,
“ward”将合并的聚类的方差最小化。
“average”使用两个集合中每个观测值的距离的平均值。
“complete”或“maximum”链接使用两个集合的所有观测值之间的最大距离。
“single”使用两个集合的所有观测值之间的最小距离。
五、层次图可视化
from scipy.cluster.hierarchy import dendrogram, ward
linkage_matrix = ward(train_x)
dendrogram(linkage_matrix)
plt.show()