5

非常に大きな数または非常に小さな数を使用した場合にのみ、fmin_slsqp (または scipy.optimize の他の何か) で問題が発生したことはありますか?

私は、グレースケール画像とマスクを取得し、ヒストグラムを生成し、複数のガウス分布をヒストグラムに適合させるために、いくつかの Python コードに取り組んでいます。コードを開発するために小さなサンプル画像を使用しました。いくつかの作業の後、コードは見事に機能しました。ただし、最初にヒストグラムを正規化してビン値 <<1 を生成するか、巨大な画像をヒストグラム化して数十万のビン値を生成すると、fmin_slsqp() が散発的に失敗し始めます。わずか 5 回の繰り返しで終了し、通常は最初に与えた推測をわずかに変更したバージョンを返し、終了モード 8 を返します。これは、「ラインサーチの正方向導関数」を意味します。最初にビン数のサイズを確認し、それらを約 100 ~ 1000 の範囲にスケーリングすると、fmin_slsqp() は通常どおり機能します。結果を返す前に、スケーリングを解除するだけです。

私は周りを見回して、基本的に微分を近似するために使用される dx であるイプシロン値について話している人々を見つけましたが、それは役に立ちませんでした。それ以外には、まだ有用なものは見つかりませんでした。どんなアイデアでも大歓迎です。前もって感謝します。

ジェームズ

4

3 に答える 3

5

同様の問題がoptimize.leastsqで発生しました。私が扱う必要のあるデータは、1e-18などのように非常に小さいことが多く、そのような場合、leastsqが最適なパラメーターに収束しないことに気付きました。データをより一般的なもの(数百、数千など、整数で解像度とダイナミックレンジを維持できるもの)にスケーリングした場合にのみ、leastsqを非常に合理的なものに収束させることができます。

最適化する前にデータをスケーリングする必要がないように、これらのオプションの許容値パラメーターを試してみましたが、あまりうまくいきませんでした...

scipy.optimizeパッケージの関数でこの問題を回避するための良い一般的なアプローチを知っている人はいますか?共有していただければ幸いです...根本はOPと同じ問題だと思います。

于 2011-12-06T02:35:20.273 に答える
4

基になるデータの変化が劇的に変化したときに、最初の推測( "x0")を更新していますか?反復線形最適化問題の場合、これらの問題は、最初の推測が適合しようとしているデータから遠く離れている場合に発生します。これは、scipyの問題というよりも最適化の問題です。

于 2011-04-17T02:00:10.343 に答える