K-Means-laboratorium

Ikke-superviseret læring i 2D

← Til værktøjerne

Laboratorium · Udforsk · Justér · Forklar

Find grupper uden facit

K-Means er en algoritme, der leder efter naturlige grupper i data. Den får ikke at vide, hvilke punkter der hører sammen. I stedet gætter den på nogle midtpunkter, tildeler hvert punkt til det nærmeste centrum og flytter centrene igen og igen, indtil systemet falder til ro.

Din missionSe algoritmen tænke i 2D. Stop efter hvert trin, flyt på parametrene, og brug dine observationer til at forklare, hvorfor resultatet ændrer sig.
1

Vælg centroids

Algoritmen placerer K foreløbige midtpunkter i datasættet.

2

Tildel punkter

Hvert datapunkt får farven fra det centroid, det ligger nærmest.

3

Flyt og gentag

Centroidet flyttes til gennemsnittet af sin klynge. Så begynder en ny runde.

Case A · Kundesegmentering

Årlig indkomst · Forbrugsscore
Startpunkter er klarBlå ringe = centroids
Iteration
0
Klynger
3
Ændrede punkter
Inerti

Trin 1 · Centroiderne er valgt

De blå ringe er algoritmens foreløbige gæt på klyngernes midtpunkter. Den ved endnu ikke, hvilke datapunkter der hører sammen.

Kodeværksted: K-Means i Python

Redigér skabelonen, download den, og sammenlign Python-koden med det, du ser i 2D-laboratoriet.

k_means_2d.py
Python-skabelonen er klar.

Kør koden lokalt med python k_means_2d.py. Installér først pip install numpy matplotlib scikit-learn. Prøv at ændre ANTAL_KLYNGER, før du kører igen.

algoritmen.py
for gentagelse in range(100):
    # 1. Hvert punkt får nærmeste centroid.
    etiketter = tildel_til_nærmeste(X, centroider)

    # 2. Hver centroid flyttes til sin klynges gennemsnit.
    nye_centroider = beregn_gennemsnit(X, etiketter)

    # 3. Stop, når centroiderne næsten ikke flytter sig.
    if næsten_ens(nye_centroider, centroider):
        break
    centroider = nye_centroider

Biblioteket scikit-learn udfører netop disse trin for dig. Den interaktive graf gør de skjulte trin synlige.

Forslag til kodeeksperimenter

Skift init="random" til init="k-means++". Hvad betyder det for startpunkterne?

Lav en for k in range(2, 11)-løkke, gem model.inertia_, og tegn din egen albuekurve.

Prøv en højere cluster_std. Hvornår bliver det svært at forsvare et bestemt K?

Laboratorie-opgaver

Skriv dine observationer ned – ikke kun dit resultat.

Opgave 1 · K er et valg

Prøv at ændre K fra 3 til 10. Hvad sker der med klyngerne? Ser du, at én naturlig gruppe bliver splittet i flere mindre grupper – en slags overfitting?

Opgave 2 · Find albuen

Vis albuekurven for K fra 2 til 10. Hvor ser du et tydeligt knæk? Kan du argumentere for et godt K uden at kende facit?

Opgave 3 · Starten betyder noget

Tryk “Placér startpunkter”, og klik K steder på grafen. Placér dem først tæt sammen og derefter spredt. Påvirker starten slutresultatet?