R中的标准化/标准化测试数据

数据挖掘 r 正常化
2022-02-21 18:15:05

我知道应该使用训练均值和标准差对测试数据(或任何“未标记”数据)进行标准化和规范化。如何用 R 语言实现它?是否有一种对训练集的“拟合”和一种对测试数据的应用?

1个回答

preProcesscaret库中查看函数。您可以选择要缩放/居中训练数据的参数,它还保存它所做的转换,以便您可以使用与标准化训练集相同的规范对测试集进行标准化。可以这样:

library(caret)
trainData <- data.frame(v1 = rnorm(15,3,1), v2 = rnorm(15,2,2))
testData <- data.frame(v1 = rnorm(5,3,1), v2 = rnorm(5,2,2))
normParam <- preProcess(trainData)
norm.testData <- predict(normParam, testData)

现在您norm.testData根据训练数据集参数进行了缩放和居中。

另一种不使用插入符号的方法:

## set up data
trainData <- data.frame(v1 = rnorm(15,3,1), v2 = rnorm(15,2,2))
testData <- data.frame(v1 = rnorm(5,3,1), v2 = rnorm(5,2,2))

## find mean and sd column-wise of training data
trainMean <- apply(trainData,2,mean)
trainSd <- apply(trainData,2,sd)

## centered
sweep(trainData, 2L, trainMean) # using the default "-" to subtract mean column-wise   
## centered AND scaled
norm2.testData <- sweep(sweep(testData, 2L, trainMean), 2, trainSd, "/")