myI*_*D33 2 r normalization denormalization minmax
我使用此R代码将数据标准化为最小值和最大值:
normalize <- function(x) {
return ((x - min(x)) / (max(x) - min(x)))
}
mydata <- as.data.frame(lapply(mydata , normalize))
Run Code Online (Sandbox Code Playgroud)
如何对数据进行非规范化?
基本上,你只需要反转算术:x1 = (x0-min)/(max-min)暗示x0 = x1*(max-min) + min.但是,如果你要覆盖你的数据,你最好在规范化之前存储最小值和最大值,否则(正如评论中的@MrFlick指出的那样)你注定要失败.
设置数据:
dd <- data.frame(x=1:5,y=6:10)
Run Code Online (Sandbox Code Playgroud)
标准化:
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
Run Code Online (Sandbox Code Playgroud)
非规范化:
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
Run Code Online (Sandbox Code Playgroud)
一个聪明的normalize函数会将缩放变量作为属性附加到结果中(参见?scale函数...)