首页 文章

从Caret包中预测函数会产生错误

提问于
浏览
1

我正在使用R中的插入符号包进行常规逻辑回归 . 我有一个二进制响应变量,编码为1或0,称为SALES_FLAG和140个数字响应变量,我在R中使用dummyVars函数转换为虚拟变量 .

data <- dummyVars(~., data = data_2, fullRank=TRUE,sep="_",levelsOnly = FALSE )
dummies<-(predict(data, data_2))
model_data<- as.data.frame(dummies)

这给了我一个可以使用的数据框 . 所有变量都是数字的 . 接下来我分为培训和测试:

trainIndex <- createDataPartition(model_data$SALE_FLAG, p = .80,list = FALSE)
train <- model_data[ trainIndex,]
test  <- model_data[-trainIndex,]

是时候使用火车功能训练我的模型了:

model <- train(SALE_FLAG~. data=train,method = "glm")

一切都很好,我得到了一个模型 . 但是当我运行预测函数时,它并没有给我我需要的东西:

predict(model, newdata =test,type="prob")

我得到一个错误:

Error in dimnames(out)[[2]] <- modelFit$obsLevels : 


length of 'dimnames' [2] not equal to array extent

另一方面,当我将“prob”替换为“raw”用于预测函数内部的类型时,我得到预测,但我需要概率,因此我可以根据阈值将它们编码为二进制变量 .

不知道为什么会这样 . 我在没有使用插入符包的情况下做了同样的事情,它的工作方式如下:

model2 <- glm(SALE_FLAG ~ ., family = binomial(logit), data = train)
predict(model2, newdata =test, type="response")

我花了一些时间看这个,但不确定发生了什么,这对我来说似乎很奇怪 . 我尝试了很多火车功能的变化意味着我没有使用公式并使用X和Y.我使用method ='bayesglm'来检查和id给了我同样的错误 . 我希望有人可以帮助我 . 我不需要使用它,因为列车功能得到我需要的但是插入包是一个很好的包有很多工具,我希望能够弄明白这一点 .

1 回答

  • 2

    告诉我们 str(train)str(test) . 我怀疑结果变量是数字,这使 train 认为你正在做回归 . 从印刷 model 开始也应该很明显 . 如果您想进行分类,请将其作为一个因素 .

    马克斯

相关问题