Вы здесь, потому что знаете кое-что об иерархической кластеризации и хотите знать, как работает кластеризация с одним каналом и как рисовать дендрограмму.
Иерархическая кластеризация: медленная :: сложная :: воспроизводимая :: не подходит для больших наборов данных.
Возьмем 6 простых векторов.
Использование евклидова расстояния позволяет вычислить матрицу расстояний. Euclidean Distance = sqrt( (x2 -x1)**2 + (y2-y1)**2 )
Пример : Расстояние между A и B
sqrt ( (18- 22) ** 2 + (0–0) ** 2))
sqrt( (16) + 0)
sqrt( 16)= 4
Кластеризация одной ссылки: Минимум два расстояния. Приводит к большим более разнообразным кластерам.
Матрица расстояний: диагонали будут равны 0, а значения будут симметричными.
Шаг а. Кратчайшее расстояние в матрице равно 1, а связанные с ним векторы — C и D.
Итак, первый кластер C — D
Расстояние между другими векторами и CD
От A до CD = min(A->C, A->D) = min(25,24) = 24
B до CD = min(B-‹C, B->D) = min(21, 20) = 20
и аналогично найти для E & F
Шаг b. Теперь 2 — это кратчайшее расстояние, а связанные с ним векторы — E и F.
Второй кластер E — F
От A до EF = min(A->E, A->F) = min(9,7) = 7
CD до EF = min(CD->E, CD->F) = min(15, 17) = 15
Шаг c. Следующий кратчайший — 3, а связанные векторы — B и EF.
Третий кластер B — EF
От A до BEF = min(A->B, A->EF) = min(4,7) = 4
CD до BEF = min(CD->B, CD->EF) = min(20, 15) = 15
Шаг d. Следующий кратчайший — 4, а связанные векторы — A& BEF.
Четвертый кластер — A — BEF
CD к ABEF = min(CD->A, CD->BEF) = min(24,15) = 15
Шаг д. Последний кластер — CD — ABEF.
Давайте посмотрим на дендрограмму для кластера с одной ссылкой.
Простой скрипт Python 3 для достижения того же.
import numpy as np from scipy.cluster.hierarchy import dendrogram, linkage from scipy.spatial.distance import squareform import matplotlib.pyplot as plt #skipping the distance calculation part and directly using the Distance Matrix mat = np.array([[0,4,25,24,9,7], [4,0,21,20,5,3], [25,21,0,1,16,18], [24,20,1,0,15,17], [9,5,16,15,0,2], [7,3,18,17,2,0] ]) dists = squareform(mat) #This step is where we mention its "Single Link" Cluster linkage_matrix = linkage(dists, "single") dendrogram(linkage_matrix, labels=["A","B","C","D","E","F"]) plt.title("Single Link") plt.show()