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. 'DateTime'と 'DateTimeOffset'の差
- 4. cir.radiusと(cir.radius)の差
- 5. オフセットとRVAの差
- 6. innodb_log_buffer_sizeとinnodb_buffer_pool_sizeの差
- 7. DockerFile:ADDとCOPYの差
- 8. マスタテーブルとトランザクションテーブルの差
- 9. array.countとarray.sizeの差
- 10. intent.setClass()とintent.setComponent()の差
- 11. ドキュメントとドキュメントとの差異:
- 12. 差別ブラウザクローズイベントと
- 13. Scalaのメソッドタイプと値の差
- 14. active_record_storeとcookie_storeのセッションの差
- 15. テラデータのマイナスとの差は
- 16. PHPのNULLとヌルの差
- 17. ブーストのirangeとcounting_rangeの差
- 18. AndroidのGMTとUTCの差
- 19. 差xp_sendmailとsp_send_dbmail proc
- 20. getchは差()と_getch()
- 21. 接続とアプリケーションプールIDの差
- 22. JFrame.repaint()とJPanel.repaint()の差異
- 23. Linq配列との交差
- 24. 差異のタイムゾーンブラウザとJava
- 25. '返品'と '純粋'の差
- 26. d3:ソートと昇順の差
- 27. haddockとの差分ドキュメント
- 28. stdoutの差= subprocess.PIPEとstdout = PIPE
- 29. iPhone SDK2.0とSDK3.0の差異
- 30. 交差軸とラベルのmatlab
おかげで、duffymo。だから、最小化アルゴリズムを選択する最良の方法は何ですか?私はoptimize.leastsqとoptimize.fmin_slsqpで少し演奏しましたが、場合によっては少し異なる結果になります。適切なルーチンを選択する「科学的」な方法があるのか、それとも与えられたデータセットに最適なものを見るのが試行錯誤なのか? – gandi2223
試行錯誤と判断。あらゆる場合にユニークな「正しい」答えがないかもしれません。 – duffymo