Обобщенные аддитивные модели с R
Опубликовано: 26/01/2021 Время на прочтение: 10 минут
Фото Дэна Фримена на Unsplash
Обобщенные аддитивные модели — это расширения линейных моделей, которые позволяют гибко моделировать нелинейные отношения. Более того, GAM — это средний путь между простыми моделями, такими как линейная регрессия, и более сложными моделями, такими как повышение градиента.
Линейные модели легко интерпретировать, использовать для вывода и позволяют понять линейную взаимосвязь между предиктором и ответом, но могут иметь большое смещение. С другой стороны, модели машинного обучения, такие как Gradient Boosting и Random Forests, могут быть очень хорошими в прогнозировании сложных взаимосвязей, но они, как правило, требуют большого количества данных и их трудно интерпретировать [1].
Затем обобщенные аддитивные модели решают эту проблему, устанавливая сложные нелинейные отношения и делая хорошие прогнозы. В то же время это позволяет делать выводную статистику, понимать и объяснять основную структуру нашей модели. В этой статье я просто объясню эти модели и применим их к известному набору данных Bike Sharing в Вашингтоне от Kaggle.
Сравните MLR и GAM
Множественная линейная модель — это подход к прогнозированию количественной реакции Y на основе переменных-предикторов X. Она предполагает наличие линейной зависимости между каждой переменной-предиктором и ответом. Если у нас есть 3 переменных-предиктора и одна переменная ответа, это можно записать как:
где Xᵢ — i-я переменная-предиктор, βᵢ известны как коэффициенты или параметры модели, а ε — член ошибки. В частности, коэффициенты количественно определяют взаимосвязь между этой переменной и откликом [2].
Обобщенная аддитивная модель похожа на модель множественной линейной регрессии. Единственное отличие состоит в том, что он соответствует нелинейной функции для каждой переменной-предиктора, что позволяет моделировать нелинейные отношения:
где f (xᵢ) — нелинейная функция переменной-предиктора xᵢ. Примерами нелинейных функций являются сплайны, полиномиальные и ступенчатые функции. В общем, наиболее часто используемой нелинейной функцией является сглаживающий сплайн . GAM также может взаимодействовать между двумя независимыми переменными. Например:
В тематическом исследовании я собираюсь ограничить простой случай без взаимодействий. Это может означать ограничение, но все же допускает гибкость.
Сглаживание сплайнов
Строительным блоком алгоритмов обобщенной аддитивной модели является сглаживающий сплайн. Цель состоит в том, чтобы построить гладкую кривую f (x), которая суммирует зависимость y от x. Если бы мы нашли кривую, которая минимизирует ∑ (yᵢ-f (xᵢ)) ², результатом была бы интерполирующая кривая, которая вообще не была бы гладкой. Кубический сплайн сглаживает гладкость функции f (x). Ищем функцию f (x), которая минимизирует:
где λ — параметр положительного штрафа за шероховатость кривой f (x). Диапазон параметра составляет от 0 до 1. Большие значения параметра сглаживания заставляют f быть более плавным. Полезно сбалансировать переобучение и недообучение [2].
Базовые функции
Гибкие сглаживания в GAM фактически построены из множества более мелких функций, называемых базисными функциями. Каждое сглаживание представляет собой сумму ряда базисных функций, и каждая базисная функция умножается на коэффициент, каждый из которых является параметром модели.
где Nⱼ (x) — базисные функции естественных кубических сплайнов, а βⱼ — коэффициенты модели. На кривую f (x) влияет не только параметр сглаживания λ, но и Nⱼ (x). Чем больше количество базисных функций, тем лучше функция f (x) способна объяснить сложные шаблоны данных. Если количество базисных функций слишком мало, функция ГАМ ограничивается.
Шаг 1. Импортируйте библиотеки и набор данных
Теперь мы будем работать с набором данных для обмена велосипедами, который доступен здесь. Рассматриваемый набор данных содержит почасовое количество велосипедов, взятых напрокат в период с 2011 по 2012 год в Вашингтоне, округ Колумбия. Имеется 17379 экземпляров и 17 переменных. Мы построим модели, которые прогнозируют количество арендованных велосипедов, обозначенное cnt.
Переменные данных и описание
Ниже мы импортируем библиотеки. В частности, пакет, содержащий все функции для моделирования GAM в R, называется gam .
Теперь давайте прочитаем CSV-файл из Kaggle, указав правильный путь:
Переменные Instant, dtday, atemp, register, casual удаляются, потому что они не нужны. И temp, и atemp измеряют температуру, поэтому мы удаляем atemp, чтобы информация не повторялась. Чтобы увидеть сводку результирующего набора данных, давайте отобразим его с помощью функции str:
Некоторые переменные обозначаются как int, и нам нужно преобразовать их в факторы:
Шаг 2. Разделите набор данных на обучающий и тестовый.
Перед обучением любой модели мы разбиваем набор данных на две части: 80% для обучения и оставшиеся 20% для тестирования. Большой набор поездов обеспечивает хорошие возможности моделирования, а набор тестов позволяет нам оценить производительность модели.
Шаг 3: Пояснительный анализ
Мы хотим понять связь между количественными переменными и переменной отклика. Итак, давайте отобразим диаграмму рассеяния для каждого предиктора и ответа. Легко увидеть, что отношения между переменными не линейны.
Шаг 4: линейная модель
Прежде чем применять обобщенную аддитивную модель, давайте подберем модель множественной линейной регрессии. В конце будет полезно провести сравнение. Переменная рабочий день удалена, поскольку она учитывает праздничные дни, поэтому переменные рабочий день и праздник коррелированы.
Наша модель выглядит неплохо, даже если степень пригодности составляет 68,85%. Большинство переменных значимы, поэтому они полезны для объяснения нашей модели. Очевидно, что месячные переменные, относящиеся к марту, маю, сентябрю и октябрю, очень значимы, тогда как остальные не значимы. Но перехват имеет значение января и имеет большое значение. По этой причине мы не удаляем переменную mnth.
Теперь давайте построим график остатков по сравнению с подобранными значениями. График показывает сильную закономерность в остатках, а дисперсии членов непостоянны, что указывает на наличие нелинейности. Конечно, мы не смогли собрать всю информацию в данных.
После обучения модели мы можем делать прогнозы на тестовом наборе и оценивать модель с помощью функции postResample . Он принимает на вход два числовых вектора данных, прогнозируемое и целевое значения и возвращает среднеквадратичную ошибку и R-квадрат.
Шаг 5: Обобщенная аддитивная модель
Наконец, мы можем подогнать GAM с помощью функции gam () из пакета gam. Когда мы подбираем модель, мы заключаем количественные переменные в s (), это функция сглаживания, указывающая, что мы хотим, чтобы это отношение было гибким. Остальные категориальные переменные включены как линейные члены. Например, сезон состоит из четырех категорий (1: зима, 2: весна, 3: лето, 4: осень). Когда мы включаем линейный член в эту категориальную переменную, гамма-функция соответствует модели с фиксированным эффектом для каждого уровня категории.
Сводная информация о модели GAM разделена на две части: Anova для параметрических эффектов и Anova для непараметрических эффектов . Переменные temp, гул и скорость ветра, которые моделируются с помощью сплайнов, важны в обеих частях. Другие категориальные переменные имеют существенное влияние только на первую часть, потому что мы не применяли к ним сглаживающие сплайны. Это удовлетворительное значение.
Вызывая функцию coef () для объекта игровой модели, мы можем показать коэффициенты каждой из базовых функций модели.
Можно увидеть, что модель с 10 включенными переменными имеет гораздо больше коэффициентов. Теперь мы можем использовать функцию plot () для визуализации модели. Мы указываем se = T, чтобы включить двойные стандартные ошибки оценок (пунктирные линии). По оси абсцисс находится независимая переменная, а по оси ординат — значения отклика. Сплошная линия — это прогнозируемое значение зависимой переменной как функция оси x. Ниже я сообщил первые четыре сюжета.
Мы видим, что полученная модель фиксирует нелинейные отношения между каждой парой переменных. На первом графике температура оказывает возрастающее нелинейное влияние на количество арендованных велосипедов, в то время как влажность и скорость ветра уменьшают влияние на переменную реакции. Действительно, температура, гул и скорость ветра — нелинейные члены в модели. Другие категориальные переменные, включенные в модель как линейные члены, представлены в виде коробчатых диаграмм. В случае сезона есть возрастающий эффект. Осенью арендуется больше велосипедов (= 4).
После этого анализа мы можем сделать прогноз на тестовом наборе и получить:
Меры ошибок немного уменьшились, в то время как R² увеличился, доказывая, что модель GAM лучше объясняет поведение данных. Дополнительной мерой для сравнения двух моделей является информационный критерий Акаике или AIC, статистика, которая оценивает качество модели и количественно определяет объем информации, передаваемой обученной моделью: чем меньше информации теряется, тем выше качество модели.
Значение AIC ниже для обобщенной аддитивной модели. Итак, мы подтверждаем, что нам больше нравится последняя подобранная модель.
Последние мысли:
Спасибо за прочтение. Я надеюсь, что этот урок помог вам разобраться в этой модели. Код находится в Github. Попробуйте использовать другие наборы данных, если хотите узнать больше. Это единственный способ действительно получить полное представление о GAM. Я предлагаю вам использовать R с Google Collab или Kaggle notebook. В основном они используются для кодирования на Python, но также позволяют запускать R. Я обнаружил, что им легче визуализировать графики и упорядоченно комментировать.
Рекомендации:
[1] https://campus.datacamp.com/courses/nonlinear-modeling-in-r-with-gams/introduction-to-generalized-additive-models?ex=1
[2] https://doc.lagout.org/Others/Data%20Mining/Data%20Analysis%20and%20Data%20Mining_%20An%20Introduction%20%5BAzzalini%20%26%20Scarpa%202012-04-23%5D .pdf
[3] https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.46.8665&rep=rep1&type=pdf