使用插入符号预处理训练和测试数据

时间:2020-06-23 18:21:14

标签: r r-caret

美好的一天

我正在使用脱字符号中的preProcess()函数来相应地缩放我的训练数据。我也有一个测试数据集,我希望以与训练集相同的均值和标准差进行缩放。通过这种方式,我将测试数据视为完全新的/看不见的数据,并根据我根据训练数据观察到的数据进行了缩放。

我有以下代码:

train = training data
test = test data (want to treat this as unseen)

preprocess_values_train = preProcess(train, method = c("center", "scale"))
train.st = predict(preprocess_values_train, train)

test.st = predict(preprocess_values_train, test)

我认为这会将训练平均值和标准差应用于测试数据集,但事实并非如此。您将如何根据培训数据详细信息来编辑此代码以扩展测试数据? train.st正是我需要的,而test.st却不是。

谢谢, 阿夫申

1 个答案:

答案 0 :(得分:1)

它根据火车的均值和标准差进行缩放:

library(caret)
df = data.frame(matrix(runif(2000),ncol=10))
train = df[1:100,]
test = df[101:200,]

preprocess_values_train = preProcess(train, method = c("center", "scale"))
train.st = predict(preprocess_values_train, train)

head(train.st)
          X1          X2         X3           X4         X5           X6
1  1.3163365 -0.31011484 -1.2534994  1.448256135 -0.8130691  1.401194346
2  1.1156438  1.44669749 -1.3775943 -0.077657870  1.6383685 -0.004940122
3  0.3628558  0.05983967 -1.4853910 -0.233465895  0.7657059  1.173381343
4 -1.3851982 -0.78838468  1.3607501 -0.001212484 -0.3388031 -1.321384412
5 -1.0269737 -1.34665949 -1.2681398  1.507292935  0.4152667  1.337453028
6  0.6322652  0.31820145  0.3719918  1.619318256 -0.3721707 -0.955420716
          X7          X8         X9        X10
1  0.5323608  0.09905265 -0.4302925 -1.3965973
2  0.8590394 -1.13310729  0.9641076  0.9685195
3 -0.7753370 -0.08805592  1.4285071 -1.2162778
4  1.1605200  0.44107850 -0.7273844  0.7803693
5  0.2324899  0.28557215 -0.2934569  1.5633815
6 -0.7492416 -0.18478112  1.1474105 -0.2717625

我们可以手动计算:

scaled_train = t(apply(train,1,function(i)(i-preprocess_values_train$mean)/preprocess_values_train$std))

您可以看到,我们获得了与预报(...)相同的值:

all.equal(scaled_train,as.matrix(train.st))
[1] TRUE

现在我们将其应用于测试:

test.st = predict(preprocess_values_train, test)

scaled_test = t(apply(test,1,function(i)(i-preprocess_values_train$mean)/preprocess_values_train$std))

 all.equal(scaled_test,as.matrix(test.st))
[1] TRUE
相关问题