私は、Pythonで関数を持っている:関数のヤコビ行列とヘッセ行列を数値的に近似するにはどうすればよいですか?
def f(x):
return x[0]**3 + x[1]**2 + 7
# Actually more than this.
# No analytical expression
それはベクトルのスカラー値関数です。
この関数のヤコビ行列とヘッセ行列をnumpyまたはscipyで数値的に近似するにはどうすればよいですか?
私は、Pythonで関数を持っている:関数のヤコビ行列とヘッセ行列を数値的に近似するにはどうすればよいですか?
def f(x):
return x[0]**3 + x[1]**2 + 7
# Actually more than this.
# No analytical expression
それはベクトルのスカラー値関数です。
この関数のヤコビ行列とヘッセ行列をnumpyまたはscipyで数値的に近似するにはどうすればよいですか?
(この空間にアップデートの多くがあったためだ後半2017年に更新しました。)
あなたの最善の策は、おそらくautomatic differentiationです。これは多くのパッケージがあります。ディープラーニングの標準的なアプローチです:
別のオプションは、基本的には(f(x + eps) - f(x - eps))/(2 * eps)
を評価する(しかし、明らかにそれよりも、それに入れてより多くの努力で)、finite differencesでそれを近似することです。これはおそらく、特に中程度の高次元では、他のアプローチよりも遅く、正確さが劣りますが、完全に一般的であり、コードを変更する必要はありません。 numdifftools
はこれの標準的なPythonパッケージのようです。
SymPy
で完全に象徴的な派生派を見つけることもできますが、これは比較的手作業のプロセスです。
私が見つけた最も便利な方法は、適切なループの中で、興味のある機能をカリングするためのラムダでscipy.misc.derivativeでした。
グラディエントには 'scipy.optimize.optimize.approx_fprime'があり便利です。 – taper