最小2乗法で固定点を通過するプログラム
もしくは考え方等を知っている方がお見えなら,教えて下さい.
お願いします.

A 回答 (2件)

最小二乗法とは、モデルf(p,x[k])の、パラメータのベクトルpを適当に調節して、実測値y(x[k])とのズレ(残差)ε(k):


(1) ε(k)=y(x[k])-f(p,x[k]) (k=1,2,.....,K)
の重み付き二乗和S
(2) S=Σ(W[k]ε(k)^2) (k=1,2,.....,K)
が最小になるようにすることで、ベクトルpを決定する問題です。ここにW[k]は重み係数で、予め与えられている。

さて、これに制約条件として、「f(p,x[k])がpの値に関わらず固定点(xc,yc)を通ること」を加えます。つまり
(3) f(p,xc)=yc
である。
これは、パラメータのベクトルpの要素を一つ減らすことに相当します。
簡単な例はf(p,x)が定数項および既知の関数列g(j,x) (j=1,....,n) の重み付き合計であって、その重みがパラメータpで指定されている場合(定数項のある線形最小二乗法):
(4) f(p,x) = p[0]+p[1]g(1,x)+p[2]g(2,x)+.....+p[n]g(n,x)
でしょう。このとき、(3)を要請するとは、
(5) p[0]+p[1]g(1,xc)+p[2]g(2,xc)+.....+p[n]g(n,xc) = yc
という事ですから、自動的に定数項p[0]が決まってしまいます。すなわち
(6) p[0]= yc-(p[1]g(1,xc)+p[2]g(2,xc)+.....+p[n]g(n,xc))
従って、モデルfの代わりにモデルh(p,x[k])を用いれば良い。ここに
(7) h(p,x[k]) = C+p[1]g(1,xc)+p[2]g(2,xc)+.....+p[n]g(n,xc)
ただし
(8) C=yc-(p[1]g(1,xc)+p[2]g(2,xc)+.....+p[n]g(n,xc))
です。

このように陽にパラメータを減らすのが難しい場合には、ラグランジュの未定乗数法を用いることができます。「未定乗数法」で検索すれば過去の詳しい解説が見つかる筈。

さらに手抜きをする方法としては、人工的にサンプルを追加し、
x[k]=xc, y(x[k])=yc (k=K+1,K+2,..........,K+R)
というデータを与えてやることです。
勿論、重み付き最小二乗法の場合には1個だけサンプル
x[K+1]=xc, y(x[K+1])=yc
を追加し、その重みW[k+1]をうんと大きくしておけば良い。
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます.
大まかな流れがわかりました.
また,わからないことを質問させて頂くかと思いますが
よろしくお願いします.

お礼日時:2001/06/27 23:03

実験結果のグラフを最小2乗法処理する場合、sma4winの最小2乗で特定点通過オプションを使えば可能です。

この回答への補足

回答ありがとうございます.

しかし今回は,研究でプログラムの作成を行う必要があるので
プログラムもしくは考え方を質問したわけであります.

お知りなら回答をよろしくお願いします.

補足日時:2001/06/27 21:46
    • good
    • 0

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q最小二乗法

工学部の大学生です。
この前

エクセルを用いて、
非線形最小二乗法によるNMRのスピンー格子緩和時間解析
についてのレポートがだされてしまいました。。

全然わかりません。。

(1)非線形最小二乗法と線形最小二乗法の違い
(2)スピンー格子緩和時間とは??
(3)NMRとは??

についてわかる方教えていただけるとありがたいです。

Aベストアンサー

このくらい自分で調べなさい

(1)は、線形と非線形の意味がわかりますか
線形で近似するのが線形最小二乗法、非線形で近似するのが非線形最小二乗法

Aベストアンサー

>所で、今回の問題は
「また、この線形方程式についての結果は何を物語っているか?」
とも問われているのですが
その答えは「∩[i=1,..,m]Ker(yi)の補集合の直交補空間の元を表している」と答えれば正解でしょうか?

●「この線型方程式」とあるが、どこに線型方程式があるのか僕には分かりません。

●意味・意義の解釈は種々にできます。これこそ自分の頭で考えるべきことでしょう。

●あなた自身が指摘してくれた通り、Vはもともと内積は定義されてないのですから、直交補空間をもちだすのは不適切です。内積を用いない解釈を、まずは求められていると思います。
もしも「直交補空間」という概念を用いるなら、どういう内積を入れるのか、書かねばなりません。(僕が「修正」でそうしたように)

●しかしどんな内積を入れたとしても、「「∩[i=1,..,m]Ker(yi)の補集合の直交補空間」は、yiがすべてゼロ写像ならば、V。そうでなければ、{0}になります。(よく考えて見ましょう)

●僕ならば、「この結果は、残念ながら言葉を話せないので、何も物語ることができない」と答えます。
ほとんど自明な結果であり、大した意味があるとは思えませんので、皮肉として。

以上。あまり人にばかり聞かず、自分でよく勉強することを勧めます。
おそらく同じ学校のメンバーがよく問題を丸投げしているので、しばらく答えるのは控えようと思います。

>所で、今回の問題は
「また、この線形方程式についての結果は何を物語っているか?」
とも問われているのですが
その答えは「∩[i=1,..,m]Ker(yi)の補集合の直交補空間の元を表している」と答えれば正解でしょうか?

●「この線型方程式」とあるが、どこに線型方程式があるのか僕には分かりません。

●意味・意義の解釈は種々にできます。これこそ自分の頭で考えるべきことでしょう。

●あなた自身が指摘してくれた通り、Vはもともと内積は定義されてないのですから、直交補空間をもちだすのは不適切です...
続きを読む

Q最小二乗法における有効数字について

最小二乗法における有効数字について質問があります.

直線近似を行うとします.最小二乗法を用いるデータの有効数字を考慮して,最小二乗法により求められた直線の傾きa,切片b の有効数字が決まると思うのですが,どのようにこの有効数字を決定すれば良いのでしょうか?

Aベストアンサー

>この最確値とはa,bを有効数字を気にせずとりあえず求め

この手の計算は計算量が多いため通常手計算はしません。
なので計算途中は計算機に任せて最大の桁数で計算すればいいです。

>例えばですが,ua = 0.0011 と求まればuaの最大の桁は10^{-3}となるので,
>aは10^-3もしくは10^-4までの値を使えば良いという認識でよろしいですか?

これが最終結果なら

a = 1.234±0.001 または a = 1.2345 ± 0.0011

と表記します。(単位があれば単位を忘れずに)
(計算過程にあってさらに計算を進めるなら、最低一桁以上は余分に取っておく必要があります。)

>加減算や乗除算による有効数字の取り方を考えるだけでは駄目なのでしょうか?

かえって面倒くさいですよ。

それに、いわゆる有効数字の計算は簡便な計算法に過ぎませんので、統計処理をするまでの手続きと思っておいたほうがいいです。標準偏差で不確かさを計算するまではどこで打ち切っていいか不明なので、それまで使う計算法ということですね。いったん標準偏差が計算できたらそれに従うべきです。

>この最確値とはa,bを有効数字を気にせずとりあえず求め

この手の計算は計算量が多いため通常手計算はしません。
なので計算途中は計算機に任せて最大の桁数で計算すればいいです。

>例えばですが,ua = 0.0011 と求まればuaの最大の桁は10^{-3}となるので,
>aは10^-3もしくは10^-4までの値を使えば良いという認識でよろしいですか?

これが最終結果なら

a = 1.234±0.001 または a = 1.2345 ± 0.0011

と表記します。(単位があれば単位を忘れずに)
(計算過程にあってさらに計算を進めるなら、最低一桁以...続きを読む

Q最小2乗法とエクセル

 質問したいのですが、(x,y)=(0.1,0.306),(0.3,0.807),(0.5,1.177),(0,0)の値を利用して、最小2乗法を使ってエクセルでグラフを書きました。このとき、自分で計算した値と、エクセルで作成したグラフで近似線を描き、その直線の式を出したものとでは値が異なりました。なぜでしょうか?

Aベストアンサー

では、基本に立ち戻ってそれぞれの数値を確認しましょう。

Σxi=0.9
Σyi=2.29
Σxi^2=0.35
Σxiyi=0.8612

で、
傾き=(4×0.8612-0.9×2.29)/(4×0.35-0.9^2)=2.34542372881356
切片=(0.35×2.29-0.8612×0.9)/(4×0.35-0.9^2)=0.0447796610169492

でExcelの結果になりますが、どこで違ってきているのでしょうか?

Q最小二乗法での指数関数の計算

最小二乗法での指数関数の計算
最小二乗法での指数関数の計算方法が良く分からないのですが公式などありますか?
y=ae^bxでしたらやり方があるのですがy=ae^bx+cの方法がわかりません・・・・・・

Aベストアンサー

No1の方が書いておられるように、これは厳密には非線形の最小二乗法になります。
ただし、単にそう書いても、質問者の方にはわからないと思いますので、具体的かつ実用的なやり方を書きましょう。
と言っても、簡単です。
まず、cとして、適当な値c1を仮定します。
すると、
y-c1=a1e^b1x
の最小二乗法に帰着され、a1,b1が求まります。
この時の残差を、z1とします。
z1=Σ(yi-c1-a1e^b1xi)^2

次に、cの増分値をΔcとして、
c2←c1+Δc
と置いて、また最小二乗法を適用し、残差z2を求めます。
z2=Σ(yi-c2-a2e^b2xi)^2

さらに、
c3←c1+2Δc
と置いて、また最小二乗法を適用し、残差z3を求めます。

この段階で、cに対して残差zをプロットし、2次関数近似してみましょう。
うまくいけば、極小値がこの範囲内にみつかります。
この2次関数から直接、または、初期値c1と増分値Δcをもっと適切な値となるように設定するなりして極小値の存在範囲を狭めてから2次関数近似して、この極小値cを求めましょう。
最後にもういちど、cに対する最小二乗法を適用して、係数a,bを求めれば、それが答です。

もし、cに対するzが、単調増加、あるいは単調減少になってしまったら?
この場合、Δcが大きすぎると、極小値が範囲内にあるにも関わらず、単調増加あるいは単調減少になってしまっている可能性も高いので、c1,c2,c3は変えず、Δcを1/2にして、c1とc2、c2とc3の間の値を求め、全5点をプロットしてみます。
本質的に単調増加あるいは単調減少なら、傾向に変化はないはずです。この場合には、zが小さくなる方向にcの初期値と増分値Δcを選びなおして、再計算してみましょう。
区間内に極小値がある場合には、傾向が”それらしく"変化しますから、増分値をもっと細かくして、極小値を押さえれば良いのです。

慣れてくれば、2次関数近似といわず、最初から絨毯爆撃的にcを規則的に変化させながらzの動きを把握していくなどの小ざかしい方法を覚えるようになりますが、最後は極小値の存在する区間の3個の値から2次関数近似することには変わりがありません。(2次関数近似は扱いが簡単で便利ですから。)

No1の方が書いておられるように、これは厳密には非線形の最小二乗法になります。
ただし、単にそう書いても、質問者の方にはわからないと思いますので、具体的かつ実用的なやり方を書きましょう。
と言っても、簡単です。
まず、cとして、適当な値c1を仮定します。
すると、
y-c1=a1e^b1x
の最小二乗法に帰着され、a1,b1が求まります。
この時の残差を、z1とします。
z1=Σ(yi-c1-a1e^b1xi)^2

次に、cの増分値をΔcとして、
c2←c1+Δc
と置いて、また最小二乗法を適用し、残差z2を求めます。
z2=Σ(yi-c2-a2e^b2xi)...続きを読む

Q非負最小2乗法のコーディング

非負条件の最小2乗法のプログラムを作成
したいのですが,参考文献やプログラムが
あれば,教えて下さい。考え方のヒントでも
よいです。

具体的には,関数f[{x}]=|[A]{x}-{b}|^2・・・(1)
がxi>=0(i=1,2,..,n)・・・(2)の条件で,
最小となる{x}を求めるという問題を解くプログラムを
作りたいと考えています。
ここで,{x}=(x1,x2,...,xn)
   {b}=(b1,b2,...,bm)
   [a]は サイズm x nのマトリクス(m>n)
であり,[A]および{b}は既知です。

条件(2)が無い場合の最小二乗のプログラムは
作成できますが,条件(2)を満足させるという条件がある
場合には,その条件を具体的にどのようにプログラム化
するのか不明であり質問した次第です。
宜しくお願いします。

Aベストアンサー

何も考えずに回答してみる。

普通に最小値を求めて領域 { x_i >= 0 | i = 1,2,...,n } に含まれなければ、この領域のエッジで最小値をとるしかないだろうから。

特に制限を設けずに {x} を求める
 x が非負ならそれが答え

 それ以外の場合

  x_1 = 0 として {x} を求める、x_1 = 0 として {x} を求める... x_n = 0 として {x} を求める。

   非負の解となったものの内で、f({x}) が最小であるものが答え

   上記 n 個の解すべてが NG だった場合

    x_1 = x_2 = 0 として {x} を求める、(以下 n(n-1)/2 通りの組合せ)

どんどん、= 0 の数を増やしていって、すべてに失敗した場合には (0, 0, ... 0) が最小値を与える。

Q誤差を考慮した最小二乗法

誤差を考慮した最小二乗法
実験で「誤差を考慮した最小二乗法で計算せよ。尚、誤差を考慮しない場合は減点する。この場合の誤差とは標準偏差の事である。」という課題何ですが誤差を考慮した最小二乗法とはどうゆう事なのでしょうか?

http://www.dotup.org/uploda/www.dotup.org828193.xls.html
のデータにて
http://www.akita-nct.ac.jp/~yamamoto/lecture/2007/5E_comp_app/interpolation/interpolation_html/node4.html
のサイト様を参考にして一次関数の最小二乗法で計算しようと思ったのですが標準偏差はどこに入れればいいのでしょうか?グラフを作った後に誤差棒として標準偏差を入れるという事なのでしょうか?

Aベストアンサー

普通は質問文に上げてあるサイトや、Wikipediaの最初のほうに書いてあるように、
最小二乗法は、残差二乗和を最小にするように係数を決める方法だと書いてあります。
しかしこれは、標準偏差がσすべて同じ場合に限られます。

各測定点でばらつきが異なりそれが既知である場合には、xとyに

y=f(x; a, b, ...)

というモデルを採用した場合には

残差二乗値

E(a,b,...) = Σi ([yi-f(xi; a, b, ...)])^2

ではなく、χ二乗値と呼ばれる

χ^2 = Σi ([yi-f(xi; a, b, ...)]/σi)^2

を最小にします。モデルが一次式ならば y = ax +b なので

χ^2 = Σi ([yi-axi-b]/σi)^2

です。したがって、

E(a,b) = Σi ([yi- axi - b])^2

をスタートにする代わりに

χ^2 = Σi ([yi-axi-b]/σi)^2

から初めて、質問文にあるサイト

http://www.akita-nct.ac.jp/~yamamoto/lecture/2007/5E_comp_app/interpolation/interpolation_html/node4.html

に書いてあることと、全く同じように求めていけばいいです。
課題ということですので、以下、ご自身で行ってください。

普通は質問文に上げてあるサイトや、Wikipediaの最初のほうに書いてあるように、
最小二乗法は、残差二乗和を最小にするように係数を決める方法だと書いてあります。
しかしこれは、標準偏差がσすべて同じ場合に限られます。

各測定点でばらつきが異なりそれが既知である場合には、xとyに

y=f(x; a, b, ...)

というモデルを採用した場合には

残差二乗値

E(a,b,...) = Σi ([yi-f(xi; a, b, ...)])^2

ではなく、χ二乗値と呼ばれる

χ^2 = Σi ([yi-f(xi; a, b, ...)]/σi)^2

を最小にします。モデルが一次式な...続きを読む

Q最小2乗法について

最小2乗法で傾き並びに、切片、相関関数の求め方が分かりません。グラフなどを作ろうとも思ったのですがどれを縦、横軸にとっていいのか分かりません。教えてください

Aベストアンサー

参考URLを見て下さい

参考URL:http://szksrv.isc.chubu.ac.jp/lms/lms2.html

Qy=a/(x-b)+cの最小二乗法

y=a/(x-b)+cの最小二乗法

y=a/(x-b)+c
という、反比例の式をx方向に+b、y方向に+c平行移動したような曲線の係数a,b,cを求めるための最小二乗法の方法を教えていただけないでしょうか。

工夫してみたのですが、なかなかうまくいきませんでした。
すみませんが、力を貸してください。

Aベストアンサー

 データ(x[k], y[k]) (k=1,2,...,N)
が与えられた時に、残差(residue)
r[k] = a/(x[k]-b)+c-y[k]
の二乗和(square sum of residue)
E(a,b,c) = Σ(r[k]^2) (Σはk=1,...,Nについての総和)
を最小にする係数(a,b,c)を求む、というのが「y=a/(x-b)+cの最小二乗法」の意味するところですね。

 Eが極値を取る係数(a,b,c)を知るために「Eをa,b,cそれぞれで偏微分したものが0になる」という条件を表す連立方程式
∂E/∂a = 0
∂E/∂b = 0
∂E/∂c = 0
を作ってみますと、左辺を計算すると未知数a,b,cについて一次方程式にはならず、これじゃ解けない。

 連立一次方程式にならない場合を「非線形最小二乗法」と(そして、連立一次方程式になってくれる場合を「線形最小二乗法」と)呼びます。非線形最小二乗法では、適当な出発値(a[0], b[0], c[0])から始めて、Eが小さくなるようにちょっとずつ(a,b,c)を改良して行く繰り返し計算が必要です。
 改良のための計算方法はいろいろ工夫(Gauss-Newton法、最急降下法、Marquardt法など)されていますが、最も単純でオバカなやり方は、
(1) b,cを定数、aだけを変数と考えてEを最小化する。
(2) a,cを定数、bだけを変数と考えてEを最小化する。
(3) a,bを定数、cだけを変数と考えてEを最小化する。
を順繰りに何度も何度も繰り返すことです。(教科書は「最小二乗法による実験データの解析」(東京大学出版会)をお薦めします。)

 案外重要なのが出発値(a[0], b[0], c[0])の選び方。ここで言う「適当な」とは、テキトーじゃ駄目なんで、(本来の意味での)適当な、つまり真の解に十分近い出発値を選ばないと改良の計算が収束しないことがあります。
 出発値を選ぶひとつの方法は、「もし残差が0になるようなデータが与えられたならばEに一致して、しかも簡単に計算できる」ような値Fを定義して、Fを最小化する(a,b,c)を(a[0], b[0], c[0])として利用する、というやりかたです。具体的には、
r[k] = a[0]/(x[k]-b[0])+c[0]-y[k]

r[k](x[k]-b[0]) = a[0]+(c[0]-y[k])(x[k]-b[0])
と変形しておいて右辺を展開すると、
r[k](x[k]-b[0]) = (a[0]-b[0]c[0])+b[0]y[k]+c[0]x[k]-y[k]x[k]
ここで
A = a[0]-b[0]c[0]
B = b[0]
C = c[0]
とおくと、
r[k](x[k]-b[0]) = A+By[k]+Cx[k]-y[k]x[k]
と書けますから、この右辺を
s[k] = A+By[k]+Cx[k]-y[k]x[k]
と定義して
F(A,B,C) = Σ(s[k]^2) (Σはk=1,...,Nについての総和)
を最小化するA,B,Cを考える。
すると、s[k]はA,B,Cの一次式になっているので、「普通の(線形)」最小二乗法でA,B,Cが決定できます。そしてA,B,Cからa[0],b[0],c[0]が決まる。(もしr[k]が全て0であれば、E(a[0],b[0],c[0])=0 になるのは自明でしょう。)
 こうして得たa[0],b[0],c[0]はEを最小化しません(∵r[k]が全て0にならない限り、E≠F)が、もしも「Fが十分小さくできるような旨いa,b,cが存在する」のであれば、そのa,b,cはEも小さくしますから、出発値に利用できる訳です。
 言い換えると、もしEが十分小さくなるようなa,b,cが存在する(つまり、モデル y=a/(x-b)+cがデータに良く合う)のであれば、Fを最小化するa,b,cと、Eを最小化するa,b,cとは非常に近い値になる。
 なので実用上は、(a[0],b[0],c[0])だけで十分な精度が得られる(改良のための繰り返し計算をしないで済んでしまう)ことも多々あります。

 データ(x[k], y[k]) (k=1,2,...,N)
が与えられた時に、残差(residue)
r[k] = a/(x[k]-b)+c-y[k]
の二乗和(square sum of residue)
E(a,b,c) = Σ(r[k]^2) (Σはk=1,...,Nについての総和)
を最小にする係数(a,b,c)を求む、というのが「y=a/(x-b)+cの最小二乗法」の意味するところですね。

 Eが極値を取る係数(a,b,c)を知るために「Eをa,b,cそれぞれで偏微分したものが0になる」という条件を表す連立方程式
∂E/∂a = 0
∂E/∂b = 0
∂E/∂c = 0
を作ってみますと、左辺を計算すると未知数a,b,cについて一...続きを読む

Qx1=(1,1,1),x2=(1,1,-1),x3=(1,-1,-1)をC^3の基底,{y1,y2,y3}がその双対基底でx=(0,1,0)の時,y1(x),y

[問] ベクトルx1=(1,1,1),x2=(1,1,-1),x3=(1,-1,-1)をC^3の基底とする。
{y1,y2,y3}がその双対基底でx=(0,1,0)の時、
y1(x),y2(x),y3(x)を求めよ。

という問題の解き方をお教え下さい。

双対基底とは
{f;fはF線形空間VからFへの線形写像}
という集合(これをV*と置く)において、
V(dimV=nとする)の一組基底を{v1,v2,…,vn}とすると
fi(vj)=δij(:クロネッカーのデルタ)で定めるV*の部分集合
{f1,f2,…,fn}はV*の基底となる。これを{v1,v2,…,vn}の双対基底と呼ぶ。

まず、
C^3の次元は6(C^3の基底は(1,0,0),(0,1,0),(0,0,1),(i,0,0),(0,i,0),(0,0,i))
だと思うので上記のx1,x2,x3は基底として不足してると思うのです(もう3ベクトル必要?)。

うーん、どのようにしたらいいのでしょうか?

Aベストアンサー

>C^3の次元は6(

これが間違え.
「x1=(1,1,1),x2=(1,1,-1),x3=(1,-1,-1)をC^3の基底」
といってるんだから,係数体はRではなく,C.

あとは定義にしたがって,
dualな基底を書き下せばいいだけ.
y1(x1)=1,y1(x2)=y1(x3)=0であって
v=ax1+bx2+cx2と表わせるわけだし,
v=(v1,v2,v3)とすれば,a,b,cはv1,v2,v3で表現できる
#単なる基底変換の問題.


人気Q&Aランキング