Регрессия хребта в R (шаг за шагом)

Регрессия хребта в R (шаг за шагом)

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

В двух словах, регрессия методом наименьших квадратов пытается найти оценки коэффициентов, которые минимизируют сумму квадратов остатков (RSS):

RSS = Σ(y i – ŷ i )2

куда:

  • Σ : греческий символ, означающий сумму
  • y i : Фактическое значение отклика для i -го наблюдения
  • ŷ i : прогнозируемое значение отклика на основе модели множественной линейной регрессии.

И наоборот, гребневая регрессия стремится минимизировать следующее:

RSS + λΣβ j 2

где j находится в диапазоне от 1 до p переменных-предикторов и λ ≥ 0.

Этот второй член уравнения известен как штраф за усадку.В гребневой регрессии мы выбираем значение λ, которое дает наименьшую возможную тестовую MSE (среднеквадратическую ошибку).

В этом руководстве представлен пошаговый пример выполнения гребневой регрессии в R.

Шаг 1: Загрузите данные

В этом примере мы будем использовать встроенный набор данных R под названием mtcars.Мы будем использовать hp в качестве переменной ответа и следующие переменные в качестве предикторов:

  • миль на галлон
  • вес
  • дрянь
  • qсек

Для выполнения гребневой регрессии мы будем использовать функции из пакета glmnet.Этот пакет требует, чтобы переменная ответа была вектором, а набор переменных-предикторов имел класс data.matrix .

Следующий код показывает, как определить наши данные:

#define response variable
y <- mtcars$hp

#define matrix of predictor variables
x <- data.matrix(mtcars[, c('mpg', 'wt', 'drat', 'qsec')])

Шаг 2: Подберите модель регрессии хребта

Далее мы воспользуемся функцией glmnet() , чтобы подогнать модель регрессии хребта, и укажем alpha=0 .

Обратите внимание, что установка альфы, равной 1, эквивалентна использованию регрессии Лассо, а установка альфы на некоторое значение от 0 до 1 эквивалентна использованию эластичной сети.

Также обратите внимание, что гребневая регрессия требует стандартизации данных таким образом, чтобы каждая предикторная переменная имела среднее значение 0 и стандартное отклонение 1.

К счастью , glmnet() автоматически выполняет эту стандартизацию за вас. Если вы уже стандартизировали переменные, вы можете указать standardize=False .

library (glmnet)

#fit ridge regression model
model <- glmnet(x, y, alpha = 0 )

#view summary of model
summary(model)

 Length Class Mode 
a0 100 -none- numeric
beta 400 dgCMatrix S4 
df 100 -none- numeric
dim 2 -none- numeric
lambda 100 -none- numeric
dev.ratio 100 -none- numeric
nulldev 1 -none- numeric
npasses 1 -none- numeric
jerr 1 -none- numeric
offset 1 -none- logical
call 4 -none- call 
nobs 1 -none- numeric

Шаг 3: Выберите оптимальное значение для лямбда

Далее мы определим значение лямбда, которое дает наименьшую среднеквадратичную ошибку теста (MSE), используя k-кратную перекрестную проверку .

К счастью, в glmnet есть функция cv.glmnet() , которая автоматически выполняет k-кратную перекрестную проверку, используя k = 10 кратностей.

#perform k-fold cross-validation to find optimal lambda value
cv_model <- cv. glmnet (x, y, alpha = 0 )

#find optimal lambda value that minimizes test MSE
best_lambda <- cv_model$ lambda.min
best_lambda

[1] 10.04567

#produce plot of test MSE by lambda value
plot(cv_model)
перекрестная проверка гребневой регрессии в R

Значение лямбда, которое минимизирует тест MSE, оказывается равным 10,04567 .

Шаг 4: Анализ окончательной модели

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

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

#find coefficients of best model
best_model <- glmnet(x, y, alpha = 0 , lambda = best_lambda)
coef(best_model)

5 x 1 sparse Matrix of class "dgCMatrix"
 s0
(Intercept) 475.242646
mpg -3.299732
wt 19.431238
drat -1.222429
qsec -17.949721

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

#produce Ridge trace plot
plot(model, xvar = " lambda ") 
График трассировки хребта в R

Наконец, мы можем рассчитатьR-квадрат модели на данных обучения:

#use fitted best model to make predictions
y_predicted <- predict (model, s = best_lambda, newx = x)

#find SST and SSE
sst <- sum ((y - mean (y))^2)
sse <- sum ((y_predicted - y)^2)

#find R-Squared
rsq <- 1 - sse/sst
rsq

[1] 0.7999513

R-квадрат оказывается равным 0,7999513.То есть лучшая модель смогла объяснить 79,99% вариации значений отклика обучающих данных.

Полный код R, использованный в этом примере, вы можете найти здесь .

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.