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

16 KiB
Raw Permalink Blame History

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