最小2乗法 - その3 [最小2乗法のイメージ]
前回で最小2乗法の原理となる式は導けた。あの最後の式-13がaに関して解ければいい、ということになる。今日は式をベクトルと行列で表してから、数値計算上の問題に言及する。
前回の最後の式-13はごちゃごちゃしているので、もう少し整理するために行列で書くと となる。これを最小2乗問題の正規方程式と言う。
いきなり簡単になってしまったけど、ここでaは というような係数を並べたベクトルで、∧y(しまった。Webではハットがちゃんと表示されないな)はk番目の成分∧ykが となるようなベクトル、Gは行列で、その(k,q)要素Gk,qが である。ただしここでt aはaの転置をあらわす。これはちょっと古い書き方かな。ひとによってはaTと書く。まあどっちでもいい。
式-14から とすれば解は求まる。しかし行列Gは要素を見ればわかるように対称行列で、最小2乗法に出てくる行列は逆行列の計算が不安定になりやすい(条件が良くないという)。例えば のような対称行列は行列式が0となるし、ヒルベルト行列Hi,j=1/(i+j−1)は行列式が0ではないが非常に小さな値になる。ざっくり言えば行列式の値が小さいということは行ベクトル列ベクトルの独立性が低い、つまり特異に近いということである。もちろん対称行列がどれも特異に近いというわけではない。対称な直交行列はたくさん存在する。しかしなぜか最小2乗法に出てくる行列は特異に近いことが多い。この主な原因はあとで考察する。
行列Gの条件数κ(G)は と定義できる。ただしここで||G||は行列Gのノルムで で(ただしxは零ベクトルではない)、||x||はベクトルのノルムで である。なんだか定義がややこしいけど、ベクトルノルムは単純にベクトルの長さで、行列のノルムはそれを拡張したものになっている。
行列ノルムの定義から簡単に計算すると言うわけにはいかないけど、もう少し簡単な書き方ができて とできる。ここでλi(A)は行列Aのi番目の固有値で、つまりt G Gの最大固有値がわかればいい、ということになる。
例えば単位行列や直交行列の条件数は1である。さっきちょこっと話を出したヒルベルト行列は3 ×3の場合条件数は約524、4×4の場合約15514で、ヒルベルト行列はサイズが大きくなると条件数は急速に膨らむ。
式-20からGの逆行列の計算しやすさを見積もるために逆行列を計算しないといけないと言う矛盾があるが、数学的には重要で、 という線形な方程式のいろいろな要素がδだけちょっと振れたとき、解にどのくらい影響するか、という見積もりがこの条件数から可能になる。ここではこれ以上突っ込まない。
とりあえず行列には条件数と言うのが定義できて、その値の大きな行列は数値計算の安定性が低い、ということだと思っていていい。
昔僕はこのために入力列xiの上で直交するような疑似関数gk′(xi)をGram-Schmidtの直交化法でgk(xi)から作った。そうするとGは対角行列になるので数値的な問題はなくなる。ただし、gk′(xi)の係数からgk(xi)を求めるのはやはり逆行列を計算するのと同じ手順が必要なのと、xiが変わるとgk′(xi)も計算し直す必要がある(例えば刻みはいつも同じなのにどこか1ポイント抜けるだけで計算し直し)ので効率は悪かった。
この、数値的に直交化する方法の有効性はあとでちょっと整理する。
これで、お膳立てはだいたい終わった。次回からちょっとずつ面白い話になる。はず。
前回の最後の式-13はごちゃごちゃしているので、もう少し整理するために行列で書くと となる。これを最小2乗問題の正規方程式と言う。
いきなり簡単になってしまったけど、ここでaは というような係数を並べたベクトルで、∧y(しまった。Webではハットがちゃんと表示されないな)はk番目の成分∧ykが となるようなベクトル、Gは行列で、その(k,q)要素Gk,qが である。ただしここでt aはaの転置をあらわす。これはちょっと古い書き方かな。ひとによってはaTと書く。まあどっちでもいい。
式-14から とすれば解は求まる。しかし行列Gは要素を見ればわかるように対称行列で、最小2乗法に出てくる行列は逆行列の計算が不安定になりやすい(条件が良くないという)。例えば のような対称行列は行列式が0となるし、ヒルベルト行列Hi,j=1/(i+j−1)は行列式が0ではないが非常に小さな値になる。ざっくり言えば行列式の値が小さいということは行ベクトル列ベクトルの独立性が低い、つまり特異に近いということである。もちろん対称行列がどれも特異に近いというわけではない。対称な直交行列はたくさん存在する。しかしなぜか最小2乗法に出てくる行列は特異に近いことが多い。この主な原因はあとで考察する。
3.1 条件数
行列式の値ではなく厳密な判定基準として、行列には条件数というのが定義できる。条件数の話をせずにすませたいと思ったんだけど、やっぱり必要なのでさらっとやっておく。数学的に話を厳密にしないといけないので、ここでは証明はやらないけど、この値の大きな行列は数値的に不安定であるということが言える。行列Gの条件数κ(G)は と定義できる。ただしここで||G||は行列Gのノルムで で(ただしxは零ベクトルではない)、||x||はベクトルのノルムで である。なんだか定義がややこしいけど、ベクトルノルムは単純にベクトルの長さで、行列のノルムはそれを拡張したものになっている。
行列ノルムの定義から簡単に計算すると言うわけにはいかないけど、もう少し簡単な書き方ができて とできる。ここでλi(A)は行列Aのi番目の固有値で、つまりt G Gの最大固有値がわかればいい、ということになる。
例えば単位行列や直交行列の条件数は1である。さっきちょこっと話を出したヒルベルト行列は3 ×3の場合条件数は約524、4×4の場合約15514で、ヒルベルト行列はサイズが大きくなると条件数は急速に膨らむ。
式-20からGの逆行列の計算しやすさを見積もるために逆行列を計算しないといけないと言う矛盾があるが、数学的には重要で、 という線形な方程式のいろいろな要素がδだけちょっと振れたとき、解にどのくらい影響するか、という見積もりがこの条件数から可能になる。ここではこれ以上突っ込まない。
とりあえず行列には条件数と言うのが定義できて、その値の大きな行列は数値計算の安定性が低い、ということだと思っていていい。
昔僕はこのために入力列xiの上で直交するような疑似関数gk′(xi)をGram-Schmidtの直交化法でgk(xi)から作った。そうするとGは対角行列になるので数値的な問題はなくなる。ただし、gk′(xi)の係数からgk(xi)を求めるのはやはり逆行列を計算するのと同じ手順が必要なのと、xiが変わるとgk′(xi)も計算し直す必要がある(例えば刻みはいつも同じなのにどこか1ポイント抜けるだけで計算し直し)ので効率は悪かった。
この、数値的に直交化する方法の有効性はあとでちょっと整理する。
これで、お膳立てはだいたい終わった。次回からちょっとずつ面白い話になる。はず。
2013-11-21 21:48
nice!(0)
コメント(0)
トラックバック(0)
コメント 0