問題があります(を参照) https://public.jmp.com/packages/Problematic-Nonlinear-Fit/js-p/kz0BFg2_XHtZjz6kNKdXg )非線形モデルを近似していて、データが原因でモデルの近似が不安定になっている場合。非線形モデルのパラメーターの1つは、真の理論モデルと比較してデータに小さな誤差がある場合、「無限にスライド」する傾向があります。私がやりたいのは、非線形モデルを適合させることですが、そのパラメーター(L2ノルムなど)にペナルティを課して、パラメーターが爆発するのを防ぎます。
これが意味すること:
私の非線形モデルが
f(t)= A *(1-exp(-k * t))+ B *(1-exp(0.0193 * t))
通常、パラメーター推定値を見つけるために最小化される損失関数は、二乗誤差損失です。
find(A、k、B)で、合計{(yf(t))^ 2)}が最小化されます
私がやりたいのはもっと
find(A、k、B)で、sum {(yf(t))^2+ラムダ*k^2}が最小化されます
ここで、lambdaは、単純なグリッド検索に基づいて自分で選択する正則化パラメーターです。
カスタム損失関数列の使用を検討しましたが、その列に別の列のモデルパラメーターを含めることができるかどうかわかりません。
レート(「k」)が爆発しないようにする方法についてのアイデアはありますか?
数値微分を使ってみましたが、結果は変わりませんでした。パラメータの範囲は、あなたが思っていたとおりに機能します。見積もりを指定された範囲にするだけです。
この投稿にもサンプルデータをアップロードしました。
予測プロファイラーを使用して、これを行う方法を考えました。これが私のアプローチです:
最小化したい「損失」関数の列k、A、B、ラムダ、および列を持つテーブル(添付を参照)を作成しました。添付の表には、2つの損失関数(QuadLossとL2RegLoss)があります。これらの各列には、数式としてより複雑なスクリプトがあります。プロファイルデータを行列として保存し、y値とt値をベクトルとして抽出してから、yとモデルの差を計算します(t、k、A、およびBの関数としてモデルを書き出すことを完了します)。次に、最後の結果として、二乗誤差と追加された正則化ペナルティの合計を計算します。ラムダの値は、ペナルティ値をスケーリングします。関数を「ベクトル化」して、記述を少し簡単にしました。QuadLossの関数は次のとおりです。
dmat = [0.061033 3, 0.0706 6, 0.0923 12, 0.104767 24, 0.122933 48, 0.1657 120, 0.2201 240];
yvec = dmat[0, 1];
tvec = dmat[0, 2];
rvec = yvec - (:A * (1 - Exp( -:k * tvec )) + :B * (1 - Exp( -0.0193 * tvec )));
(rvec` * rvec)[1];
これがL2RegLossの関数です
dmat = [0.061033 3, 0.0706 6, 0.0923 12, 0.104767 24, 0.122933 48, 0.1657 120, 0.2201 240];
yvec = dmat[0, 1];
tvec = dmat[0, 2];
rvec = yvec - (:A * (1 - Exp( -:k * tvec )) + :B * (1 - Exp( -0.0193 * tvec )));
(rvec` * rvec)[1] + :lambda * :k ^ 2;
次に、予測プロファイラーと望ましさ関数を使用して損失を最小限に抑え、ラムダ(正則化調整パラメーター)のさまざまな値がk値に与えるものを調べました。この場合、AとBではなく、kのみを正則化しています。

「NoReg」で保存された設定は、2次損失(二乗誤差の合計)を使用しているだけです。これは、非線形プラットフォームが実行していることと似ているはずです(ただし、この場合、プロファイラーで最適化ルーチンを使用しているため、正確ではありません。非線形プラットフォームが使用するものとはかなり異なると確信しています)。次に、ラムダに対して0.01、0.001、0.1の値を試しましたが、kの推定は、調整パラメーターの値の影響をかなり強く受けています。したがって、私はこのアプローチに完全には満足していません。チューニングパラメータの選択は困難であり、これが合理的なアプローチであるかどうかはわかりません。
この問題については長い間考えていましたが、現在のパラメーター値を正則化された損失関数で使用できるように表示する方法がわかりません。 予測式をスキップして、モデル全体を損失関数で表すことができる場合があります。 カスタム損失関数は私の知識の弱点です。
正則化の代わりに役立つ可能性のある組み込み機能があります。 見るヘルプ>JMPドキュメントライブラリ>予測および特殊モデリング>非線形回帰>追加の例>パラメータ制限の設定例。 このソリューションの問題は、パラメーターが無限大ではなく上限に達する可能性があることです。
デフォルト以外の設定のいくつかを試してみましたか? かしら数値微分のみ役立つだろう? を使用しますか二階導関数オプションヘルプ?