一些损失函数的细节知识可以参考本博客的此篇文章:http://www.fashici.com/tech/101.html


其中对数损失函数形式为:



其中p表示预测值,y为实际标签,y取值为0或者1。


当p为0或者为1的时候,log(p)或者log(1-p)会报异常,为了避免报异常,可以对p进行一些特殊处理,细节请参考代码。


对数损失函数的代码如下:

import math


def log_loss(y, p):
    """
    --- Log_loss computing function
    A function to compute the log loss of a predicted probability p given
    a true target y.

    :param y: True target value
    :param p: Predicted probability
    :return: Log loss.
    """
    p = min(max(p, 10e-15), 1. - 10e-15)
    return -math.log(p) if y == 1 else -math.log(1. - p)

if __name__ == "__main__":
    print(log_loss(0, 0))
    print(log_loss(0, 1))
    print(log_loss(1, 0))
    print(log_loss(1, 1))


输出如下:

9.99200722163e-15
32.2369908993
32.2361913019
9.99200722163e-15