我的问题是关于新颖性检测算法-隔离林和一类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-生成2D数据集
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 and Zhou, Zhi-Hua. "Isolation forest." Data Mining, 2008. ICDM'08. Eighth IEEE International Conference

2 Liu, Fei Tony, Ting, Kai Ming and Zhou, Zhi-Hua. "Isolation-based anomaly detection." ACM Transactions on Knowledge Discovery from Data (TKDD), (2012)

关于machine-learning - 一类SVM和隔离林,用于新颖性检测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58394996/

10-12 22:11