当我尝试使用代码运行交叉价值时:
cv_results = xgb.cv(params=params,dtrain=dmatrix_train, num_boost_round=10, nfold=1)
我收到以下错误:
TypeError Traceback (most recent call last)
<ipython-input-101-65647e385c18> in <module>()
----> 1 cv_results = xgb.cv(params=params,dtrain=dmatrix_train, num_boost_round=10, nfold=1)
Can anyone point to me what I am doing wrong?
C:\ProgramData\Anaconda35\lib\site-packages\xgboost-0.40-py3.6.egg\xgboost.py in cv(params, dtrain, num_boost_round, nfold, metrics, obj, feval, fpreproc, show_stdv, seed)
798 """
799 results = []
--> 800 cvfolds = mknfold(dtrain, nfold, params, seed, metrics, fpreproc)
801 for i in range(num_boost_round):
802 for f in cvfolds:
C:\ProgramData\Anaconda35\lib\site-packages\xgboost-0.40-py3.6.egg\xgboost.py in mknfold(dall, nfold, param, seed, evals, fpreproc)
722 randidx = np.random.permutation(dall.num_row())
723 kstep = len(randidx) / nfold
--> 724 idset = [randidx[(i * kstep): min(len(randidx), (i + 1) * kstep)] for i in range(nfold)]
725 ret = []
726 for k in range(nfold):
C:\ProgramData\Anaconda35\lib\site-packages\xgboost-0.40-py3.6.egg\xgboost.py in <listcomp>(.0)
722 randidx = np.random.permutation(dall.num_row())
723 kstep = len(randidx) / nfold
--> 724 idset = [randidx[(i * kstep): min(len(randidx), (i + 1) * kstep)] for i in range(nfold)]
725 ret = []
726 for k in range(nfold):
TypeError: slice indices must be integers or None or have an __index__ method
答案 0 :(得分:3)
您传递参数值n_fold=1
这没有意义。交叉验证是关于在几个分区中对数据进行分区并验证模型中的一个分区。所以1是无效值,请尝试n_fold=3 or higher
。然后你的错误应该消失了。
在此处阅读有关交叉验证的更多信息。 http://scikit-learn.org/stable/modules/cross_validation.html