[英]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.