logo

Klastrowanie hierarchiczne w uczeniu maszynowym

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
    Aglomeracyjne:Aglomeracyjny jest oddolnie podejście, w którym algorytm rozpoczyna się od potraktowania wszystkich punktów danych jako pojedynczych klastrów i połączenia ich, aż pozostanie jeden klaster.Dzielący:Algorytm dzielący jest odwrotnością algorytmu aglomeracyjnego, ponieważ jest to a podejście odgórne.

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:

    Krok 1:Utwórz każdy punkt danych jako pojedynczy klaster. Załóżmy, że istnieje N punktów danych, więc liczba klastrów również będzie wynosić N.
    Klastrowanie hierarchiczne w uczeniu maszynowym Krok 2:Weź dwa najbliższe punkty danych lub klastry i połącz je, tworząc jeden klaster. Zatem będą teraz gromady N-1.
    Klastrowanie hierarchiczne w uczeniu maszynowym Krok 3: Ponownie weź dwa najbliższe skupiska i połącz je ze sobą, tworząc jeden klaster. Będą klastry N-2.
    Klastrowanie hierarchiczne w uczeniu maszynowym Krok 4:Powtarzaj krok 3, aż pozostanie tylko jeden klaster. Otrzymamy więc następujące klastry. Rozważ poniższe obrazy:
    Klastrowanie hierarchiczne w uczeniu maszynowym
    Klastrowanie hierarchiczne w uczeniu maszynowym
    Klastrowanie hierarchiczne w uczeniu maszynowym Krok 5:Po połączeniu wszystkich klastrów w jeden duży klaster opracuj dendrogram, aby podzielić klastry zgodnie z problemem.

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:

    Pojedyncze połączenie:Jest to najkrótsza odległość pomiędzy najbliższymi punktami klastrów. Rozważ poniższy obraz:
    Klastrowanie hierarchiczne w uczeniu maszynowym Kompletne połączenie:Jest to najdalsza odległość pomiędzy dwoma punktami dwóch różnych klastrów. Jest to jedna z popularnych metod łączenia, ponieważ tworzy węższe klastry niż wiązanie pojedyncze.
    Klastrowanie hierarchiczne w uczeniu maszynowym Średnie połączenie:Jest to metoda łączenia, w której odległość między każdą parą zbiorów danych jest sumowana, a następnie dzielona przez całkowitą liczbę zbiorów danych w celu obliczenia średniej odległości między dwoma klastrami. Jest to również jedna z najpopularniejszych metod łączenia.Połączenie środka ciężkości:Jest to metoda łączenia, w której obliczana jest odległość pomiędzy centroidami klastrów. Rozważ poniższy obraz:
    Klastrowanie hierarchiczne w uczeniu maszynowym

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:

Klastrowanie hierarchiczne w uczeniu maszynowym

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:

    Wstępne przetwarzanie danych Znalezienie optymalnej liczby skupień za pomocą Dendrogramu Uczenie hierarchicznego modelu grupowania Wizualizacja klastrów

Etapy wstępnego przetwarzania danych:

W tym kroku zaimportujemy biblioteki i zbiory danych dla naszego modelu.

    Importowanie bibliotek
 # 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
    Importowanie zbioru danych
 # 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
Klastrowanie hierarchiczne w uczeniu maszynowym
    Wyodrębnianie macierzy cech

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 :

Klastrowanie hierarchiczne w uczeniu maszynowym

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:

Klastrowanie hierarchiczne w uczeniu maszynowym

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:

    n_klastrów=5: Określa liczbę skupień, a my przyjęliśmy tutaj 5, ponieważ jest to optymalna liczba skupień.powinowactwo = „euklidesowy”: Jest to metryka używana do obliczania powiązania.połączenie='oddział': Definiuje kryteria powiązania, tutaj użyliśmy powiązania „okręgu”. Ta metoda jest popularną metodą łączenia, której już używaliśmy do tworzenia dendrogramu. Zmniejsza wariancję w każdym klastrze.

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:

Klastrowanie hierarchiczne w uczeniu maszynowym

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
Klastrowanie hierarchiczne w uczeniu maszynowym