Programming lesson
K-nächste-Nachbarn und Bias-Varianz: Ein umfassender Leitfaden für Stat 435
Lerne die Grundlagen des k-nächste-Nachbarn-Algorithmus, Bias-Varianz-Zerlegung und praktische Anwendungen in R – perfekt für deine Stat 435 Hausaufgaben.
Einführung in die k-nächste-Nachbarn-Klassifikation
Der k-nächste-Nachbarn-Algorithmus (k-NN) ist ein intuitiver, nichtparametrischer Ansatz für Klassifikation und Regression. In diesem Tutorial lernst du, wie du k-NN in R implementierst, die Bias-Varianz-Zerlegung verstehst und die Bayes-Fehlerrate bestimmst – alles anhand von Beispielen, die direkt aus den Stat 435 Hausaufgaben stammen.
Was ist k-NN?
Bei k-NN wird eine neue Beobachtung basierend auf der Mehrheitsentscheidung ihrer k nächsten Nachbarn im Merkmalsraum klassifiziert. Die Wahl von k beeinflusst die Flexibilität des Modells: Ein kleines k führt zu einer flexiblen, aber möglicherweise überangepassten Entscheidungsgrenze, während ein großes k zu einer glatteren Grenze mit höherer Verzerrung führt.
Datengenerierung für zwei Klassen
Betrachten wir ein Szenario mit zwei Klassen (rot und blau), 25 Beobachtungen pro Klasse und p=2 Merkmalen. Die rote Klasse folgt einer multivariaten Normalverteilung mit Mittelwert (0,0) und Einheitsmatrix, die blaue Klasse mit Mittelwert (1.5, 1.5). In R generierst du die Trainingsdaten mit rnorm():
set.seed(123)
library(MASS)
# Trainingsdaten generieren
n_per_class <- 25
mu_red <- c(0, 0)
mu_blue <- c(1.5, 1.5)
train_red <- mvrnorm(n_per_class, mu = mu_red, Sigma = diag(2))
train_blue <- mvrnorm(n_per_class, mu = mu_blue, Sigma = diag(2))
train_data <- rbind(train_red, train_blue)
train_labels <- factor(rep(c("red", "blue"), each = n_per_class))
# Plot
plot(train_data, col = train_labels, pch = 19, xlab = "Feature 1", ylab = "Feature 2", main = "Trainingsdaten")Testdaten erzeugen und visualisieren
Analog generierst du 25 Testbeobachtungen pro Klasse. Für eine gemeinsame Darstellung verwendest du unterschiedliche Symbole (Kreise für Training, Quadrate für Test) und eine Legende:
test_red <- mvrnorm(n_per_class, mu = mu_red, Sigma = diag(2))
test_blue <- mvrnorm(n_per_class, mu = mu_blue, Sigma = diag(2))
test_data <- rbind(test_red, test_blue)
test_labels <- factor(rep(c("red", "blue"), each = n_per_class))
plot(train_data, col = train_labels, pch = 1, xlab = "Feature 1", ylab = "Feature 2", main = "Trainings- und Testdaten")
points(test_data, col = test_labels, pch = 15)
legend("topright", legend = c("Training", "Test"), pch = c(1, 15))k-NN Modell anpassen und Fehlerraten analysieren
Mit der knn()-Funktion aus dem class-Paket passt du das Modell für k von 1 bis 20 an und berechnest Trainings- und Testfehler. Die Ergebnisse visualisierst du mit 1/k auf der x-Achse:
library(class)
k_values <- 1:20
train_error <- numeric(length(k_values))
test_error <- numeric(length(k_values))
for (i in seq_along(k_values)) {
k <- k_values[i]
knn_train <- knn(train_data, train_data, train_labels, k = k)
knn_test <- knn(train_data, test_data, train_labels, k = k)
train_error[i] <- mean(knn_train != train_labels)
test_error[i] <- mean(knn_test != test_labels)
}
plot(1/k_values, train_error, type = "b", col = "blue", xlab = "1/k", ylab = "Fehlerrate", ylim = c(0, 0.5))
lines(1/k_values, test_error, type = "b", col = "red")
legend("topright", legend = c("Trainingsfehler", "Testfehler"), col = c("blue", "red"), lty = 1)Beachte: Mit zunehmendem k (kleineres 1/k) steigt der Trainingsfehler (höhere Verzerrung), während der Testfehler typischerweise ein Minimum erreicht und dann wieder ansteigt (Überanpassung vs. Unteranpassung).
Optimales k und Bayes-Fehlerrate
Das k mit dem geringsten Testfehler wählst du aus und visualisierst die Vorhersagen auf den Testdaten. Die Bayes-Fehlerrate ist der theoretisch minimale Fehler, der durch die wahre Verteilung gegeben ist. Bei überlappenden Normalverteilungen lässt sie sich mit der Dichte der optimalen Entscheidungsgrenze berechnen. In diesem symmetrischen Fall ist die Bayes-Grenze die Gerade, die die beiden Mittelwerte verbindet; der Fehler ergibt sich aus der Fläche unter der Normalverteilung jenseits dieser Grenze.
Bias-Varianz-Zerlegung verstehen
Die Bias-Varianz-Zerlegung erklärt den Trade-off zwischen Modellflexibilität und Fehler. Mit zunehmender Flexibilität (kleines k) sinkt der Bias, aber die Varianz steigt – der Testfehler hat eine U-Form. Typische Kurven:
- Bias²: Fällt mit zunehmender Flexibilität.
- Varianz: Steigt mit zunehmender Flexibilität.
- Trainingsfehler: Fällt monoton, da flexiblere Modelle die Daten besser anpassen.
- Testfehler: Fällt zuerst, steigt dann (U-Form).
- Bayes-Fehler: Konstante, irreduzible Untergrenze.
Diese Konzepte sind zentral für die Statistik-Methoden und helfen dir, Überanpassung zu vermeiden – ein häufiges Problem in maschinellem Lernen.
Praktische Übung mit dem Boston-Datensatz
Der Boston-Datensatz aus dem MASS-Paket enthält 506 Zeilen und 14 Spalten. Er umfasst sozioökonomische Daten zu Vororten von Boston. Analysiere Zusammenhänge, z.B. zwischen Kriminalitätsrate und anderen Variablen. Verwende Streudiagramme und Korrelationen, um Muster zu erkennen – ähnlich wie bei der Analyse von Datenwissenschaft in aktuellen Anwendungen.
Fazit
Dieses Tutorial hat dir die Grundlagen von k-NN, Bias-Varianz und praktischer Umsetzung in R vermittelt. Mit diesen Kenntnissen kannst du die Stat 435 Hausaufgaben erfolgreich lösen und ein tieferes Verständnis für statistische Modellierung entwickeln. Probiere die Beispiele selbst aus und variiere die Parameter – so festigst du dein Wissen.