我正在对一些数据建立一个预测分析管道,我正在选择模型。我的目标变量是偏斜的,所以我想对它进行对数变换以提高我的线性回归估计器的性能。我遇到了相对较新TransformedTargetRegressor的 scikit-learn,我想我可以将它用作管道的一部分。我附上我的代码
我最初的尝试是y_train在调用之前进行转换gs.fit(),将其转换为np.log1p(y_train). 这行得通,我可以执行嵌套的交叉验证并返回所有估算器感兴趣的指标。但是,我希望能够在以前看不见的数据(验证集)上获得训练模型的 R^2 和 RMSE,我明白为了做到这一点,我需要使用(例如)r2_score函数y_val, preds,其中预测需要已经转换回真实值,即,preds = np.expm1(gs.predict(X_val))
### Create a pipeline
pipe = Pipeline([
# the transformer stage is populated by the param_grid
('transformer', TransformedTargetRegressor(func=np.log1p, inverse_func=np.expm1)),
('reg', DummyEstimator()) # Placeholder Estimator
])
### Candidate learning algorithms and their hyperparameters
alphas = [0.001, 0.01, 0.1, 1, 10, 100]
param_grid = [
{'transformer__regressor': Lasso(),
'reg': [Lasso()], # Actual Estimator
'reg__alpha': alphas},
{'transformer__regressor': LassoLars(),
'reg': [LassoLars()], # …Run Code Online (Sandbox Code Playgroud)