我正在尝试构建一个模型来预测产品是否会在电子商务网站上销售,输出为 1 或 0。

我的数据是一些分类变量,一个有大量的级别,两个二进制,一个连续的(价格),输出变量为 1 或 0,无论产品列表是否已售出。

这是我的代码:

inTrainingset<-createDataPartition(C$Sale, p=.75, list=FALSE)
CTrain<-C[inTrainingset,]
CTest<-C[-inTrainingset,]


gbmfit<-gbm(Sale~., data=C,distribution="bernoulli",n.trees=5,interaction.depth=7,shrinkage=      .01,)
plot(gbmfit)


gbmTune<-train(Sale~.,data=CTrain, method="gbm")


ctrl<-trainControl(method="repeatedcv",repeats=5)
gbmTune<-train(Sale~.,data=CTrain,
           method="gbm",
           verbose=FALSE,
           trControl=ctrl)


ctrl<-trainControl(method="repeatedcv", repeats=5, classProbs=TRUE, summaryFunction =    twoClassSummary)
gbmTune<-trainControl(Sale~., data=CTrain,
                  method="gbm",
                  metric="ROC",
                  verbose=FALSE ,
                  trControl=ctrl)



  grid<-expand.grid(.interaction.depth=seq(1,7, by=2), .n.trees=seq(100,300, by=50),  .shrinkage=c(.01,.1))

  gbmTune<-train(Sale~., data=CTrain,
           method="gbm",
           metric="ROC",
           tunegrid= grid,
           verebose=FALSE,
           trControl=ctrl)



  set.seed(1)
  gbmTune <- train(Sale~., data = CTrain,
               method = "gbm",
               metric = "ROC",
               tuneGrid = grid,
               verbose = FALSE,
               trControl = ctrl)

我遇到了两个问题。第一个是当我尝试添加 summaryFunction=twoClasssummary,然后调整我得到这个:
Error in trainControl(Sale ~ ., data = CTrain, method = "gbm", metric = "ROC",  :
  unused arguments (data = CTrain, metric = "ROC", trControl = ctrl)

如果我决定绕过summaryFunction,第二个问题是当我尝试运行模型时出现此错误:
Error in evalSummaryFunction(y, wts = weights, ctrl = trControl, lev = classLevels,  :
  train()'s use of ROC codes requires class probabilities. See the classProbs option of trainControl()
In addition: Warning message:
In train.default(x, y, weights = w, ...) :
  cannnot compute class probabilities for regression

我尝试在 excel 中将输出变量从数值 1 或 0 更改为仅文本值,但这并没有什么区别。

关于如何解决将这个模型解释为回归或我遇到的第一条错误消息这一事实,我们将不胜感激。

最好的,

将要
[email protected]

最佳答案

你的结果是:

Sale = c(1L, 0L, 1L, 1L, 0L))

尽管 gbm 期望这种方式,但它是一种非常不自然的数据编码方式。几乎所有其他函数都使用因子。

所以如果你给train numeric 0/1 数据,它认为你想做回归。如果您将其转换为一个因子并使用“0”和“1”作为级别(并且如果您想要类概率),您应该会看到一个警告说“至少一个类级别不是有效的 R 变量名称; 如果生成类概率,这可能会导致错误,因为变量名称将被转换为..."。这不是一个闲置的警告。

使用有效的 R 变量名称的因子水平,你应该没问题。

最大限度

关于r - 在 R 中运行 Caret 包时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26389885/

10-12 18:53