我有一个数据集,我将其分为训练集和测试集。这意味着当我对它们进行缩放时,我应该将数据值缩放到训练集,然后使用相同的缩放比例来缩放测试集。特别是,我只想缩放这两个集合的列中的2个。
在Python中,我可以使用缩放类进行此操作-我只在训练集上调用fit_transform
,然后在测试集上调用transform
。但是在R中,我不确定执行此操作的最简单方法。我可以使用training_set[, 2:3] = scale(training_set[, 2:3])
缩放训练集(因为我只想缩放第二列和第三列)。但是如何将测试集缩放到相同的比例?
很抱歉,如果以前已经有人问过这个问题,我对R和Python都很陌生,并且可能缺少一些术语来查找我真正想要的东西。
答案 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])