machine-learning - 用于新奇检测的一类 SVM 和隔离森林
问题描述
我的问题是关于新奇检测算法 - 隔离森林和一类 SVM。我有一个训练数据集(具有 4-5 个特征),其中所有样本点都是内点,我需要将任何新数据分类为内点或异常点,并相应地摄取另一个数据帧。
在尝试使用隔离森林或一类 SVM 时,我必须在训练阶段输入污染百分比(nu)。但是,由于训练数据集没有任何污染,我是否需要将异常值添加到训练数据框中并将该异常值部分作为 nu.
同样在使用隔离森林时,我注意到每次我预测时异常值百分比都会发生变化,即使我没有更改模型。除了进入扩展隔离森林算法之外,有没有办法解决这个问题。
提前致谢。
解决方案
关于隔离林的污染,
如果您正在为正常实例(所有内点)进行训练,则应将污染设为零。如果您不指定此项,则污染将为 0.1(对于版本 0.2)。
以下是显示这一点的简单代码,
1- 导入库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest
rng = np.random.RandomState(42)
2- 生成二维数据集
X = 0.3 * rng.randn(1000, 2)
3- 训练 iForest 模型并预测异常值
clf = IsolationForest(random_state=rng, contamination=0)
clf.fit(X)
y_pred_train = clf.predict(X)
4-打印异常数量
print(sum(y_pred_train==-1))
这会给你0个异常。现在,如果您将污染更改为 0.15,程序会从您已经拥有的同一数据集中指定150 个异常(由于RandomState(42)相同)。
[参考]:
1 Liu, Fei Tony, Ting, Kai Ming 和 Zhou, Zhi-Hua。“隔离森林。” 数据挖掘,2008 年。ICDM'08。第八届 IEEE 国际会议
2 Liu, Fei Tony, Ting, Kai Ming and Zhou, Zhi-Hua。“基于隔离的异常检测。” 从数据中发现知识的 ACM 交易 (TKDD),(2012)
推荐阅读
- python - 如何将上传的文件传递到另一个视图(下一页)以进行进一步处理
- java - Java 邮件应用程序
- ldap - sssd 使用 access_provider 做什么?
- typescript - 打字稿:将 null 传递给 window.addEventListener
- docker - 部署设置
- c++ - 用分隔符 C++ 分解字符串
- .htaccess - .htaccess 中的重定向路径和 410 其他所有内容
- java - 卷曲到放心API
- docker - 如何使用“python:alpine”构建自定义映像以与 AWS Lambda 一起使用?
- javascript - 如何在 Material UI 中正确对齐 InputLabel?