0

環境条件が与えられた場合の菌類の個体数の成長を推定するために使用する小さなモデルがあります。実際には、モデルは次の形式の MATLAB 関数です。

growth=myfunction(envdata,params)

私の菌類がgrowthどれだけ成長するか(当たり前!)envdataは、環境変数の行列です(タイムステップごとに1行、各列は温度、湿度などの異なる変数です。など)、params私のモデルのパラメータです。 . 後者は私が最適化したいものであり、(不明な) 初期の菌類の個体数、特定の時間に存在できる菌類の最大数などを含みます。

同時に、実験室で測定された成長のベクトル (私の観察) があり、私の目的は、入力パラメーターを変化させることによって私のモデルを観察に適合させることです。

私の自然な答えは、 などを使用することfminsearchでしたが、観測ベクトルを最低限使用するオプションはありません。それとも私が間違っていますか?

4

1 に答える 1

1

観測値とモデルの適合成長率の差をできるだけ正確に適合させたいと考えていますが、指摘したfminsearchように、ターゲット ベクトルを使用することはできません。

解決策は、最小化しようとしているもの (しばしばlossと呼ばれる) を定義するラッパー関数を定義することです。一般的な損失の 1 つは、平均二乗誤差です。

MSE(x, y) = Σ (x - y) 2

たとえば、次のように定義できます。

function loss = objectiveFun(observations, envdata, params)

    growth = myfunction(envdata, params);
    loss = sum((observation - growth).^2); // or your favorite loss function

end

そして実行します

paramsInit = 0; // whatever initial value you have for params

paramsOpt = fminsearch(@(x) objectiveFun(observations, envdata, x), paramsInit);
于 2016-04-21T10:45:11.467 に答える