Иерархическая кластеризация
Иерархическая кластеризация — это метод машинного обучения, используемый для группировки точек данных в кластеры на основе их сходства. Это мощный алгоритм, который помогает обнаруживать скрытые закономерности и структуры в наборе данных. В этой статье мы рассмотрим концепцию иерархической кластеризации, её типы, а также способы её реализации на Python.
Что такое иерархическая кластеризация?
Иерархическая кластеризация — это метод, используемый для объединения похожих объектов в кластеры. Он основан на принципе группировки схожих объектов с последующим постепенным объединением их в всё более крупные кластеры, пока все объекты не окажутся в одном кластере. Результатом работы алгоритма иерархической кластеризации является дендрограмма — древовидная диаграмма, отображающая иерархические связи между кластерами.
Типы иерархической кластеризации
Существует два основных типа иерархической кластеризации:
- Агломеративная (восходящая) кластеризация: это подход «снизу вверх», при котором каждая точка данных рассматривается как отдельный кластер, после чего они объединяются для формирования более крупных кластеров.
- Дивизивная (нисходящая) кластеризация: это подход «сверху вниз», при котором все точки данных изначально считаются одним кластером, который затем рекурсивно разделяется на более мелкие кластеры.
Как работает иерархическая кластеризация?
Алгоритм иерархической кластеризации работает путём вычисления расстояния между всеми парами точек данных, а затем итеративного объединения наиболее близких пар кластеров до тех пор, пока все точки не окажутся в одном кластере. Расстояние между двумя кластерами может вычисляться с использованием различных метрик, таких как евклидово расстояние, манхэттенское расстояние и косинусное сходство.
Реализация иерархической кластеризации на Python
Python предлагает несколько библиотек для реализации иерархической кластеризации, таких как Scikit-learn, SciPy и PyClustering. В данном примере мы будем использовать библиотеку Scikit-learn.
Шаг 1: Импорт библиотек и загрузка данных
Загрузка данных для иерархической кластеризации на Python
import pandas as pd
import numpy as np
from sklearn.cluster import AgglomerativeClustering
from sklearn.preprocessing import StandardScaler
# Load data
data = pd.read_csv('data.csv')
X = data.iloc[:, [0, 1, 2]].valuesШаг 2: Предобработка данных
Перед применением иерархической кластеризации необходимо предварительно обработать данные, масштабировав их так, чтобы они имели нулевое среднее и единичную дисперсию. Это делается для того, чтобы все переменные вносили равный вклад в процесс кластеризации.
Предобработка данных для иерархической кластеризации на Python
# Scale data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)Шаг 3: Применение иерархической кластеризации
Для применения иерархической кластеризации к нашему набору данных мы будем использовать класс AgglomerativeClustering из библиотеки Scikit-learn. Мы установим количество кластеров равным 3 и используем метод связи Варда (Ward linkage), который минимизирует дисперсию объединяемых кластеров.
Применение иерархической кластеризации к набору данных на Python
# Apply hierarchical clustering
hc = AgglomerativeClustering(n_clusters=3, linkage='ward')
y_hc = hc.fit_predict(X_scaled)Шаг 4: Визуализация кластеров
Кластеры можно визуализировать, построив диаграмму рассеяния (scatter plot) точек данных, где разные цвета будут соответствовать различным кластерам.
Визуализация кластеров с помощью диаграммы рассеяния с разными цветами для каждого кластера на Python
import matplotlib.pyplot as plt
# Create scatter plot
plt.scatter(X_scaled[y_hc == 0, 0], X_scaled[y_hc == 0, 1], s=100, c='red', label='Cluster 1')
plt.scatter(X_scaled[y_hc == 1, 0], X_scaled[y_hc == 1, 1], s=100, c='blue', label='Cluster 2')
plt.scatter(X_scaled[y_hc == 2, 0], X_scaled[y_hc == 2, 1], s=100, c='green', label='Cluster 3')
# Add labels and title
plt.title('Hierarchical Clustering')
plt.xlabel('X')
plt.ylabel('Y')
# Add legend
plt.legend()
# Show plot
plt.show()В приведённом выше коде мы используем булеву индексацию для выбора точек данных, принадлежащих каждому кластеру, и отображаем их разными цветами. Мы также добавляем подписи к осям, заголовок к графику и легенду для идентификации кластеров. В завершение график выводится с помощью функции show().
Заключение
Иерархическая кластеризация — это мощный метод, который помогает выявлять скрытые структуры в наборе данных. Это простой и интуитивно понятный алгоритм, который можно применять к широкому спектру типов и объёмов данных. В этой статье мы рассмотрели концепцию иерархической кластеризации, её типы, а также способы реализации на Python с использованием библиотеки Scikit-learn.
Следуя шагам, описанным в этой статье, вы сможете применить иерархическую кластеризацию к собственному набору данных и визуализировать полученные кластеры. Это поможет выявить закономерности и взаимосвязи в данных, которые могут быть полезны для дальнейшего анализа или принятия решений.
Если вы хотите узнать больше об иерархической кластеризации или других методах машинного обучения, в интернете доступно множество ресурсов, включая руководства, курсы и книги. Продолжая изучать и осваивать новые методы, вы сможете идти в ногу со временем и стать более квалифицированным специалистом по данным.