ValueError: Неверный параметр C для оценщика SelectFromModel при использовании GridSearchCV - PullRequest
0 голосов
/ 31 марта 2020

Я использую python 3.7.6, и я пытаюсь настроить некоторые гиперпараметры, используя GridSearchCV

Я создал pipeline со следующими шагами: scaling-> 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 Ответ

1 голос
/ 31 марта 2020

Как есть, конвейер ищет параметр C в SelectFromModel, не может его найти (что неудивительно, поскольку модуль не имеет такого параметра) и выдает ошибку. Поскольку вам действительно нужен параметр C, равный LogisticRegression, вы должны go уровень глубже: измените FeatureSelection__C на FeatureSelection__estimator__C в вашей сетке parameters, и все будет в порядке.

...