使用PYMC3 / Theano的贝叶斯分类器组合索引问题

时间:2017-08-07 16:11:55

标签: bayesian pymc3

我一直在努力研究如何根据PYMC3中的Kim, Ghahramani (2012)定义贝叶斯分类器组合的模型(参见下面的有向图模型(本文图1))

Directed Graphical Model image

我们的想法是,对于每个k分类器混淆矩阵pi_k,你有一个指数先验参数alpha_k,它们是从Dirichlet中采样的。

类似地,对于从Multinomial生成的生成的目标t_i值,我们有一个Dirichlet先验。然后,调整t_i的值,我们从Multinomial中对分类器输出c_i进行采样。

不幸的是,考虑到目标t的值,我无法弄清楚如何索引混淆矩阵pi。 (我使用了分类分布而不是Multinomial)。变量c_train是长度为k = 4个numpy形状阵列(I = 100,)的列表,对应于来自分类器的分类。

I = 100 # number of instances
J = 3 # number of classes 
K = 4 # number of classifiers
nu_vec = np.array([1. for _ in range(J)], dtype=np.float32)
lambda_mat = np.array([[.01, .02, .03], [.04, .05, .06], [.07, .08, .09]], dtype=np.float32)

with pm.Model() as model:

        p_vec = pm.Dirichlet(name='p_vec', a=nu_vec)

        t = pm.Categorical(name='t', p=p_vec, shape=I)

        alpha = [pm.Exponential('alpha_{}'.format(k), lam=lambda_mat, shape=(J, J)) for k in range(K)]

        pi = [[pm.Dirichlet('pi_j{}k{}'.format(j, k), alpha[k][j], shape=(3)) for j in range(J)] for k in range(K)]

        c = [[] for k in range(K)]

        for i in range(I):

            for k in range(K):

                c[k].append(pm.Categorical('c_k{}i{}', p=pi[k][t[i]], observed=c_train[k][t[i]]))

上面的代码返回一个TypeError:list索引必须是整数或切片,而不是FreeRV。非常感谢任何建议或帮助!

0 个答案:

没有答案