1

私は5000倍のサンプルを持っています

サンプル = {1.23、-4.67、0.17、1.25、6.89、-2.03、...}

データを N(mu, sigma) や一般化された学生 t(loc, scale, DoF) などのパラメトリック分布に適合させたい...

私はすでにこれらの分布 PDF_normal(mu, sigma)(x) と PDF_t(loc, scale, DoF)(x) の PDF を持っており、固定分布パラメーターの 5000 サンプルの PDF の対数の合計を計算できます。

ここで、非線形最適化問題を解決するためにいくつかの C++ アルゴリズムを使用して、最大対数尤度値を与えるパラメーター (mu_max、sigma_max) または (loc_max、scale_max、DoF_max) を見つけたいと考えています。

R Project for Statistical Computing は、次の方法で MASS パッケージの問題を解決しています: .. 対数尤度の直接最適化は、optim を使用して実行されます。推定された標準誤差は、観測された情報行列から取得され、数値近似によって計算されます。1 次元の問題には Nelder-Mead 法が使用され、多次元の問題には BFGS 法が使用されます...

残念ながら、R ソリューションを使用することはできませんが、Microsoft VS2010 C++ でソリューションを考え出す必要があり、自分で最適化コードを書きたくないし、R ソース コードを見て C++ 用に書き直したくありません。 ..

C ++用のBFGS(または同様のもの)の高速で十分にテストされた実装を見つけることができる提案はありますか?

Boost、Intel MKL などで利用できるものはありますか?

助けてくれてありがとう、マット

4

2 に答える 2

1

正規分布の MLE は閉じた形式で解決できるため、最適化は必要ありません。1を参照してください: http://de.wikipedia.org/wiki/Maximum-Likelihood-Methode

しかし、PDFしか知らないさまざまなディストリビューションファミリでこの問題を解決したいと考えています。したがって、非線形ソルバーの優れた C++ 実装が必要です...

于 2012-12-07T16:40:42.727 に答える
0

あなたが言及しているディストリビューションにはすべて、パラメーターがほとんどありません。ニュートン法をまっすぐに行う方が便利かもしれません。対数尤度関数とその勾配とヘッセ行列 (データではなくパラメーターに関して) を計算できます。

最後にシステムを解くときは、ガウスの消去法ではなく、コレスキー分解または LDL T分解を使用する必要があります。ほとんどのシステムでは 10 -7程度である sqrt(machine epsilon) 程度の精度ですべての要素を知ることができます。

ヘッシアンのコレスキー分解を取得するためのより堅牢な方法は、それがランク 1 行列の束の合計である場合、一連のギブンス回転を使用して、新しいランク 1 行列をそれぞれコレスキー分解に組み込むことです。これにより、マシンのイプシロンに近い精度が得られますが、ヘッセ行列を形成してから通常の方法でコレスキー分解を行うよりも約 2 倍遅くなります。

ここでのテクノロジは十分に単純なので、おそらく自分でコーディングできます。

汎用のソフトウェア パッケージを提案するのは難しいです。これは、他の人の C++ 最適化ライブラリで良い経験をしたことがないためです。ただし、ほとんどの場合、勾配とヘッセ行列を評価するコードを取得すると、ニュートン法を作成するのは大した作業ではないため、その必要性をあまり感じていません。

そうは言っても、 COIN-OR プロジェクトが提供するものを見て確認したいかもしれません。自動微分ツールを使用すると、時間を節約できる場合があります --- (COIN-OR には1 つがあります)。COIN-OR の非線形最適化ツールや自動微分ツールを自分で使用したことは一度もありません。

于 2012-12-07T16:48:19.500 に答える