Я использую PCA в своем наборе данных разделенного поезда и проецирую тестовый набор данных на результаты после удаления ненужных столбцов.
data <- read.csv('bottom10.csv')
set.seed(1)
inTrain <- createDataPartition(data$cuisine, p = .8)[[1]]
dataTrain <- data[,-1][inTrain,][,-1]
dataTest <- data[,-1][-inTrain,][,-1]
cuisine.pca <- prcomp(dataTrain[,-1])
Затем я извлекаю первые 500 компонентов и проецирую набор тестовых данных.
traincom <- cuisine.pca$x[,1:500]
testcom <- scale(dataTest[,-1], cuisine.pca$center) %*% cuisine.pca$rotation
Затем я передаю метки в целое число и объединяю компоненты и метки в форму xgbDMatrix.
label_train <- as.integer(dataTrain$cuisine) - 1
label_test <- as.integer(dataTest$cuisine) - 1
xgb_train <- xgb.DMatrix(data = traincom, label = label_train)
xgb_test <- xgb.DMatrix(data = testcom, label = label_test)
Затем я строю модель xgboost как
xgb.fit <- xgboost(cuisine~., data = xgb_train, nrounds = 40, num_class = 10, early_stopping_rounds = 5)
И после этого появляется предупреждение, но тренировка все еще может быть запущена.
xgboost: label will be ignored
IМожно предсказать набор данных поезда, используя модель, но когда я попытаюсь предсказать набор тестовых данных, произойдет ошибка.
xgb_pred <- predict(xgb.fit, newdata = xgb_train)
sum(label_train == xgb_pred)/length(label_train)
xgb_pred <- predict(xgb.fit, newdata = xgb_test, rescale = T)
Error in predict.xgb.Booster(xgb.fit, newdata = xgb_test, rescale = T) :
Feature names stored in `object` and `newdata` are different!
Пожалуйста, дайте мне знать, что я делаю неправильно?
С уважением