pytorch学习笔记(九)————logistic regression逻辑回归

  • 目录
  • 回顾--线性回归与逻辑回归
  • 二分类
  • 分类与回归问题的目标和实现方法对比
  • Q1:分类问题为什么不最大化accuracy?
  • Q2:为什么叫做逻辑回归
  • 二分类的具体做法
  • 多分类的具体做法


目录

回顾–线性回归与逻辑回归

pytorch逻辑回归损失值突然上升 pytorch 逻辑回归二分类_线性回归


在之前的课程中我们学过了linear regression(线性回归),y=xw+b是一个线性函数且输出是一个连续的值,所以叫做线性回归。

如果输出再经过一个sigmoid函数,输出值的范围限制在0-1之间,输出的值变成概率值。这个操作叫做逻辑回归。当概率趋近于0,输出0,当概率趋近1,输出1,因此可以理解逻辑回归为一个分类问题。

二分类

pytorch逻辑回归损失值突然上升 pytorch 逻辑回归二分类_pytorch逻辑回归损失值突然上升_02


二分类问题过程如上,输入一个x经过函数f 分别得到输出y=0和1的概率,根据概率判断输入的类别。

分类与回归问题的目标和实现方法对比

pytorch逻辑回归损失值突然上升 pytorch 逻辑回归二分类_线性回归_03


对于回归问题(输出的值是连续值的问题)而言,目标是使得预测值pred尽可能接近真实值y。解决这一问题的方法是通过最小化,pred和y之间的欧式距离。

对于分类问题(输出的值是离散值,如二分类输出0或1)而言,目标是使得accuracy尽可能高,但是解决这一问题的方法并不是通过最大化accuracy,而是最小化输入x经过预测模型得到输出y的概率与输入x得到y的真实概率之间的距离。

Q1:分类问题为什么不最大化accuracy?

pytorch逻辑回归损失值突然上升 pytorch 逻辑回归二分类_二分类_04


这样做会有两个问题:

1.假如优化了权重w之后输出从0.4变成0.5,但是由于是分类问题是小于0.5 都按照0类处理,大于0.5都按照1类处理,所以此时accuracy并没有改变,对于accuracy的梯度为0不变,没法优化。

2.假如优化了w之后输出从0.499变成0.5,此时分类由0类变成1类,权重参数只改变了一点,但是accuracy则不连续变化,相当于一个阶梯函数,导致梯度不连续。

Q2:为什么叫做逻辑回归

pytorch逻辑回归损失值突然上升 pytorch 逻辑回归二分类_多分类_05


1.为什么叫逻辑?

“逻辑回归”的“逻辑”不是讲话很有逻辑那个逻辑,而是跟0和1有关系的那个“逻辑”。

例如:逻辑运算,逻辑门(见下图)。学过数字电路的同学一定对下图不陌生。

pytorch逻辑回归损失值突然上升 pytorch 逻辑回归二分类_pytorch逻辑回归损失值突然上升_06

逻辑回归使用了sigmoid函数,sigmoid函数的引入则是为了解决阶跃函数存在的一些问题,是用来做二元分类的,不是0就是1,所以谓之“逻辑”。
2.为什么叫回归?
由于是二分类问题,不涉及连续值输出,回归这个说法一直存在争议。
如果loss采用MSE的话,由于优化目标是pred与y的均方差,输出pred是一个连续值,可以看成是回归问题。
如果loss采用交叉熵的话,由于优化目标是输出类别(0和1中取)与真实类别的交叉熵,可以看成是分类问题。
当时还没有出现交叉熵作为优化目标,所以被称为逻辑回归。

二分类的具体做法

pytorch逻辑回归损失值突然上升 pytorch 逻辑回归二分类_线性回归_07

多分类的具体做法

(1)多分类的输出要具备的条件:

1.经过x模型f后输出每个分类对应的概率

pytorch逻辑回归损失值突然上升 pytorch 逻辑回归二分类_二分类_08


2.每个概率取值范围0-1

3.所有概率之和为1

pytorch逻辑回归损失值突然上升 pytorch 逻辑回归二分类_pytorch逻辑回归损失值突然上升_09


(2)使用softmax函数实现符合要求的输出

pytorch逻辑回归损失值突然上升 pytorch 逻辑回归二分类_二分类_10


使用softmax函数可以把输出经过处理,所有输出的值满足多分类所需要的三个条件。同时softmax把输出进一步扩大,如输入1输出0.2,输入2输出0.7,差距从两倍扩大成为3.5倍,这也是softmax函数名称的由来。