Йерархичното клъстериране е друг неконтролиран алгоритъм за машинно обучение, който се използва за групиране на немаркирани набори от данни в клъстер и известен също като йерархичен клъстерен анализ или HCA.
В този алгоритъм разработваме йерархията на клъстерите под формата на дърво и тази дървовидна структура е известна като дендрограма .
Понякога резултатите от клъстерирането на K-означава и йерархичното клъстериране може да изглеждат подобни, но и двете се различават в зависимост от това как работят. Тъй като няма изискване за предварително определяне на броя на клъстерите, както направихме в алгоритъма K-Means.
Техниката на йерархично групиране има два подхода:
Защо йерархично групиране?
Както вече имаме други групиране алгоритми като K-означава групиране , тогава защо имаме нужда от йерархично групиране? И така, както видяхме в клъстерирането на K-означава, че има някои предизвикателства с този алгоритъм, които са предварително определен брой клъстери и той винаги се опитва да създаде клъстери с еднакъв размер. За да разрешим тези две предизвикателства, можем да изберем алгоритъма за йерархично клъстериране, тъй като в този алгоритъм не е необходимо да имаме информация за предварително определения брой клъстери.
В тази тема ще обсъдим алгоритъма за агломеративно йерархично клъстериране.
Агломеративно йерархично групиране
Алгоритъмът за агломеративно йерархично клъстериране е популярен пример за HCA. За да групирате наборите от данни в клъстери, следва подход отдолу нагоре . Това означава, че този алгоритъм разглежда всеки набор от данни като единичен клъстер в началото и след това започва да комбинира най-близката двойка клъстери заедно. Прави това, докато всички клъстери се обединят в един клъстер, който съдържа всички набори от данни.
Тази йерархия от клъстери е представена под формата на дендрограма.
сортиране на java масив
Как работи агломеративното йерархично клъстериране?
Работата на алгоритъма на 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-средните клъстери, с изключение на някои промени като метода за намиране на броя на клъстерите. По-долу са стъпките:
Стъпки за предварителна обработка на данни:
В тази стъпка ще импортираме библиотеките и наборите от данни за нашия модел.
централно изображение в 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
В последния ред създадохме зависимата променлива 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()
Изход: Изпълнявайки горните редове код, ще получим изхода по-долу: