最近打算入坑异常检测,准备先从应用开始,先尝试着用一下相关的工具和算法,有一个直观的感受,然后再从应用的过程中寻找切入点,逐步了解相关的理论和模型。pyod就是一个非常符合我当下需求的一个工具箱,其中集成了从经典模型到新兴算法的数十种异常检测算法与模型,因此在这里先对他进行了一个大致的了解。
- 简介:
- pyod(Python Outlier Detection)是一个集成了30余种异常检测方法和模型的Python工具箱。从经典的 LOF (SIGMOD 2000) 到近两年的 COPOD (ICDM 2020) 和 SUOD (MLSys 2021) 。
- 特性:
- 丰富的模型,从 scikit-learn 中的经典算法,到近期的深度学习算法,以及诸如 COPOD 的新兴算法。
- 兼容 Python2 和 Python3。
- pyod对所涵盖的各种异常检测算法提供了统一的API,便于学习和使用。
- 范例:
from pyod.models.copod import COPOD
clf = COPOD()
clf.fit(X_train)
y_train_scores = clf.decision_scores_
y_test_scores = clf.decision_function(X_test)
- 安装:
pip install pyod
pip install --upgrad pyod
conda install -c conda-forge pyod
git clone https://github.com/yzhao062/pyod.git
cd pyod
pip install .
- 可选择安装的依赖(特定模型需要)
- combo(models/combination.py 和 FeatureBagging 需要)
- keras(AutoEncoder以及其他的深度学习模型需要)
- tensorflow(同上)
- suod(SUOD模型需要)
- xgboost(XGBOD需要)
- 各模型通用的API(全部API参见此处):
- fit(X): 训练模型。
- decision_function(X): 用训练好的模型预测 X。 的异常得分(raw anomaly score)
- predict(X): 用训练好的模型预测某个特定的样本 X 是否为异常样本。
- predict_proba(X):
- 训练好的模型的常用属性:
- decision_scores_: 训练集样本的异常得分(outlier scores),得分越高的样本越有可能是异常样本。
- labels_: 训练集样本的标签,0 代表正常样本,1 代表异常样本。
- 模型的保存与加载:
dump(clf, 'clf.joblib')
clf = load('clf.joblib')
y_test_pred = clf.predict(X_test)
y_test_scores = clf.decision_function(X_test)
- 使用 SUOD 框架进行快速训练
- 对pyod中所包涵的模型,可以使用 SUOD 框架对多个模型进行快速训练以及联合预测,详见SUOD 论文
from pyod.models.suod import SUOD
detector_list = [LOF(n_neighbors=15), LOF(n_neighbors=20),
LOF(n_neighbors=25), LOF(n_neighbors=35),
COPOD(), IForest(n_estimators=100),
IForest(n_estimators=200)]
clf = SUOD(base_estimators=detector_list, n_jobs=2, combination='average',
verbose=False)
clf.fit(X_train)
y_test_pred = clf.predict(X_test)
y_test_scores = clf.decision_function(X_test)
|