【发布时间】:2020-07-11 00:50:09
【问题描述】:
我有一个二进制分类问题,我使用以下代码来获取我的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 中,与 feature setting 2 相比,我们在 'accuracy'、'precision_weighted'、'recall_weighted'、'f1_weighted' 方面得到了不错的结果。
但是,当谈到“roc_auc”时,feature setting 2 比 feature setting 1 更好。我发现这很奇怪,因为 feature setting 1 的所有其他指标都更好。
一方面,我怀疑会发生这种情况,因为我使用的是weighted 分数,而不是roc_auc。 sklearn中的二元分类可以做weighted roc_auc吗?
这个奇怪的 roc_auc 结果的真正问题是什么?
如果需要,我很乐意提供更多详细信息。
【问题讨论】:
标签: python machine-learning scikit-learn classification auc