Välja K: Armbågsmetoden och silhuettpoäng
Ni kommer att plotta tröghet mot k (armbågen) och beräkna silhuettkoefficienter för att välja det antal kluster som ger välseparerade och kompakta grupper.
Välja K: Armbågsmetoden och silhuettpoäng är en gratis lektion i Machine Learning Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Machine Learning Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Machine Learning Academy innehåller totalt 4 lektioner.
Varför valet av k spelar roll
K-Means kräver att ni anger k — antalet kluster — innan träningen. För få kluster innebär att olika grupper slås ihop; för många innebär att naturliga grupper delas upp på ett konstgjort sätt. Det finns inget universellt korrekt k, men två diagnostiska verktyg — armbågsmetoden och siluettpoängen — ger välgrundad vägledning.
Inertia minskar när k ökar
När ni ökar k minskar inertia alltid, eftersom punkterna tilldelas närmare centroider. Vid k=n (ett kluster per punkt) är inertia noll. Det innebär att ni inte bara kan minimera inertia — ni måste hitta den punkt där ytterligare kluster inte längre ger meningsfulla minskningar. Den punkten med avtagande nytta är armbågen.
from sklearn.cluster import KMeans
import numpy as np
X = np.random.randn(200, 2)
inertias = []
for k in range(1, 11):
km = KMeans(n_clusters=k, random_state=42, n_init=10)
km.fit(X)
inertias.append(km.inertia_)
print('Inertia per k:')
for k, inr in enumerate(inertias, start=1):
print(f' k={k}: {inr:.1f}')Armbågsmetoden förklarad
Rita inertia på y-axeln mot k på x-axeln. Kurvan sjunker vanligtvis brant för de första k-värdena och planar sedan ut. Armbågen — böjen där minskningstakten avtar kraftigt — är en uppskattning av det verkliga antalet kluster. Om det verkliga k är 3 är minskningen från k=1 till k=3 stor, medan minskningen från k=3 till k=4 är mycket mindre.
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.7, random_state=0)
inertias = []
for k in range(1, 11):
km = KMeans(n_clusters=k, random_state=0, n_init=10)
km.fit(X)
inertias.append(km.inertia_)
plt.plot(range(1, 11), inertias, marker='o')
plt.xlabel('Number of clusters k')
plt.ylabel('Inertia')
plt.title('Elbow Method')
plt.axvline(x=4, color='red', linestyle='--', label='True k=4')
plt.legend()
plt.show()Begränsningar hos armbågsmetoden
Armbågsmetoden fungerar bra när klustren är tydligt åtskilda, men verkliga data ger ofta en jämn kurva utan någon tydlig böj. I sådana fall är armbågen tvetydig och olika personer kan välja olika k. Då ger siluettpoängen ett mer objektivt och matematiskt välgrundat alternativ.
Siluettpoäng: formeln
För varje punkt i beräknar ni två värden: a(i) = medelavståndet till andra punkter i samma kluster (sammanhållning), och b(i) = medelavståndet till det närmaste andra klustret (separation). Siluettvärdet för punkt i är s(i) = (b(i) - a(i)) / max(a(i), b(i)). Värdena sträcker sig från −1 (fel kluster) via 0 (på gränsen) till +1 (tätt och välseparerat kluster).
Beräkna siluettpoängen i sklearn
sklearn.metrics.silhouette_score returnerar den genomsnittliga siluettpoängen för alla punkter. En poäng över 0.5 indikerar vanligtvis en rimlig klustring; över 0.7 är starkt. Eftersom siluettpoängen inte kan beräknas för k=1 (inget andra kluster finns), testar ni k från 2 till ett valt maximum och väljer det k som har högst medelpoäng.
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from sklearn.datasets import make_blobs
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.7, random_state=0)
scores = {}
for k in range(2, 9):
km = KMeans(n_clusters=k, random_state=0, n_init=10)
labels = km.fit_predict(X)
scores[k] = silhouette_score(X, labels)
print(f'k={k} silhouette={scores[k]:.3f}')
best_k = max(scores, key=scores.get)
print(f'Best k: {best_k}')Siluettdiagram för analys av enskilda punkter
Ett siluettdiagram visar siluettkoefficienten för varje enskild punkt, sorterad efter kluster och stapelbredd. Breda och jämna staplar visar att alla punkter är välplacerade. Tunna staplar eller punkter med negativa poäng visar felaktigt tilldelade avvikare. scikit-learns silhouette_samples returnerar poäng för varje punkt som ni kan visualisera på detta sätt.
from sklearn.metrics import silhouette_samples
import numpy as np
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
X, _ = make_blobs(n_samples=100, centers=3, cluster_std=0.6, random_state=0)
km = KMeans(n_clusters=3, random_state=0, n_init=10)
labels = km.fit_predict(X)
samples = silhouette_samples(X, labels)
print('Per-cluster mean silhouettes:')
for c in range(3):
print(f' Cluster {c}: {samples[labels == c].mean():.3f}')Kombinera armbåge och siluett
I praktiken bör ni använda båda metoderna tillsammans. Om armbågen antyder k=4 och siluettpoängen också är högst vid k=4 har ni starka, samstämmiga belägg. När resultaten skiljer sig åt — till exempel armbåge vid k=3 men siluettmaximum vid k=5 — bör ni undersöka siluettdiagrammet för varje kandidatvärde på k och använda domänkunskap för att fatta det slutliga beslutet.
Gap-statistik: ett statistiskt test för k
Gap-statistik jämför den observerade inertian med den förväntade inertian enligt en nollreferensfördelning (data som samplats likformigt i funktionsrymden). Välj det minsta k där gap(k) >= gap(k+1) - stddev. Metoden är statistiskt mer rigorös än armbågsmetoden men beräkningsmässigt kostsam, eftersom den kräver att många slumpmässiga referensdatamängder genereras.
Praktiska riktlinjer för val av k
Börja med domänkunskap — om ni vet att det finns 5 produktkategorier börjar ni med k=5. Använd armbågen som en snabb visuell rimlighetskontroll. Bekräfta med siluettpoängen för objektivitet. Utvärdera resultatet i nästa steg — för affärsanvändning bör ni kontrollera om segmenten går att agera på och tolka. Det numeriskt optimala k är inte alltid den mest användbara affärssegmenteringen.
Armbåge och siluett tillsammans: komplett exempel
Här är en kompakt pipeline som kör båda diagnostikmetoderna sida vid sida och ger er en sammanfattningstabell som hjälper er att välja k effektivt.
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from sklearn.datasets import make_blobs
from sklearn.preprocessing import StandardScaler
X, _ = make_blobs(n_samples=400, centers=5, cluster_std=0.8, random_state=7)
X = StandardScaler().fit_transform(X)
print(f'{'k':>3} {'Inertia':>10} {'Silhouette':>10}')
for k in range(2, 10):
km = KMeans(n_clusters=k, n_init=10, random_state=0)
labels = km.fit_predict(X)
sil = silhouette_score(X, labels)
print(f'{k:>3} {km.inertia_:>10.1f} {sil:>10.3f}')Snabbtest
Testa era kunskaper om metoder för val av k från den här lektionen.
Sammanfattning av lektionen
I den här lektionen lärde ni er att: armbågsmetoden ritar inertia mot k och letar efter böjen där förbättringen avtar, siluettpoängen sträcker sig från -1 till +1 och mäter både sammanhållning och separation, och en kombination av båda metoderna och domänkunskap ger det mest tillförlitliga valet av k. Härnäst utforskar vi DBSCAN — en densitetsbaserad algoritm som hittar kluster med godtycklig form och hanterar brus.
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Välja K: Armbågsmetoden och silhuettpoäng” gratis?
Ja – hela texten till ”Välja K: Armbågsmetoden och silhuettpoäng” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Machine Learning Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Machine Learning Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Välja K: Armbågsmetoden och silhuettpoäng”?
Ni kommer att plotta tröghet mot k (armbågen) och beräkna silhuettkoefficienter för att välja det antal kluster som ger välseparerade och kompakta grupper. Ni övar på Machine Learning Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Machine Learning Academy?
Du behöver inga förkunskaper. Utbildningen i Machine Learning Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Välja K: Armbågsmetoden och silhuettpoäng”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Machine Learning Academy-lektionen?
Ja. Varje Machine Learning Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- K-Means: Centroider, tilldelning och uppdateringssteg
- Välja K: Armbågsmetoden och silhuettpoäng
- DBSCAN: Kärnpunkter, gränspunkter och brus
- Klustring för kundsegmentering: Ett exempel från början till slut