Scikit Learn - Metody grupowania

Tutaj będziemy studiować metody grupowania w Sklearn, które pomogą w identyfikacji wszelkich podobieństw w próbkach danych.

Metody grupowania, jedna z najbardziej użytecznych nienadzorowanych metod ML, używana do znajdowania wzorców podobieństw i relacji między próbkami danych. Następnie grupują te próbki w grupy wykazujące podobieństwo na podstawie cech. Klastrowanie określa wewnętrzne grupowanie wśród obecnie nieoznaczonych danych, dlatego jest ważne.

Biblioteka Scikit-Learn ma sklearn.clusterdo grupowania danych bez etykiety. W ramach tego modułu scikit-leran mają następujące metody grupowania -

KMeans

Ten algorytm oblicza centroidy i wykonuje iteracje, aż znajdzie optymalną centroidę. Wymaga określenia liczby klastrów, dlatego zakłada, że ​​są one już znane. Główną logiką tego algorytmu jest grupowanie danych rozdzielających próbki w n liczby grup równych wariancji poprzez minimalizację kryteriów zwanych bezwładnością. Liczbę klastrów zidentyfikowanych przez algorytm reprezentuje „K.

Scikit-Learn have sklearn.cluster.KMeansmoduł do wykonywania klastrów K-Means. Podczas obliczania centrów klastrów i wartości bezwładności parametr o nazwiesample_weight pozwala sklearn.cluster.KMeans moduł do przypisywania większej wagi niektórym próbkom.

Propagacja powinowactwa

Algorytm ten opiera się na koncepcji „przekazywania wiadomości” między różnymi parami próbek aż do uzyskania zbieżności. Nie wymaga określenia liczby klastrów przed uruchomieniem algorytmu. Algorytm ma złożoność czasową rzędu (2), co jest jego największą wadą.

Scikit-Learn have sklearn.cluster.AffinityPropagation moduł do wykonywania klastrów Affinity Propagation.

Średnia zmiana

Ten algorytm głównie wykrywa blobsw płynnej gęstości próbek. Przypisuje punkty danych do klastrów iteracyjnie, przesuwając punkty w kierunku największej gęstości punktów danych. Zamiast polegać na parametrze o nazwiebandwidth dyktując rozmiar regionu do przeszukiwania, automatycznie ustawia liczbę klastrów.

Scikit-Learn have sklearn.cluster.MeanShift moduł do wykonywania grupowania Mean Shift.

Grupowanie widmowe

Przed grupowaniem algorytm ten zasadniczo wykorzystuje wartości własne, tj. Widmo macierzy podobieństwa danych, aby przeprowadzić redukcję wymiarowości w mniejszej liczbie wymiarów. Stosowanie tego algorytmu nie jest zalecane w przypadku dużej liczby klastrów.

Scikit-Learn have sklearn.cluster.SpectralClustering moduł do wykonywania klastrowania widmowego.

Klastrowanie hierarchiczne

Ten algorytm buduje zagnieżdżone klastry poprzez sukcesywne łączenie lub dzielenie klastrów. Ta hierarchia klastrów jest reprezentowana jako dendrogram, czyli drzewo. Dzieli się na dwie kategorie -

Agglomerative hierarchical algorithms- W tego rodzaju hierarchicznym algorytmie każdy punkt danych jest traktowany jak pojedynczy klaster. Następnie sukcesywnie aglomeruje pary klastrów. Wykorzystuje to podejście oddolne.

Divisive hierarchical algorithms- W tym hierarchicznym algorytmie wszystkie punkty danych są traktowane jako jeden duży klaster. W tym przypadku proces tworzenia klastrów polega na podzieleniu, przy zastosowaniu podejścia odgórnego, jednego dużego klastra na różne małe klastry.

Scikit-Learn have sklearn.cluster.AgglomerativeClustering moduł do wykonywania klastrów aglomeracyjnych hierarchicznych.

DBSCAN

To znaczy “Density-based spatial clustering of applications with noise”. Algorytm ten opiera się na intuicyjnym pojęciu „klastrów” i „szumu”, zgodnie z którym klastry to gęste obszary o niższej gęstości w przestrzeni danych, oddzielone obszarami punktów danych o mniejszej gęstości.

Scikit-Learn have sklearn.cluster.DBSCANmoduł do wykonywania klastrów DBSCAN. Istnieją dwa ważne parametry, mianowicie min_samples i eps używane przez ten algorytm do definiowania gęstości.

Wyższa wartość parametru min_samples lub niższa wartość parametru eps będzie wskazywać na większą gęstość punktów danych, która jest niezbędna do utworzenia klastra.

OPTYKA

To znaczy “Ordering points to identify the clustering structure”. Algorytm ten znajduje również klastry oparte na gęstości w danych przestrzennych. Jego podstawowa logika działania jest podobna do DBSCAN.

Rozwiązuje główną słabość algorytmu DBSCAN - problem wykrywania znaczących klastrów w danych o różnej gęstości - poprzez uporządkowanie punktów bazy danych w taki sposób, że najbliższe przestrzennie punkty stają się sąsiadami w kolejności.

Scikit-Learn have sklearn.cluster.OPTICS moduł do wykonywania klastrowania OPTICS.

BRZOZOWY

Oznacza zrównoważoną redukcję iteracyjną i grupowanie przy użyciu hierarchii. Służy do hierarchicznego grupowania dużych zbiorów danych. Buduje drzewo o nazwieCFT to znaczy Characteristics Feature Treedla podanych danych.

Zaletą CFT jest to, że węzły danych zwane węzłami CF (cecha charakterystyczna) przechowują informacje niezbędne do klastrowania, co dodatkowo zapobiega konieczności przechowywania w pamięci całych danych wejściowych.

Scikit-Learn have sklearn.cluster.Birch moduł do wykonywania klastrowania BIRCH.

Porównanie algorytmów klastrowania

Poniższa tabela zawiera porównanie (na podstawie parametrów, skalowalności i metryki) algorytmów grupowania w scikit-learn.

Sr.No Nazwa algorytmu Parametry Skalowalność Metric używany
1 K-średnie Liczba klastrów Bardzo duże n_samples Odległość między punktami.
2 Propagacja powinowactwa Tłumienie Nie można go skalować z n_samples Odległość wykresu
3 Zmiana średniej Pasmo Nie można go skalować z n_samples. Odległość między punktami.
4 Grupowanie widmowe Liczba klastrów Średni poziom skalowalności z n_samples. Mały poziom skalowalności dzięki n_clusters. Odległość wykresu
5 Klastrowanie hierarchiczne Próg odległości lub liczba klastrów Duże n_samples Duże n_clusters Odległość między punktami.
6 DBSCAN Wielkość okolicy Bardzo duże n_samples i średnie n_clusters. Odległość do najbliższego punktu
7 OPTYKA Minimalne członkostwo w klastrze Bardzo duże n_samples i duże n_clusters. Odległość między punktami.
8 BRZOZOWY Próg, współczynnik rozgałęzienia Duże n_samples Duże n_clusters Odległość euklidesowa między punktami.

Grupowanie K-średnich w zestawie danych Scikit-Learn Digit

W tym przykładzie zastosujemy grupowanie K-średnich na zbiorze cyfr. Ten algorytm zidentyfikuje podobne cyfry bez korzystania z oryginalnych informacji na etykiecie. Wdrożenie odbywa się na notebooku Jupyter.

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape

Wynik

1797, 64)

Te dane wyjściowe pokazują, że cyfrowy zbiór danych zawiera 1797 próbek z 64 funkcjami.

Przykład

Teraz wykonaj grupowanie K-średnich w następujący sposób -

kmeans = KMeans(n_clusters = 10, random_state = 0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape

Wynik

(10, 64)

Te dane wyjściowe pokazują, że grupowanie K-średnich utworzyło 10 klastrów z 64 funkcjami.

Przykład

fig, ax = plt.subplots(2, 5, figsize = (8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
axi.set(xticks = [], yticks = [])
axi.imshow(center, interpolation = 'nearest', cmap = plt.cm.binary)

Wynik

Poniższe dane wyjściowe zawierają obrazy pokazujące centra klastrów poznane przez Clustering K-Means.

Następnie poniższy skrypt Pythona dopasuje wyuczone etykiety klastrów (według K-średnich) do prawdziwych etykiet w nich znalezionych -

from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
mask = (clusters == i)
labels[mask] = mode(digits.target[mask])[0]

Możemy również sprawdzić dokładność za pomocą poniższego polecenia.

from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)

Wynik

0.7935447968836951

Pełny przykład implementacji

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np

from sklearn.cluster import KMeans
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape
kmeans = KMeans(n_clusters = 10, random_state = 0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape
fig, ax = plt.subplots(2, 5, figsize = (8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
   axi.set(xticks=[], yticks = [])
   axi.imshow(center, interpolation = 'nearest', cmap = plt.cm.binary)
from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
   mask = (clusters == i)
   labels[mask] = mode(digits.target[mask])[0]
from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)