Ієрархічна кластеризація — це ще один неконтрольований алгоритм машинного навчання, який використовується для групування непозначених наборів даних у кластер і також відомий як ієрархічний кластерний аналіз або HCA.
У цьому алгоритмі ми створюємо ієрархію кластерів у формі дерева, і ця деревоподібна структура відома як дендрограма .
Іноді результати кластеризації K-середніх та ієрархічної кластеризації можуть виглядати подібно, але обидва вони відрізняються залежно від того, як вони працюють. Оскільки немає вимоги заздалегідь визначати кількість кластерів, як ми робили в алгоритмі K-Means.
Техніка ієрархічної кластеризації має два підходи:
в якому році винайшли комп'ютер
Чому ієрархічна кластеризація?
Як у нас вже інше кластеризація такі алгоритми, як Кластеризація K-Means , тоді навіщо нам потрібна ієрархічна кластеризація? Отже, як ми побачили в кластеризації K-середніх, у цього алгоритму є певні труднощі, а саме заздалегідь визначена кількість кластерів, і він завжди намагається створити кластери однакового розміру. Щоб вирішити ці дві проблеми, ми можемо вибрати алгоритм ієрархічної кластеризації, оскільки в цьому алгоритмі нам не потрібно знати заздалегідь визначену кількість кластерів.
У цій темі ми обговоримо алгоритм агломеративної ієрархічної кластеризації.
Агломеративна ієрархічна кластеризація
Алгоритм агломеративної ієрархічної кластеризації є популярним прикладом HCA. Щоб згрупувати набори даних у кластери, слідує підхід «знизу вверх». . Це означає, що цей алгоритм спочатку розглядає кожен набір даних як один кластер, а потім починає об’єднувати найближчу пару кластерів. Це робиться до тих пір, поки всі кластери не будуть об’єднані в один кластер, який містить усі набори даних.
Ця ієрархія кластерів представлена у вигляді дендрограми.
Як працює агломеративна ієрархічна кластеризація?
Роботу алгоритму AHC можна пояснити за допомогою наведених нижче кроків.
Примітка. Щоб краще зрозуміти ієрархічну кластеризацію, радимо поглянути на кластеризацію k-середніх
Виміряйте відстань між двома кластерами
Як ми бачили, найближча відстань між двома кластерами має вирішальне значення для ієрархічної кластеризації. Існують різні способи обчислення відстані між двома кластерами, і ці способи визначають правило для кластеризації. Ці заходи називаються Методи зв'язування . Нижче наведено деякі з популярних методів підключення:
З наведених вище підходів ми можемо застосувати будь-який із них відповідно до типу проблеми чи бізнес-вимог.
Робота з дендрограмою в ієрархічній кластеризації
Дендрограма — це деревоподібна структура, яка в основному використовується для збереження кожного кроку як пам’яті, яку виконує алгоритм HC. На графіку дендрограми вісь Y показує евклідові відстані між точками даних, а вісь x — усі точки даних даного набору даних.
Сполучені Штати, скільки міст
Роботу дендрограми можна пояснити за допомогою діаграми нижче:
На наведеній вище діаграмі ліва частина показує, як створюються кластери в агломераційній кластеризації, а права частина показує відповідну дендрограму.
- Як ми обговорювали вище, по-перше, точки даних P2 і P3 об’єднуються разом і утворюють кластер, відповідно створюється дендрограма, яка з’єднує P2 і P3 прямокутною формою. Висота визначається відповідно до евклідової відстані між точками даних.
- На наступному кроці P5 і P6 утворюють кластер, і створюється відповідна дендрограма. Це вище, ніж у попередньому, оскільки евклідова відстань між P5 і P6 трохи більша, ніж P2 і P3.
- Знову створюються дві нові дендрограми, які об’єднують P1, P2 і P3 в одній дендрограмі та P4, P5 і P6 в іншій дендрограмі.
- Нарешті створюється остаточна дендрограма, яка об’єднує всі точки даних.
Ми можемо вирізати структуру дерева дендрограми на будь-якому рівні відповідно до наших вимог.
Реалізація Python агломеративної ієрархічної кластеризації
Тепер ми побачимо практичну реалізацію алгоритму агломеративної ієрархічної кластеризації за допомогою Python. Щоб реалізувати це, ми використаємо ту саму проблему з набором даних, яку ми використовували в попередній темі кластеризації K-середніх, щоб ми могли легко порівняти обидві концепції.
Набір даних містить інформацію про клієнтів, які відвідали торговий центр для покупок. Отже, власник торгового центру хоче знайти деякі закономірності або певну поведінку своїх клієнтів, використовуючи інформацію про набір даних.
Кроки для реалізації AHC за допомогою Python:
Етапи реалізації будуть такими ж, як і для кластеризації k-середніх, за винятком деяких змін, таких як метод визначення кількості кластерів. Нижче наведено кроки:
Етапи попередньої обробки даних:
На цьому кроці ми імпортуємо бібліотеки та набори даних для нашої моделі.
java передає int до рядка
# Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
Наведені вище рядки коду використовуються для імпорту бібліотек для виконання певних завдань, наприклад numpy для математичних операцій, matplotlib для малювання графіків або діаграми розсіювання, а також панди для імпорту набору даних.
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
Як обговорювалося вище, ми імпортували той самий набір даних Mall_Customers_data.csv, як ми робили в кластеризації k-середніх. Розглянемо наведений нижче результат:
Тут ми витягнемо лише матрицю ознак, оскільки у нас немає додаткової інформації про залежну змінну. Код наведено нижче:
x = dataset.iloc[:, [3, 4]].values
Тут ми вилучили лише 3 і 4 стовпці, оскільки ми будемо використовувати 2D графік, щоб побачити кластери. Таким чином, ми розглядаємо показник річного доходу та витрат як матрицю ознак.
Крок 2: Знаходження оптимальної кількості кластерів за допомогою дендрограми
Тепер знайдемо оптимальну кількість кластерів за допомогою дендрограми для нашої моделі. Для цього ми збираємося використовувати scipy бібліотеку, оскільки вона надає функцію, яка безпосередньо повертатиме дендрограму для нашого коду. Розгляньте наведені нижче рядки коду:
#Finding the optimal number of clusters using the dendrogram import scipy.cluster.hierarchy as shc dendro = shc.dendrogram(shc.linkage(x, method='ward')) mtp.title('Dendrogrma Plot') mtp.ylabel('Euclidean Distances') mtp.xlabel('Customers') mtp.show()
У наведених вище рядках коду ми імпортували ієрархія модуль бібліотеки scipy. Цей модуль надає нам метод shc.denrogram(), який приймає зв'язок() як параметр. Функція зв’язку використовується для визначення відстані між двома кластерами, тому тут ми передали x (матрицю ознак) і метод ' палата , популярний метод зв'язку в ієрархічній кластеризації.
Решта рядків коду описують мітки для графіка дендрограми.
Вихід:
Виконуючи наведені вище рядки коду, ми отримаємо наведені нижче результати :
Використовуючи цю дендрограму, ми тепер визначимо оптимальну кількість кластерів для нашої моделі. Для цього ми знайдемо максимальна вертикальна відстань що не ріже жодного турніка. Розгляньте схему нижче:
На наведеній вище діаграмі ми показали вертикальні відстані, які не перетинають їх горизонтальні смуги. Як ми можемо уявити, 4тисвідстань виглядає максимальною, тому відповідно до цього, кількість кластерів буде 5 (вертикальні лінії в цьому діапазоні). Ми також можемо взяти 2ndчисло, оскільки воно приблизно дорівнює 4тисвідстань, але ми розглянемо 5 кластерів, оскільки те саме ми обчислили в алгоритмі K-середніх.
що таке оракул
Отже, оптимальна кількість кластерів буде 5 , і ми навчимо модель на наступному кроці, використовуючи те саме.
Крок 3: Навчання моделі ієрархічної кластеризації
Оскільки ми знаємо необхідну оптимальну кількість кластерів, тепер ми можемо навчити нашу модель. Код наведено нижче:
#training the hierarchical model on dataset from sklearn.cluster import AgglomerativeClustering hc= AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward') y_pred= hc.fit_predict(x)
У наведеному вище коді ми імпортували Агломеративна кластеризація клас кластерного модуля бібліотеки навчання scikit.
Потім ми створили об’єкт цього класу під назвою as hc. Клас AgglomerativeClustering приймає такі параметри:
перетворити рядок на enum
В останньому рядку ми створили залежну змінну y_pred для адаптації або навчання моделі. Він навчає не лише модель, але й повертає кластери, до яких належить кожна точка даних.
Після виконання наведених вище рядків коду, якщо ми перейдемо до опції провідника змінних у нашій Sypder IDE, ми зможемо перевірити змінну y_pred. Ми можемо порівняти вихідний набір даних зі змінною y_pred. Розгляньте зображення нижче:
Як ми бачимо на зображенні вище, y_pred показує значення кластерів, що означає, що ідентифікатор клієнта 1 належить до 5тискластер (оскільки індексація починається з 0, тому 4 означає 5тискластер), ідентифікатор клієнта 2 належить до 4тискластер тощо.
Крок 4: Візуалізація кластерів
Оскільки ми успішно навчили нашу модель, тепер ми можемо візуалізувати кластери, що відповідають набору даних.
Тут ми будемо використовувати ті самі рядки коду, що й у кластеризації k-means, за винятком однієї зміни. Тут ми не будемо будувати центроїд, який ми зробили в k-середніх, тому що тут ми використали дендрограму для визначення оптимальної кількості кластерів. Код наведено нижче:
#visulaizing the clusters mtp.scatter(x[y_pred == 0, 0], x[y_pred == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') mtp.scatter(x[y_pred == 1, 0], x[y_pred == 1, 1], s = 100, c = 'green', label = 'Cluster 2') mtp.scatter(x[y_pred== 2, 0], x[y_pred == 2, 1], s = 100, c = 'red', label = 'Cluster 3') mtp.scatter(x[y_pred == 3, 0], x[y_pred == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') mtp.scatter(x[y_pred == 4, 0], x[y_pred == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show()
Результат: Виконуючи наведені вище рядки коду, ми отримаємо наступний результат: