7

我正在构建一个预测模型,并正在使用该mice软件包在我的训练集中估算 NA。由于我需要为我的测试集重复使用相同的插补方案,我如何将它重新应用于我的测试数据?

# generate example data
set.seed(333)
mydata <- data.frame(a = as.logical(rbinom(100, 1, 0.5)),
                     b = as.logical(rbinom(100, 1, 0.2)),
                     c = as.logical(rbinom(100, 1, 0.8)),
                     y = as.logical(rbinom(100, 1, 0.6)))

na_a <- as.logical(rbinom(100, 1, 0.3))
na_b <- as.logical(rbinom(100, 1, 0.3))
na_c <- as.logical(rbinom(100, 1, 0.3))
mydata$a[na_a] <- NA
mydata$b[na_b] <- NA
mydata$c[na_c] <- NA

# create train/test sets
library(caret)
inTrain <- createDataPartition(mydata$y, p = .8, list = FALSE)
train <- mydata[ inTrain, ] 
test <-  mydata[-inTrain, ]

# impute NAs in train set
library(mice)
imp <- mice(train, method = "logreg")
train_imp <- complete(imp)

# apply imputation scheme to test set
test_imp <- unknown_function(test, imp$unknown_data)
4

4 回答 4

2

从 mouse::mice 版本 3.12.0 开始,包含将涵盖大多数用例的忽略参数。

只需向它传递一个向量,对于应该在训练期间使用的所有行和 FALSE 对于应该只在训练期间使用的所有行(但在训练期间不使用)传递一个向量。

imp.ignore <- mice(data, ignore = c(rep(FALSE, 99), TRUE), maxit = 5, m = 2, seed = 1)
于 2020-12-17T13:39:56.533 回答
2

prockenschaub 为此创建了一个可爱的函数,称为mice.reuse()

library(mice)
library(scorecard)

# function to impute new observations based on the previous imputation model
source("https://raw.githubusercontent.com/prockenschaub/Misc/master/R/mice.reuse/mice.reuse.R")

# split data into train and test
data_list <- split_df(airquality, y = NULL, ratio = 0.75, seed = 186)

imp <- mice(data = data_list$train, 
            seed = 500, 
            m = 5,
            method = "pmm",
            print = FALSE)


# impute test data based on train imputation model
test_imp <- mice.reuse(imp, data_list$test, maxit = 1)
于 2020-12-15T14:15:31.183 回答
0

当你训练一个模型时,你不能在任何意义上使用测试数据。因此,您不能在拆分之前使用 MICE 估算完整的数据集。也有必要仅使用训练数据来估算测试数据

于 2018-02-08T15:56:11.540 回答
-4

在组合数据集上运行鼠标插补,然后将其拆分为训练集和测试集,将机器学习分类器拟合到训练集,然后拟合到测试集。

于 2017-08-31T17:37:52.753 回答