R语言中对向量应用scale()函数后如何获取原始值?
R语言scale()标准化结果还原原始值的方法
R里默认调用scale()做的是Z-score标准化,计算规则是(原始值 - 向量均值) / 向量标准差。还原原始值不需要重新对原数据算统计量,直接取标准化结果自带的两个属性反算就行,结果完全精准:
scaled:center:标准化过程中减去的原始向量均值,存在返回结果的属性里scaled:scale:标准化过程中除以的原始向量标准差,存在返回结果的属性里
还原的推导公式很简单:
原始值 = 标准化值 * 对应标准差(
scaled:scale) + 对应均值(scaled:center)
实操示例
对应测试代码,完整还原流程如下:
# 原始向量与标准化操作 x <- c(11, 12, 13,24, 25, 16, 17, 18, 19) scaled <- scale(x) # 提取标准化时留存的均值、标准差属性 orig_mean <- attr(scaled, "scaled:center") orig_sd <- attr(scaled, "scaled:scale") # 反算还原原始值 x_restored <- as.vector(scaled * orig_sd + orig_mean) # 校验还原结果,运行后返回TRUE即代表和原始值完全一致 all.equal(x, x_restored)
小提示:scale()返回的是带额外属性的矩阵格式结果,如果需要和原始向量格式完全一致,用as.vector()转成普通向量即可。
内容的提问来源于stack exchange,提问作者yellowDuck
相关产品推荐
相关产品推荐

