В библиотеке hyperopt, Как перебрать ввод словарного типа? В sklearn class_weight
- это параметр словаря, который я хочу повторить. Я пытался использовать выбор для другого списка словарей. Вывод предполагает, что он не работает, как я подозревал, что он должен работать, какие-либо предложения?
import numpy as np
from hyperopt import fmin, tpe, hp, STATUS_OK, Trials
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_breast_cancer
bdata = load_breast_cancer()
X = bdata.data
y = bdata.target
def objective(params):
'''
X and y are global parameters
'''
clf = RandomForestClassifier(n_jobs = -1, **params)
roc_auc = cross_val_score(clf, X, y, scoring='roc_auc').mean()
return {'loss': -roc_auc, 'status': STATUS_OK}
class_weight = [{1: 0.9, 0: 0.09999999999999998},
{1: 0.9450000000000001, 0: 0.05499999999999994},
{1: 0.99, 0: 0.010000000000000009}]
sample_space = {
'class_weight': hp.choice('class_weight', class_weight), #problem: list of dictionary as choice input
'n_estimators': hp.choice('n_estimators', [1, 2, 4, 8, 16, 32, 64, 100]),
'max_depth': hp.quniform('max_depth', 30, 50, 12)
}
trials = Trials()
best = fmin(objective,
space=sample_space,
algo=tpe.suggest,
max_evals=100,
trials=trials)
Лучшая производительность была при
{'class_weight': 0, 'max_depth': 36.0, 'n_estimators': 7}
, это даже не был выбор .. Кроме того, потеря не колебалась вообще. Я бы ожидал, что потери несколько уменьшатся с n_estimators
и max_depth
и не останутся постоянными на уровне -0,9774