0x00 内容
逻辑回归:损失函数、梯度、决策边界
实践:代码实现及sklearn逻辑回归
0x01 逻辑回归
逻辑回归(Logistic Regression,LR),LR的建模过程体现了数据建模中很重要的思想:对问题划分层次,并利用非线性变换和线性模型的组合,将未知的复杂问题分解为已知的简单问题。因此说:理解好逻辑回归的细节,就掌握了数据建模的精髓。
1.1 线性回归是不能解决分类问题
在使用线性回归模型时,实际上做了3个或更多的假设:
1.因变量yi和自变量xi之间呈线性相关;
2.自变量xi与干扰项εi相互独立;
3.没被线性模型捕捉到的随机因素εi服从正态分布。
理论上来说,任何数据放在任何模型里都会得到相应的参数估计,进而通过模型对数据进行预测。但是这并不一定能保证模型效果,因此建模的过程中需要不断提出假设和检验假设。
1.2 用逻辑回归解决分类问题
逻辑回归原理是将样本的特征和样本发生的概率联系起来,即,预测的是样本发生的概率是多少。由于概率是一个数,因此被叫做“逻辑回归”。
在逻辑回归算法中,得到的预测值是一个概率,在概率的基础上设置一个阈值,即完成分类。(逻辑回归只能解决二分类问题,如果是多分类问题,LR本身是不支持的。)
0x02 LR算法数学推导
参考阅读1.《出场率No.1的逻辑回归算法,是怎样“炼成”的?》(0x02 LR算法数学推导)
逻辑回归是解决分类问题的,本质是求概率再分类。在分类结果的背后是隐藏变量的博弈,我们认为隐藏变量与特征是线性相关的,因此就可以对隐藏变量之差求概率(得到随机变量的累积分布函数),得到probit回归模型。为了使数学公式更为简单,使用sigmoid函数去近似,最终得到逻辑回归模型:
数学家们发现:正态分布在线性变换下保持稳定,而逻辑分布可以很好地近似正态分布。因此可以使用标准逻辑分布的累积分布函数σ(t)来替换正态分布的累积分布函数Fε(t)。
0x03 逻辑回归的损失函数
3.1 推导
逻辑回归和线性回归最大的区别就是:逻辑回归解决的是分类问题,得到的y要么是1,要么是0。而我们估计出来的p是概率,通过概率决定估计出来的p到底是1还是0。因此,也可以将损失函数分成两类:
如果给定样本的真实类别y=1,则估计出来的概率p越小,损失函数越大(估计错误)
如果给定样本的真实类别y=0,则估计出来的概率p越大,损失函数越大(估计错误)
可以使用如下函数:
求整个集合内的损失可以取平均值:
替换成sigmoid函数,得到逻辑回归的损失函数如下:
3.2 另一种推导
逻辑回归的损失函数是根据逻辑回归本身式子中系数的最大似然估计推导而来的。 (最大似然估计就是通过已知结果去反推最大概率导致该结果的参数。极大似然估计是概率论在统计学中的应用,它提供了一种给定观察数据来评估模型参数的方法,即 “模型已定,参数未知”,通过若干次试验,观察其结果,利用实验结果得到某个参数值能够使样本出现的概率为最大,则称为极大似然估计。)
逻辑回归是一种监督式学习,是有训练标签的,就是有已知结果的,从这个已知结果入手,去推导能获得最大概率的结果参数,只要我们得出了这个参数,那我们的模型就自然可以很准确的预测未知的数据了。
逻辑回归的损失函数如下: (推到过程参考《逻辑回归的本质及其损失函数的推导、求解》0x02.2)
0x04 损失函数的梯度
0x05 决策边界
5.1决策边界
5.2 线性&非线性决策边界
所谓决策边界就是能够把样本正确分类的一条边界,主要有线性决策边界(linear decision boundaries)和非线性决策边界(non-linear decision boundaries)。(注意:决策边界是假设函数的属性,由参数决定,而不是由数据集的特征决定。)
0x06 逻辑回归的非线性决策边界
线性回归转换成多项式回归
让逻辑回归学习非直线的决策边界,引入多项式项,转换成线性回归问题:从(x^2)特征来说来说还是线性边界,针对于x来说变成了非线性的圆形决策边界。这就从线性回归转换成多项式回归,同理为逻辑回归添加多项式项,就可以对非线性的方式进行比较好的分类,决策边界就是曲线的形状。
0x07 逻辑回归中使用正则化
在逻辑回归中添加多项式项,从而得到不规则的决策边界,对非线性的数据进行很好的分类。添加多项式项之后,模型会变变得很复杂,非常容易出现过拟合,因此就需要使用正则化。
对损失函数增加L1正则或L2正则。可以引入一个新的参数 α来调节损失函数和正则项的权重,如:J(θ)+α(L1)。
如果在损失函数前引入一个超参数C,即C.J(θ)+L1,如果C越大,优化损失函数时越应该集中火力,将损失函数减小到最小;C非常小时,此时L1和L2的正则项就显得更加重要。其实损失函数前的参数C,作用相当于参数α前的一个倒数。在逻辑回归中,对模型正则化更喜欢使用C.J(θ)+L1这种方式。
7.2 模型的正则化
7.2.1 L2正则
使用参数C进行模型正则化,在构建管道时,用参数C去覆盖。同时在生成多项式逻辑回归实例参数时,同样设置阶数为20,然后设置一个比较小的损失函数的权重参数C=0.1,相当于让模型正则化的项起到更大的作用,让分类准确度损失函数起到小一点的作用。
0x08 回顾(面试问题)
面试问题:为什么要使用sigmoid函数作为假设?
可以回答:因为线性回归模型的预测值为实数,而样本的类标记为(0,1),我们需要将分类任务的真实标记y与线性回归模型的预测值联系起来,也就是找到广义线性模型中的联系函数。如果选择单位阶跃函数的话,它是不连续的不可微。而如果选择sigmoid函数,它是连续的,而且能够将z转化为一个接近0或1的值。