簡體   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