pymc3 SQLite 后端,指定要跟踪的变量列表

pymc3 SQLite backend, specify list of variables to track

我正在拟合一个分层模型,其中一个变量的形状>10K,并且该模型需要 500+k 个样本才能收敛。我想使用持久性后端进行跟踪,以便以后比较不同的模型。 我尝试使用 SQLite 后端,但出现以下错误:

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

OperationalError: too many columns on individual_freq

我假设这是因为我正在尝试为我的所有变量保存跟踪,包括形状>10K 的矢量变量。我不 need/want 保存向量的跟踪 - 我只对顶级变量感兴趣。 使用内存后端时,我可以像这样明确指定变量列表:

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])

可能吗?这应该是一个功能请求吗? 感谢您的任何建议。

SQLite 初始化方法中有一个 vars 参数:

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