3

我正在拟合一个分层模型,其中一个变量的形状>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(自我,链):

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

3

SQLite init 方法中有一个 vars 参数:

backend = SQLite('beta_poisson_monthly_drop.sqlite',
                 vars=[alpha,beta,uplift,mo_drop])
trace = pm.sample(1000000, step, progressbar=False, trace=backend)
于 2015-12-24T16:41:23.463 回答