Оценка отклонения регрессии для каждого входа

Недавно я работал над двумя задачами регрессии, в которых было полезно предсказать достоверность оценки, а также ожидаемое значение для каждого отдельного ввода. Концептуально это просто, но я нашел несколько окончательных ответов и готовых моделей, поэтому поделюсь некоторыми мыслями и экспериментами. Поскольку оценка «достоверности» четко не определена, я расскажу об оценке параметров нормального (гауссовского) распределения: среднего значения и стандартного отклонения.

Мотивация

Есть несколько причин, по которым мы хотели бы иметь оценку отклонения регрессии:

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

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

Предположения о входном пространстве

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

1. Переменная плотность обучающего набора.

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

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

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

2. Скрытые причины и переменный шум

Часто наши функции ввода не полностью описывают домен. Например, предположим, что мы прогнозируем простую функцию f (x, x) = x ₀ + 0,1 * x ₀ * x ₁, но у нас есть только x ₀ в качестве входной функции.

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

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

Формальная постановка проблемы

Предположим, что набор данных состоит из N обучающих пар, каждая из которых имеет d -мерный вектор входных характеристик xᵢ, i ∈ {0, N - 1}, xᵢ ∈ ℝᵈ и значение, которое мы хотим предсказать yᵢ ∈ ℝ. Наша регрессионная модель - это функция y`ᵢ = f (xᵢ) . Прогнозы y`ᵢ являются несовершенными из-за ограничений данных и моделирования, и мы хотим переформулировать проблему в предсказании нормального распределения N (μᵢ, σ ² ᵢ) со средним значением μᵢ = y`ᵢ = f (xᵢ) и стандартным отклонением σ ² = g (xᵢ) .

Эта формулировка имеет четко определенную метрику ошибки. Мы можем вычислить плотность распределения N (μᵢ, σ ² ᵢ) в точке yᵢ: p (yᵢ | μᵢ , σ ² ᵢ) и увеличьте его. Оптимальное решение будет моделировать g (x) для прогнозирования более высоких отклонений в регионах, где сложнее точно предсказать цель и, следовательно, f (x) в среднем дальше от известная правда y.

Байесовская линейная регрессия

Заявленная формулировка оценки нормального распределения целевых значений вместо одной точки напоминает байесовскую линейную регрессию. Однако BLR моделирует N (μᵢ, σ ² ). Обратите внимание, что стандартное отклонение моделируется не для каждой выборки, а как единое значение для всей входной области.

Алгоритмы

Есть много способов подойти к этому. Есть модели, которые делают это из коробки (гауссовский процесс), некоторые можно легко адаптировать (ансамбли, окрестности), и я предлагаю два способа моделирования σ ² напрямую. Ниже приводится описание этих подходов. Я уверен, что могут быть и другие подходы. Не стесняйтесь комментировать.

Моделирование σ² как задачи регрессии

Формальное определение подразумевает, что мы могли бы попытаться смоделировать функцию отклонения σ ² = g (x), используя произвольный алгоритм регрессии.

Предположим, у нас есть обучающий набор D после того, как данные проверки и тестирования были извлечены. Мы можем разделить его на две части: D₁ и D₂. Мы используем D₁ для обучения средней оценки регрессии μ = f (x). Мы используем этот оценщик для получения средних точечных оценок μ ᵢ на D₂. Теперь мы можем использовать смещенную (нескорректированную) формулу для стандартного отклонения [1] С населением N = 1, чтобы получить σ² ᵢ = | yᵢ - f (xᵢ) |. Использование несмещенной формулы не работает, поскольку в результате получается σ²ᵢ = ∞, поскольку обычно в наборе данных не так много выборок с одинаковым входным значением xᵢ. Смещенная формула имеет тенденцию занижать, но все же информативна. Используя этот метод, мы можем получить целевые отклонения во второй части обучающего набора D₂ и использовать их для обучения оценки отклонения g (x).

Если f (x) совсем не подходит (выделено жирным шрифтом, но иногда верно), нет необходимости разделять D на D₁ и D₂. Разделение является методологически правильным, так как для невидимых данных g (x) будет аппроксимировать отклонение относительно отклонения. f (x) средние оценки. Однако разделение приводит к значительному сокращению обучающего набора для обоих оценщиков. Если f (x) перекрывается, то прогнозы для D₁ будут отличаться от прогнозов для D₂, и нам нужно убедиться, что нет перекрытия. Этот выбор можно рассматривать как гиперпараметр: делать то, что дает более точные оценки на проверочном наборе.

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

Обратное распространение через функцию плотности вероятности

Рассмотрим функцию плотности вероятности для нормального распределения N (μ, σ ² ):

Его можно дифференцировать по параметрам μ и σ ²:

Ниже приведен график функции плотности и ее производных:

Чтобы сделать производные более интуитивно понятными, рассмотрим следующий пример. В нормальном распределении с μ = 0 и σ² = 1 рассмотрим точки x₀ = 0,1, x₁ = 1, x= 2 .

Подумайте, что могло бы увеличить плотность вероятности в каждой из этих точек. Для точки x₀ = 0,1 смещение μ по направлению к ней не приведет к значительному увеличению вероятности, но уменьшение σ ² приведет. Плотность при x₁ = 1 в первую очередь зависит от сдвига μ и при x= 2 (и дальше) оба параметра имеют одинаковое влияние, но влияние σ ² больше.

Однако обе производные асимптотически приближаются к нулю по мере удаления от μ. Это нежелательное свойство, поэтому давайте рассмотрим логарифм функции плотности вероятности:

Логарифм плотности - это квадрат расстояния (x - μ) ², деленный на «разброс» σ ², плюс нормализация. Это очень четкая, интуитивно понятная метрика подобия, которую мы должны оптимизировать, используя ее градиенты w.r.t. параметры:

Мы можем использовать произвольную дифференцируемую функцию для вычисления μ и σ ², от простой линейной функции до сложной нейронной сети.

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

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

Использование ансамбля средних предикторов

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

Преимущество этого подхода в том, что он очень хорошо работает как для оценки μ, так и σ ². Недостатки ансамблей заключаются в том, что они часто потребляют больше памяти и процессорного времени.

Ближайшие соседи

Семейство ближайших соседей непараметрических методов часто упускается из виду (из-за простоты), но они могут быть очень полезны в этом сценарии. Усреднение целевого значения соседства (либо k-ближайших, либо на основе радиуса) легко расширяется, чтобы включить в него также усреднение отклонения целевого значения. Также применимо взвешивание соседнего расстояния.

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

Гауссовский процесс

Гауссовский процесс [3] - это модель, которая предсказывает нормальное распределение целевых значений по определению. Это интересная непараметрическая модель, которую, признаться, я еще не совсем понял. Для желающих есть книга [4].

На практике для подбора GP требуется инверсия матрицы N x N (где N - размер обучающего набора), которая имеет O (N³) сложность. Это не масштабируется для больших наборов данных. Кроме того, GP кажется привередливым в выборе правильного ядра для имеющегося набора данных. Я не добился большого успеха, рассматривая его как алгоритм черного ящика, даже когда время на обучение не ограничено. Тем не менее, для небольших наборов данных, которые вы хорошо понимаете (и можете соответствующим образом смоделировать ядро), это может быть очень полезным инструментом.

Эксперимент

Весь код доступен в репозитории GitHub.

Набор данных

Чтобы поиграть с этими концепциями, я использовал общедоступный набор данных о прокате велосипедов: https://archive.ics.uci.edu/ml/datasets/bike+sharing+dataset. Я выбрал его из-за его размера (17 тыс. Точек, 16 атрибутов) и интересной цели для прогнозирования. Речь идет о прогнозировании количества прокатов велосипедов, посуточно или почасово. Я сделал минимальную предварительную обработку данных (быстрое кодирование категориальных атрибутов, исключение некоторых атрибутов, стандартное масштабирование).

Модели

Оцениваются следующие модели:

  • Создание отдельной оценки отклонения (scikit-learn). Гиперпараметры - это выбор оценщика регрессии как для моделирования среднего, так и для моделирования отклонений, разделения данных между двумя моделями и гиперпараметров для этих оценщиков.
  • Обратное распространение через функцию плотности логарифма вероятности с использованием PyTorch. Я использовал простую линейную функцию для расчета среднего и отклонения. Единственный гиперпараметр - снижение веса.
  • Ансамбль оценщиков. Гиперпараметры - это тип оценщика и гиперпараметры, специфичные для подсчета и оценщика.
  • K-ближайшие-соседи. Гиперпараметры - это k (размер окрестности), и следует ли использовать взвешивание.

Модели реализованы с помощью интерфейса оценщика scikit-learn. Оптимизация гиперпараметров выполняется с использованием поиска по сетке со средней логарифмической плотностью в качестве метрики оценки.

Результаты

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

       Model        MAE [1]   LN-PDF [2]   best hyper-parameter    
 ----------------- --------- ------------ ---------------------- 
  Dev. regression      85.5         -7.2   split=0.5 [3], forest(300)                  
  Back-propagation     98.9        -10.3   alpha=1e-7            
  Bagging             137.6         -7.1   forest (3000)  
  kNN regression      111.7         -6.5   k=30, uniform
[1] Mean absolute error
[2] Mean natural logarithm of the probability density function
[3] Train-set split between mean and deviation estimators

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

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

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

Вывод

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

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

Ссылки

[1] https://en.wikipedia.org/wiki/Standard_deviation#Uncorrected_sample_standard_deviation

[2] https://en.wikipedia.org/wiki/Ensemble_learning#Bootstrap_aggregating_(bagging)

[3] https://en.wikipedia.org/wiki/Gaussian_process

[4] http://www.gaussianprocess.org/gpml/chapters/RW.pdf