R 插入符号和 NA

机器算法验证 r 缺失数据 数据插补 插入符号
2022-02-04 03:52:10

我非常喜欢 caret 的参数调整能力和统一的界面,但我观察到即使应用的“裸”模型允许 NA,它也总是需要完整的数据集(即没有 NA)。这很麻烦,因为要使用费力的插补方法,而这本来就没有必要。一个人怎么能逃避归责,仍然使用插入符号的优势呢?

3个回答

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

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

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

您是否尝试过重新编码 NA?数据之外的大于 3 个标准差(例如 -12345)应该鼓励 C5.0 单独预测它们,就像它对 NA 所做的那样。

我认为您的解决方案是在使用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