逻辑回归算法梳理

逻辑回归的原理

当我们希望线性模型的预测值逼近真实标记时,就得到了线性回归模型,而当我们使用线性模型去逼近真实标记的衍生物时,比如我们认为真实标记是在指数尺度上的变化,那么我们可以将输出标记的对数作为线性模型要逼近的目标,即
逻辑回归算法梳理
,变换一下即
逻辑回归算法梳理
也就是说试图是用来逼近输出标记y。
更一般地,考虑单调可微函数g(.),令
逻辑回归算法梳理
,这样得到的模型称为广义线性模型。
线性回归当中我们使用线性模型进行回归学习,如果做分类学习,该怎么做呢?比如二分类任务,即输出标记y∈{0,1},而线性回归模型的预测值z是实数范围内的值,这时候我们可以将z转换为0/1值,最理想的是单位阶跃函数,但单位阶跃函数不连续,无法满足广义线性模型的定义,需要我们找到一个单调可微的函数能近似于单位阶跃函数的作用。
我们发现对数几率函数正好满足我们的需求,
逻辑回归算法梳理
其图像为
逻辑回归算法梳理
将对数几率函数代入广义线性模型中,即得
逻辑回归算法梳理
,也即将线性回归的预测值约束在(0,1)的范围之内。
变换一下上式,可以得到
逻辑回归算法梳理

逻辑回归与线性回归的区别与联系

联系:逻辑回归是通过线性回归模型的预测结果去逼近真实标记的对数几率,即
逻辑回归算法梳理
区别:
1).线性回归是一种回归学习方法,逻辑回归实际上是一种分类学习方法
2).线性回归代价函数采用均方误差,逻辑回归代价函数采用极大似然函数

逻辑回归损失函数的推导及优化

如果我们将上式中的y视为类后验概率估计,则由
逻辑回归算法梳理
可以得到
逻辑回归算法梳理
逻辑回归算法梳理
则样本集的似然函数为
逻辑回归算法梳理
两边同时取对数即
逻辑回归算法梳理
由公式3.1代入上式整理得
逻辑回归算法梳理
求lnL最大值,也就是求-lnL最小值,
逻辑回归算法梳理
对-lnL关于w求偏导得
逻辑回归算法梳理
因为公式3.2是关于w和b的高阶可导连续凸函数,故存在全局唯一最优解,可以采用梯度下降法、牛顿法等方法求解,而证明一个函数是否凸函数对于一维的可以直接使用凸函数定义,对于多维的采用海森矩阵是否正定进行判断。

正则化与模型评估指标

正则化可以理解为一种罚函数法,即对不希望得到的结果施以惩罚,从而使得优化过程趋向于希望目标,Lp范数是常用的正则化项,令
逻辑回归算法梳理
则目标函数 为J(θ)+正则化项。若使用L2范数正则化,则有
逻辑回归算法梳理
其中λ正则化参数大于0,该式称为岭回归。
若使用L1范数正则化,则有
逻辑回归算法梳理
该式称为LASSO回归。
L1范数和L2范数都有助于降低过拟合风险,但前者还会有一个额外的好处,即更易于获得稀疏解,即求得的分量会有更少的非零分量。如图所示。
逻辑回归算法梳理模型评估指标:
均方误差,均方根误差,平均绝对误差,可决系数等。

逻辑回归优缺点

优点:
1)它是直接对分类可能性进行建模,无需事先假设数据分布,这样就避免了假设分布不准确所带来的问题。
2)它不仅是预测出类别,而且可以得到近似概率预测,对于许多需利用概率辅助决策任务很有用。
3)训练速度快。
4)资源占用小,尤其是内存。因为只需要存储各个维度的特征值。
缺点:
1)准确率并不是很高。因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布
2)处理非线性数据较麻烦。逻辑回归在不引入其他方法的情况下,只能处理线性可分的数据。无法解决非线性问题,因为它的决策面是线性的。比如下面这种情况,如果不引入其他方法,就无法用逻辑回归进行正确分类
逻辑回归算法梳理

样本不均衡问题解决办法

1)直接对训练集里的反类样例进行欠采样,即去除一些反例使得正反例数目接近。
2)对训练集里的正类样例进行过采样,即增加一些正例使得正反例数目接近,然后再进行学习
3)直接基于原始训练集进行学习。

sklearn参数

sklearn.linear_model.LogisticRegression(penalty=’l2’,dual=False,tol=0.0001,C=1.0,
fit_intercept=True,intercept_scaling=1,class_weight=None,max_iter=100,multi_class=’ovr’,warm_start=False,n_jobs=1)
penalty:正则化选择参数,参数可选值为l1和l2
dual:用来指明是否将原问题改成其对偶问题
tol:残差收敛条件,默认是0.0001,即收敛的时候,两步之差<0.0001,就停止。
C:正则化系数
fit_intercept:是否将截距/方差加入到决策模型中
class_weight:调节正负样本比例
max_iter=100,算法最大迭代次数
multi_class:分类方法参数选择,有两个值可供选择,ovr和multinomial
warm_start:是否使用上次的模型结果作为初始化,默认是false,表示不使用
n_jobs:并行运算数量,默认是1,如果设置为-1,则表示将电脑的cpu全部用上。