
スポンサードリンク
こんにちは、ももやまです。
前回の第08羽では、逆行列
今回の第09羽では、そもそも解をもたないような連立方程式
この最小2乗法は、実験のデータ解析や、研究分野など様々な分野で応用が利くので、是非マスターしていきましょう!
目次 [hide]
スポンサードリンク
行列と連立方程式 [復習]
うさぎでもわかる線形代数 第02羽では、行列を用いて連立方程式を解く方法について説明しました。
本題の最小2乗法に入る前に、まずは今回使う知識「行列と連立方程式」について軽く復習しましょう。
皆さんは、下のように

この連立方程式が解をもつかどうかは
具体的には、
のときは解なし のときはさらに場合分け のときはただ1つの解をもつ のときは無数の解をもつ。
(どのような解をもつかは 個の任意定数で表現可)
でしたね。
今回「行列を用いた最小2乗法」では、
- 解なしのとき
- ただ1つの解をもつとき
の2つに着目していきたいと思います。
スポンサードリンク
1. 擬似逆行列(一般化逆行列)
前回の第08羽で擬似逆行列について勉強しましたが、もう1度擬似逆行列について復習をしてから本題の最小2乗法に入りましょう。
(1) 擬似逆行列とは
たとえ、係数行列
そこで、両辺に
このときに出てくる
(疑似逆行列・一般化逆行列・一般逆行列と呼ばれることもあります)
連立方程式
(2) 解をもたない場合
擬似逆行列は、
この条件は、行列
しかし、
一方、擬似逆行列が計算できる条件は
実は解がない連立方程式
なぜそんなことができるのかは、3章にて詳しく説明します。
スポンサードリンク
2. 最もそれらしい解とは - 最小2乗法の始まり
最もそれらしい解と言われても、人によって「それらしい」の解釈が変わってきます。そこで、「それらしい解かどうかの基準」を明確に設定しましょう。
まず、連立方程式
ここで、左辺
そこで登場するのがノルム(長さ・大きさ)です。
まず、右辺
ここで、ノルムは必ず0以上となるのでしたね。つまり、
そのため、
また、
この「それっぽい解
3. 擬似逆行列で最小2乗法が計算できる仕組み
ここからは、連立方程式
(1) 前提知識 - ベクトルの偏微分
(i) ベクトルの偏微分とは?
皆さんは、高校の数2、数3、大学の解析学の前半で微分を、解析学の後半では偏微分を習いましたね。これらの微分は、
最小2乗法では、下のようにこの偏微分の概念を拡張した「スカラーをある1つのベクトルで偏微分する」ということをします。
とは言っても、いまいち実感がわかないと思うので、まずは計算例を見てみましょう。
ベクトル
[解説1]
(ii) 最小2乗法で使うベクトルの偏微分の導出
最小2乗法の公式を計算する際には、
※ は実対称行列
を微分する場面が出てきます。
この2式の微分を導出してみましょう。
[1]
まず、
すると、
この式を
よって、
※
[2]
こちらは、
さらに微分すると、
(2) 勾配と最小値
皆さんは、数2・数3で、「スカラーな変数(
例えば、2次関数
また、増減表やグラフを書くことで、グラフ

よって、極小値
ベクトルの場合も同じように、「ベクトル
スカラー変数の場合は、傾き
ここで、最小2乗法で求めたい式
まず、極値は勾配
次に、極値が最小値を取るかどうかの確認ですが、
ここで、

この形の場合、極値
ベクトル関数
(3) 最小2乗法の導出
ここからは、実際に
まず、
なので、
まず、
さらに、この式を展開することで、
ここで、
また、
したがって、
ここからは、上の式を
となりますね[3]
よって、勾配が0となる
この形、まさに擬似逆行列から
連立方程式
この誤差を最小にするような
最小2乗解
4. 例題で最小2乗法の計算方法を確認しよう
では、例題を見てみましょう。
つぎの解をもたない連立方程式
ここで、行列
(1) 擬似逆行列
(2) (1)の誤差
[解説1]
(1) 擬似逆行列
の計算 の計算 の計算
の3ステップにわけて計算する。
[Step1]
[Step2]
[Step3] 擬似逆行列
(2)
最小2乗解
よって、( \vec{x} \) は
※ 行列に使わずに書くと、最小2乗解は
5. 実験と最小2乗法(回帰直線)
(大学の)物理実験では、「条件を変えて得られた2つのデータの組
1つ最小2乗法を使う物理実験の例を出してみましょう。皆さんは、オームの法則を中学校や高校で習いましたね。これは、電圧
しかし、実世界ではこれに加えて初期の起電力
そこで、抵抗値
すると、式
通常であれば、共分散
※ もし、実験で使う最小2乗法の仕組みについて詳しく勉強してみたいよという人は、こちらの記事もぜひご覧ください。
(1) 行列を用いた形 への変換
まず、2つのデータの組
電流 | 電圧 |
---|---|
0.000 | 0.000 |
0.502 | 1.000 |
1.005 | 2.000 |
1.508 | 3.000 |
2.012 | 4.001 |
2.516 | 5.001 |
3.019 | 6.001 |
すると、得られたデータの組から、連立方程式
ここで、
(2) Python, MATLABで計算
さすがに手計算で
Pythonで計算する場合(プログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import numpy as np # numpyを用いた行列計算に必要 ## プロットデータ(x_k,y_k)から、回帰直線 y = px + q を擬似逆行列 np.linalg.pinv(A) で計算 def find_kaiki_line(x_data,y_data): n = len (x_data) # 連立方程式の数 A = np.zeros( (n, 2 ) ) # 係数行列のサイズ: n×2 ## Ax = b の形に変更 A[:, 0 ] = x_data[:, 0 ] A[:, 1 ] = 1 b = y_data ## 擬似逆行列を用いて最小2乗解を計算 x = np.matmul(np.linalg.pinv(A),b) return x ## 処理データをここに書く ampere = np.array([[ - 0.001 ],[ 0.502 ],[ 1.005 ],[ 1.508 ],[ 2.012 ],[ 2.516 ],[ 3.019 ]]) # 電流Iの観測結果 voltage = np.array([[ 0.000 ],[ 1.000 ],[ 2.000 ],[ 3.000 ],[ 4.001 ],[ 5.001 ],[ 6.001 ]]) # 電圧Vの観測結果 ## 結果 result = find_kaiki_line(ampere,voltage) print ( '回帰直線: y = {p:0.4f}x {q:0=+0.4f}' . format (p = result[ 0 , 0 ],q = result[ 1 , 0 ])) |
MATLABで計算する場合(プログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | %% 処理データをここに書く voltage = [ 0.000; 1.000; 2.000; 3.000; 4.001; 5.001; 6.001]; ampere = [-0.001; 0.502; 1.005; 1.508; 2.012; 2.516; 3.019]; %% 結果 result = find_kaiki_line(ampere,voltage); disp(strcat( "回帰直線: y = " ,sprintf( "%0.4f" ,result(1)), "x " ,sprintf( "%+0.4f" ,result(2)))) %% プロットデータ(x_k,y_k) から、回帰直線 y = px + q を擬似逆行列 pinv(A) で計算 function [x] = find_kaiki_line(x_data,y_data) n = numel(x_data); % 連立方程式の数 A = zeros(n,2); % 係数行列のサイズ(n×2) %% Ax = b の形に変更 A(:,1) = x_data; A(:,2) = 1; b = y_data; %% 擬似逆行列を用いて最小2乗解を計算 x = pinv(A) * b; % p = x(1), q = x(2) end |
実行結果(Python, MATLAB共通)
1 | 回帰直線: y = 1.9869x +0.0027 |
実行結果から、抵抗
(3) 計算結果があっているかExcelで確認
Excelの近似機能を使って、本当に最小2乗法の計算が正しくできているかを

確かに行列で最小2乗法を計算した場合と一致していますね!
結果が
このとき、
さらに、
6. 練習問題
それでは、もう1問「行列を用いた最小2乗法の計算練習」をしましょう。
つぎの解をもたない連立方程式
ここで、行列
7. 練習問題の答え
最小2乗解
まずは3ステップで擬似逆行列
[Step1]
[Step2]
[Step3] 擬似逆行列
[Step4] 解ベクトル
よって、最小2乗解
※ ベクトル表記をしない場合は、
8. さいごに
今回は、行列(擬似逆行列)を使った最小2乗法について説明しました。
まずは、1枚の画像で最小2乗法の計算方法について振り返りましょう。

最小2乗法は、単なる計算だけでなく、実験データの解析や研究など様々な分野で使えるので、是非理系の皆さんは使いこなせるようになりましょう!
それでは、また次の記事で。
関連広告・スポンサードリンク