2016-09-06 4 views
-1

이 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을 의미합니다. 그러나 데이터를 덮어 쓰는 경우 정규화하기 전에 최소값과 최대 값을 저장하는 것이 좋습니다 (그렇지 않으면 주석에 @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 기능 ...)

관련 문제