回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我尝试在Python上使用xgboost。在</p>
<p>这是我的密码。<code>xgb.train</code>起作用,但我使用<code>xgb.cv</code>出错
虽然看起来我用的方法是正确的。在</p>
<p>以下是我的工作:</p>
<pre><code>###### XGBOOST ######
import datetime
startTime = datetime.datetime.now()
import xgboost as xgb
data_train = np.array(traindata.drop('Category',axis=1))
labels_train = np.array(traindata['Category'].cat.codes)
data_valid = np.array(validdata.drop('Category',axis=1))
labels_valid = np.array(validdata['Category'].astype('category').cat.codes)
weights_train = np.ones(len(labels_train))
weights_valid = np.ones(len(labels_valid ))
dtrain = xgb.DMatrix( data_train, label=labels_train,weight = weights_train)
dvalid = xgb.DMatrix( data_valid , label=labels_valid ,weight = weights_valid )
param = {'bst:max_depth':5, 'bst:eta':0.05, # eta [default=0.3]
#'min_child_weight':1,'gamma':0,'subsample':1,'colsample_bytree':1,'scale_pos_weight':0, # default
# max_delta_step:0 # default
'min_child_weight':5,'scale_pos_weight':0, 'max_delta_step':2,
'subsample':0.8,'colsample_bytree':0.8,
'silent':1, 'objective':'multi:softprob' }
param['nthread'] = 4
param['eval_metric'] = 'mlogloss'
param['lambda'] = 2
param['num_class']=39
evallist = [(dtrain,'train'),(dvalid,'eval')] # if there is a validation set
# evallist = [(dtrain,'train')] # if there is no validation set
plst = param.items()
plst += [('ams@0','eval_metric')]
num_round = 100
bst = xgb.train( plst, dtrain, num_round, evallist,early_stopping_rounds=5 ) # early_stopping_rounds=10 # when there is a validation set
# bst.res=xgb.cv(plst,dtrain,num_round,nfold = 5,evallist,early_stopping_rounds=5)
bst.save_model('0001.model')
# dump model
bst.dump_model('dump.raw.txt')
# dump model with feature map
# bst.dump_model('dump.raw.txt','featmap.txt')
x = datetime.datetime.now() - startTime
print(x)
</code></pre>
<p>但如果我换了行:</p>
^{pr2}$
<p>为此:</p>
<pre><code>bst.res=xgb.cv(plst,dtrain,num_round,nfold = 5,evallist,early_stopping_rounds=5)
</code></pre>
<p>我得到以下意外错误:</p>
<blockquote>
<pre class="lang-none prettyprint-override"><code>File "<ipython-input-46-ebdf0546f464>", line 45
bst.res=xgb.cv(plst,dtrain,num_round,nfold = 5,evallist,early_stopping_rounds=5) SyntaxError: non-keyword arg after
keyword arg
</code></pre>
</blockquote>
<p>编辑:
听从@martineau的建议,试试这个</p>
<pre><code>bst.res=xgb.cv(plst,dtrain,num_round,evallist,nfold = 5,early_stopping_rounds=5)
</code></pre>
<p>产生这个错误</p>
<blockquote>
<p>TypeError Traceback (most recent call
last) in ()
43 # bst = xgb.train( plst, dtrain, num_round, evallist,early_stopping_rounds=5 ) # early_stopping_rounds=10 # when
there is a validation set
44
---> 45 bst.res=xgb.cv(plst,dtrain,num_round,evallist,nfold = 5,early_stopping_rounds=5)
46
47 bst.save_model('0001.model')</p>
<p>TypeError: cv() got multiple values for keyword argument 'nfold'</p>
</blockquote>