最近打算入坑异常检测,准备先从应用开始,先尝试着用一下相关的工具和算法,有一个直观的感受,然后再从应用的过程中寻找切入点,逐步了解相关的理论和模型。pyod就是一个非常符合我当下需求的一个工具箱,其中集成了从经典模型到新兴算法的数十种异常检测算法与模型,因此在这里先对他进行了一个大致的了解。
# 训练 COPOD 模型 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 # 安装pyod pip install --upgrad pyod # 更新pyod(非必须)
conda install -c conda-forge pyod
git clone https://github.com/yzhao062/pyod.git cd pyod pip install .
# 保存模型 dump(clf, 'clf.joblib') # 加载模型 clf = load('clf.joblib') # 加载后得到的 clf 可以直接调用上述 API 进行使用 y_test_pred = clf.predict(X_test) # outlier labels (0 or 1) y_test_scores = clf.decision_function(X_test) # outlier scores
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)] # 设定并行进程的数量(n_jobs=2),以及联合预测的方式(combination='average') clf = SUOD(base_estimators=detector_list, n_jobs=2, combination='average', verbose=False) # 之后就可以把 clf 当做一个常规的模型,调用API进行训练和预测 clf.fit(X_train) y_test_pred = clf.predict(X_test) y_test_scores = clf.decision_function(X_test)