minuit最小化コード(http://code.google.com/p/pyminuit/)のpyminuit Pythonバインディングを使用して、データフィッティングを行っています。ミニマイザは関数を受け取り、イントロスペクションを使用して最小化するパラメータを抽出します。一般的に、私は、データセットを記述する特定の関数を与えられたデータセットのカイ二乗値を最小限に抑えたい。任意の関数に対してchi2値関数を定義する方法は?
私の質問:さまざまな数のパラメータを持つ任意の関数を指定すると、その関数のカイ二乗値を与える関数を返します。およびは、関数の引数指定で最小化されますか?
例:
from scipy import *
import minuit
# Generate some data to fit
data_x = arange(50)
noise = 0.3
data_y = data_x**3 + normal(0.0, noise)
# Fit function, e.g. a cubic
fit_func = lambda x, a1, a2, a3, a4: a1 + a2*x + a3*x**2 + a4*x**3
# Minimisation function e.g. chi squared
# Note this has only the parameters to be minimised in the definition (eg not data_x)
min_func = lambda a1, a2, a3, a4: sum((fit_func(data_x, a1, a2, a3, a4) - data_y)**2/noise**2)
私はmin_func = make_chi2(fit_func)
のようなものを書きたいのですが場所です。 data_x
とdata_y
は機能の外でしか定義されていないので、私は何をするべきかわかりません。事前にあなたの助けのための
# Initialise minimiser object with initial values
m = minuit.Minuit(min_func, {'a1': 1.0, 'a2': 1.0, 'a3': 1.0, 'a4': 1.0})
# Run minimiser
m.migrad()
# Print minimised values - example output
print m.values
>>> {'a1': 0.000, 'a2': 0.000, 'a3': 0.000, 'a4': 1.000}
ありがとう:最小化ルーチンの残りの部分は、完全を期すため、などが見えます!