为什么roc_auc在sklearn中产生奇怪的结果?

我有一个二分类问题,我使用以下代码来获取我的加权平均精确度加权平均召回率加权平均F-measureroc_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())) 

我对同一数据集的两种不同特征设置得到了以下结果。

特征设置1 ('accuracy', 'precision_weighted', 'recall_weighted', 'f1_weighted', 'roc_auc'):  0.6920, 0.6888, 0.6920, 0.6752, 0.7120特征设置2 ('accuracy', 'precision_weighted', 'recall_weighted', 'f1_weighted', 'roc_auc'):0.6806  0.6754  0.6806  0.6643  0.7233

因此,我们可以看到,在特征设置1中,与特征设置2相比,’accuracy’, ‘precision_weighted’, ‘recall_weighted’, ‘f1_weighted’ 的结果更好。

然而,当涉及到’roc_auc’时,特征设置2特征设置1更好。我觉得这很奇怪,因为其他所有指标在特征设置1中都更好。

一方面,我怀疑这是因为我对precision, recall和f-measure使用了加权分数,而对roc_auc没有使用。是否可以在sklearn中对二分类进行加权roc_auc

这个奇怪的roc_auc结果的真正问题是什么?


回答:

这并不奇怪,因为将所有这些其他指标与AUC进行比较就像是在比较苹果和橘子。

以下是整个过程的高层次描述:

  • 概率分类器(如这里的RF)产生概率输出p[0, 1]中。
  • 为了获得硬类预测(0/1),我们对这些概率应用一个阈值;如果没有明确设置(如这里),这个阈值被隐式地认为是0.5,即如果p>0.5class=1,否则class=0
  • 像accuracy, precision, recall和f1-score这样的指标是基于硬类预测0/1计算的,即在应用阈值之后计算的。
  • 相比之下,AUC测量的是二分类器在所有可能阈值范围内的平均性能,而不是针对特定阈值的性能。

所以,这种情况确实可能发生,确实可能导致新从业者的困惑。

我在这个类似问题中的回答的第二部分可能会对更多细节有所帮助。引用如下:

根据我的经验,至少,大多数机器学习从业者认为AUC分数衡量的东西与它实际上衡量的东西不同:常见的(不幸的)用法就像任何其他越高越好的指标一样,比如accuracy,这自然可能导致像你表达的那样困惑的谜题。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注