330 lines
15 KiB
Markdown
330 lines
15 KiB
Markdown
# Notizen NSL Lektion 1
|
||
|
||
> Thema: Unsupervised Learning
|
||
> Datum: 18.06.2026
|
||
> Dozentin: Matthias Dehmer
|
||
|
||
# Recap
|
||
|
||
## Supervised Learning
|
||
|
||
- Input: Arbeitet auf Daten (Feature Vektoren) mit Labels
|
||
- Output: Modell für Prediction
|
||
- Regression:
|
||
- Daten $X$ (Features) gegeben -> man will $Y$ (Zielgrösse) vorhersagen
|
||
- Gesucht ist eine Funktion $f$ mit $\hat{y} = f(x)$ für eine Vorhersage
|
||
- Klassifikation
|
||
- Binär
|
||
- Multiclass
|
||
- Applications
|
||
- Spam Filtering
|
||
- Image Classification
|
||
- Gesture Recognition
|
||
- Fraud Detection
|
||
|
||
## Unsupervised Learning
|
||
|
||
- Input: Arbeitet auf Daten (Feature Vektoren) ohne Labels
|
||
- Output: Model discovering underlying data structure of the data
|
||
- Methoden
|
||
- Clustering
|
||
- Dimension Reduction
|
||
- Association Rules
|
||
- Anwendungen
|
||
- Exploratory Data Analysis
|
||
- Outlier Detection
|
||
- Data Compression
|
||
- Denoising
|
||
|
||
## Reinforcement Learning
|
||
|
||
- Input: Current observed State from Environment and reward score
|
||
- Output: Agent chooses next action
|
||
- Methoden:
|
||
- Control
|
||
- Q-Learning
|
||
- Applications
|
||
- Games (Chess, Go)
|
||
|
||
## Recap: Supervised Learning
|
||
|
||
- Viele Machine Learning Probleme lassen sich in einfache Optimierungsprobleme überführen
|
||
- Fehlerquadratsumme (Methode der kleinsten Quadrate)
|
||
|
||
## Recap: Lineare Regression
|
||
|
||
- Problem: Wir wollen eine gute Approximation der Daten durch eine Gerade (Linearitätsforderung)
|
||
- Vorgehen: Gerade in die Punktwolke legen und Parameter solange anpassen bis Fehler (Epsilon) minimal sind
|
||
- Wobei Epsilon: $\epsilon_i = y_i - \hat{y}_i$
|
||
- Wir suchen eine Gerade, mit der Bedingung, dass die quadratische Summe aller Epsilon minimal wird
|
||
- $\min \sum_{i=1}^{n} \epsilon_i^2 = \min \sum_{i=1}^{n} (y_i - \hat{y}_i)^2$
|
||
- Zur Analyse immer einen Scatterplot machen
|
||
- Dabei sieht man von Auge bereits ob eine Linearität vorhanden ist
|
||
|
||
# Unsupervised Learning
|
||
|
||
- Keine Labels
|
||
- Es gibt keine Outcome Variable
|
||
- Wie kann man sich das vorstellen
|
||
- Data is generated by some unknown process
|
||
- Unsupervised learning finds patterns in the data
|
||
- Methoden
|
||
- Clustering (k-Means, Hierarchical, DBSCAN)
|
||
- Density Estimation: Gaussian Mixture Models
|
||
- Dimensionality Reduction
|
||
- Neural Networks
|
||
- Autoencoder
|
||
- Generative Adversarial Models
|
||
- Restricted Boltzman Machines
|
||
|
||
# Clustering
|
||
|
||
- Clustering ist der Prozess der eine Gruppe in Untergruppen aufteilt
|
||
- Elemente in Untergruppen sind sich ähnlich
|
||
- Schwierig ist es ein Ähnlichkeitsmass (measure) zu finden
|
||
- Die Anzahl der Cluster hängt von der Anwendung ab
|
||
- intra-cluster measure -> tightness (Homogenität) of the cluster
|
||
- inter-cluster measure -> Daten sollen so gewählt werden, dass sie sich nicht überlappen
|
||
- Hauptproblem des Clusterings
|
||
- Wir haben einen Datensatz D den wir clustern wollen
|
||
- D enthält Altersangaben
|
||
- Wir schicken D durch einen Clusteringalgorithmus
|
||
- Wir erhalten C1-3
|
||
- C1: 20-30
|
||
- C2: 40-50
|
||
- C3: 60-80
|
||
- K-Means braucht eine Angabe wieviele Cluster zu erzeugen sind
|
||
- Wieviele Cluster sind denn aber sinnvoll?
|
||
- Zwei wesentliche Forderungen beim Clustern
|
||
1. Cluster sollen homogen sein (gleich verteilte Abstände innerhalb des Clusters)
|
||
2. Cluster sollen heterogen getrennt sein (nicht überlappen)
|
||
- Wir sehen: Die Anzahl der Cluster ist nicht eindeutig
|
||
- C1,C2: Schreibweise $|C| = 2$ "Die Grösse der Cluster C ist 2"
|
||
- Wie messen wir die Homogenität in folgendem Fall?
|
||
- c1 = {2,4,6}
|
||
- c2 = {2,15,80}
|
||
- Man könnte sich die Abstände zum Centroiden anschauen
|
||
- Hom(C1) > Hom(C2)
|
||
|
||
## Anwendung von Clustering
|
||
|
||
- Ähnlichkeit von Kunden, Krankheiten, Produkte
|
||
- Betrugserkennung
|
||
- Bspw. Intrusion Detection in Netzwerken
|
||
- Vergleich session duration zu transmitted bytes
|
||
- ssh -> lange Session Zeit aber nicht viel Daten
|
||
- web traffic -> kurze Session Zeit aber viele Daten
|
||
- Alle Verbindungen, die nicht in diese Cluster passen, sind "verdächtig"
|
||
|
||
# Dimensionsreduktion von Datensets
|
||
|
||
- Warum soll man Dimensionen reduzieren?
|
||
- Man fischt sich diejenigen Dimensionen heraus, welche für die gewünschte Information wichtig sind
|
||
- Alle ohne nützliche Information werden eliminiert (Projektion der gewünschten Dimension)
|
||
- Eine Art wie man Dimensionen reduzieren kann, ist PCA
|
||
- Principal Component Analysis
|
||
- Vereinfacht komplexe Datensets und behält dabei die wichtigsten Strukturen
|
||
- Wie funktioniert eine Dimensionsreduktion dim1000 zu dim2 mit PCA?
|
||
1. PC1: Man legt eine Achse in die Richtung wo die Varianz maximal ist
|
||
2. PC2: Richtung der maximalen *verbleibenden* Varianz, die orthogonal zu PC1 steht
|
||
- Bei einer (symmetrischen) Kovarianzmatrix sind die Eigenvektoren ohnehin paarweise orthogonal
|
||
- Allgemein: PC$_k$ = Eigenvektor zum $k$-grössten Eigenwert der Kovarianzmatrix
|
||
|
||
## Begriffe in der Dimensionsreduktion
|
||
|
||
- Varianz
|
||
- Streuung um den Mittelwert
|
||
- Population vs. Stichprobe (Bessel-Korrektur mit $n-1$):
|
||
|
||
$$ \sigma^2 = \frac{1}{n}\sum_{i=1}^{n}(x_i - \bar{x})^2 \qquad s^2 = \frac{1}{n-1}\sum_{i=1}^{n}(x_i - \bar{x})^2 $$
|
||
|
||
- Kovarianz
|
||
- Mass für das *gemeinsame* Streuen zweier Variablen (steigen sie zusammen oder gegenläufig?)
|
||
- Hinweis: Kovarianz ist *nicht* die Steigung — die Regressionssteigung ist $\beta = \mathrm{Cov}(X,Y)/\mathrm{Var}(X)$
|
||
- Ist nicht begrenzt im Gegensatz zur Korrelation ($\rho = \mathrm{Cov}(X,Y)/(\sigma_X \sigma_Y) \in [-1, 1]$)
|
||
|
||
$$ \mathrm{Cov}(X,Y) = \frac{1}{n}\sum_{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y}) $$
|
||
|
||
- Kovarianz-Matrix
|
||
- Für zentrierte Datenmatrix $X_c \in \mathbb{R}^{n \times d}$ (Mittelwert pro Spalte abgezogen)
|
||
- $d \times d$, symmetrisch, positiv semidefinit
|
||
- Diagonale = Varianzen, off-diagonal = Kovarianzen
|
||
|
||
$$ \Sigma = \frac{1}{n}\, X_c^{\top} X_c \qquad \Sigma_{jk} = \mathrm{Cov}(X_j, X_k) $$
|
||
|
||
- Eigenwert-Problem (Lambda)
|
||
- Korrektur: die *Eigenwerte* $\lambda$ sind die Nullstellen des charakteristischen Polynoms (nicht die Eigenvektoren)
|
||
- Definition: $A\mathbf{v} = \lambda \mathbf{v} \iff (A - \lambda I)\mathbf{v} = \mathbf{0}$
|
||
- Nicht-triviale Lösung existiert nur, wenn $\det(A - \lambda I) = 0$ (charakteristisches Polynom)
|
||
- Vorgehen: 1) $\lambda$ aus dem char. Polynom bestimmen, 2) je $\lambda$ den Eigenvektor $\mathbf{v}$ aus $(A - \lambda I)\mathbf{v} = \mathbf{0}$ lösen
|
||
- In der PCA: Eigenwert $\lambda_i$ = Varianz entlang PC$_i$; Gesamtvarianz $= \mathrm{tr}(\Sigma) = \sum_i \lambda_i$; erklärter Varianzanteil $= \lambda_i / \sum_j \lambda_j$
|
||
|
||
## PCA Vorgehen
|
||
|
||
1. Daten zentrieren (Mittelwert pro Feature abziehen); bei unterschiedlichen Skalen zusätzlich standardisieren (auf Einheitsvarianz)
|
||
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
|
||
```
|