二分类问题的交叉熵函数和多分类问题的交叉熵函数

二分类问题的交叉熵损失函数;

   在二分类问题中,损失函数为交叉熵损失函数。对于样本(x,y)来讲,x为样本 y为对应的标签。在二分类问题中,其取值的集合可能为{0,1},我们假设某个样本的真实标签为yt,该样本的yt=1的概率为yp,则该样本的损失函数为:

                    log(yt|yp) = - (yt*log(yp) + (1 - yt)log(1 - yp))  

如果对于整个数据集上的模型而言:其损失函数就是所有样本的点的损失函数的平均值。

多分类的问题的函数交叉熵损失函数:

在多分类问题中,损失函数也是交叉熵损失函数,对于样本(x,y)来讲,y是真实的标签,预测标签为所有标签的集合,我们假设有k个标签值,第i个样本预测为第K个标签的概率为pi,k,一共有N个样本,则总的数据集损失函数为:

                        L_{log}(Y,P) = - {1/N}\sum_{i = 0}^{N - 1}\sum_{k = 0}^{K- 1}y_{i,k}logp_{i,k}  

   下面是二分类和多分类问题的代码:利用sklearn库编写 

from sklearn.metrics import log_loss
from math import log 


y_true = [0,0,1,1]
y_pred = [[.9,.1],[.8,.2],[.2,.8],[.3,.7]]
sk_log_loss = log_loss(y_true,y_pred)
print('Loss by sklearn: %s.'% sk_log_loss)

loss = 0
for lable,prob in zip(y_true,y_pred)
    Loss -= (lable * log(prob[0])+(1-lable)*log(1-prob[1]))
Loss = Loss/len(y_true)
print('Loss by equation: %s.'%Loss)
from sklearn.metrics import log_loss
from sklearn.preprocessing import LabelBinarizer
from math import log

y_true = ['1', '4', '5'] # 样本的真实标签
y_pred = [[0.1, 0.6, 0.3, 0, 0, 0, 0, 0, 0, 0],
          [0, 0.3, 0.2, 0, 0.5, 0, 0, 0, 0, 0],
          [0.6, 0.3, 0, 0, 0, 0.1, 0, 0, 0, 0]]  # 样本的预测概率
labels = ['0','1','2','3','4','5','6','7','8','9'] # 所有标签


# 利用sklearn中的log_loss()函数计算交叉熵
sk_log_loss = log_loss(y_true, y_pred, labels=labels)
print("Loss by sklearn is:%s." %sk_log_loss)

# 对样本的真实标签进行标签二值化
lb = LabelBinarizer()
print(lb.fit(labels))
transformed_labels = lb.transform(y_true)
print(transformed_labels)#转化代码为矩阵

N = len(y_true)  # 样本个数
K = len(labels)  # 标签个数

eps = 1e-15      # 预测概率的控制值
Loss = 0         # 损失值初始化

for i in range(N):
    for k in range(K):
        # 控制预测概率在[eps, 1-eps]内,避免求对数时出现问题
        if y_pred[i][k] < eps:
            y_pred[i][k] = eps
        if y_pred[i][k] > 1-eps:
            y_pred[i][k] = 1-eps
        # 多分类问题的交叉熵计算公式
        Loss -= transformed_labels[i][k]*log(y_pred[i][k])

Loss /= N
print("Loss by equation is:%s." % Loss)

 

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值