Logistic回归模型

Logistic回归的诞生

一般的线性回归模型也是可以分类的,虽然y值是连续的,但结合分段函数来实现,比如:y>=0为A类,y<0为B类。在y值离散的情况下,拟合出的线性回归模型的表现是非常差的。

如果凑巧样本如图1所示,那么线性回归模型能表现得如我们预期。但样本改变,原有的分段函数得出的分类结果就会很糟糕。所以对于离散的y值,线性回归模型不太适用,因此有了Logistic回归模型。


图1
图2


一、Logistic回归原理

Logistic回归模型起源于Logistic分布函数,它是一种分类函数,包括二分类和多分类。

在二分类模型中,y的取值只有0和1,以ln(p/(1-p))与自变量建立线性关系。p/(1-p)被称作y发生的几率,p是y发生的概率,几率和概率二者意义不同。

简单的Logistic回归模型为:

图3
图4

模型中的自变量可以是复杂的高维多项式,图4中等式右边的式子被称为决策边界,决策边界是由模型参数决定的,并非绘制样本集而得。

在多分类模型中,y的取值可能有0 1 2 3...比如预测天气是多云、下雨、晴朗还是阴天...Logistic回归模型采用的是‘一对’多方法。如三类的情况,需要把其他类都看作一类拟合二分类模型,需要拟合三个分类器。预测的时候,将预测样本分别输入三个分类器,选择概率最大、效率最高的那一个。

图5

在二元的线性模型中,求解损失函数最小会采用最小二乘法,从而得到最优的参数估计值。但在Logistic模型中,求损失函数最小常用的是梯度下降法以及更高级的优化算法。

二、参数估计

梯度下降法是对损失函数求最优的算法,来寻得最优参数向量,其过程为对初始参数向量不断迭代更新。

假设模型中只有两个参数,且损失函数为:

假设我们无法一眼看出参数的值分别为0和1时,损失函数达到最小。首先分别对参数求偏导:

那么用随机梯度下降怎么做呢?梯度下降迭代的公式为:

式子中是二维向量。首先随机给出一对参数值(1,2),并且设定学习率=0.1,那么参数向量的更新过程为:

......

如此迭代下去,直到损失函数收敛,接近一个常数,迭代停止。梯度下降法虽是奔着全局最优去的,但选取初始样本点的不同,得到的结果可能是局部最优解。如下图,分别从两个不同的样本点出发,得到的最优参数不一致。

但对于线性回归模型来说,损失函数总是凸函数,不会出现局部最优的情况,由梯度下降法得到的解总是全局最优的。凸函数如下图,无论从哪个位置开始下降,最终都会落到全局最低点。

另外,在参数迭代的过程中,学习率的选择比较考究。当学习率太小,迭代次数非常多,下降的速度很慢;当学习率太大,参数向量靠近最优点的时候可能会出现梯度爆炸,损失函数会趋于震荡甚至发散,得不到最优解,如下图:

有时候,自变量的取值量级相差很大,也会导致损失函数收敛速度变慢。比如x1的值是四位数,x2的值是两位数,那么代价函数的等值线密度会不规整,迭代次数很大,如下图:

所以需要先进行特征缩放,使变量的值都控制在差不多的范围之内,可以理解为标准化。多数建模过程都需要标准化,来消除量纲给参数带来的影响。

三、python实践

对于Logistic分类模型不仅能预测因变量,还能预测因变量发生的概率。在https://www.jianshu.com/writer#/notebooks/42661243/notes/60250510介绍了决策树模型对销量的预测,并对9个测试样本的结果进行了分析。那么用Logistic模型,对相同的样本,准确率会怎样呢?

预测结果和实际值如下,准确率并没有提高:

你可能感兴趣的:(Logistic回归模型)