2016-09-06 15 views
-1

これらのRスクリプトを使用してMin Maxでデータを正規化しました。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 ...)

関連する問題