線形最小二乗法 (Least Squares Method) を使った回帰分析
線形最小二乗法は、データの回帰分析や推定に広く使用される統計学的手法です。この方法は、観測データと予測値との差異(誤差)の二乗和を最小化することで、最適な回帰線を求めます。Pythonでは、この手法を簡単に実装することができ、データ分析や機械学習の基本的な技術として利用されています。この記事では、Pythonで線形最小二乗法をどのように実行するかを詳細に解説します。
1. 線形最小二乗法の概要
最小二乗法は、与えられたデータセットに最も適合する直線を求める方法です。これは、データの予測値と実際の値との誤差(残差)を計算し、これらの残差の二乗和を最小化することを目的としています。線形回帰の場合、この直線の方程式は次のように表されます。

y=mx+b
ここで、
- y は予測される値、
- m は回帰直線の傾き、
- x は独立変数、
- b は切片(回帰直線がy軸と交わる点)です。
最小二乗法は、残差の平方和を最小化することで、最適な m(傾き)と b(切片)を求めます。
2. Pythonで最小二乗法を実装する
Pythonでは、NumPy
やscipy
、またはsklearn
のライブラリを用いて最小二乗法を実行することができます。ここでは、NumPy
ライブラリを使った最も基本的な方法を紹介します。
まず、必要なライブラリをインポートします。
pythonimport numpy as np
import matplotlib.pyplot as plt
次に、サンプルデータを作成します。
python# サンプルデータの作成
x = np.array([1, 2, 3, 4, 5])
y = np.array([1, 2, 1.3, 3.75, 2.25])
ここで、x
は独立変数、y
は従属変数です。次に、最小二乗法を使用して直線の方程式を計算します。
python# 最小二乗法を用いて最適な傾きmと切片bを求める
m, b = np.polyfit(x, y, 1)
np.polyfit(x, y, 1)
は、x
とy
のデータに最適な直線をフィットさせ、その傾きm
と切片b
を返します。ここで1
は1次関数(直線)を示しています。
結果を表示してみましょう。
pythonprint(f"傾き: {m}")
print(f"切片: {b}")
3. 結果の可視化
回帰直線がデータにどのようにフィットしているかを視覚的に確認するために、matplotlib
を使ってデータポイントと回帰直線をプロットします。
python# 回帰直線を描画
plt.scatter(x, y, color='blue', label='データ点')
plt.plot(x, m*x + b, color='red', label='回帰直線')
# グラフの表示
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
これにより、青い点がデータポイントを、赤い直線が回帰直線を示すグラフが表示されます。
4. 最小二乗法の応用
最小二乗法は、回帰分析だけでなく、曲線のフィッティングや予測にも利用されます。例えば、データが線形ではなく二次関数に従っている場合、np.polyfit(x, y, 2)
のように多項式の次数を変更することで、より複雑なモデルを適用できます。
python# 二次関数でフィッティング
coeffs = np.polyfit(x, y, 2)
# フィットした二次関数をプロット
plt.scatter(x, y, color='blue', label='データ点')
plt.plot(x, coeffs[0]*x**2 + coeffs[1]*x + coeffs[2], color='green', label='二次関数')
plt.legend()
plt.show()
5. 最小二乗法を使った予測
回帰直線が得られた後、これを使用して新しいデータ点に対する予測を行うことができます。例えば、x=6 のときの y を予測するには、次のように計算できます。
pythonx_new = 6
y_new = m * x_new + b
print(f"x = {x_new} のときの予測値 y = {y_new}")
6. 他のライブラリを使用した最小二乗法
scipy
やsklearn
のような他のライブラリでも、最小二乗法を使った回帰分析を簡単に実行できます。例えば、sklearn.linear_model.LinearRegression
を使った線形回帰の実装は次のようになります。
pythonfrom sklearn.linear_model import LinearRegression
# モデルの作成と学習
model = LinearRegression()
model.fit(x.reshape(-1, 1), y)
# 傾きと切片
print(f"傾き: {model.coef_}")
print(f"切片: {model.intercept_}")
このように、sklearn
を使うと、より多機能で効率的に線形回帰を実行できます。
結論
線形最小二乗法は、データ分析や機械学習において非常に重要な手法であり、Pythonを使用することで簡単に実装できます。NumPy
やscipy
、sklearn
などのライブラリを駆使することで、回帰分析や予測モデルを効率よく構築できます。最小二乗法を使うことで、データの傾向を明確に理解し、将来の予測を行うための強力なツールを手に入れることができます。