与nb方法交叉验证

问题描述 投票:0回答:1

我正在尝试在 WESBROOK 数据集上使用 k 折交叉验证。它使用

train
包中的
caret
函数来执行此操作。到目前为止,这个函数对我来说已经适用于
svm
knn
rpart
等方法,但是使用
nb
(朴素贝叶斯)方法,我收到以下错误:

Error in { : 
  task 1 failed - "Not all variable names used in object found in newdata"

这就是我的

train
函数的样子:

k_folds <- 5
train_control <- trainControl(method = "cv", number = k_folds, classProbs = TRUE, summaryFunction = twoClassSummary)

nb_model <- train(
  TOTLGIVE ~ ., data = train_data,
  method = "nb",
  trControl = train_control
)

我检查了,没有丢失数据,训练集和测试集中的列名和列类型是相同的。

r cross-validation r-caret naivebayes
1个回答
0
投票

检查因子变量的水平是否相同:

lapply(train_data, levels)
lapply(test_data, levels)

一般来说,对列进行更改后的一个好习惯是为训练集和测试集提供通用名称。这样可以防止此类问题发生。

library(dplyr)
test_data <- test_data %>%
  select(intersect(names(train_data), names(test_data)))

如果此错误仍然存在,请尝试使用

naive_bayes
包中的替代
naivebayes
方法。

nb_model <- train(
  TOTLGIVE ~ ., data = train_data,
  method = "naive_bayes",
  trControl = train_control
)
© www.soinside.com 2019 - 2024. All rights reserved.