非规范化数据

Posted

技术标签:

【中文标题】非规范化数据【英文标题】:denormalize data 【发布时间】:2017-01-14 07:41:52 【问题描述】:

我用这个 R 代码用最小值和最大值对数据进行了标准化:

normalize <- function(x) 
    return ((x - min(x)) / (max(x) - min(x)))
  

mydata <- as.data.frame(lapply(mydata , normalize))

如何对数据进行非规范化?

【问题讨论】:

那么这里想要的输出是什么?为什么不将“标准化”版本保存到不同的变量中。无法使用此公式对数据进行唯一的非规范化。 c(0,10) 将被规范化为 c(0,1),但 c(3, 17) 也是如此。无法说出原始值是什么。 原始数据例如是[ (3,8,10,11,22,28), (4,17,20,21,26,40), (4,5,13,​​16 ,18,27)] 您应该编辑您的帖子以包含重要信息(例如示例数据),而不是将其留在评论中。 【参考方案1】:

本质上,您只需反转算术:x1 = (x0-min)/(max-min) 暗示x0 = x1*(max-min) + min。但是,如果您要覆盖数据,则最好在标准化之前存储最小值和最大值,否则(正如 @MrFlick 在 cmets 中指出的那样)您注定要失败。

设置数据:

dd <- data.frame(x=1:5,y=6:10)

标准化:

normalize <- function(x) 
    return ((x - min(x)) / (max(x) - min(x)))

ddnorm <- as.data.frame(lapply(dd,normalize))
##      x    y
## 1 0.00 0.00
## 2 0.25 0.25
## 3 0.50 0.50
## 4 0.75 0.75
## 5 1.00 1.00

非规范化:

minvec <- sapply(dd,min)
maxvec <- sapply(dd,max)
denormalize <- function(x,minval,maxval) 
    x*(maxval-minval) + minval

as.data.frame(Map(denormalize,ddnorm,minvec,maxvec))
##   x  y
## 1 1  6
## 2 2  7
## 3 3  8
## 4 4  9
## 5 5 10

更聪明的normalize 函数会将缩放变量作为属性附加到结果中(参见?scale 函数...)

【讨论】:

以上是关于非规范化数据的主要内容,如果未能解决你的问题,请参考以下文章

非规范化数据

将非规范化文件中的数据加载到规范化表中

SQLAlchemy 事件可以用于更新非规范化数据缓存吗?

具有非规范化的 cassandra 数据建模

Logstash -> Elasticsearch - 更新非规范化数据

如何在 GCP 上执行数据非规范化?