Учебники

Машинное обучение — иерархическая кластеризация

Иерархическая кластеризация является еще одним алгоритмом обучения без контроля, который используется для группировки непомеченных точек данных, имеющих сходные характеристики. Алгоритмы иерархической кластеризации делятся на две категории.

Агломерационные иерархические алгоритмы. В агломерационных иерархических алгоритмах каждая точка данных обрабатывается как один кластер, а затем последовательно объединяется или агломерирует (подход снизу вверх) пары кластеров. Иерархия кластеров представлена ​​в виде дендрограммы или древовидной структуры.

Разделительные иерархические алгоритмы. С другой стороны, в разделительных иерархических алгоритмах все точки данных обрабатываются как один большой кластер, а процесс кластеризации включает в себя разделение (нисходящий подход) одного большого кластера на различные маленькие кластеры.

Шаги по выполнению агломерационной иерархической кластеризации

Мы собираемся объяснить наиболее используемую и важную иерархическую кластеризацию, т.е. агломерацию. Шаги, чтобы выполнить то же самое, следующие:

  • Шаг 1 — Обработайте каждую точку данных как один кластер. Следовательно, мы будем иметь, скажем, K кластеров в начале. Количество точек данных также будет K при запуске.

  • Шаг 2 — Теперь на этом шаге нам нужно сформировать большой кластер, объединив две точки данных шкафа. Это приведет к общему количеству кластеров K-1.

  • Шаг 3 — Теперь, чтобы сформировать больше кластеров, нам нужно объединить два закрытых кластера. Это приведет к общему количеству кластеров K-2.

  • Шаг 4 — Теперь, чтобы сформировать один большой кластер, повторите описанные выше три шага, пока K не станет равным 0, то есть больше не осталось точек данных для соединения.

  • Шаг 5 — Наконец, после создания одного большого кластера, дендрограммы будут использоваться для разделения на несколько кластеров в зависимости от проблемы.

Шаг 1 — Обработайте каждую точку данных как один кластер. Следовательно, мы будем иметь, скажем, K кластеров в начале. Количество точек данных также будет K при запуске.

Шаг 2 — Теперь на этом шаге нам нужно сформировать большой кластер, объединив две точки данных шкафа. Это приведет к общему количеству кластеров K-1.

Шаг 3 — Теперь, чтобы сформировать больше кластеров, нам нужно объединить два закрытых кластера. Это приведет к общему количеству кластеров K-2.

Шаг 4 — Теперь, чтобы сформировать один большой кластер, повторите описанные выше три шага, пока K не станет равным 0, то есть больше не осталось точек данных для соединения.

Шаг 5 — Наконец, после создания одного большого кластера, дендрограммы будут использоваться для разделения на несколько кластеров в зависимости от проблемы.

Роль дендрограмм в агломерационной иерархической кластеризации

Как мы уже говорили на последнем шаге, роль дендрограммы начинается после формирования большого кластера. Дендрограмма будет использоваться для разделения кластеров на несколько кластеров связанных точек данных в зависимости от нашей проблемы. Это можно понять с помощью следующего примера —

Пример 1

Чтобы понять, давайте начнем с импорта необходимых библиотек следующим образом:

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

Далее мы будем строить точки данных, которые мы взяли для этого примера —

X = np.array(
   [[7,8],[12,20],[17,19],[26,15],[32,37],[87,75],[73,85], [62,80],[73,60],[87,96],])
labels = range(1, 11)
plt.figure(figsize = (10, 7))
plt.subplots_adjust(bottom = 0.1)
plt.scatter(X[:,0],X[:,1], label = 'True Position')
for label, x, y in zip(labels, X[:, 0], X[:, 1]):
   plt.annotate(
      label,xy = (x, y), xytext = (-3, 3),textcoords = 'offset points', ha = 'right', va = 'bottom')
plt.show()

Построение точек данных

Из приведенной выше диаграммы очень легко увидеть, что у нас есть два кластера в выходных точках данных, но в данных реального мира могут быть тысячи кластеров. Далее мы будем строить дендрограммы наших точек данных с помощью библиотеки Scipy —

from scipy.cluster.hierarchy import dendrogram, linkage
from matplotlib import pyplot as plt
linked = linkage(X, 'single')
labelList = range(1, 11)
plt.figure(figsize = (10, 7))
dendrogram(linked, orientation = 'top',labels = labelList, 
   distance_sort ='descending',show_leaf_counts = True)
plt.show()

Построение дендрограмм

Теперь, когда сформирован большой кластер, выбирается самое длинное вертикальное расстояние. Затем через него проводится вертикальная линия, как показано на следующем рисунке. Поскольку горизонтальная линия пересекает синюю линию в двух точках, число кластеров будет равно двум.

Синяя линия

Далее нам нужно импортировать класс для кластеризации и вызвать его метод fit_predict для прогнозирования кластера. Мы импортируем класс AgglomerativeClustering библиотеки sklearn.cluster

from sklearn.cluster import AgglomerativeClustering
cluster = AgglomerativeClustering(n_clusters = 2, affinity = 'euclidean', linkage = 'ward')
cluster.fit_predict(X)

Затем постройте кластер с помощью следующего кода —

plt.scatter(X[:,0],X[:,1], c = cluster.labels_, cmap = 'rainbow')

Склеарн кластер

Диаграмма выше показывает два кластера из наших точек данных.

Пример 2

Как мы поняли концепцию дендрограмм из простого примера, рассмотренного выше, давайте перейдем к другому примеру, в котором мы создаем кластеры точки данных в наборе данных диабета индейцев Pima с помощью иерархической кластеризации.

import matplotlib.pyplot as plt
import pandas as pd
%matplotlib inline
import numpy as np
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names = headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
data.shape
(768, 9)
data.head()