問題タブ [hessian-matrix]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - sqp に Hessian 関数を指定する際のオクターブ エラー
次の最適化問題をオクターブで解こうとしています
最初の制約は、 A が半正定値であることです。S は、(xi,xj) が S にある場合に xi が xj に類似するようなデータ ポイントのセットであり、D は、(xi,xj) が D にある場合に xi と xj が類似しないようなデータ ポイントのセットです。上記の式は 2 つの個別の合計であり、2 番目の合計はネストされていないことに注意してください。また、xi と xj は長さ N の列ベクトルであると想定されます。
これは非線形最適化であるため、オクターブの非線形プログラム ソルバーである sqp を使用しようとしています。 問題は、最適化する関数を提供しただけでは、いくつかの小さなおもちゃのテストで、ヘッセ行列を見つけるための BFGS メソッド が失敗することです。このため、独自の Hessian 関数を提供しようとしましたが、この問題が発生しました
次の sqp 呼び出しを行うと、
対角要素のみを解き、すべての対角要素が >=0 になるように制約することで、A が正の半正定かつ対角であるという制約を単純化しました。initial_guess は、長さが N の 1 のベクトルです。
これは、ヘッセ行列であると私が信じているものを計算するための私のコードです
Dsum_of_squares と HessianNumertor は
X は、行ごとに 1 つの観測値を持つ M x N 行列です。
D は M x M の非類似度行列です。D(i,j) が 1 の場合、X の行 i は行 j とは異なります。それ以外の場合は 0。
エラーは次の領域のいずれかにあると思います (最も可能性が低いものから最も可能性が高いものへ)
- ヘッセ関数を導出するために使用した数学は間違っています。私が使用している式は、関数のコメントにあります。
- 数学の私の実装。
- sqp が必要とするヘッセ行列は、ウィキペディアのヘッセ行列ページで説明されているものとは異なります。
どんな助けでも大歓迎です。さらにコードを投稿する必要がある場合は、喜んで投稿します。現在、最適化を試行して解決するコードの量は約 160 行です。
コードが失敗する原因となる実行中のテスト ケースを次に示します。勾配関数を渡すだけで機能します。
r - log(eigen(sigma, symmetric = TRUE, only.values = TRUE)$values) : 生成された NaN
を使用して対数尤度を推定していますoptim()
。固有値に問題があり、有効なヘッセ行列を見つけることができないため、標準誤差を計算できません。
私が受け取る「警告」メッセージは次のとおりです。
誰かが問題を見つけるのを手伝ってくれますか?
これが私のコードです:
matlab - Matlab fminunc は標準誤差 MLE を計算します
fminunc から推定値の標準誤差を計算しようとすると問題が発生します。私の推定手法は最尤推定です。以下の 2 つの方法を試しましたが、どちらも失敗しました。
fminunc の結果からのヘッセ行列は可逆でないため、ヘッセ行列から標準誤差を取得できません。
そこで、OPG(outer-product-of-gradient) 法を使用して標準誤差を取得するようになりました。しかし、私が提供した勾配は導関数チェックに合格しませんでした。
標準エラーを取得できる他の方法があるかどうかを知っている人はいますか? あなたの助けに感謝します!
algorithm - fminunc は、ユーザーが指定したヘッセ行列を考慮しません
まず第一に、些細なことを求めている場合は申し訳ありませんが、matlabで多変数計算と最適化ツールボックスを学習しているだけです-最適化も:)
単純な 2D 関数でmatlabの最適化ツールボックスを使用することについての理解をテストし、いくつかの極小値を見つけようとしましたが、特定の点について、matlabまたは関数は次のコメントで正確な開始点を与えてくれます:「初期点は極小値です。 . ". 勾配とユーザー提供のHessianの両方を提供しました。それがMATLABなのか私なのかわかりません。ヘシアンの定義を間違えたのかもしれませんが、すべて正しいと思います。fminunc
ランダムな開始点の場合、関数は常に適切な (最も近い) 最小値を提供します。ただし、特定のポイントでは、正確な最大値で、fminunc
上記のステートメントとまったく同じポイントが返されます。別の最適化アルゴリズムを使用する必要がありますか、それとも単にMATLABで受け入れなければならないものですか? Hessianを提供すると、それが解決されると思いました。ヘッセ行列は、問題のあるすべての点で常に負の定義の行列であり、それはその点が最大であることを意味するはずです!!! によって返された固有値を介してテストしましたeig(hessian)
。fminunc
Hessian をまったく考慮していないようです。fminunc
ヘシアンを扱うにはどうすればよいですか?
乾杯!
間違っている
点:fminunc
たとえば、最後のポイントの場合:
以下のコードを使用しました。
matlab - 勾配問題とヘッシアン問題の関数ハンドル MATLAB
グラデーションとヘシアンの関数ハンドルの操作に問題があります。
次のコードがあります。
コマンドターミナルに入力すると、次のようになります。
スカラー値を取得します。
しかし、入力すると
それらの点で評価された勾配に対応するベクトルが必要です。
グラデーションについては、私はただ得ます
これは単なるグラードベクトル関数です。しかし、x1 = 1 と x2 = 2 を入力した実際の数値結果が必要です。
エラーを返します。
理由はわかりません。
r - R エラー: 最大値を使用して推定しようとしたときの OPTIM の Hessian のエラー。可能性
私はあまり密度の濃いコードに反映されている可能性がある R 初心者です。ご了承ください。max を使用して二変量正規分布の係数を推定しようとしています。尤度推定。OPTIM 関数を呼び出すと、ヘッシアンに関連するエラーが発生します。かなりデバッグを試みましたが、エラーを取り除くことができないようです。これに取り組む方法についての洞察をいただければ幸いです。
私が使用しているデータは{y1、y2、x1、x2}で、y1、y2はバイナリ変数です。データをシミュレートするために使用するコードは次のとおりです。
推定しようとしているパラメーターは、潜在効用関数 z1 および z2 のベータと、分散共分散行列の非対角要素です。
ありがとう!
最初にエラーを指定してから、エラーの後にコードを提供します。
まず、コード内のこの行で発生したと思われるエラー:
A) OPTIM の呼び出しでパラメーターに hessian = F を設定すると、次のエラーとトレースバックが表示されます。
B) OPTIM の呼び出しでパラメーターに hessian = T を設定すると、次のエラーとトレースバックが表示されます。
今コード: