「《複雑系による予測モデル》」の版間の差分
6行目: | 6行目: | ||
ている.以下では,やや視点を変えて,複雑系による予測をとりあげる. | ている.以下では,やや視点を変えて,複雑系による予測をとりあげる. | ||
複雑系の理論も多岐にわたっているが,この中でも,フラクタルとカオス | 複雑系の理論も多岐にわたっているが,この中でも,フラクタルとカオス | ||
− | をとりあげ,方法論として遺伝的プログラミング(Genetic Programming:GP) | + | をとりあげ,方法論として遺伝的プログラミング(Genetic Programming:GP)を用いる.予測の主な対象は時系列である. |
フラクタル時系列の予測においては,時系列の時間軸をスケール変換 | フラクタル時系列の予測においては,時系列の時間軸をスケール変換 | ||
したときの統計的な性質を利用するだけではなく,コッホ曲線に | したときの統計的な性質を利用するだけではなく,コッホ曲線に | ||
ヒントを得て,時間軸方向にインパルス応答関数を伸長したものを | ヒントを得て,時間軸方向にインパルス応答関数を伸長したものを | ||
− | 再利用する方法を用いている[1] | + | 再利用する方法を用いている[1]. |
次に,カオス理論を用いた時系列予測においては,時系列を生成する | 次に,カオス理論を用いた時系列予測においては,時系列を生成する | ||
− | + | 関数方程式が決定論的に記述できることを利用する.カオス時系列の | |
データが与えられたときに,このデータをできるだけ近似する関数 | データが与えられたときに,このデータをできるだけ近似する関数 | ||
− | をGP手法により推定する[2] | + | をGP手法により推定する[2].多数の関数の候補を,GP手法における |
個体として与えておき,近似度の優れた個体どうしに遺伝的操作を | 個体として与えておき,近似度の優れた個体どうしに遺伝的操作を | ||
− | 加えて, | + | 加えて,より近似度の高い個体を生成する. |
一般的な線形時変入出力システム | 一般的な線形時変入出力システム | ||
26行目: | 26行目: | ||
</center> | </center> | ||
− | + | を考察する.ここでは入力<math>x(t)</math>と出力<math>y(t)</math>が同じであると考える. | |
線形時変システムのインパルス応答関数<math>h(t,\tau)</math>がスケール関数<math>\phi(t)</math>を用いて次のよ | 線形時変システムのインパルス応答関数<math>h(t,\tau)</math>がスケール関数<math>\phi(t)</math>を用いて次のよ | ||
− | + | うに展開されると仮定する. | |
<center> | <center> | ||
<math>h(t,\tau)=\sum _{i=0}^\infty \sum _{j=0}^\infty | <math>h(t,\tau)=\sum _{i=0}^\infty \sum _{j=0}^\infty | ||
55行目: | 55行目: | ||
式(1)による<math>y(t)</math>と入力時系列<math>x(t)</math>との差の | 式(1)による<math>y(t)</math>と入力時系列<math>x(t)</math>との差の | ||
最小2乗近似を考え,これを最小化するように | 最小2乗近似を考え,これを最小化するように | ||
− | インパルス応答関数の係数<math>h_{ij}</math> | + | インパルス応答関数の係数<math>h_{ij}</math>を決定する. |
式(3)の計算では<math>N=0</math>とし, <math>j</math>の範囲を<math>j=</math>1~4に | 式(3)の計算では<math>N=0</math>とし, <math>j</math>の範囲を<math>j=</math>1~4に | ||
− | 限定し,最適化の方法としては最急降下法が用いられる[1] | + | 限定し,最適化の方法としては最急降下法が用いられる[1]. |
− | 次に, | + | 次に,時間軸の伸長による予測について述べる. |
いま, <math>T_s \le t \le T_e</math>は時系列<math>x(t)</math>が観測される時間区間であり | いま, <math>T_s \le t \le T_e</math>は時系列<math>x(t)</math>が観測される時間区間であり | ||
− | <math>T_1=T_e-T_s</math> | + | <math>T_1=T_e-T_s</math>とする.また, <math>0 < t \le T_2</math>は<math>x(t)</math> |
− | + | を予測する区間とする. | |
なお, <math>T_1,T_2</math>の選び方には任意性があるが,期間<math>T_1</math>の時系列 | なお, <math>T_1,T_2</math>の選び方には任意性があるが,期間<math>T_1</math>の時系列 | ||
− | が,期間全体<math>T_2</math> | + | が,期間全体<math>T_2</math>の時系列とできるだけ相似であるように選択する必要がある. |
− | ここで時間軸の伸長のパラメータとして<math>b=a^D,a=T_2/T_1,T_2 > T_1</math> | + | ここで時間軸の伸長のパラメータとして<math>b=a^D,a=T_2/T_1,T_2 > T_1</math>を定義する. |
計算においては, <math>a=</math>整数となるように<math>T_1,T_2</math>を選んでいる | 計算においては, <math>a=</math>整数となるように<math>T_1,T_2</math>を選んでいる | ||
− | (例:<math>T_2=2 T_1</math>) | + | (例:<math>T_2=2 T_1</math>).<math>x(t)</math>がフラクタル性を持つ場合には,その自己相似性により |
− | , <math>0 < t \le T_2</math>において, | + | , <math>0 < t \le T_2</math>において,次の式が近似的に成立すると考えられる. |
82行目: | 82行目: | ||
時系列を生成する方程式の体系を推定する | 時系列を生成する方程式の体系を推定する | ||
− | 例として, | + | 例として,カオス力学系が興味深い事例を与える. |
カオス時系列とは,生成する関数に乱数などの不確実な要素を含まないシステム | カオス時系列とは,生成する関数に乱数などの不確実な要素を含まないシステム | ||
− | + | から生成される一見乱雑な時系列である. | |
− | 例えば, | + | 例えば,次の方程式で記述されるロジスティック写像がある. |
<center> | <center> | ||
92行目: | 92行目: | ||
この変数<math>x(t)</math>の初期値に,適当な値を与えて時系列を生成すると, | この変数<math>x(t)</math>の初期値に,適当な値を与えて時系列を生成すると, | ||
− | + | 乱雑な時系列となる. | |
以下では,問題を簡単にするために,すでに方程式が既知であり | 以下では,問題を簡単にするために,すでに方程式が既知であり | ||
− | , | + | ,この方程式系により発生される時系列の観測データを得られていると仮定する. |
GP適用の目的は,観測された時系列データ<math>x(t)</math>から, | GP適用の目的は,観測された時系列データ<math>x(t)</math>から, | ||
− | 関数(式(6)の右辺の形) | + | 関数(式(6)の右辺の形)を推定することである. |
− | + | 関数を木構造で表現するケースを考える.木構造は1つで | |
− | はなく,複数(例えば100個とか1000個) | + | はなく,複数(例えば100個とか1000個)を与える.これを, |
− | + | GAの場合と同様に個体と呼んでいる.木構造は,最も推定 | |
− | が正しい場合には式(6) | + | が正しい場合には式(6)になるであろう. |
木構造を関数値の計算に用いて時系列を生成し,この生成された値(予測値) | 木構造を関数値の計算に用いて時系列を生成し,この生成された値(予測値) | ||
と実際に観測された時系列との差(2乗誤差など)が小さい個体(木構造)ほど, | と実際に観測された時系列との差(2乗誤差など)が小さい個体(木構造)ほど, | ||
− | + | 近似度が高いことになる. | |
個体の交差処理,突然変異に関しては, | 個体の交差処理,突然変異に関しては, | ||
− | 方程式を前置表現(prefix representation)することにより簡単化できる[2] | + | 方程式を前置表現(prefix representation)することにより簡単化できる[2]. |
この前置表現は,いわゆる日本語型表現に | この前置表現は,いわゆる日本語型表現に | ||
対応するものであり,演算記号とこれに付随している演算子をペア | 対応するものであり,演算記号とこれに付随している演算子をペア | ||
− | + | として配置する方法である.関数 | |
<math>[6.43 \times x(t-1)-x(t-2)] \times (x(t-3)-3.54)</math>は, | <math>[6.43 \times x(t-1)-x(t-2)] \times (x(t-3)-3.54)</math>は, | ||
− | + | 次のような前置表現になる. | |
<center> | <center> | ||
122行目: | 122行目: | ||
体のストリングを左側からサーチしていき演算記号に出会うとその数値を1 | 体のストリングを左側からサーチしていき演算記号に出会うとその数値を1 | ||
つ増やし,被演算子に出会うとその数値を1つ減らす操作を実施した結果であ | つ増やし,被演算子に出会うとその数値を1つ減らす操作を実施した結果であ | ||
− | + | るとして定義する. | |
正しい関数表現を与える前置表現に対しては, <math>StackCount</math>の最終的な | 正しい関数表現を与える前置表現に対しては, <math>StackCount</math>の最終的な | ||
− | + | 値は1になる.また,これを用いて交差を実現する場合には | |
,2つの個体に対する前置表現において,個体の左から始めてその途中ま | ,2つの個体に対する前置表現において,個体の左から始めてその途中ま | ||
で,この<math>StackCount</math>をかぞえて,その数値が同じであれば,この位置で | で,この<math>StackCount</math>をかぞえて,その数値が同じであれば,この位置で | ||
2つの個体を切断し交差処理をしても, | 2つの個体を切断し交差処理をしても, | ||
− | + | 意味のある関数表現を与えていることになる. | |
(ステップ1) :個体の初期値生成 | (ステップ1) :個体の初期値生成 | ||
− | 最初の個体の集合(プールP-A) | + | 最初の個体の集合(プールP-A)を乱数をもとにして発生させる. |
この場合,すでに述べた | この場合,すでに述べた | ||
<math>StackCount</math>を用いて,システム記述の方程式として意味をなすものが | <math>StackCount</math>を用いて,システム記述の方程式として意味をなすものが | ||
− | + | 得られるまで繰り返す. | |
(ステップ2): 個体の適応度の計算 | (ステップ2): 個体の適応度の計算 | ||
141行目: | 141行目: | ||
個体の表現する関数を用いて個体<math>i</math>ごとに, | 個体の表現する関数を用いて個体<math>i</math>ごとに, | ||
すでに述べた関数近似における予測値と観測値との2乗誤差の逆数 | すでに述べた関数近似における予測値と観測値との2乗誤差の逆数 | ||
− | を,個体<math>i</math>の適合度<math>S_i</math> | + | を,個体<math>i</math>の適合度<math>S_i</math>として定義する.個体を適応度の大きい順 |
− | + | に並びかえておく. | |
(ステップ3): 交差処理 | (ステップ3): 交差処理 | ||
適合度に比例する確率で2つの個体を取り出し,交差処理を実施す | 適合度に比例する確率で2つの個体を取り出し,交差処理を実施す | ||
− | + | る.次に示す確率に応じて個体<math>i</math>を選択する. | |
<center> | <center> | ||
155行目: | 155行目: | ||
交差処理では,発生させた一様乱数により, 2つの個体を切断 | 交差処理では,発生させた一様乱数により, 2つの個体を切断 | ||
する場所を選択するが,この場合, <math>StackCount</math>を利用して,意味の | する場所を選択するが,この場合, <math>StackCount</math>を利用して,意味の | ||
− | + | ある切断を選択する.また,個体の長さは一般に異なるので,乱数 | |
を1個発生させておいて,一方の個体の切断個所とし,ここまでの | を1個発生させておいて,一方の個体の切断個所とし,ここまでの | ||
− | <math>StackCount</math> | + | <math>StackCount</math>の値を計算する.こののち,もう一方の個体の |
<math>StackCount</math>を計算しながら, | <math>StackCount</math>を計算しながら, | ||
− | 同じ<math>StackCount</math>の値となる場所を検出し, | + | 同じ<math>StackCount</math>の値となる場所を検出し,これらから任意に1個を選択する. |
− | このように, | + | このように,それぞれの個体の切断位置を決める. |
この2つの個体に対して遺伝的操作を行い,生成された新しい個体を次のステップに | この2つの個体に対して遺伝的操作を行い,生成された新しい個体を次のステップに | ||
− | おける代替個体のプールであるP- | + | おける代替個体のプールであるP-Bに格納しておく.このような新しい |
− | 個体の生成を, | + | 個体の生成を,規定回数繰り返す.新規個体の生成が終了したら, |
プールP-Aの個体の中で,相対的に適合度の低い個体を,プールP-Bの個体 | プールP-Aの個体の中で,相対的に適合度の低い個体を,プールP-Bの個体 | ||
− | + | により置き換える. | |
(ステップ4): 突然変異 | (ステップ4): 突然変異 | ||
171行目: | 171行目: | ||
突然変異は木構造の葉の部分を,別の変数に置き換える操作と | 突然変異は木構造の葉の部分を,別の変数に置き換える操作と | ||
,木構造における根の部分に相当する原始関数を, | ,木構造における根の部分に相当する原始関数を, | ||
− | 別のものに置き換える操作であり, | + | 別のものに置き換える操作であり,これを一定の確率で適用する. |
(ステップ5) | (ステップ5) | ||
ステップ2からステップ4までの操作を,規定回数繰り返すか, | ステップ2からステップ4までの操作を,規定回数繰り返すか, | ||
− | + | 途中で関数の近似誤差が一定の数値より小さくなった場合には終了する. | |
2007年8月7日 (火) 21:41時点における版
【ふくざつけいによるよそくもでる (optimization problem)】
1. 複雑系と時系列予測
時系列に代表される信号の予測に関しては,これまで多くの方法論が提案され ている.以下では,やや視点を変えて,複雑系による予測をとりあげる. 複雑系の理論も多岐にわたっているが,この中でも,フラクタルとカオス をとりあげ,方法論として遺伝的プログラミング(Genetic Programming:GP)を用いる.予測の主な対象は時系列である.
フラクタル時系列の予測においては,時系列の時間軸をスケール変換 したときの統計的な性質を利用するだけではなく,コッホ曲線に ヒントを得て,時間軸方向にインパルス応答関数を伸長したものを 再利用する方法を用いている[1].
次に,カオス理論を用いた時系列予測においては,時系列を生成する 関数方程式が決定論的に記述できることを利用する.カオス時系列の データが与えられたときに,このデータをできるだけ近似する関数 をGP手法により推定する[2].多数の関数の候補を,GP手法における 個体として与えておき,近似度の優れた個体どうしに遺伝的操作を 加えて,より近似度の高い個体を生成する.
一般的な線形時変入出力システム
を考察する.ここでは入力と出力が同じであると考える. 線形時変システムのインパルス応答関数がスケール関数を用いて次のよ うに展開されると仮定する.
ただし,
式(1)によると入力時系列との差の 最小2乗近似を考え,これを最小化するように インパルス応答関数の係数を決定する. 式(3)の計算ではとし, の範囲を1~4に 限定し,最適化の方法としては最急降下法が用いられる[1].
次に,時間軸の伸長による予測について述べる.
いま, は時系列が観測される時間区間であり
とする.また, は
を予測する区間とする.
なお, の選び方には任意性があるが,期間の時系列
が,期間全体の時系列とできるだけ相似であるように選択する必要がある.
ここで時間軸の伸長のパラメータとしてを定義する. 計算においては, 整数となるようにを選んでいる (例:).がフラクタル性を持つ場合には,その自己相似性により , において,次の式が近似的に成立すると考えられる.
2. GPによる関数近似と予測
時系列を生成する方程式の体系を推定する
例として,カオス力学系が興味深い事例を与える.
カオス時系列とは,生成する関数に乱数などの不確実な要素を含まないシステム
から生成される一見乱雑な時系列である.
例えば,次の方程式で記述されるロジスティック写像がある.
この変数の初期値に,適当な値を与えて時系列を生成すると, 乱雑な時系列となる.
以下では,問題を簡単にするために,すでに方程式が既知であり ,この方程式系により発生される時系列の観測データを得られていると仮定する. GP適用の目的は,観測された時系列データから, 関数(式(6)の右辺の形)を推定することである.
関数を木構造で表現するケースを考える.木構造は1つで はなく,複数(例えば100個とか1000個)を与える.これを, GAの場合と同様に個体と呼んでいる.木構造は,最も推定 が正しい場合には式(6)になるであろう. 木構造を関数値の計算に用いて時系列を生成し,この生成された値(予測値) と実際に観測された時系列との差(2乗誤差など)が小さい個体(木構造)ほど, 近似度が高いことになる.
個体の交差処理,突然変異に関しては, 方程式を前置表現(prefix representation)することにより簡単化できる[2]. この前置表現は,いわゆる日本語型表現に 対応するものであり,演算記号とこれに付随している演算子をペア として配置する方法である.関数 は, 次のような前置表現になる.
の値を,前置表現で表現された個 体のストリングを左側からサーチしていき演算記号に出会うとその数値を1 つ増やし,被演算子に出会うとその数値を1つ減らす操作を実施した結果であ るとして定義する. 正しい関数表現を与える前置表現に対しては, の最終的な 値は1になる.また,これを用いて交差を実現する場合には ,2つの個体に対する前置表現において,個体の左から始めてその途中ま で,このをかぞえて,その数値が同じであれば,この位置で 2つの個体を切断し交差処理をしても, 意味のある関数表現を与えていることになる.
(ステップ1) :個体の初期値生成
最初の個体の集合(プールP-A)を乱数をもとにして発生させる. この場合,すでに述べた を用いて,システム記述の方程式として意味をなすものが 得られるまで繰り返す.
(ステップ2): 個体の適応度の計算
個体の表現する関数を用いて個体ごとに, すでに述べた関数近似における予測値と観測値との2乗誤差の逆数 を,個体の適合度として定義する.個体を適応度の大きい順 に並びかえておく.
(ステップ3): 交差処理
適合度に比例する確率で2つの個体を取り出し,交差処理を実施す る.次に示す確率に応じて個体を選択する.
交差処理では,発生させた一様乱数により, 2つの個体を切断 する場所を選択するが,この場合, を利用して,意味の ある切断を選択する.また,個体の長さは一般に異なるので,乱数 を1個発生させておいて,一方の個体の切断個所とし,ここまでの の値を計算する.こののち,もう一方の個体の を計算しながら, 同じの値となる場所を検出し,これらから任意に1個を選択する. このように,それぞれの個体の切断位置を決める. この2つの個体に対して遺伝的操作を行い,生成された新しい個体を次のステップに おける代替個体のプールであるP-Bに格納しておく.このような新しい 個体の生成を,規定回数繰り返す.新規個体の生成が終了したら, プールP-Aの個体の中で,相対的に適合度の低い個体を,プールP-Bの個体 により置き換える.
(ステップ4): 突然変異
突然変異は木構造の葉の部分を,別の変数に置き換える操作と ,木構造における根の部分に相当する原始関数を, 別のものに置き換える操作であり,これを一定の確率で適用する.
(ステップ5)
ステップ2からステップ4までの操作を,規定回数繰り返すか, 途中で関数の近似誤差が一定の数値より小さくなった場合には終了する.
参考文献
[1] 池田欽一, 時永祥三, “フラクタル時系列の予測手法を用いた 株価予測とその応用, "日本オペレーションズリサーチ学会論文誌, vol.40, no.1, pp.18-31,1999.
[2] X.Chen and S.Tokinaga, “Multi-agent-based modeling of artificial stock markets by using the co-evolutionary GP approach", JORSJ, vol.47, no.3, pp.163-181, 2004.