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

时间:2014-04-18 19:02:53

标签: r r-caret

我正在使用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

另一方面,当我更换&#34; prob&#34;用&#34; raw&#34;对于预测函数内部的类型,我得到预测,但我需要概率,所以我可以根据我的阈值将它们编码为二进制变量。

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

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

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

1 个答案:

答案 0 :(得分:2)

向我们展示str(train)str(test)。我怀疑结果变量是数字,这使得train认为你正在做回归。打印model时也应该明白这一点。如果您想进行分类,请将其作为一个因素。

最高