Caret train 方法抱怨出问题了;缺少所有 RMSE 度量值

Posted

技术标签:

【中文标题】Caret train 方法抱怨出问题了;缺少所有 RMSE 度量值【英文标题】:Caret train method complains Something is wrong; all the RMSE metric values are missing 【发布时间】:2015-10-19 13:36:09 【问题描述】:

在尝试拟合 gbmrpart 模型时,我多次遇到此错误。最后,我能够使用公开可用的数据始终如一地重现它。我注意到使用 CV(或重复 cv)时会发生此错误。当我不使用任何适合控件时,我不会收到此错误。有人可以解释一下为什么我总是不断出错。

fitControl= trainControl("repeatedcv", repeats=5)
ds = read.csv("http://www.math.smith.edu/r/data/help.csv")
ds$sub = as.factor(ds$substance)
rpartFit1 <- train(homeless ~ female + i1 + sub + sexrisk + mcs + pcs, 
                   tcControl=fitControl, 
                   method = "rpart", 
                   data=ds)

【问题讨论】:

根据我的经验,发生此错误是因为某些变量是因子而不是数字。另一种情况可能是变量的位置是字符串。尝试sapply(your_data, class) 来检查列类。 感谢您的回复。此数据集和其他显示此错误的数据集具有一些因子类的变量。但为什么这很重要? rpart 不能处理因子变量。为什么使用CV时不起作用? 如果数字尝试将它们转换为numeric,它characters 会尝试不将它们包含在模型中。无论如何,这不是一般错误,我认为这取决于method train 使用的内容。不要忘记train 不是一个模型,而只是一个简单语法的包装器,只需更改method 参数即可应用大量不同的模型。 如果您在 train() 函数中使用正确的参数名称,此特定错误似乎会消失。它应该是trControl=fitControl,而不是tcControl=fitControl。查看生成的warnings() 后,这一点很明显。 您好,我已经发布了答案,但已被删除。我是说计算 RMSE 的错误可能来自训练数据集中的无限值。告诉我这是否正确。 【参考方案1】:

有一个错字,应该是trControl 而不是tcControl。当参数以tcControl 提供时,caret 会将其传递给 rpart,这会引发错误,因为此选项永远不可用。

我想这回答了您的问题,即当您尝试在训练中进行交叉验证时为什么会出现此错误。

下面是它的工作原理:

library(caret)
library(mosaicData)

data(HELPrct)
ds = HELPrct
fitControl= trainControl(method="repeatedcv",times=5)
ds$sub = as.factor(ds$substance)

rpartFit1 <- train(homeless ~ female + i1 + sub + sexrisk + mcs + pcs, 
                   trControl=fitControl, 
                   method = "rpart", 
                   data=ds[complete.cases(ds),])

rpartFit1
CART 

117 samples
  6 predictor
  2 classes: 'homeless', 'housed' 

No pre-processing
Resampling: Cross-Validated (10 fold) 
Summary of sample sizes: 105, 105, 105, 106, 105, 106, ... 
Resampling results across tuning parameters:

  cp          Accuracy   Kappa      
  0.00000000  0.5280303  -0.03503032
  0.01190476  0.5280303  -0.03503032
  0.07142857  0.5977273  -0.02970604

Accuracy was used to select the optimal model using the largest value.
The final value used for the model was cp = 0.07142857.

【讨论】:

以上是关于Caret train 方法抱怨出问题了;缺少所有 RMSE 度量值的主要内容,如果未能解决你的问题,请参考以下文章

caret::train:指定模型生成参数

R 理解来自 kernlab 的 caret train(tuneLength = ) 和 SVM 方法

R - Caret train()“错误:停止”,“并非在新数据中找到的对象中使用的所有变量名称”

运行 caret::train() 以开发 kknn 模型时的性能预期

如何在使用 caret 包构建模型时跟踪进度?

R caret train glmnet 最终模型 lambda 值与指定不符