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 【问题描述】:在尝试拟合 gbm
或 rpart
模型时,我多次遇到此错误。最后,我能够使用公开可用的数据始终如一地重现它。我注意到使用 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 度量值的主要内容,如果未能解决你的问题,请参考以下文章
R 理解来自 kernlab 的 caret train(tuneLength = ) 和 SVM 方法
R - Caret train()“错误:停止”,“并非在新数据中找到的对象中使用的所有变量名称”