XGBRegressor .fit() method TypeError: range() integer end argument expected, got float

XGBRegressor .fit() method TypeError: range() integer end argument expected, got float

I 运行 mod.fit(X, y) 并收到错误:

"TypeError: range() integer end argument expected, got float."

(参见下面的堆栈跟踪)。 Xy 输入似乎没有任何问题。该错误似乎出在 xgboost 代码中。它成功地适合其他型号,但我最近通过 conda 安装了它:

conda install -c conda-forge xgboost

我是 运行 python MacOS 10.10.5 上的 2.7.11。

模型参数为:

{ 'base_score':         5.0,
  'booster':           'gbtree',
  'colsample_bylevel':  1,
  'colsample_bytree':   1,
  'gamma':              0,
  'learning_rate':      0.07500000000000001,
  'max_delta_step':     0,
  'max_depth':          4,
  'min_child_weight':   1,
  'missing':            None,
  'n_estimators':      75.0,
  'n_jobs':            -1,
  'nthread':            None,
  'objective':         'reg:linear',
  'random_state':       0,
  'reg_alpha':          0,
  'reg_lambda':         1,
  'scale_pos_weight':   1,
  'seed':               0,
  'silent':             True,
  'subsample':          1
   }

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-30-38afa4aff6db> in <module>()
----> 1 mod.fit(X_train.values, y_train.values)

/Users/chriseal/anaconda/lib/python2.7/site-packages/xgboost/sklearn.pyc in fit(self, X, y, eval_set, eval_metric, early_stopping_rounds, verbose)
    249                               early_stopping_rounds=early_stopping_rounds,
    250                               evals_result=evals_result, obj=obj, feval=feval,
--> 251                               verbose_eval=verbose)
    252
    253         if evals_result:

/Users/chriseal/anaconda/lib/python2.7/site-packages/xgboost/training.pyc in train(params, dtrain, num_boost_round, evals, obj, feval, maximize, early_stopping_rounds, evals_result, verbose_eval, learning_rates, xgb_model, callbacks)
    203                            evals=evals,
    204                            obj=obj, feval=feval,
--> 205                            xgb_model=xgb_model, callbacks=callbacks)
    206
    207

/Users/chriseal/anaconda/lib/python2.7/site-packages/xgboost/training.pyc in _train_internal(params, dtrain, num_boost_round, evals, obj, feval, xgb_model, callbacks)
     62         cb for cb in callbacks if not cb.__dict__.get('before_iteration', False)]
     63
---> 64     for i in range(start_iteration, num_boost_round):
     65         for cb in callbacks_before_iter:
     66             cb(CallbackEnv(model=bst,

TypeError: range() integer end argument expected, got float.

我刚刚弄明白了。我正在遍历超参数,n_estimatorsfloat (75.0) 而不是整数 (75)。轻松修复!