Sklearn 中二分类问题的交叉熵计算
二分类问题的交叉熵
在二分类问题中, 损失函数 (loss function) 为交叉熵 (cross entropy) 损失函数. 对于样本点 (x,y) 来说, y 是真实的标签, 在二分类问题中, 其取值只可能为集合{0, 1}. 我们假设某个样本点的真实标签为 yt, 该样本点取 yt=1 的概率为 yp, 则该样本点的损失函数为
\[-log(yt|yp)=-(ytlog(yp)+(1-yt)log(1-yp))\]
对于整个模型而言, 其损失函数就是所有样本点的损失函数的平均值. 注意到, 对于该损失函数, 其值应该为非负值, 因为 yp 的取值在 (0,1) 之间.
自己实现的方法有问题?
在 Python 的 sklearn 模块中, 实现二分类问题的交叉熵损失函数为 log_loss(). 我们尝试着运行官网中给出的例子, 同时, 用自己的方法实现该损失函数, 其 Python 代码如下:fromsklearn.metricsimportlog_loss
frommathimportlog# 自然对数为底
# 二分类的交叉熵损失函数
# 利用 sklearn 模块的计算结果
y_true=[0,0,1,1]
y_pred=[[.9,.1],[.8,.2],[.3,.7],[.01,.99]]
sk_log_loss=log_loss(y_true,y_pred)
print('Loss by sklearn: %s.'%sk_log_loss)
# 利用公式计算得到的结果
Loss=0
forlabel,probinzip(y_true,y_pred):
Loss-=(label*log(prob[0])+(1-label)*log(prob[1]))