AI

Average Linkage Agglomerative Clustering

Single Link

$$d(\{A,B\}, C) = min(d(A,C), d(B,C))$$

Complete Link

$$d(\{A,B\}, C) = max(d(A,C), d(B,C))$$

Average link

$$d(\{A,B\}, C) = average(d(A,C), d(B,C))$$

Centroid link

$$d(\{A,B\}, C) = d(\mu_{AB},C)$$

Ward link

$$d(A, B) = \sqrt{2 * \frac{n_A * n_B}{n_A + n_B}||\mu_{A}-\mu_{B}||^2}$$

Example 1

x1x2
A12
B23
C58
D88
E10
F01

Distance

d(x1, x2)ABCDEF
A0
B1.410
C7.215.830
D9.227.813.000
E2.003.168.9410.630
F1.412.838.6010.631.410

Example 2

x1x2
A12
B23
C58
D88
E10
F02

Distance

d(x1, x2)ABCDEF
A0
B1.410
C7.215.830
D9.227.813.000
E2.003.168.9410.630
F1.002.247.8110.002.240

Example 3

x1 x2
A 0 5
B 1 4
C 5 8
D 9 2
E 2 0
F 5 8
G 7 7
ABCDEFG
A0
B1.410
C5.835.660
D9.498.257.210
E5.394.128.547.280
F8.007.074.243.167.810
G7.286.712.245.398.602.240

Example 4

A11
B22
C21
D65
E75
F86

Code

from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt
data = [
    [1, 2],
    [2, 3],
    [5, 8],
    [8, 8],
    [1, 0],
    [0, 2]
]
Z = linkage(data, method='centroid')
dendrogram(Z, labels=['A', 'B', 'C', 'D', 'E', 'F'])
plt.show()