3

1 つの変数の形状が 10K を超え、モデルが収束するために 500+k サンプルが必要な階層モデルを当てはめています。後で異なるモデルを比較できるように、トレースに永続的なバックエンドを使用したいと考えています。SQLite バックエンドを使用しようとしましたが、次のエラーが発生しました。

/opt/conda/lib/python2.7/site-packages/pymc3/backends/sqlite.pyc in _create_table(self) 123 ステートメント = template.format(table=varname, 124 value_cols=colnames) --> 125 self.db .cursor.execute(ステートメント) 126 127 def _create_insert_queries(self, chain):

OperationalError: individual_freq の列が多すぎます

これは、形状が 10K を超えるベクトル変数を含むすべての変数のトレースを保存しようとしているためだと思います。ベクトルのトレースを保存する必要はありません/保存したくありません-最上位の変数にのみ関心があります。メモリ バックエンドを使用する場合、次のように変数のリストを明示的に指定できます。

trace = pm.sample(1000000, step, start=start, progressbar=False,   
                  trace=[alpha,beta,uplift,mo_drop])

しかし、SQLite を使用する場合は、次のものしか指定できません。

backend = SQLite('beta_poisson_monthly_drop.sqlite')
trace = pm.sample(1000000, step, progressbar=False,
                  trace=backend)

私がやりたいことは、次のようなものです:

backend = SQLite('beta_poisson_monthly_drop.sqlite')
trace = pm.sample(1000000, step, progressbar=False,
                  trace=backend, vars=[alpha,beta,uplift,mo_drop])

出来ますか?これは機能のリクエストでしょうか? アドバイスをありがとう。

4

1 に答える 1