最適化

statsmodels は、モデルのパラメータ推定に 3 種類のアルゴリズムを使用します。

  1. WLS および OLS などの基本的な線形モデルは、適切な線形代数を使用して直接推定されます。

  2. RLM および GLM は、反復的に重み付けされた最小二乗法を使用します。ただし、オプションで、以下で説明する scipy オプティマイザーの 1 つを選択することもできます。

  3. 他のすべてのモデルについては、scipyオプティマイザーを使用します。

実用的な場合、特定のモデルでは scipy オプティマイザーのオプション選択が可能です。特定の scipy オプティマイザーは、デフォルトまたはオプションとなる可能性があります。モデルとデータに応じて、適切な scipy オプティマイザーを選択することで、局所的な最小値の回避、より短い時間でのモデルの適合、またはより少ないメモリでのモデルの適合が可能になります。

statsmodels は、特定のオプティマイザーに関連付けられたキーワード引数とともに、次のオプティマイザーをサポートします。

  • newton - ニュートン・ラフソン反復。scipy から直接ではありませんが、スコアとヘシアンのみが必要であるため、オプティマイザーと見なします。

    tolfloat

    収束のために許容されるパラメータの相対誤差。

  • nm - scipy の fmin_nm

    xtolfloat

    収束のために許容されるパラメータの相対誤差

    ftolfloat

    収束のために許容される loglike(params) の相対誤差

    maxfunint

    実行する関数の最大評価数。

  • bfgs - ブロイデン–フレッチャー–ゴールドファーブ–シャノン最適化、scipy の fmin_bfgs

    gtolfloat

    勾配のノルムが gtol より小さい場合に停止します。

    normfloat

    ノルムの次数 (np.inf は最大、-np.inf は最小)

    epsilon

    fprime が近似される場合、ステップ サイズにこの値を使用します。LikelihoodModel.score が None の場合にのみ関連します。

  • lbfgs - bfgs のメモリ効率の高い (限定メモリ) 実装。Scipy の fmin_l_bfgs_b

    mint

    限定メモリ行列を定義するために使用される変数メトリック補正の最大数。(限定メモリ BFGS 法は完全なヘシアンを格納しませんが、その近似にこの多くの項を使用します。)

    pgtolfloat

    反復は max{|proj g_i | i = 1, ..., n} <= pgtol の場合に停止します。ここで、pg_i は投影勾配の i 番目の成分です。

    factrfloat

    反復は (f^k - f^{k+1})/max{|f^k|,|f^{k+1}|,1} <= factr * eps の場合に停止します。ここで、eps は機械精度であり、コードによって自動的に生成されます。factr の一般的な値は、低精度では 1e12、中精度では 1e7、極めて高精度では 10.0 です。L-BFGS-B への scipy.optimize.minimize インターフェイスによって (factr の代わりに) 公開される ftol との関係については、注記を参照してください。

    maxfunint

    反復の最大回数。

    epsilonfloat

    勾配を数値的に計算するために、approx_grad が True の場合に使用されるステップ サイズ

    approx_gradbool

    勾配を数値的に近似するかどうか (その場合、func は関数値のみを返します)。

  • cg - 共役勾配最適化。Scipy の fmin_cg

    gtolfloat

    勾配のノルムが gtol より小さい場合に停止します。

    normfloat

    ノルムの次数 (np.inf は最大、-np.inf は最小)

    epsilonfloat

    fprime が近似される場合、ステップ サイズにこの値を使用します。スカラーまたはベクトルにできます。Likelihoodmodel.score が None の場合にのみ関連します。

  • ncg - ニュートン共役勾配。Scipy の fmin_ncg

    fhess_pcallable f’(x, *args)

    f のヘシアンに任意のベクトル p を掛けたものを計算する関数。LikelihoodModel.hessian が None の場合にのみ提供する必要があります。

    avextolfloat

    最小化子の平均相対誤差がこの量以下になった場合に停止します。

    epsilonfloat または ndarray

    fhess が近似される場合、ステップ サイズにこの値を使用します。Likelihoodmodel.hessian が None の場合にのみ関連します。

  • powell - パウエルの方法。Scipy の fmin_powell

    xtolfloat

    ラインサーチ誤差許容範囲

    ftolfloat

    収束のために許容される loglike(params) の相対誤差。

    maxfunint

    実行する関数の最大評価数。

    start_direcndarray

    初期方向セット。

  • basinhopping - ベイシンホッピング。これは scipy の basinhopping ツールの一部です。

    niterinteger

    ベイシンホッピングの反復回数。

    niter_successinteger

    グローバル最小候補がこの回数反復しても同じままである場合、実行を停止します。

    Tfloat

    受け入れまたは拒否基準の「温度」パラメータ。温度が高いほど、関数値の大きなジャンプが受け入れられることを意味します。最良の結果を得るには、T は局所的な最小値間の (関数値の) 分離と比較可能である必要があります。

    stepsizefloat

    ランダム変位で使用する初期ステップサイズ。

    intervalinteger

    stepsize を更新する頻度の間隔。

    minimizerdict

    最小化子 scipy.optimize.minimize() に渡される追加のキーワード引数。たとえば、「method」- 最小化メソッド (例: 「L-BFGS-B」)、または「tol」- 終了の許容範囲。fit の明示的な引数からマッピングされたその他の引数: - args <- fargs - jac <- score - hess <- hess

  • minimize - scipy オプティマイザーの使用を許可します。

    min_methodstr, optional

    使用する最小化メソッドの名前。メソッド固有の引数は、直接渡すことができます。メソッドとその引数のリストについては、scipy.optimize.minimize のドキュメントを参照してください。メソッドが指定されていない場合、BFGS が使用されます。

モデルクラス

一般に、エンドユーザーがこれらの関数とクラスを直接呼び出す必要はありません。ただし、さまざまな最適化手法には、ユーザーにとって役立つ可能性のある固有のキーワード引数があるため、クラスを提供します。

Optimizer()

_fit_newton(f, score, start_params, fargs, ...)

ニュートン・ラフソンアルゴリズムを使用して適合します。

_fit_bfgs(f, score, start_params, fargs, kwargs)

ブロイデン-フレッチャー-ゴールドファーブ-シャノンアルゴリズムを使用して適合します。

_fit_lbfgs(f, score, start_params, fargs, kwargs)

限定メモリ ブロイデン-フレッチャー-ゴールドファーブ-シャノンアルゴリズムを使用して適合します。

_fit_nm(f, score, start_params, fargs, kwargs)

ネルダー-ミードアルゴリズムを使用して適合します。

_fit_cg(f, score, start_params, fargs, kwargs)

共役勾配アルゴリズムを使用して適合します。

_fit_ncg(f, score, start_params, fargs, kwargs)

ニュートン共役勾配アルゴリズムを使用して適合します。

_fit_powell(f, score, start_params, fargs, ...)

パウエルの共役方向アルゴリズムを用いて適合を行います。

_fit_basinhopping(f, score, start_params, ...)

ベイシンホッピングアルゴリズムを用いて適合を行います。


最終更新日: 2024年10月03日