我有 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。
我不知道 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))
但是 roc = round(roc_auc_score(y_test, test_scores))
用于监督学习,
在上面的例子中,如果没有ground Truth,我们可以使用roc auc吗?如果是,怎么办?