【发布时间】:2015-10-24 17:06:32
【问题描述】:
我正在尝试学习如何使用 Theano。我经常使用生存分析,因此我想尝试使用 Theano 的自动微分和梯度下降来实现标准生存模型。我尝试实现的模型称为 Cox 模型,这里是维基百科文章:https://en.wikipedia.org/wiki/Proportional_hazards_model
非常有帮助,他们在那里编写了部分似然函数,这是在估计 Cox 模型的参数时最大化的函数。我对 Theano 很陌生,因此在实现这个成本函数时遇到了困难,所以我正在寻找一些指导。
这是我到目前为止编写的代码。我的数据集有 137 条记录,这也是我硬编码该值的原因。 T 指的是张量模块,W 指的是维基百科文章所说的 beta,status 是维基百科所说的 C。其余变量与维基百科的符号相同。
def negative_log_likelihood(self, y, status):
v = 0
for i in xrange(137):
if T.eq(status[i], 1):
v += T.dot(self.X[i], self.W)
u = 0
for j in xrange(137):
if T.gt(y[j], y[i]):
u += T.exp(T.dot(self.X[j], self.W))
v -= T.log(u)
return T.sum(-v)
不幸的是,当我运行这段代码时,我不幸遇到了无限递归错误,我希望不会发生这种错误。这让我觉得我没有以 Theano 想要的方式实现这个成本函数,所以我希望得到一些关于如何改进这个代码以使其工作的指导。
【问题讨论】:
标签: python optimization machine-learning theano