我一直在探索xgboostR中的软件包,并经历了几个演示以及教程,但这仍然让我感到困惑:在使用xgb.cv交叉验证之后,最佳参数如何传递给xgb.train?或者我应该根据输出计算理想参数(例如nround,max.depth)xgb.cv?
param <- list("objective" = "multi:softprob",
"eval_metric" = "mlogloss",
"num_class" = 12)
cv.nround <- 11
cv.nfold <- 5
mdcv <-xgb.cv(data=dtrain,params = param,nthread=6,nfold = cv.nfold,nrounds = cv.nround,verbose = T)
md <-xgb.train(data=dtrain,params = param,nround = 80,watchlist = list(train=dtrain,test=dtest),nthread=6)
Run Code Online (Sandbox Code Playgroud) 经过一段时间的谷歌搜索后,我觉得这可能是一个荒谬的问题,但事实就是如此。如果我使用以下代码,我可以生成一个 xgb 回归模型,然后我可以用它来拟合训练集并评估模型
xgb_reg = xgb.XGBRegressor(objective='binary:logistic',
gamme = .12,
eval_metric = 'logloss',
#eval_metric = 'auc',
eta = .068,
subsample = .78,
colsample_bytree = .76,
min_child_weight = 9,
max_delta_step = 5,
nthread = 4)
start = time.time()
xgb_reg.fit(X_train, y_train)
print(start-time.time())
y_pred = xgb_reg.predict(X_test)
print(log_loss(y_test, y_pred))
Run Code Online (Sandbox Code Playgroud)
现在,我想更进一步并使用 kfold cv 来改进模型,所以我有这个
data_dmatrix = xgb.DMatrix(data=X_train,label=y_train)
params = {'objective':'binary:logistic','eval_metric':'logloss','eta':.068,
'subsample':.78,'colsample_bytree':.76,'min_child_weight':9,
'max_delta_step':5,'nthread':4}
xgb_cv = cv(dtrain=data_dmatrix, params=params, nfold=5, num_boost_round=20, metrics = 'logloss',seed=42)
Run Code Online (Sandbox Code Playgroud)
但是,这会输出一个数据框,并且我无法在测试集上使用 .predict() 。
我想我可能不理解这个的基本概念,但我希望我只是忽略了一些简单的事情。