R 使用PCA结果作为XGboost模型的输入引发错误:“object”和“newdata”中存储的特征名称不同

R 使用PCA结果作为XGboost模型的输入引发错误:“object”和“newdata”中存储的特征名称不同,r,pca,xgboost,R,Pca,Xgboost,我在分割的训练数据集上使用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 <- prc

我在分割的训练数据集上使用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])
我可以使用该模型预测列车数据集,但当我尝试预测测试数据集时,会出现错误

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!

xgb\u pred-Try
名称(xgb\u列车)
名称(xgb\u测试)
。我认为错误是由于列车和测试数据的列名不匹配造成的。嗨,结果都是空的。如果我同时打印xgb_序列和xgb_测试,结果是“xgb.DMatrix dim:5742 x 500信息:label colnames:yes”和“xgb.DMatrix dim:1431 x 3578信息:label colnames:yes”。我找到了错误发生的原因。我只能预测500个测试数据,因为我从PCA中提取了500个组件。我想知道是否有一些解决方案,以便我可以一次性预测所有测试数据。非常感谢。然后尝试
colnames(xgb\u-train)
colnames(xgb\u-test)
谢谢,结果是PC1,PC2,…,PC500,因此我只能预测500个测试数据。首先使用数据进行PCA,然后将PCA输出划分为训练集和测试集。如果你能提供数据,我可以试试。
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)
xgb.fit <- xgboost(cuisine~., data = xgb_train, nrounds = 40, num_class = 10, early_stopping_rounds = 5)
xgboost: label will be ignored
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!