scipyでFittingするためのテンプレート
概要
たまに簡単なFittingをする時があるのですが、たまになのでよくやり方を忘れます。なので忘れないためにここに書いちゃおうという流れになります。
今回はScipy.optimizeのCurve_Fitを使用します。
from scipy.optimize import curve_fit
import numpy as np
1次関数のFit
1次関数で最適化しようと思っている仮データを作ります。
x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [1, 4, 3, 5, 4, 7, 6, 9, 10, 13, 10 ]
x, y = np.array(x), np.array(y)
関数を定義し、Fittingするだけです。
def fit_linear(x, a, b):
return a*x + b
popt, pcov = curve_fit(fit_linear, x, y)
popt[0]にaが、popt[1]にbが入っています。pcovは共分散です。
この場合はpopt = [1.01818182, 1.45454545]となりました。
もし元データと比較したい場合は...matplotlib.pyplot as pltをインポートしている前提で...
plt.scatter(x, y)
plt.plot(x, popt[0]*x + popt[1])
としてあげればOKでしょう。
指数関数を使ったFit
これも基本は同じなのですが...
なにかしら原点を通っていて、2次関数では表せないようなグラフがあり、
y = exp(a*x)-1
でFittingするとします。
def fit_func(x, a):
return np.exp(a*x)-1
popt, pcov = curve_fit(fit_func, x, y)
plt.scatter(x, y)
plt.plot(x, np.exp(param[0]*x)-1)
まあほとんど同じです。
とりあえず簡易的に最適化したい時はこれでなんとかしましょう。
Author And Source
この問題について(scipyでFittingするためのテンプレート), 我々は、より多くの情報をここで見つけました https://qiita.com/SotaChambers/items/5d6e1acc4f16ed7636c0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .