1

我在 R 中做一堆模型如下:

ctrl <- trainControl(method="repeatedcv", number=5, repeats=3, returnResamp="final", savePredictions="final", classProbs=TRUE, selectionFunction="oneSE", verboseIter=TRUE)

models_stack <- caretStack(
  model_list,
  data=train_data,
  tuneLength=10,
  method="glmnet",
  metric="ROC",
  trControl=ctrl
)

1) 为什么我看到以下错误?我能做些什么?我现在被困住了。

Timing stopped at: 0.89 0.005 0.91
 Show Traceback
Error in (function (x, y, family = c("gaussian", "binomial", "poisson", : unused argument (data = list(c(-0.00891097103286995, 0.455282701499392, 0.278236211515583, 0.532932725880776, 0.511036607368827, 0.688757947257125, -0.560727863490874, -0.21768155316146, 0.642219917023467, 0.220363129901216, 0.591732278371339, 1.02850020403572, -1.02417799431585, 0.806359545011601, -1.21490317454699, -0.671361009441299, 0.927344615788642, -0.10449847318776, 0.595493217624868, -1.05586363903119, -0.138457794869817, -1.026253562838, -1.38264471633224, -1.32900800143341, 0.0383617314263342, -0.82222313323842, -0.644251885665736, -0.174126438952992, 0.323934240274895, -0.124613523895458, 0.299359713721601, -0.723599218327519, -0.156528054435544, -0.76193093842169, 0.863217455799044, -1.01340448660914, -0.314365383747751, 1.19150804114605, 0.314703439577839, 1.55580594654149, -0.582911462615421, -0.515291378382375, 0.305142268138296, 0.513989405541095, -1.85093305614114, 0.436468060668601, -2.18997828727424, 1.12838871469007, -1.17619542016998, -0.218175589380355

2)不应该有“数据”参数吗?如果我需要为我的 1 级主管模型使用不同的数据集,我能做什么?

3) 我也想使用 AUC/ROC 但遇到了这些错误

The metric "AUC" was not in the result set. Accuracy will be used instead.

The metric "ROC" was not in the result set. Accuracy will be used instead.

看到网上一些例子说ROC可以用,是不是因为不是这个型号的?除了该模型的准确性之外,我还可以使用哪些指标?如果我需要使用 ROC,还有哪些其他选项。

按照@RLave 的要求,这就是我的model_list 的完成方式

grid.xgboost <- expand.grid(.nrounds=c(40,50,60),.eta=c(0.2,0.3,0.4),                
.gamma=c(0,1),.max_depth=c(2,3,4),.colsample_bytree=c(0.8),                
.subsample=c(1),.min_child_weight=c(1))

grid.rf <- expand.grid(.mtry=3:6)

model_list <- caretList(y ~.,
                    data=train_data_0,
                    trControl=ctrl,
                    tuneList=list(
                      xgbTree=caretModelSpec(method="xgbTree", tuneGrid=grid.xgboost),
                      rf=caretModelSpec(method="rf", tuneGrid=grid.rf)
                    )
  )

我的 train_data_0 和 train_data 都来自同一个数据集。我的数据集预测器都是带有标签作为二进制标签的数值

4

1 回答 1

1

您的问题包含三个问题:

  1. 为什么我看到以下错误?我能做些什么?我现在被困住了。

caretStack不应该有data参数,它data是根据模型的预测生成的caretList。看看这个可重现的例子:

library(caret)
library(caretEnsemble)
library(mlbench)

使用声纳数据集:

data(Sonar)

为 xgboost 的超参数调整创建网格:

grid.xgboost <- expand.grid(.nrounds = c(40, 50, 60),
                            .eta = c(0.2, 0.3, 0.4),                
                            .gamma = c(0, 1),
                            .max_depth = c(2, 3, 4),
                            .colsample_bytree = c(0.8),                
                            .subsample = c(1), 
                            .min_child_weight = c(1))

为射频调谐创建网格:

grid.rf <- expand.grid(.mtry = 3:6)

创建列车控制:

ctrl <- trainControl(method="cv",
                     number=5,
                     returnResamp = "final",
                     savePredictions = "final",
                     classProbs = TRUE,
                     selectionFunction = "oneSE",
                     verboseIter = TRUE,
                     summaryFunction = twoClassSummary)

调整模型:

model_list <- caretList(Class ~.,
                        data = Sonar,
                        trControl = ctrl,
                        tuneList = list(
                          xgbTree = caretModelSpec(method="xgbTree",
                                                   tuneGrid = grid.xgboost),
                          rf = caretModelSpec(method = "rf",
                                              tuneGrid = grid.rf))
)

创建堆叠的合奏:

models_stack <- caretStack(
  model_list,
  tuneLength = 10,
  method ="glmnet",
  metric = "ROC",
  trControl = ctrl
)

2)不应该有“数据”参数吗?如果我需要为我的 1 级主管模型使用不同的数据集,我能做什么?

caretStack只需要来自基本模型的预测,为了创建一个在不同数据上训练的模型集合,您必须在此处创建一个caretList具有适当data指定的新模型。

3) 我也想使用 AUC/ROC 但遇到了这些错误

使用 AUC 作为度量的最简单方法是设置summaryFunction = twoClassSummarytrainControl

于 2018-10-17T13:31:45.513 回答