Python で線形/非線形フィッティングを行う 3 つの方法

熱曲線の例

1. 単純な線形回帰

回帰分析を用いて近似曲線を描くのが一般的な手法であり、単純線形回帰もその1つです。単純な線形回帰は次のように行うことができます。最小二乗法回帰係数を計算します。以下は、単純な線形回帰を使用してデータを近似するコード例です。

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
y = np.array([2.5, 4.5, 4.8, 5.5, 6.0, 7.0, 7.8, 8.0, 9.0, 9.5])

# 计算回归系数
slope, intercept = np.polyfit(x, y, 1)

# 绘制拟合曲线
plt.scatter(x, y)
plt.plot(x, slope * x + intercept, color='red')

plt.show()

このコードでは、関数 np.polyfit を使用して、単線形回帰の回帰係数を計算できます。プロット関数は近似曲線を描画するために使用され、散布関数は元のデータ点を描画します。

線形回帰

2. 多項式回帰

多項式回帰の使用は、より複雑なデータセットを近似するために使用できる一般的なアプローチです。以下は、多項式回帰を使用してデータを近似するコード例です。

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
y = np.array([2.5, 4.5, 4.8, 5.5, 6.0, 7.0, 7.8, 8.0, 9.0, 9.5])

# 计算多项式回归系数
coefs = np.polyfit(x, y, 3)

# 使用np.poly1d函数来生成一个多项式拟合对象
poly = np.poly1d(coefs)

# 生成新的横坐标,使得拟合曲线更加平滑
new_x = np.linspace(min(x), max(x), 1000)

# 绘制拟合曲线
plt.scatter(x, y)
plt.plot(new_x, poly(new_x), color='red')

plt.show()

単純な線形回帰とは異なり、多項式回帰はより複雑なデータセットに適合できます。このコードでは、関数 np.polyfit が多項式回帰係数を計算し、関数 np.poly1d が多項式フィット オブジェクトを生成します。プロット関数は近似曲線を描画するために使用され、散布関数は元のデータ点を描画します。

多項式回帰

3. 非線形回帰

非線形回帰の使用は、より複雑な近似方法であり、より複雑な近似に使用できます。非線形データ。以下は、非線形回帰を使用してデータを近似するコード例です。

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def func(x, a, b, c):
    return a * np.exp(-b * x) + c

# 生成模拟数据
x_data = np.linspace(0, 4, 50)
y_data = func(x_data, 2.5, 1.3, 0.5) + 0.2 * np.random.normal(size=len(x_data))

# 使用curve_fit函数来拟合非线性数据
popt, pcov = curve_fit(func, x_data, y_data)

# 画出原始数据和拟合曲线
plt.scatter(x_data, y_data, label="Data")
plt.plot(x_data, func(x_data, *popt), color='red', label="Fitted curve")
plt.legend()
plt.show()

このコードでは、Scipy ライブラリの Curve_fit 関数を使用して、非線形データを近似します。Curve_fit 関数の最初のパラメータは非線形関数で、2 番目のパラメータは近似データの横座標、3 番目のパラメータは近似データの縦座標です。

非線形回帰

要約する

上記は、Python で一般的に使用される 3 つのカーブ フィッティング手法です。単純な線形回帰は線形関係でデータを近似でき、多項式回帰はより複雑なデータを近似でき、非線形回帰を使用して非線形データを近似できます。実際のニーズに応じて、データを適合させるさまざまな方法を選択できます。

Guess you like

Origin blog.csdn.net/weixin_67016521/article/details/130119425