レーベンバーグ・マーカート法による非線形最小二乗法でのフィッティングを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がフィットした曲線を表す。