数学

Pythonで最小二乗法を用いたデータフィッティング

スポンサーリンク

はじめに

最小二乗法は、観測データに基づいてモデルのパラメータを推定するための一般的な方法です。Pythonでは、科学計算ライブラリを利用して簡単に最小二乗法を実装することができます。この記事では、その手法と実装例を詳しく解説します。

numpyとscipyを用いた最小二乗法

numpyやscipyなどのライブラリを使用することで、効率的に最小二乗法を実装できます。


    import numpy as np
    from scipy.optimize import curve_fit

    # サンプルデータ
    x = np.array([0, 1, 2, 3, 4])
    y = np.array([0.1, 0.9, 2.2, 2.8, 3.9])

    # モデル関数の定義(ここでは線形モデル)
    def model(x, a, b):
        return a * x + b

    # 最小二乗法でパラメータを推定
    params, covariance = curve_fit(model, x, y)

    print("パラメータ:", params)
    

matplotlibを用いたフィッティング結果の可視化

フィッティング結果を可視化するためにmatplotlibライブラリを使用します。


    import matplotlib.pyplot as plt

    # フィッティング結果のプロット
    plt.scatter(x, y, label='Data')
    plt.plot(x, model(x, *params), label='Fitted line')
    plt.legend()
    plt.show()
    

応用例

最小二乗法は科学研究、工学、経済学など多岐に渡る分野で応用されます。

実験データの分析

実験データに基づいて物理的な定数を推定する場合などに利用されます。


    # 例: 重力加速度の推定
    height = np.array([5, 10, 15, 20, 25])  # 落下する高さ
    time = np.array([1, 1.4, 1.7, 2.1, 2.3])  # 落下にかかった時間

    def free_fall(t, g):
        return 0.5 * g * t**2

    g, _ = curve_fit(free_fall, time, height)
    print("重力加速度 g =", g[0], "m/s²")
    

よくある質問

最小二乗法とは何ですか?

最小二乗法は、観測データとモデルの差の二乗和を最小化することにより、モデルの最適なパラメータを推定する方法です。

非線形モデルへの適用は可能ですか?

はい、scipyのcurve_fitは非線形モデルにも適用可能です。モデル関数を適切に定義することが必要です。

パラメータの信頼区間を計算するには?

パラメータの信頼区間を計算するには、curve_fitが返す共分散行列を使用して計算します。

タイトルとURLをコピーしました