二分类logloss不降的原因及分析

当二分类loss在0.693并且一直不降的时候,就应该意识到模型出问题了,当然可能是你的模型结构出问题或者设置的参数不合适。三个问题,logloss是可以大于1的吗?它的正常范围应该是多少?一般多小的logloss算是好的分类器?

logloss可以大于1,但是对于二元分类来说,大于1说明这个模型是比较糟糕。

回顾一下loglosslogloss的公式

其中n是测试样本的个数,pi为预测第i个样本为阳性的概率,yi表示第i个预测样本的真实标签(1代表阳性,-1代表阴性)。

我一开始就说了大于1的logloss是很差的。0.8依然很差。我凭什么这么说?

假如我们现在有个训练集,100万个数据点,其中10万个为阳性,那么总体上每个样本为1的概率可近似认为是0.1。通常来说,测试集的分布是非常接近于训练集的,那么测试集中大概有10%的样本为阳性。如果我们预测测试集中每个样本为1的概率都为0.1,那么logloss会是多少呢?

假如总体分布是每个样本以p的概率为阳性,我们预测每个样本为阳性的概率都为p,也就是pi=p,那么logloss是多少呢?

很显然

所以最差的情况就是,样本正好是一半阳性一半阴性,此时你按照上面方面预测(乱猜)出的logloss是0.693。所以当loss是0.693,差不多就说明模型已经混乱了。当然上面的情况是在KL散度等于0的情况下得出的,解释如下:

reference:

http://sofasofa.io/forum_main_post.php?postid=1000508

二分类的Focal Loss是一种针对于类别不平衡问题的损失函数,它通过调节正负样本的权重来缓解类别不平衡问题。下面是二分类场景下Focal Loss的原理解释和Pytorch实现的步骤: 1. Focal Loss的原理解释 在二分类场景下,Focal Loss的计算公式如下: $FL(p_t) = -\alpha_t(1-p_t)^\gamma log(p_t)$ 其中,$p_t$表示模型预测样本为正样本的概率,$\alpha_t$表示样本的权重,$\gamma$是一个可调节的超参数,用于调节难易样本的权重。当$\gamma=0$时,Focal Loss退化为交叉熵损失;当$\gamma>0$时,Focal Loss会降低易分类样本的权重,增加难分类样本的权重,从而提高模型对于难分类样本的学习能力。 2. Pytorch实现二分类Focal Loss的步骤 (1)定义Focal Loss类 ```python import torch.nn as nn import torch.nn.functional as F class BinaryFocalLoss(nn.Module): def __init__(self, alpha=0.25, gamma=2): super(BinaryFocalLoss, self).__init__() self.alpha = alpha self.gamma = gamma def forward(self, inputs, targets): BCE_loss = F.binary_cross_entropy_with_logits(inputs, targets, reduction='none') pt = torch.exp(-BCE_loss) FL_loss = self.alpha * (1 - pt) ** self.gamma * BCE_loss return FL_loss.mean() ``` (2)调用Focal Loss类 ```python import torch # 定义模型输出和标签 inputs = torch.randn(3, 1, requires_grad=True) targets = torch.tensor([1, 0, 1]) # 定义Focal Loss riterion = BinaryFocalLoss(alpha=0.25, gamma=2) # 计算损失 loss = criterion(inputs, targets) print(loss) ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值