feature: update l1 notes
This commit is contained in:
@@ -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 2–3 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
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user