具有多种特征的隔离森林将一切都检测为异常

Isolation forest with multiple features detecting everything as an anomaly

我有一个隔离林实现,我在其中获取特征(所有都是数字);将它们缩放到 0 到 1

之间
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data = scaler.fit_transform(df)
x = pd.DataFrame(data)

然后调用预测:

import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest
clf = IsolationForest(max_samples=100, random_state=42).fit(x)
clf.predict(x)

在这个例子中,我有 23 个数值特征。

当我 运行 脚本时,它 returns 绝对每个结果 1。

当我将特征集限制为 2 列时,它 returns 是 1 和 -1 的混合体。

我该如何解决这个问题?

谢谢

综上所述,Isolation Forest所做的就是统计隔离一个样本所需的分裂次数。要生成树,它 随机 select 一个特征,然后随机 select 一个 selected 特征的最大值和最小值之间的分割值。

想法是较短的路径可能会异常。

您可能遇到的问题是您有几个对区分异常没有用的特征。因此,由于大量的“非重要”特征,重要特征被隐藏了。因此,您在第二个模型中的两个特征 select 可能非常具有解释性。

如果您训练一个具有最重要特征的 IsolationForest 模型,则在正常样本和异常样本之间隔离一个样本所需的拆分次数差异会更大。所以分类会更容易。每个问题在不同数量的特征下都会表现得更好。

因此,要解决您的问题,请尝试通过了解您的实际问题来 select 最好的功能。此外,尝试仅使用正常样本来拟合模型,或者至少,大多数样本 (90%) 都是正常的。如果不是,您的模型将了解到某些异常现象很常见,并将它们归类为正常现象。但是,如果您知道数据训练中哪些值异常,请调整超参数 contamination.