用于树的 train() 函数插入符号中的缺失值错误
Posted
技术标签:
【中文标题】用于树的 train() 函数插入符号中的缺失值错误【英文标题】:Missing values error in train() function Caret for trees 【发布时间】:2017-09-25 02:48:02 【问题描述】:我是使用 R 的新手,我正在尝试构建决策树。我已经将包party
用于ctree
和rpart
用于rpart。
但是,由于我需要对我的模型进行交叉验证,我开始使用 caret
包,因为我可以通过使用函数 `train() 和我想使用的方法来做到这一点。
library(caret)
cvCtrl <- trainControl(method = "repeatedcv", repeats = 2,
classProbs = TRUE)
ctree.installed<- train(TARGET ~ OPENING_BALANCE+ MONTHS_SINCE_EXPEDITION+
RS_DESC+SAP_STATUS+ ACTIVATION_STATUS+ ROTUL_STATUS+
SIM_STATUS+ RATE_PLAN_SEGMENT_NORM,
data=trainSet,
method = "ctree",
trControl = cvCtrl)
但是,我的变量 OPENING_BALANCE
和 MONTHS_SINCE_EXPEDITION
有一些缺失值,因此函数无法正常工作。我不明白为什么会发生这种情况,因为我正在尝试构建一棵树。当我使用其他包时不会出现此问题。
这是错误:
Error in na.fail.default(list(TARGET = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, :
missing values in object
我不想使用na.action=pass
,因为我真的不想放弃这些观察结果。
我做错了吗?为什么会这样?您对此有什么建议吗?
【问题讨论】:
na.action = na.pass
不会丢弃 na,它会传递它们,这意味着如果您使用不支持 NA
的 predict
函数,它将失败。 na.action = na.omit
会放弃这些观察。
你找到了吗?它也可能有帮助:stats.stackexchange.com/questions/144922/r-caret-and-nas
感谢您的回答。我发现的问题是,当我使用预测函数时,结果返回的观察结果比我在测试集上给出的观察结果要少得多。假设测试集有 30000 个观察值,我只收到 20000 个的预测,因为其中 10000 个在输入变量上有缺失值。
【参考方案1】:
我开始考虑mlbench
包的数据集PimaIndiansDiabetes2
,它有一些缺失值。
data(PimaIndiansDiabetes2, package = "mlbench")
head(PimaIndiansDiabetes2)
pregnant glucose pressure triceps insulin mass pedigree age diabetes
1 6 148 72 35 NA 33.6 0.627 50 pos
2 1 85 66 29 NA 26.6 0.351 31 neg
3 8 183 64 NA NA 23.3 0.672 32 pos
4 1 89 66 23 94 28.1 0.167 21 neg
5 0 137 40 35 168 43.1 2.288 33 pos
6 5 116 74 NA NA 25.6 0.201 30 neg
在train
中,我将na.action
设置为na.pass
(这会导致数据集保持不变),然后在ctree
中设置maxsurrogate
参数:
library(caret)
cvCtrl <- trainControl(method="repeatedcv", repeats = 2, classProbs = TRUE)
set.seed(1234)
ctree1 <- train(diabetes ~ ., data=PimaIndiansDiabetes2,
method = "ctree",
na.action = na.pass,
trControl = cvCtrl,
controls=ctree_control(maxsurrogate=2))
结果是:
print(ctree1)
Conditional Inference Tree
392 samples
8 predictor
2 classes: 'neg', 'pos'
No pre-processing
Resampling: Cross-Validated (10 fold, repeated 2 times)
Summary of sample sizes: 691, 692, 691, 691, 691, 691, ...
Resampling results across tuning parameters:
mincriterion Accuracy Kappa
0.01 0.7349111 0.4044195
0.50 0.7485731 0.4412557
0.99 0.7323906 0.3921662
Accuracy was used to select the optimal model using the largest value.
The final value used for the model was mincriterion = 0.5.
【讨论】:
您好,感谢您的回答 :) 为什么设置 maxsurrogate 参数? 我的目的是展示如何在train
中传递ctree
参数。另外maxsurrogate
是缺失值时的重要参数(必须设置为正值)。
为什么?对不起,我是新手xD
在本文档cran.r-project.org/web/packages/rpart/vignettes/longintro.pdf 的第 5.2 节中,对使用代理变量和代理拆分来处理 CART 中的缺失值进行了简要但清晰的解释。 (如果我的建议对解决您的问题有帮助,请考虑在上面为我的回答点赞:***.com/help/privileges/vote-up)以上是关于用于树的 train() 函数插入符号中的缺失值错误的主要内容,如果未能解决你的问题,请参考以下文章