获取 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))
我有 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))