Есть ли способ, чтобы параметры уменьшения размерности зависели от предыдущего шага в линии склеарна? - PullRequest
0 голосов
/ 03 марта 2020

Я использую конвейер sklearn и хочу использовать для него gridsearch. Вот мой код:

steps = [('vectorize', CountVectorizer()),
         ('dim_red', TruncatedSVD(random_state=539)),
         ('clf', RandomForestClassifier(random_state=173))]
model = Pipeline(steps=steps)

grid_params = \
    {'vectorize__min_df': range(1, 11),
     'vectorize__max_df': [i/100 for i in range(90, 101)],
     # 'dim_red__n_components': range(100, 501, 100),
     'clf__min_samples_split': [pow(2, i) for i in range(1, 11)],
     'clf__min_samples_leaf': [pow(2, i) for i in range(0, 11)]}
grid_search = RandomizedSearchCV(model, grid_params, scoring='accuracy',
                                 verbose=10, n_iter=100, random_state=89)

Причина, по которой я закомментировал строку dim_red в grid_params, заключается в том, что параметры в шаге vectorize могут изменять количество столбцов, выводимых на этом шаге. и TruncatedSVD выдает ошибку, если вы передаете n_components больше, чем число столбцов в X (когда вы вызываете fit).

Итак, мне было интересно: есть ли способ обойти это? Может быть, если n_components слишком высоко, он может пропустить эту комбинацию параметров? Или что-нибудь еще?

1 Ответ

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

Я понял это ... нужно использовать параметр error_score. Я сделал это:

grid_search = RandomizedSearchCV(model, grid_params, scoring='accuracy',
                                 verbose=10, n_iter=100, random_state=89,
                                 error_score=-1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...