我正在使用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;以及检查和身份证给了我同样的错误。我希望有人可以帮助我。我不需要使用它,因为火车功能可以得到我需要的东西但是插入包是一个很好的包装,有很多工具,我希望能够弄明白这一点。
答案 0 :(得分:2)
向我们展示str(train)
和str(test)
。我怀疑结果变量是数字,这使得train
认为你正在做回归。打印model
时也应该明白这一点。如果您想进行分类,请将其作为一个因素。
最高