logo

Йерархично клъстериране в машинното обучение

Йерархичното клъстериране е друг неконтролиран алгоритъм за машинно обучение, който се използва за групиране на немаркирани набори от данни в клъстер и известен също като йерархичен клъстерен анализ или HCA.

В този алгоритъм разработваме йерархията на клъстерите под формата на дърво и тази дървовидна структура е известна като дендрограма .

Понякога резултатите от клъстерирането на K-означава и йерархичното клъстериране може да изглеждат подобни, но и двете се различават в зависимост от това как работят. Тъй като няма изискване за предварително определяне на броя на клъстерите, както направихме в алгоритъма K-Means.

Техниката на йерархично групиране има два подхода:

    Агломеративен:Агломерацията е a отдолу нагоре подход, при който алгоритъмът започва с вземане на всички точки от данни като единични клъстери и обединяването им, докато остане един клъстер.Разделителен:Разделителният алгоритъм е обратен на агломеративния алгоритъм, тъй като е a подход отгоре надолу.

Защо йерархично групиране?

Както вече имаме други групиране алгоритми като K-означава групиране , тогава защо имаме нужда от йерархично групиране? И така, както видяхме в клъстерирането на K-означава, че има някои предизвикателства с този алгоритъм, които са предварително определен брой клъстери и той винаги се опитва да създаде клъстери с еднакъв размер. За да разрешим тези две предизвикателства, можем да изберем алгоритъма за йерархично клъстериране, тъй като в този алгоритъм не е необходимо да имаме информация за предварително определения брой клъстери.

В тази тема ще обсъдим алгоритъма за агломеративно йерархично клъстериране.

Агломеративно йерархично групиране

Алгоритъмът за агломеративно йерархично клъстериране е популярен пример за HCA. За да групирате наборите от данни в клъстери, следва подход отдолу нагоре . Това означава, че този алгоритъм разглежда всеки набор от данни като единичен клъстер в началото и след това започва да комбинира най-близката двойка клъстери заедно. Прави това, докато всички клъстери се обединят в един клъстер, който съдържа всички набори от данни.

Тази йерархия от клъстери е представена под формата на дендрограма.

сортиране на java масив

Как работи агломеративното йерархично клъстериране?

Работата на алгоритъма на 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-средните клъстери, с изключение на някои промени като метода за намиране на броя на клъстерите. По-долу са стъпките:

    Предварителна обработка на данни Намиране на оптималния брой клъстери с помощта на дендрограмата Обучение на йерархичния клъстерен модел Визуализиране на клъстерите

Стъпки за предварителна обработка на данни:

В тази стъпка ще импортираме библиотеките и наборите от данни за нашия модел.

централно изображение в css
    Импортиране на библиотеките
 # 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 (матрица от характеристики) и метода ' отделение ,“ популярният метод за свързване в йерархично групиране.

Останалите редове код трябва да опишат етикетите за графиката на дендрограмата.

Изход:

Като изпълним горните редове код, ще получим изхода по-долу :

Йерархично клъстериране в машинното обучение

Използвайки тази дендрограма, сега ще определим оптималния брой клъстери за нашия модел. За това ще намерим максимално вертикално разстояние който не отрязва нито една хоризонтална лента. Разгледайте диаграмата по-долу:

Йерархично клъстериране в машинното обучение

В диаграмата по-горе сме показали вертикалните разстояния, които не пресичат техните хоризонтални пръти. Както можем да визуализираме, 4thразстоянието изглежда максимално, така че според това, броят на клъстерите ще бъде 5 (вертикалните линии в този диапазон). Можем да вземем и 2ndчисло, тъй като е приблизително равно на 4thразстояние, но ще разгледаме 5-те клъстера, защото същите изчислихме в алгоритъма на K-средните.

сортиране на селекция java

Така че оптималният брой клъстери ще бъде 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 приема следните параметри:

in.next java
    n_клъстери=5: Определя броя на клъстерите и тук сме взели 5, защото това е оптималният брой клъстери.affinity='euclidean': Това е показател, използван за изчисляване на връзката.linkage='ward': Определя критериите за свързване, тук сме използвали връзката „отделение“. Този метод е популярният метод за свързване, който вече сме използвали за създаване на дендрограмата. Намалява дисперсията във всеки клъстер.

В последния ред създадохме зависимата променлива y_pred, за да пасне или обучи модела. Той обучава не само модела, но също така връща клъстерите, към които принадлежи всяка точка от данни.

След като изпълним горните редове код, ако преминем през опцията за изследване на променливи в нашата Sypder IDE, можем да проверим променливата y_pred. Можем да сравним оригиналния набор от данни с променливата y_pred. Разгледайте изображението по-долу:

Йерархично клъстериране в машинното обучение

Както можем да видим на горното изображение, y_pred показва стойността на клъстерите, което означава, че идентификаторът на клиента 1 принадлежи към 5thклъстер (тъй като индексирането започва от 0, така че 4 означава 5thклъстер), клиентският идентификатор 2 принадлежи на 4thклъстер и така нататък.

Стъпка 4: Визуализиране на клъстерите

Тъй като успешно обучихме нашия модел, сега можем да визуализираме клъстерите, съответстващи на набора от данни.

Тук ще използваме същите редове код, както при клъстерирането на k-средства, с изключение на една промяна. Тук няма да начертаем центроида, който направихме в 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() 

Изход: Изпълнявайки горните редове код, ще получим изхода по-долу:

Йерархично клъстериране в машинното обучение