我有一个简单的管道,用于将一些数据输入几个不同的线性模型中进行比较。它只是标准缩放器,后跟回归器。当我对Lasso或Ridge回归进行此操作时,一切正常:
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)
我也对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)
如果我删除StandardScaler
并保持normalize=False
设置,问题就消失了,但我不明白为什么。根据{{3}},
如果您希望标准化,请先使用sklearn.preprocessing.StandardScaler,然后使用normalize = False调用估计量的拟合。
那我的StandardScaler
为什么不工作?使用SVR
回归器时,我似乎也遇到了同样的问题,但是即使删除了StandardScaler
,问题仍然存在。
我认为我对LASSO和Ridge回归非常熟悉,但对Elastic Net和SVM则不太了解。所以可能只是我误解了算法的工作原理。