如何使用 Pipeline 和 GridSearchCV 找到线性回归问题的系数

Posted

技术标签:

【中文标题】如何使用 Pipeline 和 GridSearchCV 找到线性回归问题的系数【英文标题】:How to find coefficients for LinearRegression problem with Pipeline and GridSearchCV 【发布时间】:2021-12-08 23:25:03 【问题描述】:

我正在使用管道和 GridSearchCV 执行 LinearRegression 模型,但无法达到为 X_train 的每个特征计算的系数。

mlr_gridsearchcv = Pipeline(steps =[('preprocessor', preprocessor),
('gridsearchcv_lr', GridSearchCV(TransformedTargetRegressor(regressor= LinearRegression(), 
func = np.log,inverse_func = np.exp), param_grid=parameter_lr, cv = nfolds, 
scoring = ('r2','neg_mean_absolute_error'), return_train_score = True, 
refit='neg_mean_absolute_error', n_jobs = -1))])

mlr_co2=mlr_gridsearchcv.fit(X_train,Y_train['co2e'])

我已尝试先获得 best_estimator_:

mlr_co2.named_steps['gridsearchcv_lr'].cv_results_.best_estimator_

我得到:

AttributeError: 'dict' object has no attribute 'best_estimator_'

如果我这样尝试:

mlr_co2.named_steps['gridsearchcv_lr'].best_estimator_.regressor.coef_

我明白了:

AttributeError: 'LinearRegression' object has no attribute 'coef_'

我尝试了其他组合,但似乎没有任何效果。

【问题讨论】:

【参考方案1】:

你可以使用:

results['gridsearchcv'].best_estimator_.regressor_.coef_

其中results 是拟合的管道,'gridsearchcv' 是管道中网格搜索步骤的名称,请参见下面的代码。

import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import MinMaxScaler
from sklearn.compose import TransformedTargetRegressor
np.random.seed(42)

# generate the data
X = np.random.lognormal(0, 1, (100, 3))
y = np.mean(X, axis=1) + np.random.normal(0, 0.1, 100)

# define the pipeline
preprocessor = MinMaxScaler(feature_range=(0, 1))

estimator = TransformedTargetRegressor(
    regressor=LinearRegression(),
    func=np.log,
    inverse_func=np.exp
)

gridsearchcv = GridSearchCV(
    estimator,
    param_grid='regressor__fit_intercept': [True, False],
    cv=5,
    scoring=('r2', 'neg_mean_absolute_error'),
    return_train_score=True,
    refit='neg_mean_absolute_error',
    n_jobs=-1
)

pipeline = Pipeline(steps=[
    ('preprocessor', preprocessor),
    ('gridsearchcv', gridsearchcv)
])

# fit the pipeline
results = pipeline.fit(X, y)

# extract the estimated coefficients of the best model
results['gridsearchcv'].best_estimator_.regressor_.coef_
# [0.89791824 1.11311974 2.99750775]

【讨论】:

以上是关于如何使用 Pipeline 和 GridSearchCV 找到线性回归问题的系数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sklearn.pipeline 转换新数据

如何使用预定义的 GitLab CI 变量和流式传输到 GitLab Pipeline 日志的 Tekton 日志直接从 GitLab CI 触发 Tekton Pipeline

将 Sklearn GridSearchCV 与 Pipeline 一起使用时如何传递权重

如何通过 make_pipeline() 标准化训练和测试数据集

如何使用 sklearn Pipeline 和 FeatureUnion 选择多个(数字和文本)列进行文本分类?

如何在 ML Azure Pipeline 中使用环境