python - 在 sklearn 中将参数传递给管道的 fit()
问题描述
我有一个串联的 sklearnPolynomialFeatures()
管道LinearRegression()
。我的目标是使用不同的多项式特征来拟合数据degree
并测量分数。以下是我使用的代码 -
steps = [('polynomials',preprocessing.PolynomialFeatures()),('linreg',linear_model.LinearRegression())]
pipeline = pipeline.Pipeline(steps=steps)
scores = dict()
for i in range(2,6):
params = {'polynomials__degree': i,'polynomials__include_bias': False}
#pipeline.set_params(**params)
pipeline.fit(X_train,y=yCO_logTrain,**params)
scores[i] = pipeline.score(X_train,yCO_logTrain)
scores
我收到错误 - TypeError: fit() got an unexpected keyword argument 'degree'
。
为什么即使参数以 format 命名,也会引发此错误<estimator_name>__<parameter_name>
?
解决方案
根据sklearn.pipeline.Pipeline
文档:
**fit_paramsdict of string -> object 传递给每个 step 的 fit 方法的参数,其中每个参数名称都有前缀,这样 step s 的参数 p 具有 key s__p。
这意味着通过这种方式传递的参数直接传递给s
step.fit()
方法。如果您检查PolynomialFeatures 文档,degree
则参数用于PolynomialFeatures
对象的构造,而不是其.fit()
方法。
如果您想为管道中的估计器/转换器尝试不同的超参数,您可以使用GridSearchCV,如下所示。这是链接中的示例代码:
from sklearn.pipeline import Pipeline
from sklearn.feature_selection import SelectKBest
pipe = Pipeline([
('select', SelectKBest()),
('model', calibrated_forest)])
param_grid = {
'select__k': [1, 2],
'model__base_estimator__max_depth': [2, 4, 6, 8]}
search = GridSearchCV(pipe, param_grid, cv=5).fit(X, y)
推荐阅读
- algorithm - AVL 树中的摊销时间计算
- python - 如何在主 python 脚本中获取 .py 脚本时传递变量
- flask - Flask Restul 默认参数
- php - 为什么 PHP 搜索页面显示没有结果的空白框?
- python - 我在代码中的分配错误之前引用了这个,即使在实现“全局”之后我也无法让它工作
- python - 特定数据框的问题:删除列,乘以另一个数据框
- python-3.x - 如何使用 Matplotlib 绘制日期之间距离不等的时间序列数据
- python - 我应该如何配置我的标头以对 APNs 进行 HTTP/2 POST 以避免“收到重复的伪标头字段”错误?
- javascript - 三个 Js GLTF 加载器模型没有出现
- c# - 对于不需要等待的任务返回接口方法,我应该如何处理编译器警告?