使用参数网格隔离林的自定义GridSearch

时间:2018-09-26 09:57:17

标签: python pandas scikit-learn

我正在使用隔离森林构建非常基本的无监督离群值检测器。我想用GridSearchCV调整超级参数,但是GridSearch需要我没有的标签。我决定构建定制的GridSearch,将每个计算存储在数据框中。代码看起来像这样

    params = {
    'n_estimators': [100,125, 150],
    'contamination': [0.0001, 0.001],
    'bootstrap': [True, False],
    'max_features': [1, 2]
}

clf = IsolationForest(random_state=42)
result2 = pd.DataFrame(columns=['n_estimators','contamination','bootstrap','max_features'])
for g in ParameterGrid(params):
    clf.set_params(**params)
    clf.fit(X_train)
    pred_clf = clf.predict(X_test)
    unique, counts = np.unique(pred_clf, return_counts=True)
    result = (dict(zip(unique, counts)))
    result = result2.append([result,params], ignore_index=True)

但是,在拟合时我遇到了一个问题,因为n_estimators要求输入为整数而不是像这种情况下的列表。

1 个答案:

答案 0 :(得分:0)

您需要在循环内设置g而不是params

代替此:

for g in ParameterGrid(params):
    clf.set_params(**params)

执行此操作:

for g in ParameterGrid(params):
    clf.set_params(**g)
    ...
    ...
    result = result2.append([result,g], ignore_index=True)