插入符号“;列车出错。默认值(x,y,权重=w,…):无法确定最终调整参数;在为ROC进行优化时

插入符号“;列车出错。默认值(x,y,权重=w,…):无法确定最终调整参数;在为ROC进行优化时,r,r-caret,roc,R,R Caret,Roc,我正在尝试创建一个二进制分类器,使用插入符号建模,以优化ROC。我尝试的方法是C5.0,我得到以下错误和警告: Error in train.default(x, y, weights = w, ...) : final tuning parameters could not be determined In addition: Warning messages: 1: In nominalTrainWorkflow(x = x, y = y, wts = weights, info =

我正在尝试创建一个二进制分类器,使用插入符号建模,以优化ROC。我尝试的方法是
C5.0
,我得到以下错误和警告:

Error in train.default(x, y, weights = w, ...) : 
  final tuning parameters could not be determined
In addition: Warning messages:
1: In nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo,  :
  There were missing values in resampled performance measures.
2: In train.default(x, y, weights = w, ...) :
  missing values found in aggregated results
我之前用
C5.0
caret
对相同的训练数据进行了建模,但为了准确度而进行了优化,并且没有在对照组中使用twoClassSummary,它运行时没有错误

我的ROC运行的调整网格和控件是

c50Grid <- expand.grid(.trials = c(1:9, (1:10)*10),
                       .model = c("tree", "rules"),
                       .winnow = c(TRUE, FALSE))

fitTwoClass <- trainControl(
  method = "repeatedcv",
  number = 5,
  repeats = 5,
  classProbs=TRUE,
  summaryFunction = twoClassSummary
  )
有人能建议如何解决这个问题吗?我不确定要调整什么参数(如果有的话)来实现这一点,但我相信数据集应该是正常的(因为它在优化精度时运行正常)


为了重现,可以从中的文件中加载训练集
dnumTrain

我想我可能已经解决了这个问题:在看到注释中@Pascal能够无错误地运行代码,并且意识到我使用
ctree运行它时得到了一个非常随机的结果之后,我进一步研究了可能与随机性有关的领域:随机种子

问题似乎来自于我使用
doSNOW
将进程并行到4个处理器,并且需要为每个迭代设置种子,以避免随机性(参见答案)。我怀疑随机数据导致某些折叠没有有效值

在任何情况下,我设置种子如下:

CVfolds <- 5
CVreps <- 5
seedNum <- CVfolds * CVreps + 1
seedLen <- CVfolds + tuneLength
# create manual seeds vector for parallel processing repeatibility
set.seed(123)
seeds <- vector(mode = "list", length = seedNum)
for(i in 1:(seedNum-1)) seeds[[i]] <- sample.int(1000, seedLen)  
## For the last model:
seeds[[seedNum]] <- sample.int(1000, 1)

fitTwoClass <- trainControl(
  method = "repeatedcv",
  number = CVfolds,
  repeats = CVreps,
  classProbs=TRUE,
  summaryFunction = twoClassSummary,
  seeds = seeds
  )

cvfold运行上述示例时,您是否收到错误和警告?是的,错误和警告位于问题的顶部。我可以在没有警告和错误的情况下运行(需要很长时间)。这很奇怪。我目前正在尝试使用
ctree
而不是
C5.0
。它最初失败了,然后在我更新了
caret
之后它工作了,然后又失败了。我使用了
C50
0.1.0-24版、
pROC
1.8版和
caret
6.0-52版,在
R
3.2.1版上打了补丁
fitModel
says
ROC用于使用最大值选择最佳模型。模型使用的最终值是trials=30、model=rules和winnow=FALSE。
您没有提到您在并行环境中工作。事实上,我没有;我甚至没有想到这可能是一个因素。我认为我可以更简洁地再现模型和参数,而不是整个脚本(相当大)。感谢您通过您的反馈帮助我走上正确的轨道,它实际上在其他地方工作。在
trainControl
中有一个
seeds
选项,它将在工人中设置种子。
CVfolds <- 5
CVreps <- 5
seedNum <- CVfolds * CVreps + 1
seedLen <- CVfolds + tuneLength
# create manual seeds vector for parallel processing repeatibility
set.seed(123)
seeds <- vector(mode = "list", length = seedNum)
for(i in 1:(seedNum-1)) seeds[[i]] <- sample.int(1000, seedLen)  
## For the last model:
seeds[[seedNum]] <- sample.int(1000, 1)

fitTwoClass <- trainControl(
  method = "repeatedcv",
  number = CVfolds,
  repeats = CVreps,
  classProbs=TRUE,
  summaryFunction = twoClassSummary,
  seeds = seeds
  )