Logistic Regression

一、概述

Logistic Regression是一个二分类的解决方法
𝑦 = 𝜎 (𝑥𝑤 + b)
𝜎:sigmoid or logistic
通过训练可以得到参数w和b,然后得到的值在经过一个sigmoid函数得到一个范围在[0,1]的值,即我们得到的是f:x->p(y|x;𝜃)
如果是小于0.5,就可以被认为是分类0;大于0.5就可以被认为是分类1。

二、回归问题与分类问题的对比

回归问题:
目标:pred = y
即希望模型预测的值与真实值是相等的
方法:minisize dist(pred,y)
通常使用二范数 ∥ \parallel pred-y ∥ 2 \parallel_2 2的平方

分类问题:
目标:使分类的准确率最大
方法:使模型预测出来的概率分布与真实的概率分布之间的差异达到最小,通常可以通过minimize divergence ( p θ ( y ∣ x ) , p r ( y ∣ x ) ) (p_θ(y|x),p_r(y|x)) (pθ(yx),pr(yx))的方法。

这里需要注意到的一个问题是,我们不能通过使准确率最大从而进行调参,因为这样会出现两个问题:
1、gradient为0。当我们进行调参时,预测的概率向正确的方向发生变化,但是分类结果并没有变化,此时准确率是不变的,因此会出现梯度为0的情况。
2、gradient不连续。假如因为调参时概率由原来的0.499变成0.501,使准确率发生了很大的变化,而参数改动很小,会出现梯度爆炸或者不连续的现象。

三、为什么叫逻辑回归而不是逻辑分类

首先,使用的是sigmoid函数,这是一个logistic函数。
其次,在进行调参的过程中,有时候使用MSE进行调参,这与回归使用的方法很相似。但是现在更多的是使用交叉熵函数Cross Entropy时预测的概率分布与真实的概率分布更接近,其实本质还是可以看作是一个分类问题。

四、多分类问题

  • 得到x条件下不同y值的概率
    𝑓:𝑥→𝑝(𝑦|𝑥)
    [𝑝(𝑦=0|𝑥),𝑝(𝑦=1|𝑥),…,𝑝(𝑦=9|𝑥)]
    𝑝(𝑦|x)∈[0,1]

  • 总概率为1
    ∑ i = 0 9 \sum_{i=0}^9 i=09 𝑝(𝑦=𝑖|𝑥)=1

为了使概率和为1,因此使用Softmax函数:
在这里插入图片描述
该函数会放大数值比较大的值与数值小的值的差异,因此叫max。

五、信息熵

在香浓提出的信息熵中是这样定义的:
Entropy = - ∑ P ( i ) l o g P ( i ) \sum P(i)logP(i) P(i)logP(i)
主要意思是概率发生越小的事情,它的信息量是越大的。
该值越大,表示数据越稳定;该值越小,表示数据的差异越大。
在这里插入图片描述

六、交叉熵

分类问题的loss一般有三种:

  • MSE
  • Cross Entropy Loss
  • Hinge Loss(用于SVM)

其中sigmoid+MSE的方法,可能会出现梯度离散的问题,而且在同样的情况下,数据收敛的速度没有cross entropy快。
对于交叉熵损失函数:
在这里插入图片描述
在预测概率比较小的情况下,梯度很大,数据收敛的很快,越接近目标值的时候,收敛速度减慢。

但是在实际应用中,MSE的梯度计算比较简单,因此可能会有更好的效果。

交叉熵函数是这样定义的:
H ( p , q ) = − ∑ p ( x ) l o g 2 q ( x ) H(p,q) = - \sum p(x)log_2 q(x) H(p,q)=p(x)log2q(x)
H ( p , q ) = H ( p ) + D K L ( p ∣ q ) H(p,q) = H(p) + D_{KL}(p|q) H(p,q)=H(p)+DKL(pq)

其中,p是真实的概率分布,q是模型预测的概率分布。
我们的最终目标是使P=Q,这时:
H ( p , q ) = H ( p ) H(p,q) = H(p) H(p,q)=H(p)
对于one-hot编码,H§=0。
所以使H(p,q)最小可以达到我们的目的。

一般数据的分布是固定的,所以我们的目标一般就是最小化 D K L ( p ∣ q ) D_{KL}(p|q) DKL(pq)

七、实例分析

在这里插入图片描述

import torch.nn.functional as F
F.cross_entropy(logit,target)

这里要注意传给cross_entropy的logit是没有经过softmax处理的数据,然后cross_entropy函数会自动先对logit进行softmax,再log,最后再计算nll_loss.
就相当于:

soft_out = F.softmax(logit)
log_soft_out = torch.log(soft_out)
loss = F.nll_loss(log_soft_out, target)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值