【问题标题】:XGBoost and Numpy IssueXGBoost 和 Numpy 问题
【发布时间】:2020-10-04 03:09:48
【问题描述】:

我无法将我的数据正确地拟合到 XG Boost。更改我的数据类型没有帮助。

有 1225 行和 15 列。

RangeIndex(start=0, stop=1225, step=1)

其他分类算法工作正常,但输入此代码后 XG Boost 给了我以下错误。

import xgboost as xgb

X_train, X_test, y_train, y_test = train_test_split(loans.index, loans.BAD, test_size=0.2, random_state=0)

train = xgb.DMatrix(X_train, label=y_train)
test = xgb.DMatrix(X_test, label=y_test)

param = {'max_depth':2, 'eta':1, 'objective':'binary:logistic' }

num_round = 2 bst = xgb.train(param, X_train, 10)

    ---------------------------------------------------------------------------
`TypeError                                 Traceback (most recent call last)
<ipython-input-117-378a1a19d4c9> in <module>
      1 param = {'max_depth':2, 'eta':1, 'objective':'binary:logistic' }
      2 num_round = 2
----> 3 bst = xgb.train(param, X_train, 10)

~\Anaconda3\lib\site-packages\xgboost\training.py in train(params, dtrain, num_boost_round, evals, obj, feval, maximize, early_stopping_rounds, evals_result, verbose_eval, xgb_model, callbacks)
    207                            evals=evals,
    208                            obj=obj, feval=feval,
--> 209                            xgb_model=xgb_model, callbacks=callbacks)
    210 
    211 

~\Anaconda3\lib\site-packages\xgboost\training.py in _train_internal(params, dtrain, num_boost_round, evals, obj, feval, xgb_model, callbacks)
     28             params += [('eval_metric', eval_metric)]
     29 
---> 30     bst = Booster(params, [dtrain] + [d[0] for d in evals])
     31     nboost = 0
     32     num_parallel_tree = 1

~\Anaconda3\lib\site-packages\xgboost\core.py in __init__(self, params, cache, model_file)
   1026         for d in cache:
   1027             if not isinstance(d, DMatrix):
-> 1028                 raise TypeError('invalid cache item: {}'.format(type(d).__name__), cache)
   1029             self._validate_features(d)
   1030 

TypeError: ('invalid cache item: Int64Index', [Int64Index([ 359,  745,  682,  903,  548,  906, 1040,  467,   85,  192,
            ...
             600, 1094,  599,  277, 1033,  763,  835, 1216,  559,  684],
           dtype='int64', length=980)])

【问题讨论】:

  • 使用 xbg.train(param, train) 会导致下一个问题:XGBoostError: [13:30:03] C:/Users/Administrator/workspace/xgboost-win64_release_1.0.0/src/目标/回归_obj.cu:60:检查失败:preds.Size()== info.labels_.Size()(1 vs. 980):标签未正确提供preds.size = 1,label.size = 980感谢任何建议。我将在文档中阅读有关如何预测 preds 的信息,并且一定会描述我的解决方案。
  • 这似乎与输入数据格式有关。答案有帮助吗?不要忘记您可以投票并接受答案。见What should I do when someone answers my question?,谢谢!
  • 我已将输入数据格式 (dtype) 从整数更改为浮点数,但似乎没有帮助。我仍然有上面列出的那个错误。是的!我不会忘记投票,我会阅读链接。我非常感谢那些花时间帮助新手的人。
  • 第一个答案应该能解决你的问题github.com/dmlc/xgboost/issues/2563

标签: python machine-learning model decision-tree xgboost


【解决方案1】:

当使用 Learning API 时,xgboost.train 需要火车 DMatrix,而您正在喂它 X_train。您应该使用:

xgb.train(param, train)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-08
    • 2020-09-07
    • 2016-03-27
    • 2015-08-13
    • 2016-07-17
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多