feature: update l1 notes

This commit is contained in:
2026-06-18 14:32:05 +02:00
parent e3399d52f8
commit 12c271281a
+162
View File
@@ -165,3 +165,165 @@ $$ \Sigma = \frac{1}{n}\, X_c^{\top} X_c \qquad \Sigma_{jk} = \mathrm{Cov}(X_j,
2. Kovarianzmatrix $\Sigma$ berechnen
3. Eigenwert-Problem lösen -> Eigenwerte $\lambda_i$ und zugehörige Eigenvektoren $\mathbf{v}_i$
4. Endkoordinatensystem bestimmen: Eigenvektoren nach Eigenwerten absteigend sortieren, die Top-$k$ als neue Achsen wählen und die Daten darauf projizieren ($Z = X_c W$, mit $W$ = Matrix der Top-$k$ Eigenvektoren)
# Clustering Data
- Beispielsweise Segmentierung von Kunden
- Soll möglichst automatisch Cluster von Kundenprofilen erstellen
- Challenge beim Clustern: Kann ein semantischer Wert zu Gruppen hinzugefügt werden?
- Bspw. Diese Gruppe Männer zwischen 30 und 40 Jahren interessiert sich für Fussball
## Types of Clustering
- Hard Clustering
- ein Element gehört genau zu einem cluster
- Mengenpartitionierung
- Methoden: k-Means, k-Mediods
- Soft Clustering
- Ein Element kann zu einem oder mehreren Clustern gehören
- Methode: Gaussian Mixture Models (EM Algorithm)
## Ähnlichkeitsmasse (Distanzmasse)
- Distanzmetrik $D(u, v)$ zwischen zwei Punkten $u$ und $v$
- Euklidische Distanz (L2-Norm): einfache geometrische Distanz
$$ \lVert u - v \rVert_2 = \sqrt{\sum_{k=1}^{d} (u_k - v_k)^2} $$
- Manhattan-Distanz (L1-Norm): komponentenweise summiert, "man kann nicht schräg laufen"
$$ \lVert u - v \rVert_1 = \sum_{k=1}^{d} |u_k - v_k| $$
- Kosinus-Ähnlichkeit: normiertes Skalarprodukt, misst den Winkel zwischen den Feature-Vektoren
$$ \cos\varphi = \frac{u^{\top} v}{\lVert u \rVert_2 \, \lVert v \rVert_2} $$
- Minkowski-Distanz: verallgemeinert L1/L2 über den Parameter $p$ ($p=1$ Manhattan, $p=2$ Euklid, $p=\infty$ Chebyshev)
$$ D(u, v) = \left( \sum_{i=1}^{d} |u_i - v_i|^p \right)^{1/p} $$
- Merke: kleine Distanz = hohe Ähnlichkeit; Distanz $0$ = maximale Ähnlichkeit
# Clustering with K-Means
- Beliebtester Clustering-Algorithmus
- Verwendet die euklidische Distanz
- Annahme: Anzahl Cluster $k$ ist im Voraus bekannt (Nachteil)
- Zwei Phasen
1. Training: Partitionieren der Datenmenge in $k$ Untermengen über das Distanzmass
2. Inference (optional): nachdem die Zentroiden bestimmt sind, neue Datenpunkte dem nächsten Zentrum zuordnen
## Zielfunktion (Objective)
- Ziel: Daten in $k$ Gruppen ähnlicher Varianz aufteilen und dabei die Within-Cluster Sum of Squares (WCSS, auch *Inertia*) minimieren
- Gegeben $n$ $d$-dimensionale Punkte $x_1, \dots, x_n$; partitioniere in disjunkte Mengen $P_1, \dots, P_k$:
$$ \sum_{i=1}^{k} \sum_{x \in P_i} \| x - \mu_i \|^2 \;\to\; \min \quad \text{mit} \quad \bigcup_{i} P_i = \{x_1, \dots, x_n\}, \; P_i \cap P_j = \emptyset \;\; \forall i \neq j $$
- Das ist äquivalent zur Minimierung der Varianz:
$$ \sum_{i=1}^{k} \sum_{x \in P_i} \| x - \mu_i \|^2 = \sum_{i=1}^{k} |P_i| \, \mathrm{Var}(P_i) $$
## Ablauf (Lloyd's Algorithm)
1. Initiale Positionen für $k$ Zentroiden setzen (gute Startwerte → schnellere Konvergenz)
2. Zuordnung (*Centers to Clusters*): Voronoi-Tessellation der Datendomäne, jeden Punkt seinem nächsten Zentroiden zuordnen
3. Update (*Clusters to Centers*): Zentroiden als Mittelwert (Schwerpunkt) aller Punkte im Cluster neu berechnen
4. Schritte 23 wiederholen, bis Konvergenz (keine Änderung der Zuordnung mehr)
- Konvergenz: ein Punkt wechselt das Cluster, wenn er einem anderen Zentrum näher ist; das Update reduziert die Intra-Cluster-Varianz
## Nachteile & Annahmen von k-Means
- NP-hart → k-Means ist heuristisch und kann in einem lokalen statt globalen Optimum landen
- Sensitiv gegenüber Ausreissern (wegen der L2-Distanz)
- Setzt konvexe, isotrope (etwa gleich grosse, runde) Cluster voraus
- $k$ muss vorab bekannt sein
- Inertia ist nicht normiert (skalenabhängig)
- Sensitiv gegenüber der Initialisierung
- zufällig in der Datendomäne, oder
- $k$ zufällig gewählte Datenpunkte, oder
- k-means++: Startzentren möglichst weit auseinander wählen
- Leere Cluster möglich (Zentroid zu weit weg, zieht keine Punkte an) → Workaround: mehrfach mit verschiedenen Startpunkten laufen lassen
## Anzahl Cluster $k$ bestimmen & Qualität messen
- WCSS sinkt monoton mit steigendem $k$ (wird $0$ bei $k = n$) → allein kein Gütemass, da nicht normiert
- Elbow-Methode: WCSS bzw. erklärte Varianz über $k$ plotten und den "Knick" (elbow) wählen
- Erklärte Varianz = Anteil der Between-Cluster-Varianz an der Gesamtvarianz (ideal: 100 %)
- Silhouette-Score: bewertet die Zuordnung pro Punkt über die mittlere Intra-Cluster-Distanz $a_i$ und die mittlere Distanz zum nächsten Cluster $b_i$
- Bereich: $1$ = ideal, $0$ = überlappende Cluster, $-1$ = vermutlich falsch zugeordnet
- Gesamt-Score = Mittelwert der $s_i$ über alle Punkte
$$ s_i = \frac{b_i - a_i}{\max(a_i, b_i)} $$
- (Hartigan-Regel ist im Skript, gilt aber als veraltet → hier weggelassen)
# Clustering with k-Medoids/PAM
- K-Means funktioniert schlecht mit kategorialen Daten und ist anfällig für Ausreisser (L2-Distanz)
- Informell: "K-Medoids verhält sich zu K-Means wie der Median zum Durchschnitt"
- Idee: den Zentroid (Mittelwert) durch einen **Medoid** ersetzen
- Medoid = der am zentralsten gelegene *tatsächliche* Datenpunkt eines Clusters
- Der Medoid kommt also real im Datensatz vor (anders als der berechnete Mittelwert)
- Benötigt ein Distanzmass $D$
- PAM = Partition Around Medoids (konkreter k-Medoids-Algorithmus)
## Medoid (Definition)
- Der Medoid minimiert die Summe der Distanzen zu allen anderen Punkten des Clusters:
$$ \mathbf{x}_m = \arg\min_{\mathbf{y} \in \{x_1, \dots, x_n\}} \sum_{i=1}^{n} D(\mathbf{x}_i, \mathbf{y}) $$
## PAM Algorithmus
1. $k$ Punkte als initiale Medoiden wählen
2. jeden Datenpunkt dem Cluster mit dem nächsten Medoid zuordnen
3. zufällig einen Nicht-Medoid $i$ wählen; $m$ sei der Medoid, dem $i$ aktuell zugeordnet ist
4. Gesamtkosten $J$ eines Tauschs von Medoid $m$ mit $i$ berechnen
5. falls $J < 0$: tauschen ($i$ wird neuer Medoid)
6. zurück zu Schritt 2, bis Konvergenz
# Categorial Values for k-Means/k-Medoids
- Kategoriale Werte tauchen oft in Datasets auf
- Geschlecht, Farben, Binär (True/False)
- K-Means funktioniert hier nicht direkt
- Problem: meist keine Ordnung und keine sinnvolle Arithmetik auf den Werten auch nicht bei Integer-Codierung
- Rot→0, Grün→1, Blau→2, Gelb→3
- Was wäre dann ein Zentroid bei 1.32? Und ist Distanz(Grün, Gelb) $= 2$ wirklich grösser als Distanz(Rot, Grün) $= 1$?
## Workarounds to support Categorial Values
- One-Hot Encoding
- jede Kategorie wird zu einer eigenen 0/1-Spalte
- bläst den Raum auf: aus 1 Farb-Spalte (4 Werte) werden 4 Dimensionen
- Fluch der Dimensionalität: in hohen Dimensionen sind alle Punkte ungefähr gleich weit entfernt
- Distanz Zentrum→Ecke eines Hyperwürfels (Seitenlänge $2r$) wächst mit $r\sqrt{d}$
- Empfehlung: zuerst Dimensionsreduktion (z.B. PCA), dann im Unterraum clustern
# Clustering with k-Modes / k-Prototypes
- k-Modes: ersetzt den Mittelwert durch den **Modus** (häufigster Wert) und nutzt ein Unähnlichkeitsmass statt der euklidischen Distanz
- k-Prototypes: kombiniert k-Modes (kategorial) mit k-Means (numerisch) → für gemischte Attribute
- Unähnlichkeitsmass für zwei Objekte $a, b$ mit $m$ kategorialen Attributen (zählt die Mismatches):
$$ D(\mathbf{a}, \mathbf{b}) = \sum_{i=1}^{m} \delta(a_i, b_i), \qquad \delta(a_i, b_i) = \begin{cases} 1 & a_i \neq b_i \\ 0 & a_i = b_i \end{cases} $$
- Modus $\mathbf{q} = (q_1, \dots, q_m)^{\top}$: minimiert die Summe der Unähnlichkeiten zu allen Objekten
$$ D(X, \mathbf{q}) = \sum_{i=1}^{n} D(\mathbf{x}_i, \mathbf{q}) $$
- $\mathbf{q}$ muss nicht in $X$ liegen und ist nicht zwingend eindeutig; gefunden über die Häufigkeit der Kategorien je Attribut
## kmodes Package (für Übung 2)
- scikit-learn enthält *kein* k-Modes/k-Prototypes → separates Paket `kmodes`
```python
from kmodes.kprototypes import KPrototypes
kproto = KPrototypes(n_clusters=4, init='Cao', verbose=2)
clusters = kproto.fit_predict(X, categorical=[1, 2]) # Indizes der kategorialen Spalten
kproto.cluster_centroids_ # bestimmte Cluster-Zentren
```