Стандартизация X отличается в Python Lasso и R glmnet?

Я пытался получить тот же результат, что и лассо, используя scikit-learn Python и glmnet R. Полезная ссылка

Если я укажу «normalize = True» в Python и «standardize = T» в R, они дадут мне тот же результат.

Питон:

from sklearn.linear_model import Lasso
X = np.array([[1, 1, 2], [3, 4, 2], [6, 5, 2], [5, 5, 3]])
y = np.array([1, 0, 0, 1])
reg = Lasso(alpha =0.01, fit_intercept = True, normalize =True)
reg.fit(X, y)
np.hstack((reg.intercept_, reg.coef_))

Out[95]: array([-0.89607695,  0.        , -0.24743375,  1.03286824])

Р:

reg_glmnet = glmnet(X, y, alpha = 1, lambda = 0.02,standardize = T)
coef(reg_glmnet)

4 x 1 sparse Matrix of class "dgCMatrix"
                    s0
(Intercept) -0.8960770
V1           .        
V2          -0.2474338
V3           1.0328682

Однако, если я не хочу стандартизировать переменные и установить normalize = False и standardize = F, они дадут мне совсем другие результаты.

Питон:

from sklearn.linear_model import Lasso
Z = np.array([[1, 1, 2], [3, 4, 2], [6, 5, 2], [5, 5, 3]])
y = np.array([1, 0, 0, 1])
reg = Lasso(alpha =0.01, fit_intercept = True, normalize =False)
reg.fit(Z, y)
np.hstack((reg.intercept_, reg.coef_))

Out[96]: array([-0.88      ,  0.09384212, -0.36159299,  1.05958478])

Р:

reg_glmnet = glmnet(X, y, alpha = 1, lambda = 0.02,standardize = F)
coef(reg_glmnet)

4 x 1 sparse Matrix of class "dgCMatrix"
                     s0
(Intercept) -0.76000000
V1           0.04441697
V2          -0.29415542
V3           0.97623074

В чем разница между «нормализацией» в Python Lasso и «стандартизацией» в glmnet R?


person Chubing    schedule 26.04.2017    source источник


Ответы (1)


В настоящее время в отношении параметра normalize документы состояние Если вы хотите стандартизировать, пожалуйста, используйте StandardScaler перед вызовом подгонки для оценки с normalize=False.''

Таким образом, очевидно, что нормализовать и стандартизировать — это не одно и то же с sklearn.linear_model.Lasso. Прочитав документы StandardScaler, я не понял разницы, но то, что она есть, следует из приведенного описания параметра normalize.

person Mike O'Connor    schedule 21.01.2021