システムメンテナンスのお知らせ

重回帰分析をプログラム作成することを考えています。
しかし、データの正規化について疑問が2つあります。

まず一つは、例えば、画像の解析をする場合にデータの正規化をすることは、
ノイズを除去したり、画像の向きを正しくすることを意味しますよね。
しかし、回帰分析においてデータの正規化をすることは何を意味しているのでしょうか?
画像のように見てイメージがわけばよいのですが、数値データなのでどういう意図があるのかよく分かりません。


2つ目の疑問です。
また、データを正規化して重回帰分析をしたとします。
↓の重回帰分析を例に挙げます。
http://homepage2.nifty.com/crop_shimane-u/multip …
この例では、入力として年平均気温、降水量、日照時間とし、出力を単収としています。
このときデータを正規化せずに解析し、次のような予測式を推定しています。
 水稲単収=713.932-17.336×年平均気温+0.010666×降水量+0.017851×日照時間 ・・・ @
この場合に、正規化していないので新しいデータとして、例えば、
 年平均気温=14.8、降水量=2431、日照時間=1721 ・・・ (*)
から単収を推定したいとき、上記@の回帰式に代入することで単収を計算して推定できます。(1)

しかし、データを正規化(平均が0、分散が1になるように)した場合、入力と出力のデータが0以上1以下の値しかとらなくなるので、
重回帰によって上記@のように予測式が得られてもその予測式の出力は0以上1以下の値しかとらないことになり、
新しいデータ(*)をそのまま予測式に代入しても正しい単収を推定できないのではないかと考えています。
この場合のように、データを正規化して得られた予測式で(1)のように正しく単収を推定するにはどうしたらよいのでしょうか?

長くなりましたが、回答よろしくお願いします。

gooドクター

A 回答 (3件)

問1


正規化をすると、単位に引きずられず偏回帰係数によってその因子の影響を比較評価できるようになります。
たとえば、mmとcmと単位を変えたとき、mmで式を作ると「降水量」が大きな偏回帰係数を持ち、「降水量」の影響が大きく見えます。正規化してみれば、各因子の係数が、「寄与率」のように比較できます。
正規化して重回帰分析を行ったときの係数を「標準偏回帰係数」といいます。多くの解析ソフトは、両方を表示します。

問2
ご質問者の誤解です。
平均を0、分散を1までは正しいです。
データはおおよそー3から3くらい(ー3σから+3σ)になっているはずです。なぜ、正値しか考えないのですか? 負値もとります。
正規化(基準化,標準化ともいいます)した場合の予測値は、しない場合と同じ値を与えないと間違いです。

問3
もし、手持ちのルーチンが正値しか扱えないのなら、学力試験の偏差値のように(50,10)(偏差値といいます)にしても良いかもしれません。

この回答への補足

問1については理解しました。

問2、3がちょっとまだ分からないので、もうちょっと教えてください。
重回帰分析のプログラムをC++で作成しました。
解析したデータはこちらのものにしました。
http://gucchi24.hp.infoseek.co.jp/MRAEX1.htm
X =
8  4  8
7  7  7
5  8  9
4  3  3
6  8  8
2  5  3
3  6  6
9  9  7
Y =[18  12  14  6  12  8  10  16]

解析結果は以下のようになりました。
[正規化なし]
Y=2.504 + 0.8161X1 - 0.2749X2 + 1.055X3 ・・・ (a)

[正規化あり]
Y=9.72832e-18 + 0.499768X1 - 0.145797X2 + 0.597074X3 ・・・ (b)

正規化の仕方
 Xi = Σ( Xij-mean(Xi) ) / std(Xi)  j = 1・・・N
 Y = Σ( Yj-mean(Y) ) / std(Y)  j = 1・・・N
 Nはデータ数、mean(・)は平均、std(・)は標準偏差

[正規化したデータ]
X =
1.02062 -1.06066 0.717805
0.612372 0.353553 0.276079
-0.204124 0.824958 1.15953
-0.612372 -1.53206 -1.49083
0.204124 0.824958  0.717805
-1.42887  -0.589256  -1.49083
-1.02062  -0.117851  -0.165647
1.42887  1.29636  0.276079
Y = [1.5  0  0.5  -1.5  0  -1  -0.5  1]

このとき、
 X1=6、X2=4、X3=8 ・・・ (c)
として回帰式(a)、(b)で予測したところ
 (a)=Predict_Y = 7.19201
 (b)=Predict_Y = 14.741
となり予測値が一致しません。
これは単純にプログラムが間違っているということなのでしょうか?
それとも、テストデータ(c)をそのまま予測式に入れたのではダメなのでしょうか?
回答お願いします。

補足日時:2008/10/13 16:55
    • good
    • 0

> データはおおよそー3から3くらい(ー3σから+3σ)になっているはずです。

と回答に書かれているのですが、-3から3という範囲はどのようにして求めているのですか?

正規分布の場合は、±3σの範囲内の分布密度は全体の99.7%で、ほぼ全データが入ります。ですからよくグラフを書くときに±3σの線を入れたりします。工程能力も±3σが安定の目安になっています。
すなわち、今、分布がN(0,1)ですから、±3の範囲に殆ど全てのデータが入ってくるだろうと考えて書きました。それを越えるものは異常値の疑いがあるわけです。

> 正規化なしの場合の回帰式の係数と、正規化ありの場合の回帰式の係数は異なっているわけですが、この係数を一致させることは可能なのでしょうか?

偏回帰係数と標準偏回帰係数は通常は一致しません。偏回帰係数と標準偏回帰係数が一致するのは、説明変数の分散と目的変数の分散が一致しているときだけです。
ただし、互いに変換は可能です。リンク先の式(2-6)をご覧下さい。

> そうできれば、テストデータを正規化する必要もなくなるので・・・。

リンク先にも書いてありますように、一般の統計ソフトではまず先に、桁落ち桁あふれの心配のない標準偏回帰係数を求めておき、それから偏回帰係数に変換するのが誤差の少ないやり方です。
まずは、正規化をやられてはいかがでしょうか。

参考URL:http://staff.aist.go.jp/kudoh.yuki/ja/research/f …
    • good
    • 0
この回答へのお礼

詳細な回答ありがとうございました。
重回帰と正規化についてとてもよく理解できました。

お礼日時:2008/10/14 19:39

#1です。


回答が遅くなりすみません。

説明変数(x)を正規化したデータで重回帰式を作ったときは、予測用代入値(x')もxを正規化した変換式で変換されたものでなくてはなりませんね。

それから、私は前の回答で少しはしょって書いてしまいましたが、説明変数(x)を正規化したときは、目的変数(y)も同様に正規化するケースが多く、そのような場合は予測値も正規分布N(0,1)に従います。よって逆変換しないと元の値と一致しません。
しかし、あくまで大小関係はしっかり保存されています。

この回答への補足

回答ありがとうございました。
おかげさまで、正規化なしの回帰式での予測値と正規化ありの回帰式の予測値が
一致しました。

前回の補足に書き忘れたのですが、
>データはおおよそー3から3くらい(ー3σから+3σ)になっているはずです。
と御回答にかかれているのですが、-3から3という範囲はどのようにして求めているのですか?


また、最後にできるのかお聞きしたいのですが、正規化なしの場合の回帰式の係数と
正規化ありの場合の回帰式の係数は、異なっているわけですが、この係数を
一致させることは可能なのでしょうか?
そうできれば、テストデータを正規化する必要もなくなるので・・・。

補足よろしくおねがいします。

補足日時:2008/10/14 12:59
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング