Wprowadzenie
K-Means to jeden z najpopularniejszych algorytmów klastrowania. Posiadając centralne punkty w klastrze, grupuje inne punkty na podstawie ich odległości od tego centralnego punktu.
Minusem K-Means jest konieczność wyboru liczby klastrów, K, przed uruchomieniem algorytmu grupującego punkty.
Jeśli chcesz przeczytać szczegółowy przewodnik po klastrowaniu K-Means, spójrz na „Klastrowanie K-Means za pomocą Scikit-Learn”.
Metoda łokcia i analiza sylwetki
Najczęściej stosowanymi technikami wyboru liczby Ks są Metoda łokcia oraz Analiza sylwetki.
Aby ułatwić wybór Ks, Żółta cegła Biblioteka zamyka kod z pętlami for i wykresem, który zwykle pisalibyśmy w 4 linijki kodu.
Aby zainstalować Yellowbrick bezpośrednio z notatnika Jupyter, uruchom:
! pip install yellowbrick
Zobaczmy, jak to działa w przypadku znanego zestawu danych, który jest już częścią Science-learn, Irys zestaw danych.
Pierwszym krokiem jest zaimportowanie zbioru danych, KMeans
i yellowbrick
biblioteki i wczytaj dane:
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer, SilhouetteVisualizer
iris = load_iris()
Zwróć uwagę, że importujemy KElbowVisualizer
i SilhouetteVisualizer
od yellowbrick.cluster
, to są moduły, których użyjemy do wizualizacji wyników Łokcia i Sylwetki!
Po załadowaniu zbioru danych, w data
klucz wiązki (typ danych będący rozszerzeniem słownika) to wartości punktów, które chcemy zgrupować. Jeśli chcesz wiedzieć, co oznaczają liczby, spójrz na iris['feature_names']
.
Wiadomo, że zbiór danych Iris zawiera trzy rodzaje tęczówek: "versicolor", "virginica" i "setosa". Możesz również obejrzeć zajęcia w iris['target_names']
do weryfikacji.
Mamy więc 4 cechy do zgrupowania i należy je podzielić na 3 różne klastry zgodnie z tym, co już wiemy. Zobaczmy, czy nasze wyniki z Metodą Łokcia i Analizą Sylwetki to potwierdzą.
Najpierw wybierzemy wartości cech:
print(iris['feature_names'])
print(iris['target_names'])
X = iris['data']
Następnie możemy stworzyć KMeans
model, a KElbowVisualizer()
instancja, która otrzyma ten model wraz z liczbą ks, dla której zostanie obliczona metryka, w tym przypadku z 2 do 11 ks.
Następnie dopasowujemy wizualizator do danych za pomocą fit()
i wyświetlaj fabułę za pomocą show()
. Jeśli metryka nie jest określona, wizualizator używa zniekształcenie metryka, która oblicza sumę kwadratów odległości od każdego punktu do jego przypisanego środka:
model = KMeans(random_state=42)
elb_visualizer = KElbowVisualizer(model, k=(2,11))
elb_visualizer.fit(X)
elb_visualizer.show()
Teraz mamy już Kolano oceny zniekształceń dla klastrowania KMeans działka z zaznaczoną pionową linią, która byłaby najlepszą liczbą ks, w tym przypadku, 4
.
Wydaje się, że metoda łokcia z metryką zniekształceń nie była najlepszym wyborem, jeśli nie znaliśmy rzeczywistej liczby skupień. Czy Silhouette wskaże również, że istnieją 4 skupiska? Aby na to odpowiedzieć, wystarczy powtórzyć ostatni kod z modelem z 4 klastrami i innym obiektem wizualizera:
model_4clust = KMeans(n_clusters = 4, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_4clust)
sil_visualizer.fit(X)
sil_visualizer.show()
Kod wyświetla Wykres sylwetki grupowania KMeans dla 150 próbek w 4 centrach. Aby przeanalizować te skupienia, musimy spojrzeć na wartość współczynnika sylwetki (lub wyniku), jego najlepsza wartość jest bliższa 1. Średnia wartość, jaką mamy, to 0.5
, oznaczony pionową linią i nie tak dobrze.
Musimy również przyjrzeć się rozkładowi między skupieniami – dobra działka ma podobne rozmiary skupionych obszarów lub dobrze rozmieszczone punkty. Na tym wykresie są 3 mniejsze gromady (numer 3, 2, 1) i jedna większa gromada (numer 0), co nie jest wynikiem, którego oczekiwaliśmy.
Zapoznaj się z naszym praktycznym, praktycznym przewodnikiem dotyczącym nauki Git, zawierającym najlepsze praktyki, standardy przyjęte w branży i dołączoną ściągawkę. Zatrzymaj polecenia Google Git, a właściwie uczyć się to!
Powtórzmy ten sam wykres dla 3 skupisk, aby zobaczyć, co się stanie:
model_3clust = KMeans(n_clusters = 3, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_3clust)
sil_visualizer.fit(X)
sil_visualizer.show()
Zmieniając liczbę skupień, uzyskano wynik sylwetki 0.05
wyższe, a klastry są bardziej zrównoważone. Gdybyśmy nie znali rzeczywistej liczby klastrów, eksperymentując i łącząc obie techniki, wybralibyśmy 3
zamiast 2
jako liczba Ks.
Jest to przykład, jak ważne jest łączenie i porównywanie różnych metryk, wizualizacja danych i eksperymentowanie z różnymi wartościami klastrów, aby poprowadzić wynik we właściwym kierunku. A także, jak posiadanie biblioteki, która ułatwia tę analizę, może pomóc w tym procesie!