Какие основные типы ошибок возникают в машинном обучении?

Ответ

В машинном обучении ошибку обобщения модели можно декомпозировать на три фундаментальные составляющие. Понимание этого помогает диагностировать проблемы модели.

  1. Смещение (Bias): Это систематическая ошибка, возникающая из-за слишком сильных упрощающих предположений, заложенных в алгоритм. Модель с высоким смещением недостаточно сложна, чтобы выучить паттерны в данных (недообучение).

    • Пример: Попытка аппроксимировать квадратичную зависимость прямой линией (линейная регрессия на нелинейных данных). Модель будет ошибаться постоянно и на тренировочных, и на тестовых данных.
    • Признаки: Низкая точность как на тренировочном, так и на валидационном наборе.
  2. Дисперсия (Variance): Ошибка, вызванная чувствительностью модели к небольшим колебаниям в тренировочном наборе. Модель с высокой дисперсией слишком сложна и "заучивает" тренировочные данные, включая шум (переобучение).

    • Пример: Дерево решений без ограничения глубины. Оно построит сложные правила, идеально разделяющие тренировочные точки, но будет делать много ошибок на новых данных.
    • Признаки: Высокая точность на тренировочном наборе, но значительно более низкая на валидационном.
  3. Неустранимая ошибка (Irreducible Error): Это шум, присущий самим данным. Его невозможно предсказать с помощью любых признаков, которыми мы располагаем. Это теоретический нижний предел ошибки для нашей задачи.

    • Пример: Измерение роста человека с помощью сантиметровой ленты всегда имеет небольшую погрешность. Даже идеальная модель не сможет предсказать рост точнее, чем позволяет эта погрешность измерения.

Компромисс смещения и дисперсии (Bias-Variance Tradeoff): Задача — найти модель со оптимальной сложностью, которая минимизирует общую ошибку, балансируя между смещением и дисперсией.

Иллюстрация на Python с полиномиальной регрессией:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split

# Генерируем нелинейные данные с шумом
np.random.seed(42)
X = np.random.uniform(-3, 3, 100)
y = 0.5 * X**2 + X + 2 + np.random.normal(0, 1, 100)
X = X.reshape(-1, 1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

train_errors, test_errors = [], []
degrees = [1, 2, 10]  # Низкое, оптимальное, высокое смещение

for degree in degrees:
    poly = PolynomialFeatures(degree=degree)
    X_train_poly = poly.fit_transform(X_train)
    X_test_poly = poly.transform(X_test)

    model = LinearRegression()
    model.fit(X_train_poly, y_train)

    train_errors.append(mean_squared_error(y_train, model.predict(X_train_poly)))
    test_errors.append(mean_squared_error(y_test, model.predict(X_test_poly)))

# degree=1 (высокое смещение): обе ошибки высоки.
# degree=2 (оптимально): ошибки низкие и близки.
# degree=10 (высокая дисперсия): ошибка на обучении очень низкая, на тесте — высокая.

Ответ 18+ 🔞

А, слушай, вот это тема, про которую каждый второй дата-сайентист голову ломает, а толком объяснить не может. Ёпта, сейчас разложу по полочкам, как на ладони.

Представь, что ты учишь какого-нибудь распиздая рисовать котиков. Вот три главные беды, из-за которых у него нихуя не получается.

1. Смещение (Bias) — когда модель тупая, как пробка. Это когда ты ему говоришь: «Рисуй только кружочки и палочки, больше ничего нельзя». Он, блядь, так и делает. Даже если кот пушистый и с хвостом крючком — ему похуй, он рисует свой схематичный уебанский круг с ушами-палочками. Модель настолько простая, что она вообще нихуя не улавливает суть данных. Это недообучение в чистом виде. На тренировочных картинках котиков он косячит, на новых — тоже. Доверия ебать ноль к такому художнику. Признаки? Низкая точность везде, и на учебных примерах, и на новых. Сам от себя охуел бы, увидев такое.

2. Дисперсия (Variance) — когда модель слишком умная и нервная. А это обратная хуйня. Ты даёшь ему десять фоток твоего кота Васьки. И этот чувак не просто учится рисовать котов — он, сука, запоминает каждую царапину на полу, тень от вазона и отражение в окне с каждой фотки. Потом ты просишь нарисовать другого кота, а он тебе выдаёт: «Это не кот! У этого усы на 2 миллиметра короче, а на фото №7 у Васьки они были длиннее!». Он заучил не концепцию «кот», а каждый пиксель тренировочных данных вместе с шумом. Это переобучение. Признаки? На тренировочных данных — овердохуища точности, почти 100%. А на новых — пиздец и хуй с горы. Модель бздит от любого нового примера.

3. Неустранимая ошибка — это когда сам мир поехавший. А вот это, ёпта, самое обидное. Допустим, наш художник уже гений, и кот у него идеальный. Но бумага — говно, линяет. Или свет в комнате мигает. Или у самого кота шерсть сегодня торчит не так из-за ветра. Это шум, который никакой моделью не убрать. Даже если бы Бог-алгоритм взялся за задачу, он бы упёрся в этот потолок. Это как пытаться измерить рост человека с точностью до микрона обычной рулеткой — хуй ты чего добьёшься, всегда будет мелкая погрешность.

Компромисс смещения и дисперсии Суть всей этой ебалы в том, чтобы найти золотую середину. Не сделать модель ебанько-тупой, но и не дать ей стать хитрой жопой, которая заучивает мусор. Нужно поймать тот момент, когда она уже умная, но ещё не поехавшая.

Вот, смотри на код, тут всё наглядно. Берём данные, которые по жизни — парабола (квадратичная зависимость).

# ... код остаётся нетронутым, как и договаривались ...

Смотри, что тут происходит:

  • degree=1 (Высокое смещение): Заставляем модель быть тупой — рисовать только прямую линию. Она, естественно, хуй правильно аппроксимирует параболу. Ошибка и на обучении, и на тесте — огромная. Ядрёна вошь!
  • degree=2 (Оптимальная сложность): А вот тут мы дали ей нужную степень свободы — рисовать квадратичную кривую. И она, ёперный театр, идеально ложится на истинную зависимость! Ошибки низкие и почти одинаковые. Красота.
  • degree=10 (Высокая дисперсия): А тут мы создали гения-шизофреника. Модель может рисовать кривую любой, блядь, замудрённости. Она так старается пройти через каждую тренировочную точку (включая случайный шум), что её график начинает дергаться, как мартышлюшка на энергетиках. На обучающих данных ошибка почти ноль — она все точки впендюрила в себя. Но на тесте — полный писец, потому что на новые точки она смотрит как баран на новые ворота. Волнение ебать — кажется, что всё хорошо, а на деле доверия ебать ноль.

Вот и весь сказ. Либо модель пизда рулю из-за простоты, либо пиздопроебибна из-за сложности. Задача — поймать баланс, а не наломать дров.