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

问题描述 投票:0回答:3

我有 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 曲线下的面积,结果为 0.69。

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

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

返回:

KNN with k=10 ROC:0.69, precision @ rank n:0.1618

我想知道

pyod
中是否有一个特定的函数只能返回0.69。

python knn roc auc
3个回答
2
投票

我不知道 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))

0
投票

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))


0
投票

但是 roc = round(roc_auc_score(y_test, test_scores))

用于监督学习,

在上面的例子中,如果没有ground Truth,我们可以使用roc auc吗?如果是,怎么办?

© www.soinside.com 2019 - 2024. All rights reserved.