Menu
CoddyTech

Kiedy K-means zawodzi

Część sekcji Uczenie nienadzorowane ścieżki Machine Learning w Coddy. Lekcja 14 z 51.

K-means przedstawia każdy klaster jako okrągłą plamę wokół jego środka. Rzutki tworzą tarczę z pierścieniem wokół środka, a k-means dzieli ją na pół:

Dwa wykresy przedstawiające 140 rzutówkami. Po lewej prawdziwy układ: zwarta grupa w samym środku tarczy, otoczona szerokim pierścieniem. Po prawej k-means z k = 2: prosta przerywana granica dzieli tarczę, pierścień i środek na lewą i prawą połowę, każda z krzyżykiem oznaczającym środek

Każdy punkt dołącza do najbliższego środka, więc granica między dwoma skupieniami jest linią prostą położoną w połowie drogi między środkami. Żadna linia prosta nie oddziela pierścienia od jego środka.

Długie, zakrzywione lub bardzo nierówne grupy sprawiają, że k-średnich zawodzi w ten sam sposób. Nadal zwraca klastry, więc zawsze sprawdzaj wykres.

challenge icon

Wyzwanie

Średni

Dron zauważył 200 fok na dwóch zakrzywionych łachach piasku. Kod startowy rysuje rzeczywisty układ na panelu left.

  1. Pogrupuj foki metodą k-średnich, k = 2.
  2. Na panelu right nanieś punkty dla każdego klastra, oznaczonego jako cluster 0 lub cluster 1.
  3. Oznacz środki czarnymi znacznikami "X" z etykietą centers. Dodaj legendę, a następnie wyświetl wykres.

Coddy opisze twój wykres i policzy foki, które pozostały przy swojej łasze piasku. Tak to wygląda w przypadku dwóch grup:

Dwa wykresy. Po lewej rzeczywisty układ: duża, rozproszona grupa i mała, zwarta grupa po jej prawej stronie. Po prawej k-średnich z k = 2: klaster małej grupy obejmuje także prawą krawędź dużej grupy, a czarne krzyżyki oznaczają dwa środki

Spróbuj swoich sił

import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.cluster import KMeans

# 200 fok odpoczywających na dwóch zakrzywionych łachach piasku, widzianych z drona (pozycje w 100 m)
X, sandbar = make_moons(n_samples=200, noise=0.07, random_state=4)


# Rysuje rzeczywiste łachy piasku na ax
def draw_truth(ax):
    ax.scatter(X[sandbar == 0, 0], X[sandbar == 0, 1], s=12, label="north bar")
    ax.scatter(X[sandbar == 1, 0], X[sandbar == 1, 1], s=12, label="south bar")
    ax.set_title("The truth")
    ax.legend()


fig, (left, right) = plt.subplots(1, 2, figsize=(9, 4))
draw_truth(left)
right.set_title("K-means, k = 2")

# Napisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nienadzorowane

Poćwicz samodzielnie: Kompilator Python online