Theano - 按组求和

Theano - Sum by group

我正在为 Theano 开发自定义似然函数(尝试拟合条件逻辑回归。)

可能性需要按组对值求和。在 R 中我们有 "ave()" 函数,在 Python Pandas 中我们有 "groupby()"。我如何在 Theano 中做类似的事情?

编辑了更多细节

我想创建一个 cox 比例风险模型(与条件逻辑回归相同。)对数似然需要按组计算值的总和:

\sum{_{g=1}^G

在 Pandas 中,这将是:

temp = df.groupby('groupid')['eta'].aggregate(np.sum)
denominator = np.log(temp).sum()

在数据中,我们有一个包含组 ID 的列,以及要求和的值

group    eta
1        2.1
1        1.8
1        0.9
2        1.2
2        0.75
2        1.42

组总和的输出将是:

group    sum
1        4.8
2        3.37

然后,求和的对数求和:

log(4.8) + log(3.37) = 2.7835

这在 Pandas 中既快速又容易。我怎样才能在 Thano 中做类似的事情?当然,可以编写下一个循环,但这看起来很慢,我尽量避免手动编码循环,因为它们很慢。

谢谢!

假设您有 "X"(所有 etas 的列表),带有暗淡的。 Nx1(我猜)和一个矩阵 H。H 是一个 NxG 矩阵,它具有组的热编码。

你这样写:

import numpy as np
from numpy import newaxis as na
import theano.tensor as T

X = T.vector()
H = T.matrix()

tmp = T.sum(X[:, na] * H, axis=0)
O = T.sum(T.log(tmp))

x = np.array([5, 10, 10, 0.5, 5, 0.5])
# create a 1-hot encoding
g = np.array([1, 2, 2, 0, 1, 0])
h = np.zeros(shape=(len(x), 3))
for i,j in enumerate(g):
    h[i,j] = 1.0

O.eval({X:x, H: h})

只要每个点至少有一个 eta(或者 -inf),这应该可以工作。