xgboost в R и перекрестная проверка
Я использую пакет xgboost в R.
Во-первых, я хочу настроить параметры с набором проверки (20% от набора данных). Во-вторых, я хочу получить модель и предсказать задачу двоичной классификации с 5-кратной перекрестной проверкой. Я использую 64%(80%*80%) для набора поездов и 16%(80%*20%) для набора тестов и повторяю это пять раз.
Во-первых, я использую xgb.cv для настройки параметров. Связанные вопросы здесь и xgboost в R: как xgb.cv передает оптимальные параметры в xgb.train.
set.seed(650)
tr.num<-sample(650,130)###I have 650 samples.
data.tuning<-data[tr.num,]
data.traintest<-data[-tr.num,]
x.tune <- data.tuning[,2:9]
x.tune <- as.matrix(x.tune)
k<-round(1+log2(130))
cv.nround <- 200 #search
bst.cv <- xgb.cv(param=param, data = x.tune, label = data.tuning[,10],nfold = k, nrounds=cv.nround, metrics=list("error"), prediction = TRUE)
......
[2] ошибка поезда: 0,017573+0,008109 ошибка теста: 0,108456+0,104800
[3] ошибка поезда: 0,013177+0,006646 ошибка теста: 0,100643+0,100299
[4] ошибка поезда: 0,008782+0,004689 ошибка теста: 0,100643+0,100299
[5] ошибка поезда: 0,003299+0,004553 ошибка теста: 0,100643+0,100299
[6] ошибка поезда: 0,000000 + 0,000000 ошибка теста: 0,100643+0,100299
[7] ошибка поезда: 0,000000 + 0,000000 ошибка теста: 0,108456+0,104800
[8] ошибка поезда: 0,000000 + 0,000000 ошибка теста: 0,107996+0,086933
......
Я выбрал nround = 7 из-за минимальной тестовой ошибки.
Во-вторых, я снова использую xgb.cv для 5-кратной перекрестной проверки, чтобы получить модель и узнать точность и отзыв. Но как мне быть?
x.traintest <- data.traintest[,2:9]
x.traintest <- as.matrix(x.traintest)
bst.cv <- xgb.cv(param=param, data = x.traintest, label = data.traintest[,10], nrounds=7, nfold = 5)
test <- 1:104 ###650*0.16 = 104
train <- 105:520
y.traintest <- data.traintest[,10]
y.traintest <- as.matrix(y.traintest)
bst <- xgboost(param=param, data = x.traintest[train,], label=y.traintest[train,], nrounds=7, nfold = 5)
pred <- predict(bst,x.traintest[test,])
for(i in 1:length(pred)){
if(pred[i] > 0.5) {pred[i]="case"}
else {pred[i]="no"}
}
table(y.traintest[test,],pred)
Является ли это 5-кратной перекрестной проверкой и предсказанием? Я хочу получить средний отзыв и точность 5-кратной перекрестной проверки. Как я должен сделать? Я не понимаю, как использовать PREDICTION = TRUE также.
Связанные вопросы здесь, здесь и здесь.
Я неправильно понимаю о перекрестной проверке или повышении градиента?