我非常喜欢 caret 的参数调整能力和统一的界面,但我观察到即使应用的“裸”模型允许 NA,它也总是需要完整的数据集(即没有 NA)。这很麻烦,因为要使用费力的插补方法,而这本来就没有必要。一个人怎么能逃避归责,仍然使用插入符号的优势呢?
R 插入符号和 NA
机器算法验证
r
缺失数据
数据插补
插入符号
2022-02-04 03:52:10
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,
)
其它你可能感兴趣的问题