No.05432 ニューラルネットワークの出力値について  【たくや】 2008/01/18(Fri) 04:52

R2.4.1の関数nnet()を使って,ニューラルネットワークによる世界各国のエネルギー消費量予測をしたいと考えています。

国数は34ヶ国,出力値はエネルギー消費量,入力値は人口,陸地面積,CO2排出量,GDP,輸出入額,自動車使用台数です。

これらのデータを02年度と03年度について用意し,02年を学習用,03年を予測用データとして使用します。
実際のデータは下記の通りです。あまり長くなると良くないかと思いますので,10ヶ国分だけ表示いたします。
最初が02年度,次が03年度のデータです。
ここで,「enecon」と書いてある列が,出力値にしたいエネルギー消費量の値です。
   enecon     pop     area     co2     gdp export  import      car
1 474297 127401 377873 1247760 3489295 416730 337209 72256.8
2 332812 1050640 3287263 1231881 606995 49232 56495 19508.0
3 166951 47640 99538 446190 528666 162470 152126 13907.1
4 13684 4171 683 55589 78413 125177 116441 564.3
5 66414 69626 783562 208478 213835 34561 49663 6279.2
6 2221277 288369 9629091 5796760 8179631 693103 1200230 229619.9
7 256420 31373 9970610 567790 806260 252408 221961 18187.9
8 131265 103229 1958201 399932 372354 160682 168679 19659.0
9 51821 37944 2780400 119933 182072 25650 8990 6300.0
10 127901 174633 8514047 312897 589595 60362 49599 21115.7

enecon pop area co2 gdp import export car
1 465790 127649 377873 1250490.0 3534844 383085 471999.0 72527.6
2 346330 1068214 3287263 1275608.0 656768 71239 57086.0 17343.0
3 170992 47925 99538 456750.0 545039 178827 193817.0 14541.9
4 14220 4185 683 47885.0 79481 127935 144183.0 564.8
5 70567 70713 783562 220409.0 226226 65637 46576.0 6494.4
6 2190283 290811 9629091 5841500.0 8429749 1303050 724771.0 231390.0
7 267350 31660 9970610 586079.0 822378 239083 272696.0 18416.4
8 136822 104214 1958201 416698.0 377712 170490 165396.0 21000.0
9 55325 37870 2780400 127728.0 198162 13834 29566.0 6350.0
10 125910 178985 8514047 298902.0 588287 50706 73084.0 23000.0
これらのデータを使い,次のようにして予測を行いました。
> result <- nnet(enecon ~ ., data=x, size=2)
# weights: 19
initial value 6061331521324.778320
final value 6061326895112.000000
converged

> predict(result, y, type="raw")
[,1]
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
上記において,xは02年度データ,yは03年度データを指しています。
ここで疑問に思ったのが,なぜ予測値が全て1になってしまうかという点です。

type="raw"と書いているので,当てはめ値を返すはずだと考えていたのですが,そうなりません。
上記ではsize(隠れ層のユニット数)は2となっていますが,最大14まで数字を変えて試してみましたが,やはり予測値は1となります。

様々なインターネット・本などで,Rやニューラルネットワークについて調べたのですが,原因はわからないままです。

恐れ入りますが,ご教授いただきたく思います。よろしくお願い致します。

No.05434 Re: ニューラルネットワークの出力値について  【青木繁伸】 2008/01/18(Fri) 10:47

回帰の場合には linout 引数を指定しないといけないのでは?

No.05452 Re: ニューラルネットワークの出力値について  【たくや】 2008/01/19(Sat) 16:07

ありがとうございます!

linout=Tにしたらちゃんと予測できました。
まだまだ勉強が足りないようです。

この度は大変お世話になりました。

● 「統計学関連なんでもあり」の過去ログ--- 041 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る