缩放生产数据

Posted

技术标签:

【中文标题】缩放生产数据【英文标题】:Scaling production data 【发布时间】:2020-09-24 07:33:57 【问题描述】:

我有一个数据集,比如 Data,它由分类变量和数值变量组成。清理它们后,我只使用了缩放数值变量(猜测分类不能缩放)

Data <- Data %>% dplyr::mutate_if(is.numeric, ~scale(.) %>% as.vector)

然后我将其随机分成 70-30% 使用

set.seed(123)
sample_size = floor(0.70*nrow(Data))
xyz <- sample(seq_len(nrow(Data)),size = sample_size)
Train_Set <- Join[xyz,]
Test_Set <- Join[-xyz,]

我已经使用 Ranger 构建了一个分类模型,比如 model_rang,使用 Train_Set 并使用 Test_Set 对其进行了测试。

如果一个新数据,比如 new_data,到达生产环境,在清理它之后,是否足以以上述方式对其进行扩展?我是说

new_data <- new_data %>% dplyr::mutate_if(is.numeric, ~scale(.) %>% as.vector)

然后用它来预测结果使用(有两个类 0 和 1 和 1 是感兴趣的)

probabilities <- as.data.frame(predict(model_rang, data = new_data, num.trees = 5000, type='response', verbose = TRUE)$predictions)
caret::confusionMatrix(table(max.col(probabilities) - 1,new_data$Class), positive='1')

规模是否像数据中那样正确完成,或者我是否遗漏了生产数据中的任何关键内容?

或者,我是否必须单独缩放 Train_Set 并取每个变量的标准差和相关的平均值来缩放 Test_Set,并且当生产过程中的新数据到达时,将来自 Train_Set 的旧标准差和平均值应用于每个新数据集?

【问题讨论】:

我觉得这个链接很有趣:stats.stackexchange.com/questions/89172/… 【参考方案1】:

当您对数据进行缩放时,您会从中减去平均值并除以标准差。新数据中的均值和标准差可能与用于构建模型的(训练数据)中的不同。

想象一下,在您的随机森林中,一个变量被拆分为 0.555(缩放数据),现在在您的新数据中,标准差更低,低于 0.555 的值现在已经结束,并将被分类为不同的类别.

您可以做的一件事是存储您指向的帖子的属性:

set.seed(111)

data = data.frame(A=sample(letters[1:3],100,replace=TRUE),
B=runif(100),C=rnorm(100))

num_cols = names(which(sapply(data,is.numeric)))

scale_params = attributes(scale(data[,num_cols]))[c("scaled:center","scaled:scale")]

newdata = data.frame(A=sample(letters[1:3],100,replace=TRUE),
B=runif(100),C=rnorm(100))

newdata[,num_cols] = scale(newdata[,num_cols],
center=scale_params[[1]],scale=scale_params[[2]])

【讨论】:

+1 以获得明确的答案和示例!顺便说一句,这个理由是否也适用于问题中指定的Test_Set,还是仅适用于new_data 等生产数据?如果第一个是真的,那么我们是否可以说在训练和测试集拆分之前可以对Data 进行缩放? 感谢@RicS 的反馈。您通常在拆分为测试和训练之前缩放数据。更有意义,在 OP 的示例中,它是这样做的。所以它只适用于 new_data 谢谢@StupidWolf。顺便说一句,我在 SO ***.com/questions/49444262/… 上看到了这个答案,这与你在评论中所说的相反。你怎么看? 还有这些链接stats.stackexchange.com/questions/267012/…和datascience.stackexchange.com/questions/54908/… 您分享的第一个链接,接受的答案说:“因此,您应该对训练数据执行特征归一化。然后对测试实例也执行归一化,但这次使用的均值和方差训练解释变量。”

以上是关于缩放生产数据的主要内容,如果未能解决你的问题,请参考以下文章

用于自动缩放 Heroku 测功机和工人的宝石/服务

cloudformation 堆栈更新和启动模板版本/自动缩放组的问题

R数据缩放值标准缩放(standardization scaling)以及最小最大缩放(Min-Max scaling)

r中的选择性缩放函数使用不同的数据框进行缩放

缩放 LIBSVM 的测试数据:MATLAB 实现

Azure - 无法自动缩放,因为未找到监控数据