Hoppa till innehållet
AI-grafen
DAI-utvecklareLaboration· ca 45 min· sandlåda på servern

Labb: k-means från grunden

Implementera k-means (tilldela, uppdatera, upprepa), visa att tröghetsmåttet aldrig ökar, och hitta kluster i syntetisk data.

Teori

Upprepa: tilldela varje punkt till närmaste centroid; flytta varje centroid till medelvärdet av sina punkter. Trögheten (summa kvadratavstånd) minskar monotont.

Deluppgifter

  1. assign — assign(X, C) → index till närmaste centroid per rad.
  2. update — update(X, labels, k) → nya centroider (tomt kluster behåller gamla via NaN-hantering: använd X-medel).
  3. kmeans — kmeans(X, k, steps, seed) → (C, labels, inertia_history).

Godkänt när: inertia <= 250

Startkoden

körs i en isolerad sandlåda på servern
import numpy as np


def assign(X, C):
    # TODO: avstånd (n, k) → argmin per rad
    ...


def update(X, labels, k):
    # TODO: medelvärde per kluster; tomt kluster → X.mean(axis=0)
    ...


def inertia(X, C, labels):
    return float(((X - C[labels]) ** 2).sum())


def kmeans(X, k=3, steps=20, seed=0):
    rng = np.random.default_rng(seed)
    C = X[rng.choice(len(X), k, replace=False)]
    hist = []
    for _ in range(steps):
        # TODO: assign → hist.append(inertia) → update
        ...
    return C, assign(X, C), hist

Du skriver koden, tester du inte ser avgör om den håller. Skapa ett gratis konto för att köra labben.

Prova diagnosenSkapa konto gratis

Förväntade resultat

Trögheten minskar monotont; på tre tydliga blobbar hittas rätt kluster (tröghet < 250).

Vanliga fel

  • Byter axel i avståndsberäkningen.
  • Tomt kluster ger NaN-centroid.
  • Initierar centroider utanför datan.