如何使用隔离森林

dap*_*apo 17 python machine-learning outliers scikit-learn

我试图检测我的数据集的异常值,我找到了sklearn的隔离森林.我无法理解如何使用它.我将训练数据放入其中,它给了我一个带-1和1值的向量.

任何人都可以向我解释它是如何工作的并提供一个例子吗?

我怎么知道异常值是"真正的"异常值?

调整参数?

这是我的代码:

clf = IsolationForest(max_samples=10000, random_state=10)
clf.fit(x_train)
y_pred_train = clf.predict(x_train)
y_pred_test = clf.predict(x_test)

[1 1 1 ..., -1 1 1]
Run Code Online (Sandbox Code Playgroud)

Bha*_*yay 22

似乎你有很多问题,让我尽我所知逐一回答.- 这个怎么运作? - >它的工作原理是任何数据集中异常值的性质,即异常值"很少且不同",这与典型的基于聚类或基于距离的算法完全不同.在顶层,它的工作原理是,异常值在任何数据集中与"正常"点相比,"隔离"的步骤更少.为此,这就是IF所做的,假设您有训练数据集X,其中n个数据点各有m个特征.在训练中,IF为不同的特征创建隔离树(二叉搜索树).对于训练,您有3个用于调整的参数,一个是隔离树的数量(sklearn_IsolationForest中的'n_estimators'),第二个是样本数(sklearn_IsolationForest中的'max_samples'),第三个是从X绘制以训练每个参数的数量.基本估算器(sklearn_IF中的'max_features').'max_sample'是从原始数据集中选择的用于创建隔离树的随机样本数.

在测试阶段,它从所有经过训练的隔离树中找到测试数据点的路径长度,并找到平均路径长度.路径长度越高,点越正常,反之亦然.基于平均路径长度.它计算异常分数,decision_function sklearn_IF的可以用来获得此.对于sklearn_IF,降低分数,样本更加异常.根据异常分数,您可以通过在sklearn_IF对象中设置适当的污染值来确定给定样本是否异常 .污染的默认值为0.1,您可以调整以确定阈值.数据集的污染量,即数据集中异常值的比例.

调整参数 训练 - > 1. n_estimators,2.max_samples,3.max_features.测试 - > 1.污染


Mir*_*ber 8

-1表示异常值(根据拟合模型).有关流程的精确描述,请参阅IsolationForest示例.如果您有一些先验知识,可以提供更多参数以获得更准确的拟合.例如,如果您知道污染(数据集中异常值的比例),您可以将其作为输入提供.默认情况下,假设为0.1.请参阅此处的参数说明.