У меня есть большой с функцией fmin (), используя пакет hyperopt для Xgboost - PullRequest
1 голос
/ 23 октября 2019

Используя блоки данных, я в основном скопировал и вставил здесь тот же код: https://www.dataiku.com/learn/guide/code/python/advanced-xgboost-tuning.html

Я получаю эту ошибку:

train = data.sample(frac=0.70, random_state=123)
valid = data.loc[~data.index.isin(train.index), :]

y_train = train['target']
X_train = train.drop(['target'], axis=1) 
y_valid = test['target']
X_valid = test.drop(['target'], axis=1) 
def objective(space):

    clf = xgb.XGBClassifier(n_estimators = 10000,
                            max_depth = space['max_depth'],
                            min_child_weight = space['min_child_weight'],
                            subsample = space['subsample'])

    eval_set  = [( train, y_train), ( valid, y_valid)]

    clf.fit(train[col_train], y_train,
            eval_set=eval_set, eval_metric="auc",
            early_stopping_rounds=30)

    pred = clf.predict_proba(valid)[:,1]
    auc = roc_auc_score(y_valid, pred)
    print("SCORE:", auc)

    return{'loss':1-auc, 'status': STATUS_OK }


space ={
        'max_depth': hp.quniform("x_max_depth", 5, 30, 1),
        'min_child_weight': hp.quniform ('x_min_child', 1, 10, 1),
        'subsample': hp.uniform ('x_subsample', 0.8, 1)
    }


trials = Trials()
best = fmin(fn=objective,
            space =space,
            algo=tpe.suggest,
            max_evals=100,
            trials=trials)


print(best)

Я получаю следующую ошибку:

ValueError: invalid number of arguments
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<command-3897094> in <module>()
      4             algo=tpe.suggest,
      5             max_evals=100,
----> 6             trials=trials)
      7 
      8 

ValueError: invalid number of arguments

Любое понимание поможет, пожалуйста. Первый вопрос о переполнении стека!

1 Ответ

0 голосов
/ 29 октября 2019

Блог Расширенная настройка XGBoost в Python , на которую вы ссылались, опубликована в 22 августа 2016 г. , как показано на рисунке ниже.

enter image description here

Я думаю, что это для старой версии, может быть невозможно найти использование самой последней версии пакета hyperopt.

Поэтому, пожалуйста, смотрите последнюю hyperopt вики-страницу для FMin. Вот простой пример кода, как показано ниже.

from hyperopt import fmin, tpe, hp
best = fmin(fn=lambda x: x ** 2,
    space=hp.uniform('x', -10, 10),
    algo=tpe.suggest,
    max_evals=100)
print best

Вы можете видеть, что тип space должен быть hyperopt.pyll.Apply, а не словарь Python, см. Код изGitHub репо, как показано на рисунке ниже.

enter image description here

...