【问题标题】:Display inverted ROC Curve显示反转 ROC 曲线
【发布时间】:2021-12-27 14:42:06
【问题描述】:

我的异常检测算法给了我一个预测数组,其中所有大于 0 的值都应该属于正类 (= 0),而所有其他值都应该归类为异常 (= 1)。我也构建了我的分类器:(我有三个数据集,一个只有非异常值,另一个有所有异常值):

normal = np.load('normal_score.pkl')
anom_1 = np.load('anom1_score.pkl')
anom2_ = np.load('anom2_score.pkl')

y_normal = np.asarray([0]*len(normal)) # I know they are normal
y_anom_1 = np.asarray([1]*len(anom_1)) # I know they are anomaly
y_anom_2 = np.asarray([1]*len(anom_2)) # I know they are anomaly

score = np.concatenate([normal, anom_1, anom_2])
y = np.concatenate([y_normal, y_anom_1, y_anom_2])

auc = roc_auc_score(y, score)
fpr, tpr, thresholds = roc_curve(y, score)
display = RocCurveDisplay(fpr=fpr, tpr=tpr, roc_auc=auc)

我得到的 AUC 分数是 0.02,情节如下:

据我了解,这个结果很好,因为我应该只反转标签以使其接近 0.98,但我的问题是:有没有办法指定它并通过函数自动反转它? 我的正常分数数据中的值都在 (21;57) 范围内,异常值在 (-1090; -1836) 范围内,所以应该很容易发现它们。

【问题讨论】:

    标签: machine-learning scikit-learn roc multilabel-classification false-positive


    【解决方案1】:

    “我应该撤消标签,使其变得近0.98” em>
    这不是应该做的。这是因为如果你可以预测“正常”,让我们说,以95%的信心,你不能从这里推断出来,你也可以预测“异常”,具有相同的信心。 在可能如此如此的情况下,它变得至关重要。

    您应该定义这两者中的哪两个以高信任和目标预测度量是什么。例如,如果您在精度和召回的目标上进行预测“异常”,那么那么应该是您的类别“1”并相应地计算指标,反之亦然。

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2018-01-03
      • 2019-12-26
      • 2019-02-27
      • 2014-07-20
      • 2012-05-02
      • 2018-04-25
      • 2019-02-09
      • 1970-01-01
      相关资源
      最近更新 更多