Почему регрессоры моего ElasicNetCV перемасштабируют входы? - PullRequest
0 голосов
/ 21 сентября 2019

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

lassocv = Pipeline([('scaler', StandardScaler()), ('lasso', linear_model.LassoCV(n_jobs=-1, cv=5))])
lassocv.fit(X_train, y_train)

y_hat_lasso_train = lassocv.predict(X_train)

Приведенный выше код дает мне такую ​​форму: LassoCV

Iтакже повторил это для RidgeCV регрессии и получил очень похожий результат.Если я делаю в основном то же самое с ElasticNetCV, я получаю, казалось бы, хорошее соответствие, но входные данные (X_train) выглядят сжатыми, и поэтому мои показатели RMS огромны:

eln = Pipeline([('scaler', StandardScaler()), ('eln', 
linear_model.ElasticNetCV(normalize=False, n_jobs=-1, cv=5))])

eln.fit(X_train, y_train)
y_hat_elastic_train = eln.predict(X_train)

ElasticNetCV

Если я уберу StandardScaler и сохраню настройку normalize=False, проблема исчезнет, ​​но я не понимаю, почему.В соответствии с документами ,

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

Так почему мой StandardScaler не работает?У меня также, кажется, возникает та же проблема при использовании SVR регрессора, но даже если я удаляю StandardScaler, проблема остается.

Я думаю, что я довольно хорошо знаком с регрессией LASSO и Ridge, номеньше с Elastic Net и SVM.Так что это может быть просто недоразумение, как работают алгоритмы.

...