文章目录

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 (n1)×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 类别
0 2 7 0 2 8
1 5 6 0 2 9
2 0 4 1 2 10
3 8 10 1 4 11
4 1 9 1 3 12
5 3 11 2 5 13
6 12 13 4 8 14

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

2 8 0 4 1 9 9 0
0 1 2 3 4 5 6 7

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

可选距离包括下表

距离函数 备注 表达式
braycurtis Bray-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+viuivi
canberra Canberra距离 ∑ ∣ 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+viuivi
chebyshev 切比雪夫距离 max ⁡ ( u ⃗ − v ⃗ ) \max(\vec u-\vec v) max(u v )
minkowski([,p]) 闵氏距离 ∥ u − v ∥ p \Vert u-v\Vert_p uvp
cityblock 曼哈顿距离 ∑ ∣ u i − v i ∣ \sum\vert u_i-v_i\vert uivi
euclidean 欧氏距离 ∥ u − v ∥ 2 \Vert u-v\Vert_2 uv2
sqeuclidean 平方欧式距离 ∑ w i ∣ u i − v i ∣ 2 \sum w_i\vert u_i-v_i\vert^2 wiuivi2
cosine 余弦距离 1 − u ⋅ v ∥ u ∥ 2 ∥ v ∥ 2 1-\frac{u\cdot v}{\Vert u\Vert_2\Vert v\Vert_2} 1u2v2uv
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} 1uuˉ2vvˉ2(uuˉ)(vvˉ)
jensenshannon JS距离
mahalanobis 马氏距离
seuclidean 归一化欧式距离
距离函数 备注 表达式
dice Dice距离 ∣ 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∣
kulczynski1 Kulczynski距离 [ 11 ] [ 01 ] + [ 10 ] \frac{[11]}{[01]+[10]} [01]+[10][11]
rogerstanimoto 谷本距离 R [ 11 ] + [ 00 ] + R \frac{R}{[11]+[00]+R} [11]+[00]+RR
russellrao Russell&Rao距离 N − [ 11 ] N \frac{N-[11]}{N} NN[11]
sokalmichener Sokal-Michener距离 R R + [ 11 ] + [ 00 ] \frac{R}{R+[11]+[00]} R+[11]+[00]R
sokalsneath Sokal-Sneath距离 R [ 11 ] + [ 00 ] + R \frac{R}{[11]+[00]+R} [11]+[00]+RR
yule Yule距离 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,jD(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)=csct2
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐