Python 无成本函数

Python 无成本函数,python,optimization,machine-learning,theano,Python,Optimization,Machine Learning,Theano,我正在努力学习如何使用Theano。我经常使用生存分析,因此我想尝试使用Theano的自动微分和梯度下降实现一个标准的生存模型。我试图实现的模型称为考克斯模型,以下是维基百科的文章: 非常有用的是,他们在那里写了部分似然函数,这是在估计Cox模型参数时最大化的函数。我对Theano是一个新手,因此在实现这个成本函数时遇到了困难,因此我正在寻求一些指导 这是我到目前为止编写的代码。我的数据集有137条记录,因此我硬编码了该值。T表示张量模,W表示维基百科文章称之为beta,status表示维基百科

我正在努力学习如何使用Theano。我经常使用生存分析,因此我想尝试使用Theano的自动微分和梯度下降实现一个标准的生存模型。我试图实现的模型称为考克斯模型,以下是维基百科的文章:

非常有用的是,他们在那里写了部分似然函数,这是在估计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希望的方式实现这个代价函数,因此我希望获得一些关于如何改进代码以使其工作的指导

您正在混合符号和非符号操作,但这不起作用

例如,
T.eq
返回一个不可执行的符号表达式,表示为了相等而比较两个事物的想法,但实际上它并不在那里进行比较
T.eq
实际上返回一个表示相等比较的Python对象,并且由于非
None
对象引用被认为与Python中的
True
相同,因此执行将始终在if语句中继续

如果需要构造包含条件的Theano计算,则需要使用其两个符号条件操作之一:
T.switch
Theano.ifelse.ifelse

您还使用了Python循环,这可能不是您所需要的。要构造显式循环的Theano计算,需要使用。然而,如果你能用矩阵运算(点积、约化等)来表达你的计算,那么它将比使用扫描的东西运行得快得多


我建议您在尝试从头开始实现一些复杂的操作之前再进行一些操作。

您正在混合符号和非符号操作,但这不起作用

例如,
T.eq
返回一个不可执行的符号表达式,表示为了相等而比较两个事物的想法,但实际上它并不在那里进行比较
T.eq
实际上返回一个表示相等比较的Python对象,并且由于非
None
对象引用被认为与Python中的
True
相同,因此执行将始终在if语句中继续

如果需要构造包含条件的Theano计算,则需要使用其两个符号条件操作之一:
T.switch
Theano.ifelse.ifelse

您还使用了Python循环,这可能不是您所需要的。要构造显式循环的Theano计算,需要使用。然而,如果你能用矩阵运算(点积、约化等)来表达你的计算,那么它将比使用扫描的东西运行得快得多

我建议您在尝试从头开始实现复杂的东西之前,再进行一些工作