2016-09-06 10 views
-1

Я нормализовал данные с помощью Min Max с этими R-скриптами.R денормализовать данные

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

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

Как я могу денормализовать данные?

Спасибо!

+4

Итак, какой желаемый результат здесь? Почему бы вам просто не сохранить «нормализованную» версию для другой переменной. Невозможно однозначно ненормализовать данные с помощью этой формулы. 'c (0,10)' будет нормирован на 'c (0,1)', но так будет 'c (3, 17)'. Невозможно сказать, каковы первоначальные значения. – MrFlick

+0

Исходными данными являются, например, [(3,8,10,11,22,28), (4,17,20,21,26,40), (4,5,13,16,18,27)] – myID33

+2

Вы должны отредактировать сообщение, чтобы включить важную информацию (например, данные примера), а не оставлять ее в комментарии. – Frank

ответ

3

По существу, вам просто нужно обратить вспять арифметику: x1 = (x0-min)/(max-min) подразумевает, что x0 = x1*(max-min) + min. Однако, если вы переписываете свои данные, вам лучше сохранить значения min и max до нормализации, иначе (как указано в комментариях @MrFlick в комментариях) вы обречены.

Настройки данные:

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 функция ...)