pyod包是异常值检测的重要集成工具,开发者使用的演示方式是.mat文件,那么如何用csv文件进行pyod包的使用,并绘制ROC曲线呢?
1.导包
from pyod.models.lof import LOF # imprt LOF分类器
import pandas as pd
from sklearn.metrics import roc_auc_score,roc_curve,auc
import matplotlib.pyplot as plt
2.导入数据集,这里使用的是经典的PIma印第安人糖尿病数据集
df = pd.read_csv('Pima.csv')
X = df.drop(['label'], axis=1) ##x自变量
y = df['label'] ##y因变量
3.训练一个LOF检测器
clf_name = 'kNN'
clf = LOF() # 初始化检测器
clf.fit(X) # 使用X训练检测器clf
4.预测异常值
# 用训练好的clf来预测未知数据中的异常值
y_test_pred = clf.predict(X) # 返回未知数据上的分类标签 (0: 正常值, 1: 异常值)
y_test_scores = clf.decision_function(X) # 返回未知数据上的异常值
roc = roc_auc_score(y, y_test_scores)
print(roc)
5.绘制ROC曲线
fpr, tpr, threshold = roc_curve(y, y_test_scores)
roc_auc = auc(fpr, tpr)
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([-0.1, 1.05])
plt.ylim([-0.1, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()