Изучите теорию, лежащую в основе регрессионных моделей Ridge, как их кодировать и настраивать с помощью python и scikit-learn.

Кто они такие?

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

Краткое описание линейных регрессий: они оценивают пересечение линейной модели и коэффициенты наклона путем минимизации остаточной суммы квадратов (RSS) модели. Формула RSS вместе с полученной линейной моделью показана ниже:

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

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

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

Этот термин известен как параметр регуляризации L2, где L1 может давать разреженные модели, а L2 - нет. Конечным результатом все равно будет простая линейная модель, аналогичная в формате, если использовался метод OLS, но, вероятно, с разными коэффициентами. (показано в примере ниже)

Член регуляризации действует как функция потерь, которая является штрафом за неправильные прогнозы при вычислении RSS регрессии гребня. Он действует путем добавления квадратов значений коэффициентов к RSS модели. Поскольку «лучшей» является модель с минимизированным RSS, модели с большими коэффициентами эффективно фильтруются против .

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

В результате модели предпочитают элементы с меньшими коэффициентами.

Регуляризация особенно эффективна для более чем 100 переменных. Кроме того, степень регуляризации контролируется параметром альфа в члене регуляризации. Более высокое значение альфа приводит к большему штрафу, понесенному моделью, с дальнейшим уменьшением коэффициентов до 0. Значение по умолчанию в python равно 1 . Особый случай, который не следует принимать, - это то, что когда альфа = 0, результирующая модель эквивалентна простой линейной регрессии OLS.

Код

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

Пакеты

Для пакетов давайте импортируем набор данных о преступлениях и классы для создания разделений на поезд-тест, проведения MixMaxScaling и создания Ridge Regression.

import numpy
from adspy_shared_utilities import load_crime_dataset
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.linear_model import Ridge

Загрузка набора данных и создание разделения тестовых данных поездов 75/25:

(X_crime, y_crime) = load_crime_dataset()

X_train, X_test, y_train, y_test = train_test_split(X_crime,
                                   y_crime, random_state = 0)
# take note of the indentation.

Масштабирование как обучающих, так и тестовых наборов данных:

scaler = MinMaxScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

Создание объекта регрессии гребня со значением альфа 20,0 и подгонка этого объекта к масштабированным обучающим данным X вместе с соответствующими метками Y обучающих данных:

linridge = Ridge(alpha=20.0).fit(X_train_scaled, y_train)

Получение коэффициентов модели:

linridge.intercept_
linridge.coef_ 
-3352.423035846206
[  1.95091438e-03   2.19322667e+01   9.56286607e+00  -3.59178973e+01
   6.36465325e+00  -1.96885471e+01  -2.80715856e-03   1.66254486e+00
  -6.61426604e-03  -6.95450680e+00   1.71944731e+01  -5.62819154e+00
   8.83525114e+00   6.79085746e-01  -7.33614221e+00   6.70389803e-03
   9.78505502e-04   5.01202169e-03  -4.89870524e+00  -1.79270062e+01
   9.17572382e+00  -1.24454193e+00   1.21845360e+00   1.03233089e+01
  -3.78037278e+00  -3.73428973e+00   4.74595305e+00   8.42696855e+00
   3.09250005e+01   1.18644167e+01  -2.05183675e+00  -3.82210450e+01
   1.85081589e+01   1.52510829e+00  -2.20086608e+01   2.46283912e+00
   3.29328703e-01   4.02228467e+00  -1.12903533e+01  -4.69567413e-03
   4.27046505e+01  -1.22507167e-03   1.40795790e+00   9.35041855e-01
  -3.00464253e+00   1.12390514e+00  -1.82487653e+01  -1.54653407e+01
   2.41917002e+01  -1.32497562e+01  -4.20113118e-01  -3.59710660e+01
   1.29786751e+01  -2.80765995e+01   4.38513476e+01   3.86590044e+01
  -6.46024046e+01  -1.63714023e+01   2.90397330e+01   4.15472907e+00
   5.34033563e+01   1.98773191e-02  -5.47413979e-01   1.23883518e+01
   1.03526583e+01  -1.57238894e+00   3.15887097e+00   8.77757987e+00
  -2.94724962e+01  -2.32995397e-04   3.13528914e-04  -4.13628414e-04
  -1.79851056e-04  -5.74054527e-01  -5.17742507e-01  -4.20670930e-01
   1.53383594e-01   1.32725423e+00   3.84863158e+00   3.03024594e+00
  -3.77692644e+01   1.37933464e-01   3.07676522e-01   1.57128807e+01
   3.31418306e-01   3.35994414e+00   1.61265911e-01  -2.67619878e+00]

Получение оценок модели R-квадрат

linridge.score(X_train_scaled, y_train)
linridge.score(X_test_scaled, y_test)
-31.672
-37.249

Количество ненулевых характеристик:

(np.sum(linridge.coef_ != 0))
88

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

for alpha in [0, 1, 10, 20, 50, 100, 1000]:
    linridge = Ridge(alpha = this_alpha).fit(X_train_scaled,y_train) 
    r2_train = linridge.score(X_train_scaled, y_train)
    r2_test = linridge.score(X_test_scaled, y_test)
    num_coeff_bigger = np.sum(abs(linridge.coef_) > 1.0)
    print('Alpha = {:.2f}\nnum abs(coeff) > 1.0: {}, \
r-squared training: {:.2f}, r-squared test: {:.2f}\n'
         .format(this_alpha, num_coeff_bigger, r2_train, r2_test))
Ridge regression: effect of alpha regularization parameter
Alpha = 0.00
num abs(coeff) > 1.0: 88, r-squared training: 0.67, r-squared test: 0.50

Alpha = 1.00
num abs(coeff) > 1.0: 87, r-squared training: 0.66, r-squared test: 0.56

Alpha = 10.00
num abs(coeff) > 1.0: 87, r-squared training: 0.63, r-squared test: 0.59

Alpha = 20.00
num abs(coeff) > 1.0: 88, r-squared training: 0.61, r-squared test: 0.60

Alpha = 50.00
num abs(coeff) > 1.0: 86, r-squared training: 0.58, r-squared test: 0.58

Alpha = 100.00
num abs(coeff) > 1.0: 87, r-squared training: 0.55, r-squared test: 0.55

Alpha = 1000.00
num abs(coeff) > 1.0: 84, r-squared training: 0.31, r-squared test: 0.30

Вывод

Я надеюсь, что благодаря этой статье вы узнали теорию, лежащую в основе регрессии хребта, как кодировать и настраивать модели регрессии хребта с помощью python и scikit-learn.

Мне удалось узнать об этом на МООК «Прикладное машинное обучение на Python» Мичиганского университета, организованном Coursera.

Не стесняйтесь обращаться ко мне в LinkedIn, если у вас есть вопросы или вы хотите обсудить мир после публикации Covid-19!

Я надеюсь, что смог помочь вам узнать о методах науки о данных так или иначе!

Вот вам еще одна статья по науке о данных!