# 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 ``` ## 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)