from sklearn.cluster import AgglomerativeClustering from sklearn.datasets import make_blobs # Generate sample data X, y = make_blobs(n_samples=100, centers=4, n_features=2, random_state=42) # Create an Agglomerative Clustering object with n clusters n_clusters = 4 clusterer = AgglomerativeClustering(n_clusters=n_clusters) # Fit the clustering object to the data cluster_labels = clusterer.fit_predict(X) # Print the cluster labels for each data point print("Cluster labels:", cluster_labels)
В этом примере мы сначала создаем синтетический набор данных, используя функцию make_blobs
из scikit-learn, со 100 выборками и 4 кластерами. Затем мы создаем объект AgglomerativeClustering
с 4 кластерами и подгоняем его к данным с помощью метода fit_predict
. Наконец, мы печатаем полученные метки кластера для каждой точки данных.
Обратите внимание, что класс AgglomerativeClustering
имеет несколько параметров, которые можно настроить для настройки алгоритма кластеризации, таких как критерий связи (например, одиночная, полная или средняя связь) и метрика расстояния (например, евклидово, манхэттенское или косинусное расстояние). Вы можете указать эти параметры, используя соответствующие аргументы конструктора AgglomerativeClustering
.
Как построить Дендограмму
from scipy.cluster.hierarchy import dendrogram, linkage import matplotlib.pyplot as plt import numpy as np # Generate sample data X = np.random.rand(10, 2) # Compute the linkage matrix Z = linkage(X, 'ward') # Plot the dendrogram fig = plt.figure(figsize=(10, 5)) dn = dendrogram(Z) plt.xlabel('Data points') plt.ylabel('Distance') plt.show()
Функция связи.
В контексте иерархической кластеризации функция связи используется для измерения различий между кластерами. Он принимает в качестве входных данных матрицу попарных расстояний между точками данных и рекурсивно объединяет наиболее похожие пары кластеров, пока не будет сформирован один кластер, содержащий все точки данных.
Существует несколько типов функций связи, которые можно использовать, каждый из которых имеет свой собственный способ измерения различий между кластерами:
- Одиночное соединение: измеряет кратчайшее расстояние между любыми двумя точками в двух кластерах.
- Полная связь: измеряет максимальное расстояние между любыми двумя точками в двух кластерах.
- Средняя связь: измеряет среднее расстояние между всеми парами точек в двух кластерах.
- Связь с округами: минимизирует сумму квадратов различий во всех кластерах, что приводит к более компактным кластерам.
Библиотека scipy
предоставляет реализацию функции связи, которая принимает в качестве входных данных матрицу попарных расстояний между точками данных и критерий связи. Вот пример того, как использовать scipy
для вычисления матрицы связи для 2D-набора данных с 10 образцами с использованием критерия связи "опеки":
from scipy.cluster.hierarchy import linkage import numpy as np # Generate sample data X = np.random.rand(10, 2) # Compute the linkage matrix using the "ward" linkage criterion Z = linkage(X, 'ward')
В этом примере мы сначала создаем случайный набор 2D-данных с 10 образцами с помощью NumPy. Затем мы вычисляем матрицу связи, используя функцию linkage
из scipy.cluster.hierarchy
с критерием связи "опеки". Результирующая матрица Z
представляет собой матрицу (n-1) x 4, где n — количество точек данных, и каждая строка представляет собой операцию слияния между двумя кластерами, причем первые два столбца указывают индексы объединенных кластеров, а третий столбец с указанием расстояния между ними. Четвертый столбец используется функцией dendrogram
для построения графиков.