Как оценить множественные классификаторы в конвейере с перекрестной проверкой GridSearchCV и KFold? - PullRequest
0 голосов
/ 02 июня 2019

Я бы хотел:

  1. оценка нескольких типов классификаторов
  2. в трубопроводе
  3. с использованием GridSearchCV для определения наилучших гиперпараметров
  4. с использованием перекрестной проверки KFold для оценки ошибки обобщения

Но я не уверен, как это должно выглядеть с функциональностью scikit-learn. По сути, к концу этой серии тестов я хочу узнать, какой классификатор был наиболее эффективным среди всех тестов и связанных с ним параметров.

После этого урока из scikit-learn , это то, что у меня есть:

Во-первых, основная часть моего кода:

inner_cv = KFold(n_splits=3, shuffle=False, random_state=SEED1)
outer_cv = KFold(n_splits=3, shuffle=False, random_state=SEED2)

model = create_pipeline(inner_cv)

# Nested CV with parameter optimization
scores = cross_validate(model, X, y, cv=outer_cv, scoring='f1_macro')

Ниже приведена функция для создания моего конвейера (create_vectorizer () просто возвращает ColumnTransformer, который применяет CountVectorizer к определенным столбцам моего DataFrame). В этой функции я включаю только KNeighborsClassifier, но я бы хотел оценить несколько классификаторов.

def create_pipeline(cross_validator):
    # create a dictionary of all values we want to test for n_neighbors
    param_grid = {'n_neighbors': np.arange(1, 10)}

    # use GridSearch to test all values for n_neighbors
    knn = KNeighborsClassifier()
    knn_gscv = GridSearchCV(knn, param_grid, cv=cross_validator)

    vectorizer = create_vectorizer()
    pipeline = Pipeline(memory=None,
                        steps=[
                            ('vectorizer', vectorizer),
                            ('knn_gscv', knn_gscv)
                        ])
    return pipeline    

В чем я не уверен, так это в том, что происходит передача в нескольких классификаторах.

  1. Нужно ли создавать отдельные объекты GridSearchCV для каждого классификатора, который я хочу проверить?
  2. Если последний шаг в конвейере должен быть оценщиком, как мне передать кратно для последнего шага?
  3. Можно ли обойтись без необходимости повторять все предыдущие шаги в конвейере?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...