K-Means krok po kroku
Część sekcji Uczenie nienadzorowane ścieżki Machine Learning w Coddy. Lekcja 3 z 51.
K-means powtarza rundę składającą się z dwóch kroków, aby znaleźć k klastrów. Przypisywanie: każdy punkt trafia do najbliższego środka. Przesuwanie: każdy środek przenosi się do średniej swoich punktów. Trzy wózki z lodami:
Jedna iteracja w NumPy, w której dists jest tablicą odległości z jedną kolumną na każdy środek:
labels = dists.argmin(axis=1) # przypisz
for c in range(k):
centers[c] = X[labels == c].mean(axis=0) # przesuńargmin(axis=1) zwraca najmniejszą wartość w każdym wierszu: najbliższe centrum. Z rundy na rundę centra się stabilizują; gdy żadne się nie przesuwa, algorytm k-średnich jest gotowy.
Wyzwanie
ŁatwyProducent koszulek dopasowuje rozmiary S, M i L do dzisiejszych klientów. Początkowe środki pochodzą ze starej tabeli rozmiarów, distances(people, centers) zwraca tabelę odległości, a program wczytuje liczbę rund do wykonania.
- W każdej rundzie: przypisz każdą osobę, a następnie przesuń każdy środek.
- Wypisz środek każdego rozmiaru oraz liczbę osób, które do niego przypisano w ostatniej rundzie, jak poniżej.
Dla innego producenta:
Rounds run: 2
S: chest 87.3 cm, length 65.1 cm, 14 people
M: chest 95.0 cm, length 68.9 cm, 31 people
L: chest 104.8 cm, length 72.6 cm, 45 peopleSpróbuj swoich sił
import numpy as np
# Nie zmieniaj poniższych wierszy
rng = np.random.default_rng(12)
chest = np.concatenate([rng.normal(88, 3, 30), rng.normal(98, 3.5, 35), rng.normal(110, 4, 25)])
length = np.concatenate([rng.normal(66, 1.8, 30), rng.normal(70, 2, 35), rng.normal(75, 2.2, 25)])
# 90 klientów, po jednym wierszu dla każdego: obwód klatki piersiowej i długość w cm
people = np.round(np.column_stack([chest, length]), 1)
# Stara tabela rozmiarów określa początkowe środki: S, M, L
sizes = ["S", "M", "L"]
centers = np.array([[85.0, 64.0], [90.0, 67.0], [96.0, 69.0]])
rounds = int(input())
# Tabela odległości: jeden wiersz na osobę, jedna kolumna na środek
def distances(X, centers):
table = np.zeros((len(X), len(centers)))
for c in range(len(centers)):
table[:, c] = np.sqrt(((X - centers[c]) ** 2).sum(axis=1))
return table
# Napisz swój kod poniżej
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Uczenie nienadzorowane
1Znajdowanie grup
Uczenie się bez etykietMierzenie podobieństwaK-Means krok po krokuK-Means w scikit-learnPodsumowanie: członkowie siłowni4Klasteryzacja hierarchiczna
Łączenie krok po krokuModele aglomeracyjneDendrogramyPodsumowanie: rasy psów7PCA w praktyce
Poznajemy 64 wymiarySkładowe jako wzorceKompresuj i odtwórzPCA przed modelemPodsumowanie: skaner twarzy10Projekt: Odkrywca cyfr
Przyjrzyj się cyfromZmniejsz wymiar za pomocą PCAGrupuj cyfryNazwij grupyZnajdź te nietypowe2Wybór k
InercjaMetoda łokciaWyniki silhouetteSkalowanie przed klasteryzacjąPodsumowanie: strefy dostawPoćwicz samodzielnie: Kompilator Python online