Я выбираю разделение 90/10 Training/Test с некоторыми данными в R. После того, как у меня есть набор Training. Я хотел бы стандартизировать его. Затем я хотел бы использовать то же среднее значение и стандартное отклонение, что и в тренировочном наборе, и применить эту стандартизацию к тестовому набору.
Я хотел бы сделать это максимально возможным способом base-R, но было бы хорошо и с решением dplyr
. Обратите внимание, что у меня есть столбцы, которые имеют значения factors/chr
и numeric
. Конечно, мне нужно сначала выбрать числовые.
Моя первая установка приведена ниже с воспроизводимым примером кода. У меня есть средние значения и стандартные отклонения для соответствующих числовых столбцов, как теперь я могу применить стандартизацию обратно к конкретным столбцам данных обучения и тестирования?
library(tidyverse)
rm(list = ls())
x <- data.frame("hame" = c("Bob", "Roberta", "Brady", "Jen", "Omar", "Phillip", "Natalie", "Aaron", "Annie", "Jeff"),
"age" = c(60, 55, 25, 30, 35, 40, 47, 32, 34,67),
"income" = c(50000, 60000, 100000, 90000, 100000, 95000, 75000, 85000, 95000, 105000))
train_split_pct = 0.90
train_size <- ceiling(nrow(x)*train_split_pct) # num of rows for training set
test_size <- nrow(x) - train_size # num of rows for testing set
set.seed(123)
ix <- sample(1:nrow(x)) # shuffle
x_new = x[ix, ]
Train_set = x_new[1:train_size, ]
Test_set = x_new[(train_size+1):(train_size+test_size), ]
Train_mask <- Train_set %>% select_if(is.numeric)
Train_means <- Train_mask %>% apply(2, mean)
Train_stddevs <- Train_mask %>% apply(2, sd)