Klastrowanie hierarchiczne to kolejny algorytm uczenia maszynowego bez nadzoru, który służy do grupowania nieoznaczonych zbiorów danych w klaster i jest również znany jako hierarchiczna analiza skupień lub HCA.
W algorytmie tym rozwijamy hierarchię skupień w postaci drzewa, a ta drzewiasta struktura nazywana jest dendrogram .
Czasami wyniki grupowania K-średnich i grupowania hierarchicznego mogą wyglądać podobnie, ale oba różnią się w zależności od sposobu działania. Ponieważ nie ma wymogu wcześniejszego określenia liczby skupień, jak to zrobiliśmy w algorytmie K-Means.
Technika grupowania hierarchicznego ma dwa podejścia:
wygeneruj liczbę losową w Javie
Dlaczego klastrowanie hierarchiczne?
Ponieważ mamy już inne grupowanie algorytmy np Klastrowanie K-średnich , to dlaczego potrzebujemy grupowania hierarchicznego? Tak więc, jak widzieliśmy w przypadku grupowania K-średnich, algorytm ten wiąże się z pewnymi wyzwaniami, które obejmują z góry określoną liczbę klastrów i zawsze próbuje on utworzyć klastry o tej samej wielkości. Aby rozwiązać te dwa wyzwania, możemy zdecydować się na algorytm grupowania hierarchicznego, ponieważ w tym algorytmie nie musimy posiadać wiedzy na temat z góry określonej liczby skupień.
W tym temacie omówimy algorytm grupowania aglomeracyjnego hierarchicznego.
Aglomeracyjne Grupowanie hierarchiczne
Popularnym przykładem HCA jest aglomeracyjny algorytm grupowania hierarchicznego. Aby pogrupować zbiory danych w klastry, należy postępować zgodnie z instrukcją Podejście oddolne . Oznacza to, że algorytm ten na początku traktuje każdy zbiór danych jako pojedynczy klaster, a następnie zaczyna łączyć ze sobą najbliższą parę klastrów. Dzieje się tak do momentu połączenia wszystkich klastrów w jeden klaster zawierający wszystkie zbiory danych.
Ta hierarchia skupień jest przedstawiona w formie dendrogramu.
Jak działa aglomeracyjne grupowanie hierarchiczne?
Działanie algorytmu AHC można wyjaśnić, wykonując poniższe kroki:
Uwaga: Aby lepiej zrozumieć grupowanie hierarchiczne, zaleca się przyjrzenie się grupowaniu k-średnich
Zmierz odległość pomiędzy dwoma klastrami
Jak widzieliśmy, najbliższa odległość między dwoma klastrami ma kluczowe znaczenie dla hierarchicznego grupowania. Istnieją różne sposoby obliczania odległości między dwoma skupieniami i te sposoby decydują o regule grupowania. Środki te nazywane są Metody łączenia . Poniżej podano niektóre z popularnych metod łączenia:
Z podanych powyżej podejść możemy zastosować dowolne z nich, w zależności od rodzaju problemu lub wymagań biznesowych.
Budzenie się dendrogramu w grupowaniu hierarchicznym
Dendrogram to struktura przypominająca drzewo, używana głównie do przechowywania każdego kroku w postaci pamięci wykonywanej przez algorytm HC. Na wykresie dendrogramu oś Y przedstawia odległości euklidesowe pomiędzy punktami danych, a oś x przedstawia wszystkie punkty danych z danego zbioru danych.
Działanie dendrogramu można wyjaśnić za pomocą poniższego diagramu:
Na powyższym diagramie lewa część pokazuje, w jaki sposób tworzone są klastry w skupieniu aglomeracyjnym, a prawa część pokazuje odpowiedni dendrogram.
- Jak omówiliśmy powyżej, po pierwsze, punkty danych P2 i P3 łączą się ze sobą i tworzą klaster, odpowiednio tworzony jest dendrogram, który łączy P2 i P3 kształtem prostokątnym. Wysokość jest ustalana na podstawie odległości euklidesowej pomiędzy punktami danych.
- W następnym kroku P5 i P6 tworzą klaster i tworzony jest odpowiadający im dendrogram. Jest wyższa niż poprzednio, ponieważ odległość euklidesowa pomiędzy P5 i P6 jest nieco większa niż P2 i P3.
- Ponownie tworzone są dwa nowe dendrogramy, które łączą P1, P2 i P3 w jednym dendrogramie oraz P4, P5 i P6 w innym dendrogramie.
- Na koniec tworzony jest końcowy dendrogram, który łączy w sobie wszystkie punkty danych.
Możemy wyciąć strukturę drzewa dendrogramu na dowolnym poziomie, zgodnie z naszymi wymaganiami.
Implementacja aglomeracyjnego klastrowania hierarchicznego w języku Python
Teraz zobaczymy praktyczną implementację algorytmu aglomeracyjnego hierarchicznego grupowania przy użyciu języka Python. Aby to zaimplementować, użyjemy tego samego problemu ze zbiorem danych, który wykorzystaliśmy w poprzednim temacie dotyczącym grupowania K-średnich, abyśmy mogli łatwo porównać obie koncepcje.
Zbiór danych zawiera informacje o klientach, którzy odwiedzili centrum handlowe na zakupy. Zatem właściciel centrum handlowego chce znaleźć pewne wzorce lub szczególne zachowania swoich klientów, korzystając z informacji ze zbioru danych.
Kroki wdrożenia AHC przy użyciu Pythona:
Etapy wdrożenia będą takie same jak w przypadku grupowania k-średnich, z wyjątkiem pewnych zmian, takich jak metoda znajdowania liczby skupień. Poniżej znajdują się kroki:
Etapy wstępnego przetwarzania danych:
W tym kroku zaimportujemy biblioteki i zbiory danych dla naszego modelu.
# Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
Powyższe linie kodu służą do importowania bibliotek w celu wykonania określonych zadań, takich jak tępy do operacji matematycznych, matplotlib do rysowania wykresów lub wykresów punktowych oraz pandy do importowania zbioru danych.
Liczba pierwsza w Javie
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
Jak omówiono powyżej, zaimportowaliśmy ten sam zestaw danych Mall_Customers_data.csv, tak jak to zrobiliśmy w grupowaniu k-średnich. Rozważ poniższe dane wyjściowe:
porównać do ciągów znaków w Javie
Tutaj wyodrębnimy tylko macierz cech, ponieważ nie mamy żadnych dalszych informacji na temat zmiennej zależnej. Kod podano poniżej:
x = dataset.iloc[:, [3, 4]].values
Tutaj wyodrębniliśmy tylko 3 i 4 kolumny, ponieważ do zobaczenia skupień użyjemy wykresu 2D. Dlatego rozważamy roczny wynik dochodów i wydatków jako macierz cech.
Krok 2: Znalezienie optymalnej liczby klastrów za pomocą Dendrogramu
Teraz znajdziemy optymalną liczbę klastrów, korzystając z Dendrogramu dla naszego modelu. W tym celu będziemy używać pikantny biblioteka, ponieważ zapewnia funkcję, która bezpośrednio zwróci dendrogram dla naszego kodu. Rozważ poniższe linie kodu:
#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()
W powyższych wierszach kodu zaimportowaliśmy plik hierarchia moduł biblioteki scipy. Moduł ten udostępnia nam metodę shc.denrogram(), który zajmuje połączenie() jako parametr. Funkcja łączenia służy do zdefiniowania odległości między dwoma skupieniami, więc tutaj przekazaliśmy x (macierz cech) i metodę „ oddział ”, popularna metoda łączenia w klastrach hierarchicznych.
Pozostałe linie kodu mają opisywać etykiety wykresu dendrogramu.
Wyjście:
Wykonując powyższe linie kodu, otrzymamy poniższe dane wyjściowe :
Korzystając z tego dendrogramu, określimy teraz optymalną liczbę skupień dla naszego modelu. W tym celu znajdziemy maksymalna odległość pionowa który nie przecina żadnego poziomego paska. Rozważ poniższy diagram:
Na powyższym diagramie pokazaliśmy odległości pionowe, które nie przecinają poziomych prętów. Jak łatwo się domyślić, 4todległość wygląda na maksymalną, więc zgodnie z tym, liczba klastrów będzie wynosić 5 (pionowe linie w tym zakresie). Możemy też wziąć 2IIliczba, która w przybliżeniu równa się 4todległość, ale rozważymy 5 skupień, ponieważ to samo obliczyliśmy w algorytmie K-średnich.
Zatem optymalna liczba klastrów będzie wynosić 5 , a w następnym kroku będziemy trenować model, używając tego samego.
Krok 3: Uczenie hierarchicznego modelu grupowania
Znając wymaganą optymalną liczbę klastrów, możemy teraz trenować nasz model. Kod podano poniżej:
#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)
W powyższym kodzie zaimportowaliśmy plik Klastrowanie aglomeracyjne klasa modułu klastra biblioteki scikit Learn.
Następnie stworzyliśmy obiekt tej klasy o nazwie as hc. Klasa AgglomerativeClustering przyjmuje następujące parametry:
W ostatniej linii utworzyliśmy zmienną zależną y_pred, aby dopasować lub wytrenować model. Uczy nie tylko model, ale także zwraca klastry, do których należy każdy punkt danych.
Jeśli po wykonaniu powyższych linii kodu przejdziemy przez opcję eksploratora zmiennych w naszym Sypder IDE, możemy sprawdzić zmienną y_pred. Możemy porównać oryginalny zbiór danych ze zmienną y_pred. Rozważ poniższy obraz:
Jak widać na powyższym obrazku, y_pred pokazuje wartość klastrów, co oznacza, że identyfikator klienta 1 należy do 5tklaster (ponieważ indeksowanie zaczyna się od 0, więc 4 oznacza 5tklaster), identyfikator klienta 2 należy do 4tklaster i tak dalej.
Krok 4: Wizualizacja klastrów
Ponieważ pomyślnie przeszkoliliśmy nasz model, możemy teraz wizualizować klastry odpowiadające zbiorowi danych.
Tutaj użyjemy tych samych wierszy kodu, co w przypadku grupowania k-średnich, z wyjątkiem jednej zmiany. Tutaj nie będziemy wykreślać środka ciężkości, który zrobiliśmy w k-średnich, ponieważ tutaj użyliśmy dendrogramu do określenia optymalnej liczby skupień. Kod podano poniżej:
#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()
Dane wyjściowe: wykonując powyższe wiersze kodu, otrzymamy poniższe dane wyjściowe:
wiersz i kolumna