1

我有一个包含多个离散标签的数据集,比如 4、5、6。在此我运行 ExtraTreesClassifier(我还将在相同的数据上运行 Multinomial logit afterword,这只是一个简短的示例),如下所示。:

from sklearn.ensemble import ExtraTreesClassifier
from sklearn.metrics import roc_curve, auc

clf = ExtraTreesClassifier(n_estimators=200,random_state=0,criterion='gini',bootstrap=True,oob_score=1,compute_importances=True)
# Also tried entropy for the information gain
clf.fit(x_train, y_train)
#y_test is test data and y_predict is trained using ExtraTreesClassifier
y_predicted=clf.predict(x_test)

fpr, tpr, thresholds = roc_curve(y_test, y_predicted,pos_label=4) # recall my labels are 4,5 and 6
roc_auc = auc(fpr, tpr)
print("Area under the ROC curve : %f" % roc_auc)

问题是 -是否有类似平均 ROC 曲线的东西- 基本上我可以将所有 tpr 和 fpr 分别加起来以获得每个标签值,然后采取手段(顺便说一句有意义吗?) - 然后只需调用

# Would this be statistically correct, and would mean something worth interpreting?
roc_auc_avearge = auc(fpr_average, tpr_average)
print("Area under the ROC curve : %f" % roc_auc)

我假设,我会得到类似于这个后记的东西——但在这种情况下我如何解释阈值? 如何为 knn 模型绘制 ROC 曲线

因此,还请提及在这种情况下我是否可以/应该获得单独的阈值,以及为什么一种方法(统计上)优于另一种方法?

到目前为止我尝试过的(除了平均):

在更改 pos_label = 4 ,然后 5 & 6 并绘制 roc 曲线时,我发现性能非常差,甚至低于 y=x (完全随机且 tpr=fpr 情况)我应该如何解决这个问题?

4

1 回答 1

3

ROC 曲线平均法已由Hand & Till 在 2001 年提出。他们基本上计算所有比较对(4 对 5、4 对 6 和 5 对 6)的 ROC 曲线并对结果进行平均。

当您使用 计算 ROC 曲线时pos_label=4,您隐含地说其他标签是负数(5 和 6)。请注意,这与 Hand & Till 的提议略有不同。

几点注意事项:

  • 您应该确保您的分类器以一种对您的 ROC 分析有意义的方式进行了训练。如果您pos_label=5在 中说roc_curve,并且您的分类器经过训练可以将 5 识别为介于 4 和 6 之间的中间值,那么您肯定不会在这里得到任何有用的信息
  • 如果你得到 AUC < 0.5,这意味着你以错误的方式看待它(你应该扭转你的预测)
  • 一般来说,ROC 分析对于二元分类很有用。对于多类问题是否有意义取决于具体情况,对您而言可能并非如此。
于 2014-01-27T09:55:31.417 回答