Как использовать средний балл F1 в GridSearchCV с OneVsRestClassifier?
У меня проблема несбалансированной классификации с несколькими метками, и я использую (упрощенный) код ниже для определения гиперпараметров.
# Pipeline
pipeline = Pipeline([
('clf', OneVsRestClassifier(LogisticRegression()))
])
# Parameters to test in Grid Search
parameters = {
'clf__estimator__C': [1]
}
# Use stratified sampling in each iteration
stratified_k_fold_cv = IterativeStratification(n_splits=2, order=1)
# Optimize for weighted F1-score
scorer = make_scorer(f1_score, average="weighted")
# Grid Search
grid_lr = GridSearchCV(pipeline, parameters, cv=stratified_k_fold_cv, scoring=scorer)
grid_lr.fit(X_train_tfidf, Y_train)
# Print results
print("Best Parameters: {}".format(grid_lr.best_params_))
print("Mean cross-validated F1-score of the best estimator: {}".format(grid_lr.best_score_))
Для каждой из 15 меток у меня есть бинарные классы, которые сильно несбалансированы, иногда ближе к 0, а иногда к 1 классу. Поэтому я хотел бы для каждой метки посмотреть средний балл F1 класса 0 и 1, используя
f1_score(average="weighted")
. Однако, когда дело доходит до агрегирования оценок меток F1, я хотел бы снова построить среднее значение (из 15 усредненных оценок F1). Как это можно реализовать? в
make_scorer
Функция, которую я могу указать, чтобы использовать средневзвешенное значение только один раз (и думаю, что это учитывает усреднение оценок метки F1, а не усреднение каждой отдельной оценки метки).