【发布时间】: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