Я бы хотел:
- оценка нескольких типов классификаторов
- в трубопроводе
- с использованием GridSearchCV для определения наилучших гиперпараметров
- с использованием перекрестной проверки 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
В чем я не уверен, так это в том, что происходит передача в нескольких классификаторах.
- Нужно ли создавать отдельные объекты GridSearchCV для каждого классификатора, который я хочу проверить?
- Если последний шаг в конвейере должен быть оценщиком, как мне передать кратно для последнего шага?
- Можно ли обойтись без необходимости повторять все предыдущие шаги в конвейере?
Спасибо.