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 также.

Связанные вопросы здесь, здесь и здесь.

Я неправильно понимаю о перекрестной проверке или повышении градиента?

0 ответов

Другие вопросы по тегам