层次聚类pythonscipy_【python】利用scipy进行层次聚类

参考博客:

https://joernhees.de/blog/2015/08/26/scipy-hierarchical-clustering-and-dendrogram-tutorial/

层次聚类理论知识

类从多减少的过程。

1、定义样本间的距离,类与类之间的距离

2、将每个样本当作一类,计算距离最近的两类,合并为新类

3、一点一点做,直到所有成为一类。

基本步骤:

1、数据变换:

中心化:demean

标准化:deStd

极差标准化:deMean / 极差

极差正规化:de min / 极差

对数变换

2、计算样品两两间距离

3、合并距离最小的两类,重新计算类与类之间的距离

4、画谱系聚类图

5、决定分类的个数以及各个类的成员。

类与类之间的距离不同定义:

1、最短距离法:两两之间最短距离

2、最长距离法

3、中间距离法

4、重心法:可能导致合并后下一次距离比前一次要短

5、类平均法:两两之间平方距离的平均值

6、离差平方和法:WARD

性质:

1、单调性:只有中间距离法和重心法不符合。

2、浓缩与扩张:太浓缩的方法不灵敏,太扩张的方法在样本比较多的时候容易失真

类个数的确定:

1、给定临界值、

2、根据散点图判断

3、根据统计量判断:

R2、半偏R2、伪F、伪T

来看代码:

from scipy.cluster.hierarchy importdendrogram, linkage

Z= linkage(X, "single", "correlation")

dendrogram(Z, labels=X.index, color_threshold=0)

plt.show()

首先使用linkage函数生成距离矩阵。

method参数为距离定义:

single : 最短距离法

complete: 最长距离法

average: 类平均法, 与通常定义差一个sq, sqrt

centroid: 重心法

weighted: 中间距离法

ward: WARD法

使用fcluster函数确定最终的分组情况:

你可能感兴趣的:(层次聚类pythonscipy)