R Caret和NA


26

我非常喜欢插入符号的参数调整能力和统一的界面,但是我观察到,即使应用的“裸”模型允许使用NA,它始终需要完整的数据集(即没有NA)。这很麻烦,因为应该使用费力的插补方法,而这些方法一开始并不需要。一个人如何逃避归因并仍然使用插入符号优势?


3
您总是必须做一些缺少值的事情。我必须说我不太明白您的问题-您正在寻找一种“一刀切”的方法。如果您不想输入资产净值,那么您想对它们做什么?删除?
蒂姆

1
我想将NA留在那儿,然后留给模型处理NA。例如,如果我使用C50中的C5.0函数进行处理,它可以应付NA本身,但是在这种情况下,我不能使用插入符号,因为即使我想使用C5,插入符号的训练函数也不允许数据集中的NA。上述C50的功能为0。
Fredrik

3
但是“模型”的作用是要么忽略(删除)此数据,要么给您留下较小的样本;它估计(输入)这些值;或预测“ NA”类别(例如,在某些基于树的模型中)。您还希望您的“模型”做什么?某些软件会自动为您完成这些操作,但想象您的咖啡机为您提供了“默认”咖啡……有些软件是根据NA来制作“默认咖啡”的,但这并不是您能得到的最好的软件。
蒂姆

3
您确定插入符号不允许使用NA吗?我尝试在火车帮助页面中使用默认示例介绍NA,并且使用C5.0方法,火车可以正常工作。它因随机森林而失败。
mpiktas 2015年

Answers:


32

对于插入符号中的训练函数,可以传递参数na.action = na.pass,并且不进行任何预处理(不指定preProcess,将其保留为默认值NULL)。这会将未修改的NA值直接传递给预测函数(这将导致不支持缺失值的预测函数失败,因为那些您需要在调用预测函数之前指定preProcess来插补缺失值)。例如:

train(formula,
      dataset,
      method = "C5.0",
      na.action = na.pass)

在这种情况下,C5.0会自行处理缺失值。


1
这是一个有趣的讨论。将NA作为另一个级别添加到分类预测变量的陷阱是什么?如果不能对NA进行建模或估算,即实际上不存在缺席情况是有根据的,那么似乎简单地将NA增加一个水平就有意义了吗?
Seanosapien

如果一个使用X,y中规范train具有na.action = na.pass选项集将导致以下错误:Something is wrong; all the RMSE metric values are missing
user29609

3

您是否尝试过重新编码NA?数据之外的> 3标准偏差(例如-12345)应鼓励C5.0像NA一样单独预测它们。


2

我认为您的解决方案是在使用predict()函数时估算值。

请参阅?predict.train以获取更多详细信息。

您可以使用na.omit允许插入号来插值。例如:

    ## S3 method for class 'train':
    predict((object, newdata = NULL, type = "raw", na.action = na.omit, ...)

来自http://www.inside-r.org/packages/cran/caret/docs/predict.train

另一种解决方案是在预处理数据时估算:

    ## S3 method for class 'default':
    preProcess(x, 
       method = "knnImpute",   # or *bagImpute* / *medianImpute*
       pcaComp = 10,
       na.remove = TRUE,
       k = 5,
       knnSummary = mean,
       outcome = NULL,
       fudge = .2,
       numUnique = 3,
       verbose = TRUE,
       )

来自http://www.inside-r.org/node/86978

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.