This repository has been archived on 2026-06-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
cas-pml/NSL/notizen/L1_Notizen.md
T

339 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 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
```
## Praxis-Notizen aus Übung 2 (Stock-Daten)
- Skalierung nötig: Dividend/PE/Cap auf sehr verschiedenen Skalen → sonst dominiert Cap die Distanz komplett. RobustScaler (Median/IQR) statt StandardScaler wegen starker Ausreisser in PE/Cap
- `categorical_idx` bezieht sich auf das Feature-Array `X` (nach Entfernen der ID-Spalten Stock/Symbol), nicht auf das originale `df`
- gamma fixieren! `cost_` ist nur über verschiedene $k$ vergleichbar, wenn `gamma` fest vorgegeben ist — sonst schätzt kmodes es pro Fit neu → cost-Kurve wird nicht-monoton
- `init="Cao"` kann bei grossem $k$ abbrechen ("could not initialize") → kleineres $k$ oder `init="Huang"`
- Ausreisser-Empfindlichkeit (live gesehen): die 3 PE-Extremwerte bilden eigene Mini-Cluster (Grössen 3/12/79), ~95 % aller Aktien landen in einem Topf → k-Prototypes clustert hier primär nach Ausreissern statt nach inhaltlicher Struktur
- Interpretation: numerische Zentren mit `scaler.inverse_transform` in Originaleinheiten zurückrechnen; kategoriales Zentrum = Modus (häufigster Sektor)