LR模型可以被认为就是一个被Sigmoid函数(logistic方程)所归一化后的线性回归模型
LR模型常用于二分类问题,假设我们要根据已知特征和label的样本数据构建分类模型,假设我们想要建立一个线性模型,根据这个线性模型的结果进行类别划分,但是这个线性模型的值是位于实数轴上的,因此我们可以通过Sigmoid函数将线性模型的结果映射到[0,1]区间内,这样通过设定阈值,我们就可以根据阈值和映射得到的函数结果对样本类别进行划分。
通过sigmoid函数映射得到的[0,1]区间内的值我们可以看作类别为1的概率值。
那么问题就转化为如何求解线性模型的参数。
LR回归给我的直观感受就是 它利用Sigmoid的一些性质,使得线性回归(多项式回归)从拟合数据神奇的转变成了拟合数据的边界,使其更加有助于分类!
逻辑回归也可以视为一个广义的线性模型,那么线性模型中应用最广泛的代价函数-误差平方和函数,可不可以应用到逻辑回归呢?首先告诉你答案:是不可以的!因为这样得到的损失函数是非凸的,这样的函数拥有多个局部极小值,这就会使得我们在使用梯度下降法求解函数最小值时,所得到的结果并非总是全局最小,而有更大的可能得到的是局部最小值。
最终的代价函数:采用了极大似然函数的方式进行计算
优点
- 实现简单,广泛的应用于工业问题上;
- 速度快,适合二分类问题
- 简单易于理解,直接看到各个特征的权重
- 能容易地更新模型吸收新的数据
- 对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题;
缺点:
- 当特征空间很大时,逻辑回归的性能不是很好;
- 容易欠拟合
- 不能很好地处理大量多类特征或变量;
- 使用前提: 自变量与因变量是线性关系。
逻辑回归的python实现思路:
(1)前向计算 :首先给定一个初始化权重,利用逻辑回归的计算公式以及x的值计算wx+b,然后根据sigmoid公式映射得到逻辑回归的值
(2)梯度下降进行权重调整:1 确定梯度下降方法:采用批梯度下降还是随机梯度下降还是小批量梯度下降(?这里可以先选择批梯度下降)2 确定学习率 3 根据损失函数计算梯度公式 4 确定梯度更新公式 w=w-lr*均值(d(L)/d(w))
如果这里选择随机梯度下降,则梯度更新公式为w=w-lr*每个样本的(d(L)/d(w))
下面是一个简单的代码(错的,梯度更新公式没算)
def sigmoid(x):
return 1/(1+math.exp(-x))
def lr(x,y,iter=1000,lr):
w=0
for i in range(iter):
y_=sigmoid(x*w)
w=w-lr*
return y_
这里引入了梯度下降的几种方法,一个简单介绍:
批量梯度下降:得到的是一个全局最优解,但是每迭代一步,都要用到训练集所有的数据,如果m很大,那么可想而知这种方法的迭代速度。每迭代一次,使用了所有的样本,而且可能这个梯度下降的效果跟用一个样本梯度下降一次的效果差不多,所以效率比较低。但是,整体来看,使用全体数据进行迭代,可以得到全局最优解。
随机梯度下降:通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的
小批量梯度下降法:它的具体思路是在更新每一参数时都使用一部分样本来进行更新,也就是方程(1)中的m的值大于1小于所有样本的数量。为了克服上面两种方法的缺点,又同时兼顾两种方法的优点
使用情况:
如果样本量比较小,采用批量梯度下降算法。如果样本太大,或者在线算法,使用随机梯度下降算法。在实际的一般情况下,采用小批量梯度下降算法。