logo

Ієрархічна кластеризація в машинному навчанні

Ієрархічна кластеризація — це ще один неконтрольований алгоритм машинного навчання, який використовується для групування непозначених наборів даних у кластер і також відомий як ієрархічний кластерний аналіз або HCA.

У цьому алгоритмі ми створюємо ієрархію кластерів у формі дерева, і ця деревоподібна структура відома як дендрограма .

Іноді результати кластеризації K-середніх та ієрархічної кластеризації можуть виглядати подібно, але обидва вони відрізняються залежно від того, як вони працюють. Оскільки немає вимоги заздалегідь визначати кількість кластерів, як ми робили в алгоритмі K-Means.

Техніка ієрархічної кластеризації має два підходи:

в якому році винайшли комп'ютер
    Агломераційний:Агломерація - це а знизу вгору підхід, у якому алгоритм починається з взяття всіх точок даних як окремих кластерів і об’єднання їх, поки не залишиться один кластер.Розділовий:Алгоритм розділення є зворотним алгоритмом агломерації, оскільки він є a підхід зверху вниз.

Чому ієрархічна кластеризація?

Як у нас вже інше кластеризація такі алгоритми, як Кластеризація K-Means , тоді навіщо нам потрібна ієрархічна кластеризація? Отже, як ми побачили в кластеризації K-середніх, у цього алгоритму є певні труднощі, а саме заздалегідь визначена кількість кластерів, і він завжди намагається створити кластери однакового розміру. Щоб вирішити ці дві проблеми, ми можемо вибрати алгоритм ієрархічної кластеризації, оскільки в цьому алгоритмі нам не потрібно знати заздалегідь визначену кількість кластерів.

У цій темі ми обговоримо алгоритм агломеративної ієрархічної кластеризації.

Агломеративна ієрархічна кластеризація

Алгоритм агломеративної ієрархічної кластеризації є популярним прикладом HCA. Щоб згрупувати набори даних у кластери, слідує підхід «знизу вверх». . Це означає, що цей алгоритм спочатку розглядає кожен набір даних як один кластер, а потім починає об’єднувати найближчу пару кластерів. Це робиться до тих пір, поки всі кластери не будуть об’єднані в один кластер, який містить усі набори даних.

Ця ієрархія кластерів представлена ​​у вигляді дендрограми.

Як працює агломеративна ієрархічна кластеризація?

Роботу алгоритму AHC можна пояснити за допомогою наведених нижче кроків.

    Крок 1:Створіть кожну точку даних як окремий кластер. Скажімо, є N точок даних, тому кількість кластерів також буде N.
    Ієрархічна кластеризація в машинному навчанні Крок 2:Візьміть дві найближчі точки даних або кластери та об’єднайте їх, щоб утворити один кластер. Отже, тепер буде N-1 кластерів.
    Ієрархічна кластеризація в машинному навчанні Крок-3: знову візьміть два найближчі кластери та об’єднайте їх разом, щоб утворити один кластер. Кластерів буде N-2.
    Ієрархічна кластеризація в машинному навчанні Крок 4:Повторюйте крок 3, доки не залишиться лише один кластер. Отже, ми отримаємо наступні кластери. Розгляньте зображення нижче:
    Ієрархічна кластеризація в машинному навчанні
    Ієрархічна кластеризація в машинному навчанні
    Ієрархічна кластеризація в машинному навчанні Крок 5:Коли всі кластери об’єднано в один великий кластер, розробіть дендрограму, щоб розділити кластери відповідно до проблеми.

Примітка. Щоб краще зрозуміти ієрархічну кластеризацію, радимо поглянути на кластеризацію 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
    n_clusters=5: це визначає кількість кластерів, і ми взяли тут 5, тому що це оптимальна кількість кластерів.affinity='euclidean': це показник, який використовується для обчислення зв’язку.linkage='ward': Визначає критерії зв’язку, тут ми використали зв’язок «підопічний». Цей метод є популярним методом зв’язування, який ми вже використовували для створення дендрограми. Це зменшує дисперсію в кожному кластері.

В останньому рядку ми створили залежну змінну 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() 

Результат: Виконуючи наведені вище рядки коду, ми отримаємо наступний результат:

Ієрархічна кластеризація в машинному навчанні