Рубрики
Без рубрики

Иерархическая кластеризация с Python

Информационные методы кластеризации вступают в игру во время таких ситуаций. В иерархической кластеризации мы в основном построили иерархию кластеров.

Автор оригинала: Pankaj Kumar.

Иерархическая кластеризация с Python

Кластеризация – это методика группировки подобных точек данных вместе, и группа аналогичных точек данных образована как кластер.

Часто случается, когда у нас нет никаких меток для наших данных; Благодаря этому, становится очень трудно привлечь к нему понимание и узоры.

Информационные методы кластеризации вступают в игру во время таких ситуаций. В иерархической кластеризации мы в основном построили иерархию кластеров.

Как выглядит кластеризация

Типы иерархической кластеризации

Иерархическая кластеризация разделена на два типа :

  • Агломеративная иерархическая кластеризация.
  • Диверсивный иерархический кластеризация

1. агломеративная иерархическая кластеризация

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

2. Диверсивный иерархический кластеризация

Диспектива иерархическая кластеризация противоположна тому, что агломеративный ХК. Здесь мы начинаем с одного кластера, состоящего из всех точек данных. С каждой итерацией мы отделяем точки, которые далеки от других на основе метрик расстояния до тех пор, пока каждый кластер имеет ровно 1 точку данных.

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

Давайте визуализируем, как работает иерархическая кластеризация с примером.

Предположим, у нас есть данные, связанные с отметками, набранными 4 студентами по математике и науке, и нам нужно создавать кластеры студентов, чтобы привлечь идею.

Пример набора данных

Теперь, когда у нас есть данные, первый шаг, который нам нужно сделать, – это увидеть, насколько удалена каждая точка данных друг от друга.

Для этого мы строим Расстояние матрица Отказ Расстояние между каждой точкой можно найти с использованием различных метрик, то есть евклидое расстояние, расстояние в Манхэттене и т. Д.

Мы будем использовать евклидое расстояние для этого примера:

Евклидово расстояние
Расстояние, рассчитанное между каждой точкой данных

Теперь мы сформировали кластер между S1 и S2, потому что они были ближе друг к другу. Теперь возникает вопрос, как сейчас выглядит наши данные?

Мы приняли среднее значение, полученные с помощью S1 и S2, и значения, которые мы получаем, представляют знаки для этого кластера. Вместо средних, мы можем рассмотреть максимальные или минимальные значения для точек данных в кластере.

DataSet после первого кластеризации

Снова найдите ближайшие точки и создайте другой кластер.

Кластеризация S3 и S4

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

Дендрограмма нашего примера

Рисунок, которую мы получаем, это то, что мы называем Дендрограмма Отказ Дендрограмма – это дерево, подобная дереву, которая иллюстрирует расположение кластеров, создаваемого соответствующим анализом. Образцы на оси 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.

Счастливое обучение!