5個の物体の重さを、1つずつ2回量る場合で、最小二乗法による各物体の重さの推定量を求めました。
コード
最小二乗推定量に基づいて計算してみます。
# 2014 Q4(1)-1 2025.1.8
import numpy as np
# 測定値
x = np.array([5.1, 5.2, 7.3, 7.2, 6.8, 6.7, 4.9, 4.8, 5.5, 5.4])
# 設計行列 X を構築 (各物体を2回測定)
X = np.array([
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 0, 1],
[0, 0, 0, 0, 1]
])
# 最小二乗推定量の計算
X_transpose = X.T
theta_hat = np.linalg.inv(X_transpose @ X) @ X_transpose @ x
# 結果を出力
print("最小二乗推定量 (θ̂):", theta_hat)
最小二乗推定量 (θ̂): [5.15 7.25 6.75 4.85 5.45]
最小二乗推定量が計算されました。
次に、手計算で導いた式に基づいて計算してみます。
# 2014 Q4(1)-1 2025.1.8
import numpy as np
# 測定値
x = np.array([5.1, 5.2, 7.3, 7.2, 6.8, 6.7, 4.9, 4.8, 5.5, 5.4])
# θ^ を手計算の式に基づいて計算
theta_hat = np.array([
(x[0] + x[1]) / 2,
(x[2] + x[3]) / 2,
(x[4] + x[5]) / 2,
(x[6] + x[7]) / 2,
(x[8] + x[9]) / 2
])
# 結果を出力
print("最小二乗推定量 (θ̂):", theta_hat)
最小二乗推定量 (θ̂): [5.15 7.25 6.75 4.85 5.45]
最小二乗推定量が計算され、で計算された値と一致しました。