获取 python pyod 中 ROC 曲线下的面积?

Get the area under a ROC curve in python pyod?

我有 5,000 次观察的数据。我将数据集一分为二:变量 (X_train) 和标记目标 (y_train)。我正在使用 pyod 因为它似乎是最受欢迎的 Python 异常检测库。

我使用以下代码使模型适合数据:

from pyod.models.knn import KNN
from pyod.utils import evaluate_print

clf = KNN(n_neighbors=10, method='mean', metric='euclidean')
clf.fit(X_train)
scores = clf.decision_scores_

模型现在已拟合,我有可能观察到的异常值存储在 scores 中。我手动计算了 ROC 曲线下的面积,它 returned 0.69.

我注意到这与使用时的结果相同:

evaluate_print('KNN with k=10', y=y_train, y_pred=scores)

其中 returns: KNN with k=10 ROC:0.69, precision @ rank n:0.1618.

我想知道 pyod 中是否有特定函数 return 只有 0.69.

我不知道 pyod,但 sklearn 有 roc_auc_score 或 auc 可以完成这项工作。它非常易于使用,我想只需一两行代码就可以处理您的项目。

from sklearn import metrics

fpr, tpr, thresholds = metrics.roc_curve(y_true=y_train, y_score=scores)
auc.append(metrics.auc(fpr, tpr))

pyod 包本身根据 sklearn.metrics.roc_auc_score 计算 ROC。您可以在 pyod 存储库的笔记本文件夹中的 Benchmark.ipynb 中看到它。因此,要仅获取 ROC,请使用以下命令: from sklearn.metrics import roc_auc_score

roc = round(roc_auc_score(y_test, test_scores))