0

有没有办法为一维数组或列表实现 sklearn 隔离森林?我遇到的所有示例都是二维或更多的数据。

我现在已经开发了一个具有三个功能的模型,下面提到了示例代码:

# dataframe of three columns
df_data = datafr[['col_A', 'col_B', 'col_C']]
w_train = page_data[:700]
w_test = page_data[700:-2]

from sklearn.ensemble import IsolationForest
# fit the model
clf = IsolationForest(max_samples='auto')
clf.fit(w_train)

#testing it using test set
y_pred_test = clf.predict(w_test)

我主要依赖的参考:IsolationForest example | scikit-学习

df_data 是一个包含三列的数据框。我实际上是在寻找 1 维或列表数据中的异常值。

另一个问题是如何调整隔离林模型?其中一种方法是增加污染值以减少误报。但是如何使用其他参数,如 n_estimators、max_samples、max_features、versbose 等。

4

1 回答 1

2

将隔离森林应用于一维数组或列表是没有意义的。这是因为在这种情况下,它只是从特征到目标的一对一映射。

您可以阅读官方文档以更好地了解不同的参数有助于

  • 污染

数据集的污染量,即数据集中异常值的比例。在拟合时用于定义决策函数的阈值。

尝试在 [0,0.5] 范围内尝试不同的值,看看哪一个给出了最好的结果

  • 最大特征

从 X 中提取以训练每个基本估计器的特征数。

尝试 5、6、10 等任何您选择的 int 值,并使用最终测试数据进行验证

  • n_estimators尝试多个值,例如 10、20、50 等,看看哪个效果最好。

您还可以使用GridSearchCV自动执行此参数估计过程。

只需尝试使用 gridSearchCV 尝试不同的值,看看哪一个给出了最好的结果。

尝试这个

from sklearn.model_selection import GridSearchCV
from sklearn.metrics import f1_score, make_scorer

my_scoring_func = make_scorer(f1_score)
parameters = {'n_estimators':[10,30,50,80], 'max_features':[0.1, 0.2, 0.3,0.4], 'contamination' : [0.1, 0.2, 0.3]}
iso_for =  IsolationForest(max_samples='auto')
clf = GridSearchCV(iso_for, parameters,  scoring=my_scoring_func)

然后用于clf拟合数据。虽然请注意 GridSearchCV 需要机器人xy(即训练数据和标签)的fit方法。

注意:如果您希望将 GridSearchCv 与 Isolation forest 一起使用,您可以阅读此博客文章以供进一步参考,否则您可以手动尝试使用不同的值并绘制图表以查看结果。

于 2018-06-20T21:55:49.857 回答