Настройка гиперпараметра с использованием hyperopt sklearn с RandomForestClassifier
В настоящее время я пытаюсь оптимизировать гиперпараметры, используя либо RandomizedSearchCV
или же GridSearchCV
, Для сравнения я хочу попробовать hyperopt, который также доступен как hyperopt-sklearn
( https://github.com/hyperopt/hyperopt-sklearn). К сожалению, документации не так много, поэтому я не уверен, как ее использовать.
Есть ли подобный способ использовать hyperopt, как я сейчас делаю со случайным и сеточным поиском?
skf = StratifiedKFold(n_splits=5, random_state=42)
params_randomSearch = {"min_samples_leaf": np.arange(1,30,1),
"min_samples_split": np.arange(2,20,1),
"max_depth": np.arange(2, 20, 1),
"min_weight_fraction_leaf": np.arange(0. ,0.4, 0.1),
"max_features" : ['auto', 'sqrt', 'log2', None],
"criterion" : ['entropy', 'gini']}
scoring = {'Accuracy' : make_scorer(accuracy_score), 'Recall' : 'recall_weighted', 'Kappa' : make_scorer(cohen_kappa_score)}
rs = RandomizedSearchCV(DecisionTreeClassifier(random_state=42), param_distributions=params_randomSearch, scoring = scoring, cv = skf, refit = 'Accuracy', n_iter=150, n_jobs=-1, random_state=42)
rs.fit(x_train, y_train)
y_predict = rs.best_estimator_.predict(x_test)
acc = accuracy_score(y_test, y_predict)
Согласно документации / примеру на github, это должно быть примерно так:
estim = HyperoptEstimator(classifier=random_forest('RF1'))
estim.fit(x_train, y_train)
Это приводит к следующей ошибке:
TypeError: 'generator' object is not subscriptable
Другой вопрос, который у меня есть, есть ли какая-либо интегрированная опция перекрестной проверки, например, с RandomizedSearchCV
или же GridSearchCV
?
1 ответ
Я мог бы решить это сам. Кажется, что есть некоторый конфликт с networkx v2
, Понижение до 1.11
решает проблему ( https://github.com/hyperopt/hyperopt/issues/333)