K-średnich

Popularny algorytm klastrowania dzielący dane na K grup wokół wyznaczanych centrów (centroidów). Iteracyjnie przypisuje punkty i przelicza środki skupień.

K-średnich (ang. K-Means) to jeden z najpopularniejszych algorytmów clustering, czyli uczenia nienadzorowanego, który dzieli zbiór danych na K rozłącznych grup (klastrów). Każdy klaster ma swój środek zwany centroidem — to po prostu średnia (stąd nazwa) wszystkich punktów przypisanych do tej grupy. Algorytm nie zna z góry żadnych etykiet: sam szuka struktury w danych, grupując punkty, które leżą blisko siebie.

Działa iteracyjnie i jest zaskakująco prosty. Najpierw losuje (albo sprytniej wybiera) K początkowych centroidów. Potem powtarza dwa kroki: przypisanie — każdy punkt trafia do najbliższego centroidu (zwykle według odległości euklidesowej), oraz aktualizację — każdy centroid przesuwa się do średniej swoich punktów. Kręci się tak dopóki centroidy nie przestaną się ruszać albo nie skończą się iteracje. Pod spodem minimalizuje sumę kwadratów odległości punktów od ich centroidów (tzw. inertia albo WCSS).

Do czego się przydaje? Wszędzie tam, gdzie chcesz pogrupować podobne rzeczy bez gotowych etykiet: segmentacja klientów, kompresja obrazu przez redukcję palety kolorów, grupowanie dokumentów czy wstępna eksploracja danych przed dalszą analizą.

Przykład z praktyki

W Pythonie masz to w bibliotece scikit-learn. Segmentacja klientów na trzy grupy to dosłownie kilka linijek:

from sklearn.cluster import KMeans

model = KMeans(n_clusters=3, n_init=10, random_state=42)

labels = model.fit_predict(X)

W labels dostajesz numer klastra dla każdego punktu, a w model.cluster_centers_ współrzędne centroidów. Domyślnie scikit-learn używa wariantu k-means++ do inicjalizacji, co daje lepszy start niż czysty los.

Częste błędy i pułapki

  • K bierzesz z sufitu. Algorytm sam nie powie ci, ile jest grup. Liczbę K dobierasz np. metodą łokcia (elbow method) albo współczynnikiem silhouette.
  • Brak skalowania. K-Means liczy odległości, więc cecha w zakresie 0–100000 zdominuje tę w zakresie 0–1. Przed treningiem standaryzuj dane (StandardScaler).
  • Minimum lokalne. Wynik zależy od startowych centroidów, dlatego uruchamiasz algorytm wielokrotnie (n_init) i bierzesz najlepszy.
  • Tylko kule. K-Means zakłada okrągłe, podobnej wielkości klastry. Na dane wydłużone lub o dziwnych kształtach lepiej spojrzeć w stronę DBSCAN.

Pojęcia powiązane: clustering, uczenie nienadzorowane, centroid, k-means++, DBSCAN, hierarchical clustering, metoda łokcia, silhouette score, odległość euklidesowa.