PyOD 提供的异常检测算法如下:
异常检测算法多数为无监督学习,只需要X(输入数据),不需要y(标签)。PyOD 的使用方法与 Sklearn 的聚类分析很像,检测器(detector)有统一的API。完整的API使用可参考API CheatSheet - pyod 0.6.8 documentation:
- fit(X): 用数据X来“训练/拟合”检测器clf。即在初始化检测器clf后,用X来“训练”它。
- fit_predict_score(X, y): 用数据 X 来训练检测器 clf,预测 X 的值,在真实标签 y 上进行评估。此处的 y 只是用于评估,而非训练
- decision_function(X): 在检测器 clf 被fit后,可通过该函数预测未知数据的异常程度,返回值为原始分数,并非0和1,返回分数越高,则该数据点的异常程度越高
- predict(X): 在检测器clf被 fit 后,可通过该函数来预测未知数据的异常标签,返回值为二分类标签(0为正常点,1为异常点)
- predict_proba(X): 在检测器clf被fit后,预测未知数据的异常概率,返回该点是异常点概率
当检测器clf被初始化且fit(X)函数被执行后,clf 会生成两个重要的属性:
- decision_scores: 数据X上的异常打分,分数越高,则该数据点的异常程度越高
- labels_: 数据X上的异常标签,返回值为二分类标签(0为正常点,1为异常点)
初始化检测器 clf 后,可直接用数据 X 来训练,得到 X 的异常分值(clf.decision_scores)以及异常标签(clf.labels_)。clf 被训练后(当fit函数被执行后),使用decision_function()和predict()函数来对未知数据进行训练。
使用实例:
from pyod.models.knn import KNN # imprt kNN分类器
# 训练一个kNN检测器
clf_name = 'kNN'
clf = KNN() # 初始化检测器clf
clf.fit(X_train) # 使用X_train训练检测器clf
# 返回训练数据X_train上的异常标签和异常分值
y_train_pred = clf.labels_ # 返回训练数据上的分类标签 (0: 正常值, 1: 异常值)
y_train_scores = clf.decision_scores_ # 返回训练数据上的异常值 (分值越大越异常)
# 用训练好的clf来预测未知数据中的异常值
y_test_pred = clf.predict(X_test) # 返回未知数据上的分类标签 (0: 正常值, 1: 异常值)
y_test_scores = clf.decision_function(X_test) # 返回未知数据上的异常值 (分值越大越异常)
# 评估预测结果
print("\nOn Test Data:")
evaluate_print(clf_name, y_test, y_test_scores)
# 可视化
visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred,
y_test_pred, show_figure=True, save_figure=False)
参考: