scipy层次聚类

发布时间:2024年01月20日

文章目录

linkage

linkagescipy中的一个层次聚类函数,可将距离最近的数聚在一起,形成聚类簇;多个聚类簇再次聚类,得到更高层级的聚类簇。重复这个过程,直到所有的聚类簇都聚成一个最终的类。

其调用方法为

scipy.cluster.hierarchy.linkage(y, method='single', metric='euclidean', optimal_ordering=False)

其中method表示聚类方法;metric表示聚类时采用的距离。在详细介绍这两者的可选参数之前,先对linkage做一个简单示例。

from scipy.cluster.hierarchy import dendrogram, linkage
from matplotlib import pyplot as plt
X = [[i] for i in [2, 8, 0, 4, 1, 9, 9, 0]]

Z = linkage(X, 'single')
print(Z)

Z Z Z的结果如下,是一个二维数组,记 X X X的长度为 n n n,则 Z Z Z尺寸为 ( n ? 1 ) × 4 (n-1)\times4 (n?1)×4。其中 Z i 0 , Z i 1 Z_{i0}, Z_{i1} Zi0?,Zi1?属于第 n + i n+i n+i聚类簇,且二者之间的距离为 Z i 2 Z_{i2} Zi2? Z i 3 Z_{i3} Zi3?表示对于一个新形成的聚类簇中的元素个数。

i i i Z i 0 Z_{i0} Zi0? Z i 1 Z_{i1} Zi1? Z i 2 Z_{i2} Zi2? Z i 3 Z_{i3} Zi3?类别
027028
156029
2041210
38101411
4191312
53112513
612134814

Z i 0 , Z i 1 Z_{i0}, Z_{i1} Zi0?,Zi1?中的这些数显然不是从 X X X中抽取得到的,而是 X X X中每个元素的所属类别,映射如下

28041990
01234567

Z Z Z的第一行表示, 2 2 2 7 7 7组成一个簇,且 2 , 7 2,7 2,7之间距离为0,根据上表, 2 , 7 2,7 2,7对应的是两个 0 0 0,所以二者之间的距离为0。且二者新形成的聚类簇为 n + i = 8 + 0 = 8 n+i=8+0=8 n+i=8+0=8,二者组成的簇共有两个元素。第二、三行与之类似。

第四行表明, 8 8 8 10 10 10之间距离为1,其中 8 8 8是由 2 , 7 2,7 2,7两个位置的两个 0 0 0组成; 10 10 10 0 , 4 0,4 0,4两个位置组成的,以此类推。

上面的矩阵可通过dendrogram进行可视化,结果如下

dn = dendrogram(Z)
plt.show()

在这里插入图片描述

method

可选方法及其含义如下

  • single 最小距离
  • complete 最大距离
  • average 平均距离
  • weighted 加权距离
  • centroid 中心距离
  • median 和中心距离相似
  • ward 基于Ward方差最小化算法

metric

可选距离包括下表

距离函数备注表达式
braycurtisBray-Curtis距离 ∑ ∣ u i ? v i ∣ ∑ ∣ u i + v i ∣ \frac{\sum\vert u_i-v_i\vert}{\sum\vert u_i+v_i\vert} ui?+vi?ui??vi??
canberraCanberra距离 ∑ ∣ u i ? v i ∣ ∑ ∣ u i ∣ + ∣ v i ∣ \frac{\sum\vert u_i-v_i\vert}{\sum\vert u_i\vert+\vert v_i\vert} ui?+vi?ui??vi??
chebyshev切比雪夫距离 max ? ( u ? ? v ? ) \max(\vec u-\vec v) max(u ?v )
minkowski([,p])闵氏距离 ∥ u ? v ∥ p \Vert u-v\Vert_p u?vp?
cityblock曼哈顿距离 ∑ ∣ u i ? v i ∣ \sum\vert u_i-v_i\vert ui??vi?
euclidean欧氏距离 ∥ u ? v ∥ 2 \Vert u-v\Vert_2 u?v2?
sqeuclidean平方欧式距离 ∑ w i ∣ u i ? v i ∣ 2 \sum w_i\vert u_i-v_i\vert^2 wi?ui??vi?2
cosine余弦距离 1 ? u ? v ∥ u ∥ 2 ∥ v ∥ 2 1-\frac{u\cdot v}{\Vert u\Vert_2\Vert v\Vert_2} 1?u2?v2?u?v?
correlation相关距离 1 ? ( u ? u ˉ ) ( v ? v ˉ ) ∥ u ? u ˉ ∥ 2 ∥ v ? v ˉ ∥ 2 1-\frac{(u-\bar u)(v-\bar v)}{\Vert u-\bar u\Vert_2\Vert v-\bar v\Vert_2} 1?u?uˉ2?v?vˉ2?(u?uˉ)(v?vˉ)?
jensenshannonJS距离
mahalanobis马氏距离
seuclidean归一化欧式距离
距离函数备注表达式
diceDice距离 ∣ 10 ∣ + ∣ 01 ∣ 2 ∣ 11 ∣ + ∣ 01 ∣ + ∣ 10 ∣ \frac{\vert10\vert+\vert01\vert}{2\vert11\vert+\vert01\vert+\vert10\vert} 2∣11∣+∣01∣+∣10∣∣10∣+∣01∣?
hamming汉明距离 [ 01 ] + [ 10 ] N \frac{[01]+[10]}{N} N[01]+[10]?
jaccard杰卡德距离 ∣ 10 ∣ + ∣ 01 ∣ ∣ 11 ∣ + ∣ 01 ∣ + ∣ 10 ∣ \frac{\vert10\vert+\vert01\vert}{\vert11\vert+\vert01\vert+\vert10\vert} ∣11∣+∣01∣+∣10∣∣10∣+∣01∣?
kulczynski1Kulczynski距离 [ 11 ] [ 01 ] + [ 10 ] \frac{[11]}{[01]+[10]} [01]+[10][11]?
rogerstanimoto谷本距离 R [ 11 ] + [ 00 ] + R \frac{R}{[11]+[00]+R} [11]+[00]+RR?
russellraoRussell&Rao距离 N ? [ 11 ] N \frac{N-[11]}{N} NN?[11]?
sokalmichenerSokal-Michener距离 R R + [ 11 ] + [ 00 ] \frac{R}{R+[11]+[00]} R+[11]+[00]R?
sokalsneathSokal-Sneath距离 R [ 11 ] + [ 00 ] + R \frac{R}{[11]+[00]+R} [11]+[00]+RR?
yuleYule距离 2 [ 01 ] ? [ 10 ] [ 11 ] ? [ 00 ] + [ 10 ] ? [ 01 ] \frac{2[01]\cdot[10]}{[11]\cdot[00]+[10]\cdot[01]} [11]?[00]+[10]?[01]2[01]?[10]?

可用方法method,主要是针对距离的聚类算法,下面记D为距离值,d为采用的方法

  • signle d ( u , v ) = min ? ( D ( u i , v j ) ) d(u,v)=\min(D(u_i,v_j)) d(u,v)=min(D(ui?,vj?))
  • complete d ( u , v ) = max ? ( D ( u i , v j ) ) d(u,v)=\max(D(u_i,v_j)) d(u,v)=max(D(ui?,vj?))
  • average d ( u , v ) = ∑ i , j D ( u i , v j ) d(u,v)=\sum_{i,j}\frac{D(u_i,v_j)}{} d(u,v)=i,j?D(ui?,vj?)?
  • weighted d ( u , v ) = d ( s , v ) + d ( t , v ) 2 d(u,v)=\frac{d(s,v)+d(t,v)}{2} d(u,v)=2d(s,v)+d(t,v)?
  • centroid d ( s , t ) = ∥ c s ? c t ∥ 2 d(s,t)=\Vert c_s-c_t\Vert_2 d(s,t)=cs??ct?2?
文章来源:https://blog.csdn.net/m0_37816922/article/details/135651401
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。