使用数据集B的参数缩放数据集A

时间:2018-12-19 13:49:27

标签: r scale

我有一个数据集,我将其分为训练集和测试集。这意味着当我对它们进行缩放时,我应该将数据值缩放到训练集,然后使用相同的缩放比例来缩放测试集。特别是,我只想缩放这两个集合的列中的2个。

在Python中,我可以使用缩放类进行此操作-我只在训练集上调用fit_transform,然后在测试集上调用transform。但是在R中,我不确定执行此操作的最简单方法。我可以使用training_set[, 2:3] = scale(training_set[, 2:3])缩放训练集(因为我只想缩放第二列和第三列)。但是如何将测试集缩放到相同的比例?

很抱歉,如果以前已经有人问过这个问题,我对R和Python都很陌生,并且可能缺少一些术语来查找我真正想要的东西。

2 个答案:

答案 0 :(得分:0)

我通常这样做:

 Normalise <- function(data,means=NULL,sds=NULL){
      data <- na.omit(data) %>% as.data.frame()
      N <- ncol(data)
      ind <- rep(F,N)
      for(i in 1:N){
        if(is.numeric(data[,i])){
          ind[i] <- T
        }
      }
      temp <- data[,ind]
      if(is.null(means)){
        means <- c()
        for(i in 1:sum(ind)){
          means[i] <- mean(temp[,i])
        }
      }
      if(is.null(sds)){
        sds <- c()
        for(i in 1:sum(ind)){
          sds[i] <- sd(temp[,i])
        }
      }
      for(i in 1:sum(ind)){
        temp[,i] <- (temp[,i] - means[i]) / sds[i]
      }
      data[,ind] <- temp
      return <- list(data,means,sds)
      names(return) <- c("data","means","sds")
      return(return)
    }


    UnNormalise <- function(data,mean,sd){
      return(data*sd + mean)
    }


norm <- Normalise(train)
train <- norm$data
test <- Normalise(test,means=norm$means,sds=norm$sds)
test <- test$data

它不是最漂亮的,但它可以工作。

希望有帮助。

答案 1 :(得分:0)

一个快速版本的解决方案不如@JacobJacox的解决方案那么普遍

test_set[,2] = (test_set[,2] - mean(training_set[,2])) / sd(training_set[,2])
test_set[,3] = (test_set[,3] - mean(training_set[,3])) / sd(training_set[,3])