教えて!gooにおける不適切な投稿への対応について

最小二乗法を用いて二次関数の近似式を導きたいのですが、変数を用いた二次関数の近似式を求めるまでの過程を教えて頂けないでしょうか?
変数を用いて線形などの直線の近似式を求めるサイトなどはあったのですが、二次関数が見つかりませんでした。

gooドクター

A 回答 (2件)

二次関数って、 f(x) = ax^2 + bx + c のことでしょうかね。


だとすると、データ(x[i], y[i]) (i=1,2,…,N)が与えられているときに、残差
  ε[i] = f(x[i]) - y[i]
について
  E = Σ ε[i]^2 (Σはi=1〜Nの総和)
を最小にするような a, b, cを決定したい、という話のようです。

 fはxについては2次式ですけれども、ここで考えている未知数はa, b, cです。そして、a, b, cについてfは1次式です。つまりfは線形モデルであり、線形最小二乗法が使えます。その方法は、
  ∂E/∂a = 0
  ∂E/∂b = 0
  ∂E/∂c = 0
という連立方程式を、未知数a,b,cについて解けば良い、というものです。(もちろん、「fがどの未知数についても1次式になっている(fが線形モデルである)」なら、どれでも同じ事です。)

  ∂E/∂a = Σ (∂/∂a)(ε[i]^2)
    = 2Σ ε[i] (∂/∂a)(ax[i]^2 + bx[i] + c - y[i])
    = 2Σ ε[i] x[i]^2
同様に
  ∂E/∂b = 2Σ ε[i] x[i]
  ∂E/∂c = 2Σ ε[i]
だから、具体的には
  aΣx[i]^4 + bΣx[i]^3 + cΣx[i]^2 - Σy[i]x[i]^2 = 0
  aΣx[i]^3 + bΣx[i]^2 + cΣx[i] - Σy[i]x[i] = 0
  aΣx[i]^2 + bΣx[i] + cΣ1 - Σy[i] = 0
という連立方程式を解けば良い。(Σ1=Nですね。)未知数はa,b,cです。Σの部分はややこしそうに見えても、それらは与えられたデータから計算できる定数ですから、実はそれぞれ1個の数値に過ぎない。だから、これは鶴亀算で解ける三元連立一次方程式になっているわけです。

 この連立方程式を行列で表すと、
matJ =
 Σx[i]^4, Σx[i]^3, Σx[i]^2
 Σx[i]^3, Σx[i]^2, Σx[i]
 Σx[i],  Σx[i],   N
vectk =
 Σy[i]x[i]^2
 Σy[i]x[i]
 Σy[i]
vectz =
 a
 b
 c
とおいて、
  matJ vectz = vectk
という方程式です。ここでmatJの逆行列をinvJとすれば
  vectz = invJ vectk
と解けます。
 これはExcelの行列の機能を使っても計算できます。

 Excel上で、目に見える形で計算できるのが楽しい所ですので、ご自分でチャレンジなさると良い。どうやるかというと、(もちろん、じかにmatJ, vectkを作っても良いのですが、もうちょっと美しくもやれまして、)まず横に
  x[i]^2, x[i], 1
と並べた表を作る。縦にN行並ぶことになり、つまりN行×3列の行列になります。(3列目は1ばっかり並んでいる訳です。)この表をmatXと命名する。そして、
  =mmult(transpose(matX),matX)
で3行×3列の行列を作ります。これが上記のmatJです。transposeは行列の転置、mmultは行列の積を計算する関数です。また
  y[i]
を縦にN行並べた表を作ります。これをvectyと命名する。
  = mmult(transpose(matX), vecty)
で3行×1列の行列ができ、これがvectkです。
  = mmult(minverse(matJ),vectk)
(ここに、minverseは逆行列を計算する関数です)によって、3行×1列の行列ができ、これがvectzです。だから1行目がa, 2行目がb, 3行目がcです。

 なおExcelにおいて、複数のセルにまたがる結果が出る関数を使うのには奇妙なコツが要りますので、マニュアルを参照なさって下さい。
    • good
    • 2

企業でSQCを推進する立場にある者です。



高次多項式の求め方ですよね。
そのためには、まず2次項や積項を生成しなければなりません。
具体的には、元の変数を中心化してから2乗したり、積をとったりします。

https://www.i-juse.co.jp/statistics/support/faq/ …

中心化とは、平均を引く操作です。
技術の世界で行われる「応答曲面法」では
当たり前にやられています。ソフトの中でやってくれるので、
使用者は意識していないことが多いです。
理由は、参考サイトにも書いてありますが、
1次項と高次項の多重共線の発生を抑制するためです。

あとは、普通に重回帰分析をやれば良いです。

推定するときは、変数変換(回帰式を求めたデータの平均で
中心化してから高次項)をお忘れなく。
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング