Assignment Chef icon Assignment Chef
All German tutorials

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.

k-nächste-Nachbarn Stat 435 Hausaufgaben Bias-Varianz-Zerlegung Bayes-Fehlerrate k-NN R Implementierung Klassifikation mit k-NN Überanpassung vermeiden statistische Modellierung maschinelles Lernen Grundlagen Datenwissenschaft Tutorial R Programmierung Statistik Trainings- und Testfehler Boston Datensatz Analyse nichtparametrische Methoden Entscheidungsgrenze k-NN

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.