在插入符号的训练功能内执行knnImpute,而不会导致数据泄漏

问题描述

我有一些缺少值的数据。我想估算这些缺失的值并训练模型。插入符的预处理功能允许使用kNN回归进行数据插补。由于knnImpute函数将数据标准化,因此我想在插补后反向标准化以保留可解释性。让我们看看一些虚拟数据我该如何做:

# Dummy data
df <- data.frame(X = 1:30 + runif(30,min = -0.2,max = 0.2),Y = 11:40 + runif(30,max = 0.2))
df[c(1,5),1] <- NA

# Two values of X2 are NA and we want to impute them using knnImpute
# Afterwards,we need to reverse the standardization applied by knnImpute
library(caret)
imputer <- preProcess(df,method = 'knnImpute')
df$X <- predict(imputer,df)[,1,drop = F]
df$X <- unlist(df$X * imputer$std[1] + imputer$mean[1])

# Now we want to train our model using caret's train function
classifier1 <- train(form = Y ~ .,method = 'lm',data = df,trControl = trainControl(method = 'cv',number = 5))

显然,这是有问题的:因为插补发生在训练步骤之前,所以发生了数据泄漏。我知道可以将预处理步骤与插入符号的训练功能一起使用:

df <- data.frame(X = 1:30 + runif(30,1] <- NA

classifier2 <- train(form = Y ~ .,number = 5),preProcess = 'knnImpute')

我的两个问题:

  1. 上面的代码失败,并显示以下错误消息:
Error in na.fail.default(list(Y = c(10.9928320461884,12.03982633017,: 
  missing values in object

那么,如何在插入符号的训练函数中正确应用knnImpute?

  1. 如果我能够在插入符号的火车函数中正确应用它:是否可以像第一个代码块中所示的那样反向标准化?怎么样?

感谢您的帮助

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)