プロが教える店舗&オフィスのセキュリティ対策術

1.
tan(Y)=(a(X/b)/((X/b)^2-1)の式に
データ配列を最小二乗法によりカーブフィットさせたいのですが、線形代数での解き方をご教授お願いします。

2.
(マトリックスを使う場合は、どのように展開すれば
良いのでしょうか。)

A 回答 (3件)

 こんばんは、TCMです。


 非線形のフィッティングですね。これは繰り返し操作が伴うので、質問#8014のように簡単には解けません。キャラクタ環境だけで、これの説明をするのはかなりやっかいです。ということでまず確認したいのですが、omaiさんはこのフィッティングについて何らかの情報はお持ちでしょうか?
 例えば「逆Hesse法で計算することは知っているのだが、Hesse行列の作り方がわからない」とか「Levenberg-Marquardt法で解きたい」とか。2でマトリクスという文言が出ていますので、何らかの資料を手元に持っておられるとお見受けするのですが。ちょっとポイントを絞ってみるというのはいかがでしょうか?

この回答への補足

TCMさん、お世話になっております。

資料は、webです。
泥縄ですが、コメントにありました"逆Hesse法"とか
"Levenberg Marquardt"をwebで検索して調べてます。
しかしみな難解で 直には理解できそうにありません(~_~;)

以前、円の方程式 (x-a)^2 + (y-b)^2 = c^2 を
A=[x^2+y^2]
B=[2x,2y,1]
C=[a,b,c^2-a^2-b^2]
とおいて
C=inv(B'*B)*B'*A
で近似した事がある程度なんで、同様に解けることを期待してたんです。

よろしければ、まず"逆Hesse法"と
"Levenberg Marquardt法"の大雑把な特徴を教えて下さい。

補足日時:2000/09/13 12:06
    • good
    • 0

 ▼返答遅くなりました。

さあ回答しようとPCの前に座ったものの、はっと気がつくともう朝という状態が二晩続きました。P(^.^)

 さて、前回の質問や円の方程式もそうですが、展開するとaやbというパラメータについて線形結合になっています。このような場合は、代数的に解いたり、直接法(Gauss-Jordan法とか)で求めることができます。ところが、今回はtanY=abx/(x^2-b^2)ですからパラメータについて非線形です。これは直接法で解けないので、反復法で求める必要があります。反復法というのは、解に適当な初期値を設定した後、ある基準によって徐々に解を改善して、誤差が許容範囲内に収まれば終了するという方法です。SOR法、最急降下法、共役勾配法などがあります。
 a、b、評価関数(偏差平方和のような)からなる3次元空間があるとします。評価関数を高さ方向にとると、aとbの値によってうねうねとうねる曲面をイメージできるでしょう。山あり谷ありの曲面ですが、ある場所に評価関数最小の点があります。その点のaとbが求めたい最尤推定値です。しかし、この曲面上には霧が立ち込めており、どこに評価関数最小の点があるのか最初は見えません。そこで適当な場所に立ち、その場所の評価関数の値や勾配を調べて、次のステップはどれくらいの距離、どの方向へ進もうかと考えながら谷底(評価関数最小の点)へと降りていく、というのが反復法のイメージです。その「次のステップはどれくらいの距離、どの方向へ進もうか」という増分の求め方に反復法ごとの特徴があります。
 逆Hesse法では、極値(最尤推定値といえる)近傍では評価関数が2次関数で十分近似できることを利用しています。Hesse行列(評価関数の2階偏微分)の1/2をα、評価関数の1階偏微分の1/2をβとして、Σαδ=βを解いて増分δを求めます。しかし、「評価関数が2次関数で近似できる」という仮定があまり良くない場合には収束が悪くなります。そこで、反復初期は最急降下法を、極値近傍では逆Hesse法を利用するようにしたアルゴリズムが
Levenberg-Marquardt法(単にMarquardt法ともいう)です。最急降下法では、増分をδ=定数xβで求めますが、この定数を求める際にHesse行列の対角項を利用するところに特徴があり、非線形最小2乗問題の解法の標準といえます。
 大雑把というとこんな感じなのですが、Numerical Recipes in C(技術評論社)に詳細な解説がありますので参照してみてください。Levenberg-Marquardt法のソースコード(C言語)も載っていますので便利ですよ。わかりにくいところがありましたら、また回答いたしますので、この質問は閉じなくてもいいですよ。それでは、健闘を祈ります。

この回答への補足

お手数をおかけしております。

非常に、参考になります。
分かったような気にさせてくれますね。(^_^;)
ご教授頂いた 概要をガイドラインとして、もうすこし勉強してから再度質問させて頂きます。

補足日時:2000/09/18 00:08
    • good
    • 0

ふふふ。

皆さん、非線形と決めてかかってますね。
じつは、データがたくさんあって、しかもモデルと良く合うことが分かっている場合には、実用上問題ない精度で線形計算ができます。
元のモデルを変形すると
tan(Y)X^2=(abX)+tan(Y)b^2
ですよね。ここで、
A= b^2, B= ab
yi = (tan(Yi) Xi^2), xi = tan(Yi) (i=1,2,....,N)
とおけば
yi= A xi+ B + 誤差
というモデルをフィッティングすることで、A, Bが得られます。A,Bからa,bを求めるのはできますよね。
 どうしても本来の問題をきちんと解くと言う場合には、やはり非線形最小二乗法が必要ですが、上記の方法でa,bの非常に良い近似値を出しておけば、あとは「ガウス-ニュートン法」、いやさ「ニュートン法」のようなシンプルかつ高速な方法で収束させることができます。

この方法は、縦軸を(tan(Y) X^2)、横軸をtan(Y)にとったグラフを描けばデータが直線上に乗り、この空間での最小二乗法をやる、という仕組みなのです。非常に応用が広いんですよ。私的に開発したもので「超平面法」と読んでいます。
    • good
    • 0

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