top of page

[Python] 条件付きでフィッティングをする


概要


フィッティングを行いたい場合、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         

※注意

目的関数が微分不可能になるのでフィッティングにかかる時間がかなり長くなります。

(ソースをしっかり見たわけではないのですが、普通は最適パラメータ探索のために目的関数の勾配を利用していると思います。)

最新記事

すべて表示

[Python]pandas.DataFrameをjsonで出力

概要 pythonでデータ解析を行っている。解析自体はpandasを用いて行い、最終結果はpandas.DataFrameの形式で保持されている。 この結果を他のアプリケーションで利用するため、json形式でファイル出力したい。 やり方 1 pandas.DataFrameをdictionaryに変換 data = df.to_dict(orient='records') 2 ファイルに出力 wi

Comments


あなたの買い物をサポートする
アプリ Shop Plan

iphone6.5p2.png

​いつ何を買うかの計画を立てられるアプリです。

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png

靴を大切にしよう!靴管理アプリ SHOES_KEEP

納品:iPhone6.5①.png

靴の履いた回数、お手入れ回数を管理するアプリです。

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png

「後で読む」を忘れないアプリ ArticleReminder

気になった​Webサイトを登録し、指定時刻にリマインダを送れるアプリです

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png
bottom of page