Algorytmy grupowania - algorytm zmiany średniej

Wprowadzenie do algorytmu zmiany średniej

Jak wspomniano wcześniej, jest to kolejny potężny algorytm klastrowania używany w uczeniu się bez nadzoru. W przeciwieństwie do grupowania K-średnich, nie przyjmuje żadnych założeń; stąd jest to algorytm nieparametryczny.

Algorytm zmiany średniej zasadniczo przypisuje punkty danych do klastrów iteracyjnie, przesuwając punkty w kierunku największej gęstości punktów danych, tj. Środka ciężkości klastra.

Różnica między algorytmem K-Means a Mean-Shift polega na tym, że później nie trzeba z góry określać liczby klastrów, ponieważ liczba klastrów zostanie określona przez algorytm wrt data.

Działanie algorytmu zmiany średniej

Możemy zrozumieć działanie algorytmu grupowania średniej zmiany za pomocą następujących kroków -

  • Step 1 - Najpierw zacznij od punktów danych przypisanych do własnego klastra.

  • Step 2 - Następnie ten algorytm obliczy centroidy.

  • Step 3 - Na tym etapie zostanie zaktualizowana lokalizacja nowych centroidów.

  • Step 4 - Teraz proces zostanie powtórzony i przeniesiony do regionu o wyższej gęstości.

  • Step 5 - W końcu zostanie zatrzymany, gdy centroidy osiągną pozycję, z której nie mogą się dalej poruszać.

Implementacja w Pythonie

To prosty przykład, aby zrozumieć, jak działa algorytm zmiany średniej. W tym przykładzie najpierw wygenerujemy zestaw danych 2D zawierający 4 różne obiekty blob, a następnie zastosujemy algorytm zmiany średniej, aby zobaczyć wynik.

%matplotlib inline
import numpy as np
from sklearn.cluster import MeanShift
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
from sklearn.datasets.samples_generator import make_blobs
centers = [[3,3,3],[4,5,5],[3,10,10]]
X, _ = make_blobs(n_samples = 700, centers = centers, cluster_std = 0.5)
plt.scatter(X[:,0],X[:,1])
plt.show()
ms = MeanShift()
ms.fit(X)
labels = ms.labels_
cluster_centers = ms.cluster_centers_
print(cluster_centers)
n_clusters_ = len(np.unique(labels))
print("Estimated clusters:", n_clusters_)
colors = 10*['r.','g.','b.','c.','k.','y.','m.']
for i in range(len(X)):
    plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize = 3)
plt.scatter(cluster_centers[:,0],cluster_centers[:,1],
    marker=".",color='k', s=20, linewidths = 5, zorder=10)
plt.show()

Wynik

[[ 2.98462798 9.9733794 10.02629344]
[ 3.94758484 4.99122771 4.99349433]
[ 3.00788996 3.03851268 2.99183033]]
Estimated clusters: 3

Zalety i wady

Zalety

Oto niektóre zalety algorytmu grupowania ze zmianą średniej -

  • Nie trzeba robić żadnych założeń modelowych, jak w przypadku średnich K lub mieszaniny Gaussa.

  • Może także modelować złożone skupiska, które mają nieprzekraczalny kształt.

  • Potrzebuje tylko jednego parametru o nazwie przepustowość, który automatycznie określa liczbę klastrów.

  • Nie ma kwestii lokalnych minimów, jak w przypadku K-średnich.

  • Nie ma problemu związanego z wartościami odstającymi.

Niedogodności

Poniżej przedstawiono niektóre wady algorytmu grupowania z przesunięciem średniej -

Algorytm zmiany średniej nie działa dobrze w przypadku dużego wymiaru, gdzie liczba klastrów gwałtownie się zmienia.

  • Nie mamy bezpośredniej kontroli nad liczbą klastrów, ale w niektórych aplikacjach potrzebujemy określonej liczby klastrów.

  • Nie potrafi odróżnić trybów znaczących i pozbawionych znaczenia.