Декомпозиция алгоритмов машинного обучения по дисперсии смещения на практическом примере в Python

Смещение и дисперсия — два ключевых понятия в оценке модели для машинного обучения, поскольку они тесно связаны с производительностью модели на невидимых данных. И смещение, и дисперсия являются типами ошибок ошибки прогнозирования. Третий тип ошибки — это неустранимая ошибка, которая является неотъемлемой ошибкой в ​​данных, которую нельзя уменьшить независимо от того, какой алгоритм используется.

Одной из основных трудностей, с которой сталкиваются специалисты по данным при внедрении новой модели, является так называемая дилемма смещения-дисперсии или проблема смещения-дисперсии. Это связано с противоречием минимизации обоих источников ошибок в алгоритмах обучения с учителем, которые можно оценить с помощью метода декомпозиции смещения и дисперсии.

В этой статье мы рассмотрим эти концепции, чтобы закончить основной вклад этой статьи, который представляет собой объяснение декомпозиции смещения-дисперсии вместе с практическим примером на Python для всех, кто заинтересован в реализации декомпозиции для своих моделей.

Предвзятость и дисперсия

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

Дисперсия определяется как чувствительность к колебаниям обучающей выборки. Другими словами, это относится к тому, насколько сильно меняются результаты при изменении обучающих данных. Высокая дисперсия предполагает большие изменения в оценке целевой функции при изменении обучающего набора данных (переобучение).

Оба термина, выраженные в математике, соответствуют следующим формулам:

Оба члена могут быть легко получены из формулы среднеквадратичной ошибки (MSE):

Пример того, как интерпретировать эти формулы, показан в конце статьи.

Вот график с четырьмя различными сценариями для высокого-низкого смещения и высокого-низкого отклонения. Каждое попадание представляет собой индивидуальную реализацию нашей модели с учетом случайной изменчивости обучающих данных, которые мы собираем [1]. Центр цели означает, что модель точно предсказывает значения.

Компромисс смещения и дисперсии

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

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

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

Разложение смещения-дисперсии

Разложение смещения-дисперсии является полезным методом для понимания производительности алгоритма.

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

Чтобы реализовать это, для подвыборки данных используется метод начальная загрузка (название бэггинг происходит от загрузка + агрегация ). Этот метод состоит в выполнении случайной выборки с заменой данных, что означает, что подмножества обучающих данных будут перекрываться, поскольку мы не разделяем данные, а передискретизируем их.

Таким образом, многократно запуская метод самозагрузки и получая точность модели для тестового набора, мы можем получить среднее смещение и дисперсию для всех раундов, для которых мы выполнили итерацию.

Вот часть кода задачи регрессии, которая обобщает основную логику метода. Весь код получен из библиотеки MLxtend.

Input:
- X_train
- y_train
- X_test
- y_test
- num_rounds: Number of iterations
Output:
- avg_expected_loss: Average MSE loss for all the rounds
- avg_bias: Average bias for all the rounds
- avg_var: Average variance for all the rounds
(avg_expected_loss = avg_bias^2 + avg_var)
(1) Iterate for num_rounds, in each implementing bootstrapping, training the model and getting the predictions
for i in range(num_rounds):
- X_boot, y_boot = _draw_bootstrap_sample(rng, X_train, y_train)
- pred = estimator.fit(X_boot, y_boot).predict(X_test)
- all_pred[i] = pred
(2) Obtain the average MSE error
avg_expected_loss = np.apply_along_axis(lambda x: ((x — y_test)**2).mean(), axis=1, arr=all_pred).mean()
(3) Obtain the average bias and variance
main_predictions = np.mean(all_pred, axis=0)
avg_bias = np.sum((main_predictions — y_test)**2) / y_test.size
avg_var = np.sum((main_predictions — all_pred)**2) / all_pred.size

Наконец, вот практический пример на Python, который показывает, как реализовать декомпозицию смещения-дисперсии.

В качестве примера мы использовали свободно доступный набор данных о жилье в Бостоне [2], задачей которого является прогнозирование цен на жилье с помощью регрессора. Сначала мы разделили данные на обучающий набор и тестовый набор.

Пример 1. Дерево решений

Чтобы проанализировать декомпозицию смещения-дисперсии, мы сначала реализовали регрессор дерева решений и прогнали его через функцию bias_variance_decomp, псевдокод которой показан выше.

Average expected loss: 32.419
Average bias: 14.197
Average variance: 18.222

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

Average expected loss: 18.693
Average bias: 15.292
Average variance: 3.402

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

Пример 2. Нейронная сеть

Мы также оценили производительность модели на основе нейронной сети, реализованной в Keras, поскольку, насколько нам известно, эта функция не может быть реализована в PyTorch.

Average expected loss: 25.470
Average bias: 19.927
Average variance: 5.543

По сравнению с первой моделью мы увеличили сложность модели за счет увеличения количества нейронов для каждого слоя.

Average expected loss: 23.458
Average bias: 17.608
Average variance: 5.850

Как и ожидалось, систематическая ошибка уменьшилась за счет увеличения дисперсии модели.

Способы управления предвзятостью и дисперсией

Есть несколько советов, как управлять ошибками смещения и дисперсии.

Прежде всего, не зацикливайтесь только на минимизации смещения или, другими словами, не забывайте о дисперсии. Оба они одинаково важны для создания надежной модели.

Затем смещение модели может быть уменьшено за счет увеличения сложности путем (1) реализации ансамблевого метода ускорения или (2) добавления дополнительных функций или разработки функций.

Вместо этого дисперсию можно уменьшить, (1) внедрив ансамблевый метод бэггинга или (2) ограничив или уменьшив оценочные коэффициенты путем регуляризации.

Для получения более подробной информации о том, как управлять смещением и дисперсией с помощью ансамблевых методов, я предлагаю прочитать статью Введение в ансамблевые методы в машинном обучении.

Подробное объяснение того, как интерпретировать смещение и дисперсию

Если бы у нас было следующее распределение,

ожидаемое значение и дисперсия рассчитываются следующим образом:

  • Ожидаемые значения

  • Дисперсия

Если вам понравился этот пост, рассмотрите возможность подписаться. Вы получите доступ ко всему моему контенту и ко всем остальным статьям на Medium от замечательных авторов!

Рекомендации

[1] Скотт Фортманн-Роу, Понимание компромисса смещения и дисперсии

[2] Харрисон, Д. и Рубинфельд, Д.Л. «Гедонистические цены и спрос на чистый воздух», J. Environ. Экономика и менеджмент, том 5, 81–102, 1978 г.

[3] The Machine Learners, Entiende de una vez qué es el Tradeoff Bias-Variance

[4] GitHub, Функцияbias_variance_decomp.py

[5] Stack Exchange, Что означает 𝐸(𝑋) в буквальном смысле?

[6] Medium, Объяснение компромисса смещения и дисперсии

[7] Мастерство машинного обучения, Нежное введение в компромисс между смещением и дисперсией в машинном обучении.

[8] GitHub, Смещение ошибки машинного обучения и неустранимая ошибка с python

[9] GitHub, Разложение смещения-дисперсии для классификации и регрессионных потерь

[10] Блог Genius, Что такое компромисс смещения и дисперсии?