レーベンバーグ・マーカート法による非線形最小二乗法でのフィッティングをscipy.optimize.curve_fitで行うことができる。
以下は、シグモイド関数にフィッティングする例。
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
def sigmoid(x, x0, k):
y = 1 / (1 + np.exp(-k*(x-x0)))
return y
x0_initial = 10.2
k_initial = 0.2
popt, pcov = curve_fit(sigmoid, xs, ys,[x0_initial,k_initial])
xs_fit = np.linspace(0, 100, 100)
print popt
ys_fit = sigmoid(xs_fit, *popt)
plt.plot(xs_fit,ys_fit)
plt.show()
curve_fit
にフィットさせたい関数(この例ではsigmoid
)、データ、パラメータの初期値を与えると、返り値のpopt
にはカーブフィットした後のパラメータが入る。
このパラメータを使ってsigmoid
を計算することで、ys_fit
vs xs_fit
がフィットした曲線を表す。