Как меняются bias и variance при увеличении параметра k в k-NN модели?

«Как меняются bias и variance при увеличении параметра k в k-NN модели?» — вопрос из категории Классическое ML, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В алгоритме k ближайших соседей (k-NN) параметр k напрямую управляет сложностью модели и балансом между смещением (bias) и разбросом (variance).

Зависимость от k:

  • Малое k (например, k=1):
    • Низкий Bias: Модель очень гибкая, точно следует за обучающими данными, включая шум.
    • Высокая Variance: Решение сильно зависит от каждой конкретной точки, граница решений очень извилистая. Высокий риск переобучения (overfitting).
  • Большое k (например, k=50):
    • Высокий Bias: Модель становится жёсткой. Предсказание — это усреднение по многим соседям, что сглаживает границу решений и игнорирует локальные особенности.
    • Низкая Variance: Решение более стабильно и менее чувствительно к отдельным выбросам. Риск недообучения (underfitting).

Визуализация и пример кода:

import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split

X, y = make_moons(noise=0.3, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

# Сравнение моделей с разным k
for k in [1, 10, 50]:
    model = KNeighborsClassifier(n_neighbors=k)
    model.fit(X_train, y_train)
    train_score = model.score(X_train, y_train)
    test_score = model.score(X_test, y_test)
    print(f"k={k}: Train Acc={train_score:.3f}, Test Acc={test_score:.3f}")
# Результат: с ростом k accuracy на обучении падает (bias растёт),
# а на тесте сначала растёт (variance падает), потом может упасть (bias слишком велик).

Правило: Оптимальное k находят через кросс-валидацию, оно балансирует между underfitting и overfitting.