Theano - 按组求和
Theano - Sum by group
我正在为 Theano 开发自定义似然函数(尝试拟合条件逻辑回归。)
可能性需要按组对值求和。在 R 中我们有 "ave()" 函数,在 Python Pandas 中我们有 "groupby()"。我如何在 Theano 中做类似的事情?
编辑了更多细节
我想创建一个 cox 比例风险模型(与条件逻辑回归相同。)对数似然需要按组计算值的总和:

在 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),这应该可以工作。
我正在为 Theano 开发自定义似然函数(尝试拟合条件逻辑回归。)
可能性需要按组对值求和。在 R 中我们有 "ave()" 函数,在 Python Pandas 中我们有 "groupby()"。我如何在 Theano 中做类似的事情?
编辑了更多细节
我想创建一个 cox 比例风险模型(与条件逻辑回归相同。)对数似然需要按组计算值的总和:
在 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),这应该可以工作。