sub*_*kar 6 machine-learning one-class-classification
我的问题是关于新奇检测算法 - 隔离森林和一类 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)
Run Code Online (Sandbox Code Playgroud)
2- 生成 2D 数据集
X = 0.3 * rng.randn(1000, 2)
Run Code Online (Sandbox Code Playgroud)
3-训练 iForest 模型并预测异常值
clf = IsolationForest(random_state=rng, contamination=0)
clf.fit(X)
y_pred_train = clf.predict(X)
Run Code Online (Sandbox Code Playgroud)
4-打印异常数量
print(sum(y_pred_train==-1))
Run Code Online (Sandbox Code Playgroud)
这会给你0 个异常。现在,如果您将污染更改为 0.15,则程序会从您已有的同一数据集中指定150 个异常(由于RandomState(42) 也是如此)。
[参考]:
1 刘费托尼、丁凯明和周志华。“隔离森林。” 数据挖掘,2008。ICDM'08。第八届 IEEE 国际会议
2 刘费托尼、丁凯明和周志华。“基于隔离的异常检测。” ACM 数据知识发现汇刊 (TKDD),(2012)
| 归档时间: |
|
| 查看次数: |
1763 次 |
| 最近记录: |