プログラミング

線形最小二乗法の実装

線形最小二乗法 (Least Squares Method) を使った回帰分析

線形最小二乗法は、データの回帰分析や推定に広く使用される統計学的手法です。この方法は、観測データと予測値との差異(誤差)の二乗和を最小化することで、最適な回帰線を求めます。Pythonでは、この手法を簡単に実装することができ、データ分析や機械学習の基本的な技術として利用されています。この記事では、Pythonで線形最小二乗法をどのように実行するかを詳細に解説します。

1. 線形最小二乗法の概要

最小二乗法は、与えられたデータセットに最も適合する直線を求める方法です。これは、データの予測値と実際の値との誤差(残差)を計算し、これらの残差の二乗和を最小化することを目的としています。線形回帰の場合、この直線の方程式は次のように表されます。

y=mx+by = mx + b

ここで、

  • yy は予測される値、
  • mm は回帰直線の傾き、
  • xx は独立変数、
  • bb は切片(回帰直線がy軸と交わる点)です。

最小二乗法は、残差の平方和を最小化することで、最適な mm(傾き)と bb(切片)を求めます。

2. Pythonで最小二乗法を実装する

Pythonでは、NumPyscipy、またはsklearnのライブラリを用いて最小二乗法を実行することができます。ここでは、NumPyライブラリを使った最も基本的な方法を紹介します。

まず、必要なライブラリをインポートします。

python
import 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)は、xyのデータに最適な直線をフィットさせ、その傾きmと切片bを返します。ここで1は1次関数(直線)を示しています。

結果を表示してみましょう。

python
print(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=6x = 6 のときの yy を予測するには、次のように計算できます。

python
x_new = 6 y_new = m * x_new + b print(f"x = {x_new} のときの予測値 y = {y_new}")

6. 他のライブラリを使用した最小二乗法

scipysklearnのような他のライブラリでも、最小二乗法を使った回帰分析を簡単に実行できます。例えば、sklearn.linear_model.LinearRegressionを使った線形回帰の実装は次のようになります。

python
from sklearn.linear_model import LinearRegression # モデルの作成と学習 model = LinearRegression() model.fit(x.reshape(-1, 1), y) # 傾きと切片 print(f"傾き: {model.coef_}") print(f"切片: {model.intercept_}")

このように、sklearnを使うと、より多機能で効率的に線形回帰を実行できます。

結論

線形最小二乗法は、データ分析や機械学習において非常に重要な手法であり、Pythonを使用することで簡単に実装できます。NumPyscipysklearnなどのライブラリを駆使することで、回帰分析や予測モデルを効率よく構築できます。最小二乗法を使うことで、データの傾向を明確に理解し、将来の予測を行うための強力なツールを手に入れることができます。

Back to top button