パラメタ調整
- プログラムの内部状態を数式で表現し、与えられた学習セットから式を正しく調整することを目標とした学習方法
チェッカーを例にすると、過去の人間同士の対戦結果などを参照して、ある局面で指した着手がその後の展開において良い手だったか悪い手だったかを評価し、評価が良くなるようにパラメタを調整する。
学習データセットとして数値が与えられたときに、それらの数値を説明できるような数式を決定することを、回帰分析という。
回帰分析の代表的な手法に、最小二乗法がある。
最小二乗法による回帰分析
最小二乗法を用いて一次式の係数を求めることで、データの関係を機械学習するプログラムを考える。
ここではパラメタ調整による学習の例題として、気象データを扱ってみる。
学習データセット => 新潟県長岡市の年ごとの日平均気温
用いるデータを気象庁のサイトから入手した => 気象庁>過去の気象データ検索
作成したプログラムはGithubに公開する => プログラム
用意したもの:
- 最小二乗法による一次式の係数を決定するプログラム => lsm.c
- データから必要な行のみを取り出すプログラム => selectline.c
- データから指定した位置の数値を取り出すプログラム => cutfield.c
- 行番号をデータファイルに付け加えるプログラム => addnumber.c
- Webサイトからコピーした気象データ => rawdata.txt
手順:
気象データから日平均気温だけを取り出す
$ ./selectline 2 < rawdata.txt | ./cutfield 5 > data.txt
rawdataの2N行のみを抽出し、更に5列目のみを抽出。結果をdata.txtに保存。X軸となる数値を付け加える
$ ./addnumber 1976 < data.txt > lsmdata.txt
data.txtのデータの左に、1976年からの年号を追加。lsmdata.txtに保存。最小二乗法により回帰分析を行う
$ ./lsm < lsmdata.txt
最小二乗法による計算式の係数を決定するプログラムに日平均気温データを挿入
最小二乗法による係数の計算結果 => y=12.206341 + 0.035819x
長岡市の年ごとの日平均気温の推移と最小二乗法による一次式での回帰分析
- 年々気温は上昇していく?
- 100年後には約3.6度上昇する!?
最小二乗法で未来の気温を予測することはできるが、このような簡単な学習により求めた式が100年後の予想に利用できるとは考えにくい。
データの変動傾向の学習
- 前年と比べて次の年の日平均気温がどうなるかについて、規則性を学習することを考える
- 例えば、平均気温の低い年が続いたら次の年は気温が上がる、などの規則性を得る
- 前年の気温と比べ、上昇しているなら+、下降しているならーの記号で表すこととする
例)1年前:15.4 当年:15.9 → 上昇"+"
1年前:16.8 当年:14.4 → 下降"ー"
- 過去3年間のデータ変動パターンを抽出する => 8パターン
- 変動パターンが学習データセットに出現する頻度を数え上げる
2年前 | 1年前 | 当年 | 頻度 |
---|---|---|---|
+ | + | + | |
+ | + | - | |
+ | - | + | |
+ | - | - | |
- | + | + | |
- | + | - | |
- | - | + | |
- | - | - |
- 2年前、1年前の変動パターンから当年の変動を予測する
例)
2年前 | 1年前 | 当年 | 頻度 |
---|---|---|---|
+ | + | + | 0 |
+ | + | - | 6 |
変動が+、+ときたら、当年が+になる確率が低い => +、+ときたら当年は"ー"と予測する
2年前 | 1年前 | 当年 | 頻度 |
---|---|---|---|
+ | - | + | 9 |
+ | - | - | 4 |
変動が+、ーときたら、当年が+になる確率の方が高い => +、ーときたら"+"と予測する
用意したもの:
- 気温の変動を調べるプログラム => updown.c
- 2年前、1年前の変動パターンから当年の変動を予測するプログラム => ml1.c
手順:
気温データから、前年と比較し変動を計算する
./updown < data.txt > pm.txt
結果をpm.txtに保存変動パターンの頻度と当年の変動予測を行う
./ml1 < pm.txt
結果:
+
+
-
+
+
-
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
-
+
+
+
+
-
+
-
+
-
-
+
-
+
+
+
-
+
-
学習結果
+++ : 0
++- : 6
+-+ : 9
+-- : 4
-++ : 7
-+- : 7
--+ : 4
--- : 1
学習結果より、+++パターンは頻度0、---パターンは頻度1と、他のパターンに比べて特徴的である。
では、プログラムで予測した変動と、実際の変動を比べてみる。
2回連続で気温が低下/上昇した後の予測のように、特徴的な気温変化を示す場合の予測は良好
=> 気温データの特徴が学習されている上昇と下降を繰り返すような場合は良い予測ができない
=> 気温データから注目するべき 特徴が見つけられなかった
参考文献
「はじめての機械学習」 小高知宏 著 オーム社