针对 ROC 优化时的插入符 "Error in train.default(x, y, weights = w, ...) : final tuning parameters could not be determined"
Caret "Error in train.default(x, y, weights = w, ...) : final tuning parameters could not be determined" when optimizing for ROC
我正在尝试创建一个二元分类器,使用 caret
建模以优化 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
)
在准确性 运行 期间,我省略了控件的 classProbs
和 summaryFunction
部分。
对于建模,命令是
fitModel <- train(
Unhappiness ~ .,
data = dnumTrain,
tuneGrid=c50Grid,
method = "C5.0",
trControl = fitTwoClass,
tuneLength = 5,
metric= "ROC"
)
谁能告诉我如何解决这个问题?不确定要调整什么参数(如果有的话)以使其工作,虽然我相信数据集应该没问题(因为它 运行 在优化准确性时没问题)。
要重现,可以从 this link 中的文件 load
编辑训练集 dnumTrain
。
我想我可能已经解决了这个问题:在评论中看到@Pascal 能够 运行 没有错误的代码,并意识到我得到了一个相当随机的结果 运行 宁它使用 ctree
,我进一步研究了可能与随机性有关的领域:随机种子。
看来问题出在我将使用 doSNOW
的过程并行化到 4 个处理器,并且需要为每次迭代设置种子以避免随机性蔓延(参见对 [=14= 的回答) ]).我怀疑随机数据导致某些折叠没有有效值。
无论如何我设置种子如下:
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
)
到目前为止,我已经 fitModel
重新训练了 3 次,但还没有 error/warning,所以我希望这确实是我问题的答案。
我正在尝试创建一个二元分类器,使用 caret
建模以优化 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
)
在准确性 运行 期间,我省略了控件的 classProbs
和 summaryFunction
部分。
对于建模,命令是
fitModel <- train(
Unhappiness ~ .,
data = dnumTrain,
tuneGrid=c50Grid,
method = "C5.0",
trControl = fitTwoClass,
tuneLength = 5,
metric= "ROC"
)
谁能告诉我如何解决这个问题?不确定要调整什么参数(如果有的话)以使其工作,虽然我相信数据集应该没问题(因为它 运行 在优化准确性时没问题)。
要重现,可以从 this link 中的文件 load
编辑训练集 dnumTrain
。
我想我可能已经解决了这个问题:在评论中看到@Pascal 能够 运行 没有错误的代码,并意识到我得到了一个相当随机的结果 运行 宁它使用 ctree
,我进一步研究了可能与随机性有关的领域:随机种子。
看来问题出在我将使用 doSNOW
的过程并行化到 4 个处理器,并且需要为每次迭代设置种子以避免随机性蔓延(参见对 [=14= 的回答) ]).我怀疑随机数据导致某些折叠没有有效值。
无论如何我设置种子如下:
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
)
到目前为止,我已经 fitModel
重新训练了 3 次,但还没有 error/warning,所以我希望这确实是我问题的答案。