読者です 読者をやめる 読者になる 読者になる

スポーツバイオメカニクス MatlabとOpenSIM

スポーツバイオメカニクスの分析によく用いられるMatlabとOpenSIMの使用に関する備忘録

最小二乗法

Matlab

今回は最小二乗法による回帰式の求め方を紹介します。

最小二乗法は一般的には、疑似逆行列を用いる方法ではなく、偏微分を用いる方が多いですが、Matlabの処理では疑似逆行列を用いた方が簡単に行えます。

Matlabは行列計算ソフトなので、当然と言えば当然です。

 

y=ax+b

という形の回帰式を求めたい場合、aとbが求まれば回帰式が作れるわけです。

なので、最小二乗法でaとbを求めます。

そのためには下のような行列式を作ります。

f:id:simulate:20170131200300p:plain

この式のxとyにそれぞれの値を代入していきます。

行列式は次のように置き換えて考えることができます。

f:id:simulate:20170131200322p:plain

 

行列式で表記すると複雑な気がしますが、AX=Bとおくと、とても簡単な式に見えます。

これをx=の形にしてやると、答えが出てきます。

なので、

f:id:simulate:20170131200338p:plain

と言うように解いてしまいたいのですが、Aは正則行列ではないので逆行列を作ることができません。

そこで、疑似逆行列を作ります。

Matlabには疑似逆行列を計算する関数がありますので

pinv(A);

とすれば良いだけです。

なので、疑似逆行列をA+として

f:id:simulate:20170131200232p:plain

 

という計算ができます。

これはMatlabでの表記は、さきほどの疑似逆行列の部分と合わせて書くと

ans=pinv(A)*B;

となります。

すると、出てきた答えは2行1列の行列になっているはずです。

念のために説明しておくと、1行目がa、2行目がbの値になっています。

同様の方法で最小二乗法でいろいろなものを求めることができます。

 

疑似逆行列を用いた最小二乗法の説明はあまり見かけないので、簡単に説明してみました。

私の理解も不十分でわかりにくい点もあったかもしれませんが、参考にしてみてください。