2016-11-23 13 views
1

私は現在、-log尤度表現を最小限に抑えるためにscipy.optimise.minimise()メソッドを使用しています:)(scipy.optimise.minimiseを用いた同時フィット/最小化を実行

param_array = np.array([ 
      0.5, # beta1 
      0.5 # beta2 
      ]) 

def f(param_array): 

     great_bayesian = -sum(np.log(binomial.pmf(t_g_c, t_g_t, (param_array[0] + historical_t_g_c)/(param_array[0] + param_array[1] + historical_t_g_t)))) 

     return great_bayesian 

beta_opt = optimize.minimize(f,param_array,method='SLSQP', constraints=cons) 

とき、私の方法は、素晴らしい作品1つのデータフレームで単一の可能性を最小限に抑え、ベータ1とベータ2の最良推定値を正しく決定したいと考えています。

しかし、私は複数のデータフレームに同時に適合し、ベータ1とベータ2の総合的な最良推定値の1セットを取得したいと思います。

私はこれを行う方法がわかりませんが、解決された問題でなければならないと確信しています。どんな指導も大歓迎です!

+0

「同時に」マルチプロセッシングを指していますか?それとも単にdfをもっと使いたいのですか?いくつかの説明が参考になります。 – Leo

+0

ああ、あなたが今何を求めているのか分かります。答えが出てくる。 – Leo

答えて

2

「args」引数を使用して、最小化する関数に追加の引数を渡すことができます。

参考:ご例えばhttps://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.minimize.html

あなたが変更したい引数を取るために、F(...)を再定義する必要があります。次に、scipy.minimizeへの呼び出しを変更して、f(...)に渡す追加の引数をタプルとして提供します。ここでの唯一の制限は、最小化しているパラメータの配列が最初の引数になるようにf(...)を定義する必要があることです。

ここでは、(テストされていない)コードの変更があります。私はあなたの議論に接頭辞 "some_"を付け加えて、ここでそれらを変更できることを示しました。

param_array = np.array([ 
      0.5, # beta1 
      0.5 # beta2 
      ]) 

def f(param_array, team_great_conv, team_great_tot, historical_team_great_conv, historical_team_great_tot): 

     great_bayesian = -sum(np.log(binomial.pmf(team_great_conv, team_great_tot, (param_array[0] + historical_team_great_conv)/(param_array[0] + param_array[1] + historical_team_great_tot)))) 

     return great_bayesian 

beta_opt = optimize.minimize(f, param_array, 
          args=(some_team_great_conv, 
            some_team_great_tot, 
            some_historical_team_great_conv, 
            some_historical_team_great_tot,), 
          method='SLSQP', constraints=cons) 
+0

ありがとう、@レオ...今私はそれを実装に行くだろう。とても有難い! –

+1

問題が解決されれば、答えとして受け入れることができれば幸いです。 – Leo

+0

もちろん。問題ない –

関連する問題