Модели регрессии, упорядочивающие коэффициенты

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

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

б. Данные следуют нормальному распределению

в. Предикторы не коррелируют друг с другом

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

Lasso, Ridge, Elastic Nets — это передовые методы регрессии, использующие регуляризацию для получения оптимальных прогнозов там, где простая линейная регрессия не работает.

В этом блоге я познакомлю вас с этими передовыми методами регрессии.

Источник данных

Мы собираемся использовать набор данных о ценах на жилье, доступный на Kaggle. Получите исходный файл отсюда:



Этот набор данных содержит 79 независимых переменных, описывающих (почти) каждый аспект жилых домов в Эймсе, штат Айова. Задача состоит в том, чтобы предсказать окончательную цену каждого дома. Данные доступны в формате .csv. Сохраните эти файлы на локальном диске.

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

Давайте просмотрим данные и поймем, что мы получили. Приведенный ниже код разделит данные на набор данных поезда и теста и распечатает строки заголовков набора данных поезда.

Вывод:

Ниже приведены основные выводы из данных:

а. Он содержит 80 признаковых переменных. Высока вероятность мультиколлинеарности.

б. Функция идентификатора бесполезна.

в. Цена продажи — это метка (зависимая переменная).

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

После предварительной обработки данных X_train и X_test содержат 288 признаков.

X_train.shape

Вывод:

(1460, 288)

Нелегко обрабатывать 288 переменных признаков, используя подходы простой линейной регрессии. Мы будем использовать множественную линейную регрессию и сравнивать ее эффективность с передовыми методами регрессии, такими как Lasso, Ridge и Elastic Net, которые могут уменьшить функцию потерь, расставьте приоритеты функций и избавьтесь от мультиколлинеарности. Мы будем использовать показатели R2 Score и Root Mean Square Error (RMSE), чтобы сравнить эффективность этих методов регрессии.

RMSE — это функция потерь. Он измеряет разницу между прогнозируемым значением и фактическим значением.

Оценка R2 показывает, насколько данные близки к линии регрессии.

Множественная линейная регрессия

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

Вывод:

R2 Score 0.722
RMSE Mean 0.171

ЛАССО Регрессия

LASSO расшифровывается как Least Aабсолютно Shrinkage и Sвыборы Оператор. Лассо поощряет простую модель, сжимая данные по направлению к центральной точке, например, к среднему значению. Это достигается за счет упорядочения значений коэффициентов.

Лассо-регрессия фокусируется на регуляризации L1. Он добавляет штраф, равный абсолютному значению величины коэффициентов. Позволь мне объяснить.

Ниже приведено уравнение множественной линейной регрессии.

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

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

Лассо расширяет эту функцию потерь. Он суммирует лямбда (λ) и абсолютные коэффициенты. Уравнение функции потерь для Лассо приведено ниже.

Это называется регуляризацией L1. Получение минимального значения этой функции означает снижение ниже значения

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

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

Вывод:

Lasso CV R2 Score 0.903
Lasso CV  RMSE Mean 0.121

Оценка R2, а также RMSE улучшились. Давайте разберемся, как LASSO добился этих улучшений.

A. Выбор признаков: Улучшила ли LASSO выбор признаков, уменьшив мультиколлинеарность и ограничив связанные и не очень важные признаки?

Давайте разберемся.

Вывод:

Lasso picked 110 variables and eliminated the other 178 variables

Очень хороший! LASSO избавился от 178 переменных из 288. Он рассмотрел только 110 переменных. Даже среди этих 110 переменных немногие были наказаны низкими значениями коэффициентов. Давайте выясним 10 лучших и 10 последних переменных характеристик.

imp_coef = pd.concat([coef.sort_values().head(10),
                     coef.sort_values().tail(10)])
matplotlib.rcParams['figure.figsize'] = (8.0, 10.0)
imp_coef.plot(kind = "barh")
plt.title("Coefficients")
plt.show()

Ну вот!

Теперь вы знаете 10 верхних и 10 нижних переменных характеристик, которые LASSO учитывал при уменьшении значения функции потерь.

Как насчет распределения остатков? Давайте визуализируем их.

matplotlib.rcParams[‘figure.figsize’] = (6.0, 6.0)
preds = pd.DataFrame({“preds”:model_lasso.predict(X_train), “true”:y})
preds[“residuals”] = preds[“true”] — preds[“preds”]
preds.plot(x = “preds”, y = “residuals”,kind = “scatter”)
plt.show()

Разброс остаточных значений выглядит хорошо.

Ридж-регрессия

Гребневая регрессия выполняет регуляризацию L2. Ниже приведена формула функции потерь для гребневой регрессии.

Давайте применим технику Ridge к этому набору данных.

#Ridge Regression
model_ridge = Ridge(alpha=10).fit(X_train, y)
print('Ridge R2 Score {:.3f}'.format((cross_val_score(model_ridge, X_train, y, scoring="r2", cv = 10).mean())))
print('Ridge RMSE Mean {:.3f}'.format(np.sqrt(-cross_val_score(model_ridge, X_train, y, scoring="neg_mean_squared_error", cv = 10)).mean()))

Вывод

Ridge R2 Score 0.897
Ridge RMSE Mean 0.125

Есть улучшение по сравнению с множественной линейной регрессией, но нет улучшения по сравнению с LASSO. Давайте проверим, что функции учтены.

coef = pd.Series(model_ridge.coef_, index = X_train.columns)
print("Ridge picked " + str(sum(coef != 0)) + " variables and eliminated the other " +  str(sum(coef == 0)) + " variables")

Вывод:

Ridge picked 288 variables and eliminated the other 0 variables

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

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

Мы использовали K-кратную проверку с резюме равным 10. Это означает, что набор данных был разделен на 10 равных размеров выборки. Давайте визуализируем диапазон функции потерь, рассчитанный для этих размеров выборки.

lr_loss=np.sqrt(-cross_val_score(lr_model, X_train, y, scoring="neg_mean_squared_error", cv = 10))
lasso_loss=np.sqrt(-cross_val_score(LassoCV(alphas = [1, 0.1, 0.001, 0.0005],cv=10), X_train, y, scoring="neg_mean_squared_error", cv = 10))
ridge_loss=np.sqrt(-cross_val_score(Ridge(alpha=10), X_train, y, scoring="neg_mean_squared_error", cv = 10))
fig, ax = plt.subplots()
X_val=x=[1,2,3,4,5,6,7,8,9,10]
ax.plot(X_val,lr_loss, color="blue",label='Linear Reg')
ax.plot(X_val,lasso_loss, color="red",label='LASSO')
ax.plot(X_val,ridge_loss, color="green",label='Ridge')
plt.xlabel('Sample')
plt.ylabel('y')
ax.legend()
ax.grid(True)
plt.show()

Вывод:

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

Это сила регуляризации!

Надеюсь, вы найдете этот блог полезным! Ждем ваших вопросов/комментариев.

Использованная литература:

Практический курс по машинному обучению





Простая линейная регрессия: -›https://medium.com/analytics-vidhya/simple-linear-regression-and-fun-behind-it-df509c2a057

Многострочная регрессия:-> https://medium.com/analytics-vidhya/multiple-linear-regression-7727a012ff93

Полиномиальная линейная регрессия:-› https://medium.com/sanrusha-consultancy/polynomial-linear-regression-9d691a605aa0

Регрессия KNN:-›https://medium.com/sanrusha-consultancy/k-nearest-neighbor-knn-regression-and-fun-behind-it-7055cf50ae56