Как использовать средний балл 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, а не усреднение каждой отдельной оценки метки).

0 ответов

Другие вопросы по тегам