У меня есть проблема двоичной классификации, где я использую следующий код, чтобы получить мои weighted avarege precision
, weighted avarege recall
, weighted avarege f-measure
и roc_auc
.
df = pd.read_csv(input_path+input_file)
X = df[features]
y = df[["gold_standard"]]
clf = RandomForestClassifier(random_state = 42, class_weight="balanced")
k_fold = StratifiedKFold(n_splits=10, shuffle=True, random_state=0)
scores = cross_validate(clf, X, y, cv=k_fold, scoring = ('accuracy', 'precision_weighted', 'recall_weighted', 'f1_weighted', 'roc_auc'))
print("accuracy")
print(np.mean(scores['test_accuracy'].tolist()))
print("precision_weighted")
print(np.mean(scores['test_precision_weighted'].tolist()))
print("recall_weighted")
print(np.mean(scores['test_recall_weighted'].tolist()))
print("f1_weighted")
print(np.mean(scores['test_f1_weighted'].tolist()))
print("roc_auc")
print(np.mean(scores['test_roc_auc'].tolist()))
Я получил следующие результаты для один и тот же набор данных с 2 различными настройками объекта.
Feature setting 1 ('accuracy', 'precision_weighted', 'recall_weighted', 'f1_weighted', 'roc_auc'):
0.6920, 0.6888, 0.6920, 0.6752, 0.7120
Feature setting 2 ('accuracy', 'precision_weighted', 'recall_weighted', 'f1_weighted', 'roc_auc'):
0.6806 0.6754 0.6806 0.6643 0.7233
Итак, мы видим, что в feature setting 1
мы получаем хорошие результаты для «точности», «точности_взвешенного», «отзыва_взвешенного», «f1_weighted» по сравнению с feature setting 2
.
Однако, когда дело доходит до 'roc_au c', feature setting 2
лучше, чем feature setting 1
. Я нашел это странным, потому что все остальные метри c были лучше с feature setting 1
.
С одной стороны, я подозреваю, что это происходит, поскольку я использую weighted
баллов для precision, recall and f-measure
, а не для roc_auc
. Можно ли сделать weighted roc_auc
для двоичной классификации в sklearn?
В чем реальная проблема для этих странных результатов roc_au c?
Я с радостью предоставлю более подробную информацию, если это необходимо.