プロが教えるわが家の防犯対策術!

はじめまして、今回初めて質問させていただきます。
早速ですが質問させていただきたいと思います。

今、最小二乗法を勉強しているのですが、logを含む式への適用方法や、公式などを調べてもなかなか見つけることができませんでした。
今回適用したい式というのは
y = ax^2 * log(b) + cx + d
という式です。

二次曲線への適用の仕方はわかるのですが、logが含まれる式への適用がどうしてもわからないのです。
わかる方はお手数ですが協力お願いいたします。

A 回答 (3件)

Excelソルバではどうでしょうか(最近こればっかり)。

非線形の最小二乗法は数値的に解くのがよろしいかと思います(その解くもののことをソルバと言います)。このようなソルバを使えば、最適化の常道として目的関数f=Σ[yi-(axi^2*log(b)+cxi+d)]^2を最小にするようなa,b,c,dを求めることができます。

参考URL:http://office.microsoft.com/ja-jp/excel/HA011245 …
    • good
    • 0

あなたが本気で


f(a,b,c,d) = y - (ax^2 * log(b) + cx +d)
に関して,Σf^2 を最小化しようとしているなら,
log(b)が存在するために微分して零云々の方法はそのまま使えません.
評価関数を微分して零にして云々は誤差項がパラメターの二次関数であるときだけ有効だからです.
二次関数以外の関数では微分して零の点は極大値か極小値であり,最小値である保証が何処にもないからです.
この場合は非線型最小二乗法と呼ばれ,一発で解を求める方法はありません.
この場合,Gauss-Newton法などが良く使われます.
これは適当な初期解から始めて反復的に解を改良してゆく方法です.

a*log(b)を一つの係数としてまとめて良いなら,
線型最小二乗法なので二次関数への当てはめで良いでしょう.
    • good
    • 0

こんばんは。



1つの点(xk、yk)の、求める曲線からのずれをεkと置けば、
εk = axk^2*logb + cxk + d - yk

二乗誤差は、
εk^2 = (axk^2*logb + cxk + d - yk)^2

二乗誤差の合計をSとすると、
S =Σ[k=1→n]εk^2
 = Σ[k=1→n](axk^2*logb + cxk + d - yk)^2

ここで、x1~xn、および、y1~yn はデータ、つまり、既知の数値なので定数です。
逆に、a、b、c、dの4つは、変数です!!!

二乗誤差の合計を最小にするということは、二乗誤差の合計が極小になる条件を求めるのと同じです。
極小とは言っても、変数が4つありますから、それぞれの変数について極小の条件を立てることになります。
そして、極小の条件とは、a~dについて、偏微分したものが、それぞれゼロになることです!!!

ですから、
∂S/∂a = 0
∂S/∂b = 0
∂S/∂c = 0
∂S/∂d = 0
を満たすa、b、c、d を求めれば、最小二乗法ができたことになります。

∂S/∂a = ∂/∂a・Σ[k=1→n](axk^2*logb + cxk + d - yk)^2
 = Σ[k=1→n]xk^2*logb・2(axk^2*logb + cxk + d - yk)
 = 0

∂S/∂b = Σ[k=1→n]axk^2*1/b・2(axk^2*logb + cxk + d - yk)
 = 0

∂S/∂c = Σ[k=1→n]xk・2(axk^2*logb + cxk + d - yk)
 = 0

∂S/∂d = Σ[k=1→n]2(axk^2*logb + cxk + d - yk)
 = 0

という連立方程式になります。
(どっか、計算を間違えていたら、ごめんなさい。)

以上で考え方は終わりです。
あとは、表計算ソフトなどを利用して計算するとよいでしょう。


ところで、
alogb って、一体で1つの定数として扱えるので、
単なる二次関数への回帰でよいと思うんですが。
(いずれにしろ、最小二乗法の考え方は、上記のとおりです。)
    • good
    • 0
この回答へのお礼

わかりやすい解説ありがとうございます。
数学の苦手な私でもなんとか理解できました。
これを用いて最小二乗法の適用をしてみたいと思います。

お礼日時:2008/10/19 16:29

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