不是回归的逻辑回归算法
一、线性回归与逻辑回归的关系
线性回归可以预测连续值,但是不能解决分类问题,我们需要根据预测的结果判定其属于正类还是负类。所以逻辑回归就是将线性回归的结果,通过sigmoid函数映射到之间[1]。
二、线性回归到逻辑回归
(1)sigmoid函数
什么是sigmoid函数?如何将线性回归的结果映射到之间?
由下图sigmoid曲线图可知,值域在,其中z为线性回归预测值
(2)逻辑回归
逻辑回归整体流程:
输入,
权重w组合乘积求和,为;
z代入sigmoid函数结果映射到范围;
通过梯度下降法获得最优参数;
对值域的预测值做分类处理,例如大于0.5,判断分类为1,小于0.5判断分类为0。
三、最优参数组合
如何获得最优的参数组合,是的模型的分类效果最好?
(1)线性回归损失函数
还记得在线性回归中我们定义损失函数J为预测值和实际值的均方误差。
目标是达到最低点,也就是使得损失函数最小,此时的参数就是最优参数,能够使算法预测误差最小,算法的准确性最高。
(2)逻辑回归损失函数
线性回归的损失函数为平方损失函数,如果将其用于逻辑回归的损失函数,则其数学特性不好,有很多局部极小值,难以用梯度下降法求最优。
因此尝试使用极大似然估计的方法推导最优参数[3]
一个连乘的函数显然是不好计算的,我们可以通过两边同事取log的形式让其变成连加
这个函数越大,证明我们得到的W就越好。因为在函数最优化的时候习惯让一个函数越小越好,所以我们在前边加一个负号。
得到逻辑回归的损失函数J
逻辑回归是分类算法, y=0或者1
其中
cost函数曲线分布如下图所示,可见此时的损失函数是理想的效果。
(3)最优参数获得
现以确定逻辑回归的损失函数,使用梯度下降法求解最优参数。
-
首先确定下降最快的方向(偏导)[3](m为数据集规模/y的个数)
-
设置每次下山的跨度(学习率)
学习率 -
更新参数
为了和全文对应,避免引起误解,我们用n表示数据规模/y的数量,用m表示自变量的个数/权重的个数。
四、逻辑回归算法整体流程
模型训练[4]
=====》输入
【数据源】,每个包含m个自变量,对应的分类结果;
【参数设置1】设置一组W的权重初始值
【参数设置2】学习率
【精确度设置】accuracy = 0.00001
【划分阈值】0.5
=====》操作
【操作1】基于X预测yPre
,代入sigmoid函数结果映射到范围,整个数据集计算后得到yPre矩阵
【操作2】基于yPre矩阵和实际值y计算损失值
计算的结果是一个数值oldJ。
【操作3】更新权重
...
【操作4】计算新的损失值
基于更新后的权重进行【操作1】【操作2】,获得新的损失值newJ
【操作5】如果新旧损失值没有很大的差别则退出循环,否则继续【操作1-5】直到newJ == oldJ或|newJ - oldJ|<accuracy才退出循环。
=====》输出
此时的权重为最优参数,此时的逻辑回归算法为。(其中)
如果则判断分类为1,否则判断分类为0
=====》分类预测
当输入新的,代入训练好的逻辑回归模型,可获得预测的分类结果。
五、逻辑回归的重要性
机器学习中,并不是越复杂越好,因为越复杂,解释越难。由于逻辑回归算法应用广,效果好,算法简单。所以:
如果想做分类,
第一步先用逻辑回归试验,看效果。
然后再使用其他算法,如果没有明显优于逻辑回归,则继续使用逻辑回归。
六、参考资料
[1] 线性回归和逻辑回归:https://blog.csdn.net/jiaoyangwm/article/details/81139362
[2] What is the relation between Logistic Regression and Neural Networks and when to use which:https://sebastianraschka.com/faq/docs/logisticregr-neuralnet.html
[3] 逻辑回归:https://blog.csdn.net/weixin_39445556/article/details/83930186
[4]逻辑回归的python实现:https://blog.csdn.net/qq_37667364/article/details/81532339