R Caret软件包错误-至少一个类级别不是有效的R变量名称

时间:2018-06-25 11:17:26

标签: r error-handling r-caret ensemble-learning

使用插入符号包进行堆叠时,我在R中收到以下错误。

  

“错误:至少一个类级别不是有效的R变量名称;这会在生成类概率时导致错误,因为变量名称将被转换为not5 X5sets。请使用可以使用的因子级别作为有效的R变量名称(请参阅?make.names获得帮助)。”

以下是我要运行的代码。

library(caretEnsemble)
control <- trainControl(method="repeatedcv", number=10, repeats=3, savePredictions=TRUE, classProbs=TRUE)
algorithmList <- c('rpart', 'knn', 'svmRadial')
set.seed(222)
models <- caretList(Tsets ~ MatchSurface + MatchRound + AgeDiff + SameHand + HeightDiff, data=up_sample, trControl=control, methodList=algorithmList)
results <- resamples(models)

当我删除classProbs=TRUE时,代码会运行,但是我想保留它,因为在此之后我需要运行其他代码。我所有的变量都是因数或整数,并且我更改了所有类,因此它们没有“ 0”和“ 1”。因此,我无法弄清楚为什么代码无法运行。

我在下面附上了数据结构的图片。如果有人提出建议,那就太好了。

谢谢, 过道

Data Structure

3 个答案:

答案 0 :(得分:0)

尝试将目标变量更改为“是” /“否”,而不是1/0。

答案 1 :(得分:0)

当caretList()运行基于树的模型(此处为rpart,但也适用于随机森林)时,它将因子级别转换为用于拆分树的变量。 对于这些变量,不允许以数字开头的名称,也不能包含空格。 因此,对于这些变量中的每一个,您都可以使用以下代码将级别名称转换为有效的标签。

up_sample %>% 
  mutate(Tsets = factor(Tsets, 
                        labels = make.names(levels(Tsets))))

答案 2 :(得分:0)

您必须更改列车控制选项 尝试改变

的值
classProbs = F

或者您必须将输出变量的级别更改为“是/否”而不是“1/0”

levels(var)=c("Yes","No")