Skip to content

Instantly share code, notes, and snippets.

@hirokai
Last active March 22, 2020 06:25
Show Gist options
  • Save hirokai/c2a68e5d4b25fa46a6136c46226f8770 to your computer and use it in GitHub Desktop.
Save hirokai/c2a68e5d4b25fa46a6136c46226f8770 to your computer and use it in GitHub Desktop.
SciPyでカーブフィッティング

SciPyで任意の関数にカーブフィッティング

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment