我正在使用隔离森林构建非常基本的无监督离群值检测器。我想用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要求输入为整数而不是像这种情况下的列表。
答案 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)