我正在研究Theano的自定义似然函数(尝试拟合条件逻辑回归。)
可能性需要按组 按 对值进行求和。在R中我们有" ave()"函数,在Python Pandas中我们有" groupby()"。我怎么在Theano做类似的事情?
修改了更多详情
我想创建一个cox比例风险模型(与条件逻辑回归相同。)对数似然需要按组的总和:
在熊猫中,这将是:
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
在熊猫中这很容易做到。我怎样才能在Thano做类似的事情?当然,可以写一个nexted循环,但这似乎很慢,我尽量避免手动编码循环,因为它们很慢。
谢谢!
答案 0 :(得分:2)
假设你有" 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),这个就应该有效。