我目前正在研究流失问题的预测模型。
每当我尝试运行以下模型时,我都会收到此错误:至少有一个类级别不是有效的R变量名称。这会在生成类概率时导致错误,因为变量名称将转换为X0,X1。请使用可用作有效R变量名称的因子级别。
fivestats <- function(...) c( twoClassSummary(...), defaultSummary(...))
fitControl.default <- trainControl(
method = "repeatedcv"
, number = 10
, repeats = 1
, verboseIter = TRUE
, summaryFunction = fivestats
, classProbs = TRUE
, allowParallel = TRUE)
set.seed(1984)
rpartGrid <- expand.grid(cp = seq(from = 0, to = 0.1, by = 0.001))
rparttree.fit.roc <- train(
churn ~ .
, data = training.dt
, method = "rpart"
, trControl = fitControl.default
, tuneGrid = rpartGrid
, metric = 'ROC'
, maximize = TRUE
)
在附图中,您可以看到我的数据,我已经将一些数据从chr转换为因子变量。
我不知道我的问题是什么,如果我将整个数据转换为因子,那么例如变量total_airtime_out可能会有大约9000个因子。
感谢您提供任何帮助!
答案 0 :(得分:16)
我不可能重现您的错误,但我有根据的猜测是错误消息告诉您需要知道的一切:
至少有一个类级别不是有效的R变量名称。这会在生成类概率时导致错误,因为变量名称将转换为X0,X1。 请使用可用作有效R变量名称的因子级别。
强调我的。查看您的响应变量,其级别为"0"
和"1"
,这些在R中不是有效的变量名称(您不能0 <- "my value"
)。如果你用
levels(training.dt$churn) <- c("first_class", "second_class")
根据this Q。
答案 1 :(得分:3)
答案 2 :(得分:0)
在@einar的正确答案之外,这是转换因子水平的dplyr语法:
training.dt %>%
mutate(churn = factor(churn,
levels = make.names(levels(churn))))
我稍微喜欢只更改因子水平的标签,因为水平会更改基础数据,例如:
training.dt %>%
mutate(churn = factor(churn,
labels = make.names(levels(churn))))
答案 3 :(得分:0)
我遇到了相同的问题,并通过在classProbs = FALSE
中设置trainControl()
来解决了此问题,并保持了0
和1
的级别
答案 4 :(得分:0)
我遇到了同样的问题,
class(iris$Species); levels(iris$Species)
iris.lvls <- factor(iris, levels = c("1", "2", "3"))
class(iris.lvls); levels(iris.lvls)