ValueError:使用 GridSearchCV 时估计器 SelectFromModel 的参数 C 无效

Posted

技术标签:

【中文标题】ValueError:使用 GridSearchCV 时估计器 SelectFromModel 的参数 C 无效【英文标题】:ValueError: Invalid parameter C for estimator SelectFromModel when using GridSearchCV 【发布时间】:2020-07-12 03:18:42 【问题描述】:

我正在使用 python 3.7.6,我正在尝试使用 GridSearchCV 调整一些超参数

我通过以下步骤创建了pipelinescaling-> feature selection -> model

但我收到关于特征选择步骤的C 参数的错误。

    steps = [('scaler', StandardScaler()),
             ('FeatureSelection', SelectFromModel(LogisticRegression(penalty='l1', solver='liblinear'))),
             ('SVM', SVC())]
    pipeline = Pipeline(steps)  # define the pipeline object.

    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=30, stratify=y)

    parameteres = 'SVM__C': [0.001, 0.1, 10, 100, 10e5],
                   'SVM__gamma':[0.1,0.01],
                   'FeatureSelection__C':['0','0.5']
    grid = GridSearchCV(pipeline, param_grid=parameteres, cv=5, n_jobs=-1)
    grid.fit(X_train, y_train)
    print("pipeline score: ", grid.score(X_test, y_test))

我收到以下错误:

ValueError: Invalid parameter C for estimator SelectFromModel(estimator=LogisticRegression(C=1.0, class_weight=None,
                                             dual=False, fit_intercept=True,
                                             intercept_scaling=1, l1_ratio=None,
                                             max_iter=100, multi_class='auto',
                                             n_jobs=None, penalty='l1',
                                             random_state=None,
                                             solver='liblinear', tol=0.0001,
                                             verbose=0, warm_start=False),
                max_features=None, norm_order=1, prefit=False, threshold=None). Check the list of available parameters with `estimator.get_params().keys()`.

出了什么问题,我该如何解决?

【问题讨论】:

【参考方案1】:

按原样,管道在SelectFromModel 中查找参数C,但找不到(不足为奇,因为模块没有这样的参数),并引发错误。由于您实际上需要LogisticRegression 的参数C,因此您应该更深入一点:将parameters 网格中的FeatureSelection__C 更改为FeatureSelection__estimator__C,您会没事的。

【讨论】:

@user3668129 你确定??我实际上已经尝试过(不同的数据)并且它有效(我什至复制了错误)。你确定有正确的 2 个下划线 (__)? 你给了我很好的提示。我不得不删除“”并且它有效:'FeatureSelection__estimator__C':[0.1,0.5] @user3668129 我告诉过你;)(但你已经显示了单引号,而不是双引号)

以上是关于ValueError:使用 GridSearchCV 时估计器 SelectFromModel 的参数 C 无效的主要内容,如果未能解决你的问题,请参考以下文章

Python:ValueError:使用序列设置数组元素

ValueError("无法使用 `eval()` 评估张量:

ValueError: '对象对于所需数组来说太深'

ValueError:不能使用 None 作为查询值 django ajax

使用 python 模块请求上传 Strava GPX 时出现 ValueError - 为啥?

ValueError:不支持连续[重复]