検索
[Python] 条件付きでフィッティングをする
- M.R

- 2021年10月17日
- 読了時間: 1分
概要
フィッティングを行いたい場合、pythonならばscipy.optimize.leastsqなどでできます。
しかし、フィッティングを行う場合、フィッティングパラメータに条件を付けたい場合も多々あります。
例えば、下記のようにパラメータa、bは共に正の範囲で最適な値を求める、という感じです。
f(x, a, b)=a*x^2+b (a>0 and b>0)今回はそんな手法についてご紹介します。
方法
実際にフィッティングする場合は、フィッティング関数と実データとの差分をscipy.optimize.leastsqの第一引数に渡します。
def func(param, x):
return param[0]*x**2+param[1]
def fit(param, x, y):
def residual(param, x, y):
return y-func(param, x)
return optimize.leastsq(residual, param, args=(x, y))条件付きでフィッティングしたい場合は、パラメータが条件を満たさない場合は実データと関数の差分を大きくするような関数を最小化するようにすれば良いです。
def residual(param, x, y):
return y-func(param, x) + param_condition(param)
def param_condition(param):
if (paramが条件を満たす):
return 0
else:
return np.inf ※注意
目的関数が微分不可能になるのでフィッティングにかかる時間がかなり長くなります。
(ソースをしっかり見たわけではないのですが、普通は最適パラメータ探索のために目的関数の勾配を利用していると思います。)






コメント