Metoda łokcia
Część sekcji Uczenie nienadzorowane ścieżki Machine Learning w Coddy. Lekcja 7 z 51.
Nanieś bezwładność na wykres względem k. Każdy nowy środek dzieli rzeczywistą grupę, powodując gwałtowny spadek bezwładności; potem wykres się wypłaszcza. Załamanie, łokieć, wskazuje dobre k:
Praktyczna zasada: zatrzymaj się, gdy dodanie kolejnego środka zmniejsza bezwładność o mniej niż jedną czwartą. Zmiany dla jabłek: 56%, potem 69%, a następnie tylko 15%. Zatem k = 3:
ax.plot(ks, inertias, marker="o")
ax.axvline(3, linestyle="--")Łagodna krzywa bez załamania nie oznacza wyraźnych grup. W następnej lekcji pojawi się drugi sędzia.
Wyzwanie
ŁatwyAplikacja do roślin sortuje rośliny domowe według planów pielęgnacji zależnie od zapotrzebowania na światło i wodę. Kod początkowy zawiera wartości bezwładności dla k from 1 to 8, wykres i cutoff.
- Idąc w górę od k = 1, zatrzymaj się, gdy następne k zmniejsza bezwładność o mniej niż
cutoff. Wypisz to k. - Narysuj wykres bezwładności względem k z kropkami, przerywaną pionową linią przy wybranym k, a następnie wyświetl wykres.
Dla innej aplikacji, cutoff 0.25:
Care plans: 3Następnie Coddy opisuje Twój wykres.
Spróbuj swoich sił
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# Nie zmieniaj poniższych wierszy
rng = np.random.default_rng(17)
# Cztery rodzaje roślin: typowe zapotrzebowanie na światło i wodę oraz liczba roślin każdego rodzaju
kinds = [(8.5, 2, 35), (2.5, 7.5, 30), (5, 5, 30), (8, 8, 25)]
parts = []
for l, w, n in kinds:
parts.append(np.column_stack([rng.normal(l, 0.8, n), rng.normal(w, 0.8, n)]))
# 120 roślin doniczkowych, każda w osobnym wierszu: zapotrzebowanie na światło i wodę w skali od 1 do 10
plants = np.clip(np.round(np.concatenate(parts), 1), 1, 10)
# Inercja dla k od 1 do 8, z Inertia
ks = list(range(1, 9))
inertias = []
for k in ks:
km = KMeans(n_clusters=k, n_init=10, random_state=0)
km.fit(plants)
inertias.append(km.inertia_)
cutoff = float(input())
fig, ax = plt.subplots()
ax.set_title("Elbow: Care Plans")
ax.set_xlabel("k")
ax.set_ylabel("Inertia")
# 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