scipyのoptimize.fminとoptimize.leastsqの違いは何ですか?彼らはthis example pageでほぼ同じように使用されているようです。私が見ることができる唯一の違いは、(実際には名前が示唆するように)leastsqが実際に自乗和を計算するのに対し、fminを使うときは手動でこれを行う必要があるということです。それ以外の2つの機能は同等ですか?Scipy:optimize.fminとoptimize.leastsqの差
3
A
答えて
4
下の異なるアルゴリズム。
fminはシンプレックス法を使用しています。 leastsqは最小二乗適合を使用しています。
0
いくつかの情報を追加するだけで、私はbiexponential関数に適合するモジュールを開発しています。最小と最小の時間差はほぼ100倍に見えます。詳細は以下のコードを見てください。
2指数の合計である二指数曲線を使用し、モデル関数には4つのパラメータがあります。 S、F、D_star及びD.
フィッティングすべてのデフォルトパラメーターをS [FE ^( - X * D_star)+(1 - f)のE ^( - X * D)]を使用した
を('Time taken for minimize:', 0.011617898941040039)
('Time taken for leastsq :', 0.0003180503845214844)
使用コード:
import numpy as np
from scipy.optimize import minimize, leastsq
from time import time
def ivim_function(params, bvals):
"""The Intravoxel incoherent motion (IVIM) model function.
S(b) = S_0[f*e^{(-b*D\*)} + (1-f)e^{(-b*D)}]
S_0, f, D\* and D are the IVIM parameters.
Parameters
----------
params : array
parameters S0, f, D_star and D of the model
bvals : array
bvalues
References
----------
.. [1] Le Bihan, Denis, et al. "Separation of diffusion
and perfusion in intravoxel incoherent motion MR
imaging." Radiology 168.2 (1988): 497-505.
.. [2] Federau, Christian, et al. "Quantitative measurement
of brain perfusion with intravoxel incoherent motion
MR imaging." Radiology 265.3 (2012): 874-881.
"""
S0, f, D_star, D = params
S = S0 * (f * np.exp(-bvals * D_star) + (1 - f) * np.exp(-bvals * D))
return S
def _ivim_error(params, bvals, signal):
"""Error function to be used in fitting the IVIM model
"""
return (signal - ivim_function(params, bvals))
def sum_sq(params, bvals, signal):
"""Sum of squares of the errors. This function is minimized"""
return np.sum(_ivim_error(params, bvals, signal)**2)
x0 = np.array([100., 0.20, 0.008, 0.0009])
bvals = np.array([0., 10., 20., 30., 40., 60., 80., 100.,
120., 140., 160., 180., 200., 220., 240.,
260., 280., 300., 350., 400., 500., 600.,
700., 800., 900., 1000.])
data = ivim_function(x0, bvals)
optstart = time()
opt = minimize(sum_sq, x0, args=(bvals, data))
optend = time()
time_taken = optend - optstart
print("Time taken for opt:", time_taken)
lstart = time()
lst = leastsq(_ivim_error,
x0,
args=(bvals, data),)
lend = time()
time_taken = lend - lstart
print("Time taken for leastsq :", time_taken)
print('Parameters estimated using minimize :', opt.x)
print('Parameters estimated using leastsq :', lst[0])
関連する問題
- 1. Python/Scipy - optimize.creve_fitのシグマをoptimize.leastsqに実装する
- 2. バインドとアンギュラ2の差の差
- 3. 値の差とタイムスタンプの差が理想的でないSQLテーブルとの差
- 4. array.countとarray.sizeの差
- 5. DockerFile:ADDとCOPYの差
- 6. グリッドデータとステーションデータの差
- 7. intent.setClass()とintent.setComponent()の差
- 8. 幅とフレックスベースの差
- 9. マスタテーブルとトランザクションテーブルの差
- 10. innodb_log_buffer_sizeとinnodb_buffer_pool_sizeの差
- 11. bcryptの誤差と
- 12. ASRとLSRの差
- 13. オフセットとRVAの差
- 14. $(* [attr])と$([attr])の差
- 15. TensorFlow:EVALとINFERの差
- 16. cir.radiusと(cir.radius)の差
- 17. 'DateTime'と 'DateTimeOffset'の差
- 18. 等しくないベクトルとIDの公差との交差
- 19. thと:thとの差:
- 20. ドキュメントとドキュメントとの差異:
- 21. 差別ブラウザクローズイベントと
- 22. Scalaのメソッドタイプと値の差
- 23. bitbakeのSRC_URIとFILESEXTRAPATHS_prependの差
- 24. Chrome/Firefoxのマイナスマージンボトムパーセントとの差
- 25. strrev()とarray_reverse()のパフォーマンスの差
- 26. ケラスのmodel_weightsとoptimizer_weightsの差
- 27. PHPのNULLとヌルの差
- 28. AndroidのGMTとUTCの差
- 29. active_record_storeとcookie_storeのセッションの差
- 30. LISPのnilと(nil)の差
おかげで、duffymo。だから、最小化アルゴリズムを選択する最良の方法は何ですか?私はoptimize.leastsqとoptimize.fmin_slsqpで少し演奏しましたが、場合によっては少し異なる結果になります。適切なルーチンを選択する「科学的」な方法があるのか、それとも与えられたデータセットに最適なものを見るのが試行錯誤なのか? – gandi2223
試行錯誤と判断。あらゆる場合にユニークな「正しい」答えがないかもしれません。 – duffymo