Я переглядаю розділ LAB §6.6, присвячений хребтовій регресії / Лассо, в книзі «Вступ до статистичного навчання з додатками в R» Джеймса, Віттена, Хасті, Тібширані (2013).
Більш конкретно, я намагаюся застосувати модель scikit-learn Ridge
до набору даних "Hitters" з пакету R "ISLR". Я створив той самий набір функцій, що і в коді R. Однак я не можу наблизитися до результатів glmnet()
моделі. Я вибрав один параметр настройки L2 для порівняння. (аргумент 'альфа' в scikit-learn).
Пітон:
regr = Ridge(alpha=11498)
regr.fit(X, y)
http://nbviewer.ipython.org/github/JWarmenhoven/ISL-python/blob/master/Notebooks/Chapter%206.ipynb
R:
Зверніть увагу , що аргумент alpha=0
в glmnet()
засобі , яке повинно бути застосоване покарання L2 (Рідж регресія). Документація попереджає не вводити єдине значення для lambda
, але результат такий же, як у ISL, де використовується вектор.
ridge.mod <- glmnet(x,y,alpha=0,lambda=11498)
Що викликає відмінності?
Редагувати:
При використанні penalized()
з пенізованого пакету в R коефіцієнти такі ж, як у scikit-learn.
ridge.mod2 <- penalized(y,x,lambda2=11498)
Можливо, тоді може виникнути і запитання: «Яка різниця між регресією Рейда glmnet()
та penalized()
коли відбувається?
Нова обгортка python для фактичного коду Fortran, який використовується в gl-пакеті пакета R
https://github.com/civisanalytics/python-glmnet
sklearn.linear_model.Ridge
чи не визначена оцінка перехоплення (стандартна), і штраф такий, який||Xb - y - intercept||^2 + alpha ||b||^2
мінімізований дляb
. Перед штрафом можуть бути фактори1/2
або1/n_samples
або обидва, що робить результати відразу різними. Щоб вирішити проблему масштабування штрафних санкцій, встановіть покарання 0 в обох випадках, вирішіть всі розбіжності там, а потім перевірте, що додає штраф. І btw IMHO тут - правильне місце, щоб задати це питання.