我正在尝试使用 5000 个观察值和 800 个特征来检测我的数据集中的异常值。我已按照http://scikit-learn.org/stable/auto_examples/ensemble/plot_isolation_forest.html中的简单步骤进行操作
stackoverflow 和其他来源中也有一些示例,但是,我找不到关于隔离森林返回的异常值的解释的体面解释。首先,我所做的是:
from sklearn.ensemble import IsolationForest
X_train = trbb[check_cols]
clf = IsolationForest(n_jobs=6,n_estimators=500, max_samples=256, random_state=23)
clf.fit(X_train)
y_pred_train = clf.predict(X_train)
y_pred_train
这将返回 array([1, 1, 1, ..., 1, 1, 1]) 其中 -1 是异常值。
y_pred_train 的形状为 5000,与 X_train[0] 相同。所以-1的索引对应X_train的索引。对于经验。IF 返回的异常值索引之一是 532。因此这意味着该索引中的点(在 800 维空间中)被检测为异常值。检测到这一点后,我该如何接近并使用结果进行更多挖掘?例如,我能否找到导致异常值的最重要特征?
为此,我应用了 PCA 并将新创建的 (50) 个组件用作新变量。然后,通过绘制带有 IF 返回的 -1 和 1 的组件对,我试图了解可能的异常值。确实,我观察到如下几点:
在这里,黑点是-1s(异常值),黄色点是1s(inliers)。我的解释是,如果两个组件的值都非常高,则可能会导致异常值。但是,我如何确定哪些原始值对这些异常值最有效?例如,我可以在相关组件中使用权重最高的原始变量(让我们选择前 10 个)吗?或者你能建议任何其他方法吗?
提前致谢!
