从Caret软件包预测功能会给出错误
我正在使用R中的caret包进行正则逻辑回归。我有一个编码为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
另一方面,当我用预测函数中的“raw”代替预测函数中的“raw”时,我得到了预测,但是我需要概率,所以我可以将它们编码为给定我的阈值的二进制变量。
不知道为什么会发生。 我做了同样的事情,而不使用脱字符包,它的工作原理是:
model2 <- glm(SALE_FLAG ~ ., family = binomial(logit), data = train)
predict(model2, newdata =test, type="response")
我花了一些时间看这个,但不知道发生了什么,这对我来说似乎很奇怪。 我已经尝试了火车功能的许多变体,这意味着我没有使用公式并使用X和Y.我使用method ='bayesglm'以及检查和id给了我同样的错误。 我希望有人能帮助我。 我不需要使用它,因为火车功能得到我需要的,但caret包是一个很好的包,有很多工具,我希望能够弄清楚这一点。
向我们展示str(train)
和str(test)
。 我怀疑结果变量是数字,这使train
认为你正在做回归。 这也应该从印刷model
显而易见。 如果您想分类,请将其作为一个因素。
马克斯
链接地址: http://www.djcxy.com/p/38385.html