机器学习算法梳理—逻辑回归

一、逻辑回归由来

逻辑回归与线性回归类似,但它不属于回归分析家族(主要为二分类),而属于分类家族。
有些人可能想了,能不能直接给线性回归一个阈值,大于阈值属于某一类,小于阈值属于另外一类呢。从而来生成一个二分类。即通过线性回归+阈值
举例子说明:

(1)当分类的数据很标准的情况

这里我们套用Andrew Ng老师的课件中的例子,下图中X为数据点肿瘤的大小,Y为观测结果是否是恶性肿瘤。通过构建线性回归模型,如hθ(x)所示,构建线性回归模型后,我们设定一个阈值0.5,预测hθ(x)≥0.5的这些点为恶性肿瘤,而hθ(x)<0.5为良性肿瘤。如下图所示,数据很标准,线性回归直线能够很准确的拟合,当取Y值为0.5时,确实可以准确的分类。
在这里插入图片描述

(2)当分类的数据不标准的情况

数据如图所示,数据很不规则。线性回归直线偏差较大,此时如何取为阈值0.5时,明显会出现分类错误,因为模型误差很大,如图绿圈wrong部分。
在这里插入图片描述

综上,通过线性回归+阈值方式是不行的,因此逻辑回归就诞生了。

二、逻辑回归

线性回归的结果输出是一个连续值,值的范围是无法限定的,当我们在分类任务中,需要用概率值来确定分类,即需要将线性回归的输出结果映射为概率值,即 ( 0, 1 )范围内,这个问题就很清楚了。现在我们只需要找到一个这样的映射函数即可。数学上真有这样一个很神奇的函数,叫sigmoid函数,如下所示:
在这里插入图片描述
sigmoid函数图像:
在这里插入图片描述
由图可知,sigmoid函数值域正好在 ( 0, 1 )范围内。我们之前定义的线性回归的预测函数为Y=WTX,那么逻辑回归的输出为Y= g(WTX),其中y=g(z)函数正是上述sigmoid函数(或者简单叫做S形函数)。此时,逻辑回归模型变为:
在这里插入图片描述
hθ(x) 的值有特殊的含义,它表示结果取1的概率,因此对于输入x分类结果为类别1和类别0的概率分别为:
在这里插入图片描述
上式综合起来可以写成:
在这里插入图片描述

三、分类中的边界

在逻辑回归模型中,当g(z)≥0.5时, z≥0;对于hθ(x)=g(θTX)≥0.5, 则θTX≥0, 此时意味着预估y=1;反之,当预测y = 0时,θTX<0; 所以我们认为θTX =0是一个决策边界,即z=0,当它大于0或小于0时,逻辑回归模型分别预测不同的分类结果。
举例子:
(1)hθ(x)为线性时,将如下简单的样本快速分类。
在这里插入图片描述
(1)hθ(x)跟复杂时,将如下的样本进行分类。
在这里插入图片描述
所以我们发现,理论上说,只要我们的hθ(x)设计足够合理,准确的说是g(θTx)中θTx足够复杂,我们能在不同的情形下,拟合出不同的判定边界,从而把不同的样本点分隔开来。

四、损失函数

代价函数一种衡量我们在这组参数下预估的结果实际结果差距的函数,比如说线性回归的代价函数定义为如下形式:
在这里插入图片描述
理论上,我们可以在逻辑回归里沿用,实际就是上述公式中hθ(x)取为逻辑回归中的g(θTx),但是这会引发代价函数为“非凸”函数的问题,简单一点说就是这个函数有很多个局部最低点,如下图所示:
在这里插入图片描述
它有多个低点,这样我们难以找到最优解,所以我们重新定义了逻辑回归的代价函数来保证逻辑回归的代价函数是凸函数,定义如下:
在这里插入图片描述
在这里插入图片描述
过程推导如下:
在这里插入图片描述

解释上述代价函数合理性:

(1)标签y=1的情况:
如果我们的类别y = 1,cost = -log(h(x))函数如下所示。 而分类的hθ(x)=1,则代价函数Cost =log(1)= 0,此时预测的值和真实的值完全相等,代价本该为0;而如果判断hθ(x)→0,即判断错误(因为y=1),则代价趋于∞( log(0) ),这很好地惩罚了最后的结果。
在这里插入图片描述
(2)标签y=0的情况:
如果我们的类别y = 0,cost = -log(1-h(x))函数如下所示。 惩罚同理合理。
在这里插入图片描述

五、梯度下降法

首先简化一下逻辑回归的代价函数,即合并上面两个式子,得:
在这里插入图片描述
我们为了找到最小值点,就应该朝着下降速度最快的方向(导函数/偏导方向)迈进,每次迈进一小步,再看看此时的下降最快方向是哪,再朝着这个方向迈进,直至最低点。
梯度下降算法是调整参数θ使得代价函数J(θ)取得最小值的最基本方法之一。从直观上理解,就是我们在碗状结构的凸函数上取一个初始值,然后挪动这个值一步步靠近最低点的过程,如下图所示:
在这里插入图片描述
用迭代公式表示出来的最小化J(θ)的梯度下降算法如下:
在这里插入图片描述
损失函数求导推导:
在这里插入图片描述
即:
在这里插入图片描述

六、sklearn 参数

LogisticRegression类的各项参数的含义

class sklearn.linear_model.LogisticRegression(penalty='l2', 
          dual=False, tol=0.0001, C=1.0, fit_intercept=True, 
          intercept_scaling=1, class_weight=None, 
          random_state=None, solver='liblinear', max_iter=100, 
          multi_class='ovr', verbose=0, warm_start=False, n_jobs=1)

penalty=‘l2’ : 字符串‘l1’或‘l2’,默认‘l2’。

用来指定惩罚的基准(正则化参数)。只有‘l2’支持‘newton-cg’、‘sag’和‘lbfgs’这三种算法。
如果选择‘l2’,solver参数可以选择‘liblinear’、‘newton-cg’、‘sag’和‘lbfgs’这四种算法;如果选择‘l1’的话就只能用‘liblinear’算法。

dual=False : 对偶或者原始方法。Dual只适用于正则化相为l2的‘liblinear’的情况,通常样本数大于特征数的情况下,默认为False。

C=1.0 : C为正则化系数λ的倒数,必须为正数,默认为1。和SVM中的C一样,值越小,代表正则化越强。

fit_intercept=True : 是否存在截距,默认存在。

intercept_scaling=1 : 仅在正则化项为‘liblinear’,且fit_intercept设置为True时有用。

solver=‘liblinear’ : solver参数决定了我们对逻辑回归损失函数的优化方法,有四种算法可以选择。

a) liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
b) lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
c) newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
d) sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。

参考文献:

[1] https://blog.csdn.net/han_xiaoyang/article/details/49123419
[2] https://blog.csdn.net/pakko/article/details/37878837
[3] https://www.jianshu.com/p/e51e92a01a9c
[4] 吴恩达Coursera课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值