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

9

使用caret包进行堆叠时,我在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

1
更改“Tsets”列中级别的名称,使其不以数字开头。 - missuse
你看过像错误信息建议的那样查看?make.names吗?它解释了列名需要满足的要求。错误信息还特别指出"5sets"将不是一个有效的列名,运行make.names(c("not5", "5sets"))以自行验证。 - camille
3个回答

15

尝试将目标变量更改为"Yes"/"No",而不是1/0。


4

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

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

3

你需要更改你的列车控制选项。 尝试更改以下值:

classProbs = F

或者你需要将输出变量的级别更改为“是/否”而不是“1/0”

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接