- Использование регрессии градиентного восхождения, чтобы показать неопределенность в оценке моделей машинного обучения.
оригинал:к data science.com/how-to-Gene…
Автор: Уилл Кёрсен
Перевод: Лао Ци
«Все модели ошибочны, а некоторые полезны» — Джордж Бокс.
Когда мы используем машинное обучение для прогнозирования, помните об этой поговорке. Все модели машинного обучения имеют ограничения: функции, влияющие на результаты, отсутствуют в данных, или предположения, сделанные моделью, не соответствуют действительности. Когда мы даем точную цифру прогноза — дом будет стоить 450 300,01 долларов — создается впечатление, что мы убеждены в том, что модель основана на реальности.
Чтобы честно отразить прогностическую эффективность модели, необходимо пройти ряд методов оценки.Для прогнозируемых результатов может быть оптимальное значение, но на самом деле это, скорее всего, будет широкий диапазон. Это не клише в курсах по науке о данных, но крайне важно, чтобы мы искали неопределенность в наших прогнозах и не преувеличивали возможности машинного обучения. Хотя люди жаждут определенности, я считаю, что вместо того, чтобы давать точное значение, далекое от реальности, лучше указать широкий интервал прогнозирования, включающий истинное значение.
В этой статье мы представим метод генерации интервалов неопределенности в Scikit-Learn. Генерация интервалов прогнозирования — еще один инструмент в наборе инструментов для обработки и анализа данных, который имеет решающее значение для завоевания доверия специалистов, не занимающихся данными.
Полный код этой статьи был опубликован в курсе «Машинное обучение» на онлайн-платформе этой официальной учетной записи. Пожалуйста, следуйте официальной учетной записи (отсканируйте QR-код в конце статьи) и ответьте «имя + мобильный номер телефона + «кейс», чтобы подать заявку на вступление. Для получения дополнительной информации, пожалуйста, обратитесь к меню этого официального аккаунта: «Курс - Открытый курс» для подробного ознакомления.
проблема
В случае с текстом будем использовать данные из DrivenData(drivendata.org/) соревнований по машинному обучению, которые являются реальными данными по вопросам энергетики. Этот набор данных имеет 8 функций, в которых образцы измеряются каждые 15 минут (Примечание переводчика:Этот набор данных был загружен на онлайн-платформу и был должным образом очищен для того, чтобы читатели могли его изучить и использовать).
data.head()
Целью этого проекта является прогнозирование энергопотребления, практическая задача, которую мы делаем каждый день в Cortex Building Intel. Несомненно, в наборе данных не было обнаружено никаких скрытых признаков (скрытых переменных), влияющих на энергопотребление, поэтому мы хотели показать неопределенность в оценке модели, предсказав верхнюю и нижнюю границы энергопотребления.
# Use plotly + cufflinks for interactive plotting
import cufflinks as cf
data.resample('12 H').mean().iplot()
В данной статье использован инструмент визуализации сюжета, для этого инструмента у переводчика есть специальный курс введения, см.:«Пример «Начало работы с визуализацией данных Python»»
воплощать в жизнь
Для генерации интервалов прогнозирования в Scikit-Learn мы будем использовать алгоритм регрессии градиентного восхождения, основная идея которого заключается в следующем:
- Чтобы предсказать нижнюю границу, используйте
GradientBoostingRegressor(loss= "quantile", alpha=lower_quantile)
. в,lower_quantile
представляет нижний предел. Например, 10-й процентиль равен 0,1. - предел прогноза, используя
GradientBoostingRegressor(loss= "quantile", alpha=upper_quantile)
. в,upper_quantile
представляет верхний предел. Например, 90-й процентиль равен 0,9. - Чтобы предсказать медиану, используйте
GradientBoostingRegressor(loss="quantile", alpha=0.5)
, или используйте прогнозируемое среднее значение по умолчаниюloss="ls"
(для метода наименьших квадратов). В примерах из официальной документации используется второй подход, и мы делаем то же самое.
GradientBoostingRegressor
параметры вloss
Значение является функцией оптимизированной модели. еслиloss="quantile"
, и воляalpha
Значение также устанавливается в процентиль (аналогично верхним и нижним пределам предсказания выше), и можно получить интервал предсказания, представленный процентилем.
После разделения данных на обучающие и тестовые наборы постройте модель. Фактически, мы должны использовать 3 отдельные регрессионные модели градиентного восхождения, потому что каждая модель имеет свою функцию оптимизации и должна обучаться отдельно.
from sklearn.ensemble import GradientBoostingRegressor
# Set lower and upper quantile
LOWER_ALPHA = 0.1
UPPER_ALPHA = 0.9
# Each model has to be separate
lower_model = GradientBoostingRegressor(loss="quantile", alpha=LOWER_ALPHA)
# The mid model will use the default loss
mid_model = GradientBoostingRegressor(loss="ls")
upper_model = GradientBoostingRegressor(loss="quantile", alpha=UPPER_ALPHA)
Training and predicting uses the familiar Scikit-Learn syntax:
Используйте знакомый синтаксис Scikit-Learn для обучения и прогнозирования:
# Fit models
lower_model.fit(X_train, y_train)
mid_model.fit(X_train, y_train)
upper_model.fit(X_train, y_train)
# Record actual values on test set
predictions = pd.DataFrame(y_test)
# Predict
predictions['lower'] = lower_model.predict(X_test)
predictions['mid'] = mid_model.predict(X_test)
predictions['upper'] = upper_model.predict(X_test)
Вот и все, мы получили интервал предсказания!
Имея небольшой навык Plotly, мы можем создать красивый интерактивный график.
Примечание переводчика: Plotly хорош в создании интерактивных визуализаций, см.:«Пример «Начало работы с визуализацией данных Python»»
Вычислить ошибку прогноза
Как и в случае с любой другой моделью машинного обучения, мы хотим количественно оценить ошибку прогноза по тестовому набору (где у нас есть фактический ответ). Оценка ошибки интервала прогнозирования немного сложнее, чем оценка ошибки конкретного прогнозируемого значения. Мы можем рассчитать фактическое значение в процентах от времени в интервале прогнозирования, но если интервал прогнозирования сделать больше, легко предположить, что прогноз хороший, поэтому нам также нужна метрика для разницы между прогнозируемым значением и истинное значение, такое как абсолютная ошибка.
В исходном коде я предоставляю функцию для вычисления абсолютной ошибки верхнего предела, нижнего предела и промежуточного значения.Верхний предел интервала прогнозирования - это среднее значение всех абсолютных ошибок верхнего предела, а нижний предел - среднее значение все нижние предельные абсолютные ошибки, а затем нарисуйте следующий рисунок.
Интересно, что для этой модели средняя абсолютная ошибка предсказания нижней границы на самом деле меньше, чем абсолютная ошибка среднего предсказанного значения. Точность модели невысока и может быть улучшена путем настройки функции оптимизации. Истинное значение находится между верхней и нижней границей, чуть более чем в половине случаев. Мы можем увеличить диапазон показателей, понизив нижний квартиль и подняв верхний квартиль, но это снизит точность.
Могут быть лучшие критерии оценки, но я выбрал их, потому что они просты в вычислительном отношении и легко интерпретируются. Фактические критерии оценки, которые вы используете, должны зависеть от проблемы, которую вы пытаетесь решить, и ваших целей.
модель интервала прогнозирования
Обучение и прогнозирование с использованием 3 отдельных моделей немного утомительны, поэтому мы можем написать модель, которая заключает алгоритм регрессии градиентного восхождения в класс. Это от Scikit-Learn, поэтому мы используем тот же синтаксис для обучения или прогнозирования, но теперь его нужно вызвать только один раз:
# Instantiate the class
model = GradientBoostingPredictionIntervals(lower_alpha=0.1, upper_alpha=0.9)
# Fit and make predictions
_ = model.fit(X_train, y_train)
predictions = model.predict(X_test, y_test)
Модель также поставляется с некоторыми инструментами рисования:
fig = model.plot_intervals(mid=True, start='2017-05-26', stop='2017-06-01')
iplot(fig)
Пожалуйста, используйте и настраивайте модель по своему усмотрению! Это всего лишь один из способов прогнозирования неопределенности, но я думаю, что он полезен, потому что он использует Scikit-Learn (что означает плавную кривую обучения), которую мы можем масштабировать по мере необходимости. В общем, это отличный способ решить проблемы науки о данных: начните с простых решений и усложняйте только по мере необходимости!
Справочная информация: квантильные потери и регрессия с ростом градиента
Алгоритм регрессии с градиентным восхождением представляет собой ансамблевую модель, состоящую из деревьев решений и деревьев регрессии. Первоначальное объяснение модели см. в статье Фридмана 1999 г.: «Приближение жадных функций: машина повышения градиента» (статистика Web.Stanford.quote/~monsoon/ftp/suddenly…
Используйте функцию потерь по умолчанию — метод наименьших квадратов — модель регрессии градиентного восхождения, чтобы предсказать среднее значение. Ключевым моментом, который нужно понять, является то, что штраф за низкую и высокую ошибку одинаков в методе наименьших квадратов:
Напротив, потеря квантиля штрафует ошибку на основе положительного (фактическое > прогнозируемого) и отрицательного (фактическое
где α – квантиль. Давайте быстро рассмотрим пример, используя фактическое значение 10 и квантили 0,1 и 0,9:
- Если α = 0,1, прогноз = 15, то потери = (0,1–1) * (10–15) = 4,5.
- Если α = 0,1, прогноз = 5, то потери = 0,1 * (10–5) = 0,5
- Если α = 0,9, прогноз = 15, то потери = (0,9–1) * (10–15) = 0,5.
- Если α = 0,9, прогноз = 5, то потери = 0,9 * (10–5) = 4,5.
Для квантилей 0,5, если прогнозируемое значение меньше фактического значения (случай 4), потери будут больше, чем прогнозируемое значение на том же расстоянии от фактического значения. При квантиле == 0,5 предсказанные значения выше и ниже фактического значения приведут к одной и той же ошибке, и модель будет оптимизироваться по медиане. (Для промежуточных состояний мы можем использоватьloss=“quantile”
,alpha=0.5
как медиану или использоватьloss=“ls”
в среднем).
На следующем рисунке показана взаимосвязь между квантильными потерями и ошибками:
Квантиль 0,5 делают прогнозы выше медианы. Это отличное напоминание о том, что функции потерь в машинном обучении определяют, что вы хотите оптимизировать!
В зависимости от желаемого результата можно оптимизировать среднее значение (наименьшие квадраты), медиану (квантиль потерь α == 0,5) или любой процентиль (квантиль α == процентиль / 100). Это относительно простое объяснение потери квантилей, но его должно быть достаточно, чтобы вы начали использовать обучение модели для создания интервалов прогнозирования. Для получения дополнительной информации прочитайте эту статью и просмотрите исходный код (Примечание переводчика:Он был опубликован на экспериментальной онлайн-платформе официального аккаунта «Laoqi Classroom»).
в заключении
Прогнозирование с помощью модели машинного обучения, если вы получите только точное число, создаст у людей иллюзию, что мы в сто раз более уверены в модели. Однако важно помнить, что любая модель дает приближение, поэтому очень важно выражать неопределенность при оценке, и общий подход заключается в создании интервалов прогнозирования с использованием регрессии градиентного восхождения в Scikit-Learn. Это всего лишь один из способов прогнозирования границ (см. Доверительные интервалы для линейной регрессии), но он относительно прост и может быть скорректирован по мере необходимости. В этой статье мы увидели полную реализацию и узнали некоторые теории, лежащие в основе функции квантильных потерь.
Решение задач науки о данных требует наличия множества инструментов в вашем наборе инструментов, которые вы можете использовать по требованию. Генерация интервалов прогнозирования — полезная техника, и я рекомендую вам попрактиковаться в выполнении кода из этой статьи и использовать его для решения вашей задачи. (Лучший способ освоить любой навык — это сделать это!) Мы знаем, что машинное обучение может делать довольно невероятные вещи, но оно не идеально, и мы не должны изображать его идеальным. Чтобы завоевать доверие лиц, принимающих решения, нам обычно не нужно давать число в качестве результата оценки, а нужно указать горизонт прогнозирования для представления неопределенности, присущей всем моделям.
Обратите внимание на публичный аккаунт WeChat: Lao Qi Classroom. Читайте подробные статьи, получайте превосходные навыки и наслаждайтесь блестящей жизнью.