Автор оригинала: Pankaj Kumar.
Иерархическая кластеризация с Python
Кластеризация – это методика группировки подобных точек данных вместе, и группа аналогичных точек данных образована как кластер.
Часто случается, когда у нас нет никаких меток для наших данных; Благодаря этому, становится очень трудно привлечь к нему понимание и узоры.
Информационные методы кластеризации вступают в игру во время таких ситуаций. В иерархической кластеризации мы в основном построили иерархию кластеров.
Типы иерархической кластеризации
Иерархическая кластеризация разделена на два типа :
- Агломеративная иерархическая кластеризация.
- Диверсивный иерархический кластеризация
1. агломеративная иерархическая кластеризация
В Агломеративная иерархическая кластеризация, Каждая точка данных рассматривается как один кластер, что делает общее количество кластеров, равных количеству точек данных. И тогда мы продолжаем группировать данные на основе метрик сходства, делая кластеры, поскольку мы перемещаемся в иерархию. Этот подход также называется подходом снизу вверх.
2. Диверсивный иерархический кластеризация
Диспектива иерархическая кластеризация противоположна тому, что агломеративный ХК. Здесь мы начинаем с одного кластера, состоящего из всех точек данных. С каждой итерацией мы отделяем точки, которые далеки от других на основе метрик расстояния до тех пор, пока каждый кластер имеет ровно 1 точку данных.
Шаги для выполнения иерархической кластеризации
Давайте визуализируем, как работает иерархическая кластеризация с примером.
Предположим, у нас есть данные, связанные с отметками, набранными 4 студентами по математике и науке, и нам нужно создавать кластеры студентов, чтобы привлечь идею.
Теперь, когда у нас есть данные, первый шаг, который нам нужно сделать, – это увидеть, насколько удалена каждая точка данных друг от друга.
Для этого мы строим Расстояние матрица Отказ Расстояние между каждой точкой можно найти с использованием различных метрик, то есть евклидое расстояние, расстояние в Манхэттене и т. Д.
Мы будем использовать евклидое расстояние для этого примера:
Теперь мы сформировали кластер между S1 и S2, потому что они были ближе друг к другу. Теперь возникает вопрос, как сейчас выглядит наши данные?
Мы приняли среднее значение, полученные с помощью S1 и S2, и значения, которые мы получаем, представляют знаки для этого кластера. Вместо средних, мы можем рассмотреть максимальные или минимальные значения для точек данных в кластере.
Снова найдите ближайшие точки и создайте другой кластер.
Если мы повторим шаги выше и сохраняем кластеризацию, пока мы не останетесь только с одним кластером, содержащим все кластеры, мы получаем результат, который выглядит что-то подобное:
Рисунок, которую мы получаем, это то, что мы называем Дендрограмма Отказ Дендрограмма – это дерево, подобная дереву, которая иллюстрирует расположение кластеров, создаваемого соответствующим анализом. Образцы на оси X расположены автоматически представления точек с близкой близостью, которая останется ближе друг к другу.
Выбор оптимального количества кластеров может быть сложной задачей. Но как правило, мы ищем кластеры с самыми длинными «ветвями» или «длинное расстояние дендрограмма». Оптимальное количество кластеров также подвержено экспертным знаниям, контексту и т. Д.
При наличии достаточно идеи, давайте перейдем к реализации одного в Python.
Иерархическая кластеризация с Python
Давайте погрузимся в один пример, чтобы лучше продемонстрировать иерархическую кластеризацию
Мы будем использовать набор данных IRIS для выполнения кластеризации. Вы можете получить более подробную информацию о DataSet Iris здесь Отказ
1. Построение и создание кластеров
Sklearn.cluster
Модуль дает нам АгломератиВестерекция
Класс для выполнения кластеризации на наборе данных.
В качестве аргумента ввода требуется несколько кластеров ( n_Clusters
), аффинность
который соответствует типу дистанционного метрики для использования при создании кластеры , Связывание
Связывание {“Уорд”, “Полное”, “Среднее”, “Одноместный”}, Отказ
Критерий связи определяет, какое расстояние для использования между заданными наборами наблюдений.
Вы можете узнать больше о АгломератиВестерекция
Класс здесь Отказ
#Importing required libraries from sklearn.datasets import load_iris from sklearn.cluster import AgglomerativeClustering import numpy as np import matplotlib.pyplot as plt #Getting the data ready data = load_iris() df = data.data #Selecting certain features based on which clustering is done df = df[:,1:3] #Creating the model agg_clustering = AgglomerativeClustering(n_clusters = 3, affinity = 'euclidean', linkage = 'ward') #predicting the labels labels = agg_clustering.fit_predict(df) #Plotting the results plt.figure(figsize = (8,5)) plt.scatter(df[labels == 0 , 0] , df[labels == 0 , 1] , c = 'red') plt.scatter(df[labels == 1 , 0] , df[labels == 1 , 1] , c = 'blue') plt.scatter(df[labels == 2 , 0] , df[labels == 2 , 1] , c = 'green') plt.show()
В приведенном выше коде мы рассмотрели количество кластеров 3.
Это было очевидно, поскольку набор данных IRIS содержит только 3 разных классов, но в реальных сценариях, мы выполняем неподтвержденную кластеризацию на данные, потому что у нас нет информации о метке, к которой принадлежит каждая точка данных.
Следовательно, выяснение оптимального количества кластеров подвергается некоторой экспертизе доменов. Но есть несколько доступных методов, чтобы узнать оптимальные кластеры, о которых мы поговорим о будущей статье.
2. Построение дендрограммы
Scipy.Cluster
Модуль содержит класс иерархии, который мы будем использовать для сюжета дендрограммы.
Иерархия Класс содержит . дендрограмма
Метод и Связывание
метод.
Связывание
Метод принимает набор данных и метод, чтобы минимизировать расстояния в качестве параметров i.e. WARD и возвращает матрицу связи, которая при предоставленной дендрограмма
Метод создает дендрограмму установленных данных.
Давайте посмотрим, что означает вышеуказанное утверждение на примере.
#Importing libraries from sklearn.datasets import load_iris from sklearn.cluster import AgglomerativeClustering import numpy as np import matplotlib.pyplot as plt from scipy.cluster.hierarchy import dendrogram , linkage #Getting the data ready data = load_iris() df = data.data #Selecting certain features based on which clustering is done df = df[:,1:3] #Linkage Matrix Z = linkage(df, method = 'ward') #plotting dendrogram dendro = dendrogram(Z) plt.title('Dendrogram') plt.ylabel('Euclidean distance') plt.show()
Заключение
В этой статье мы постарались получить некоторую основную интуицию за то, что действительно иерархическая кластеризация и его рабочий механизм. Мы также получили представление о том, как построен дендрограмма и, наконец, реализован HC в Python.
Счастливое обучение!