繁体   English   中英

在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 曲线下的面积,结果为 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是否有一个特定的函数, pyod只会返回 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 存储库的 notebooks 文件夹中的 Benchmark.ipynb 中看到。 因此,要仅获取 ROC,请使用: from sklearn.metrics import roc_auc_score

roc = round(roc_auc_score(y_test, test_scores))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM