发布日期:2023-09-27 作者: 小九体育直播在线观看
之前一篇文章介绍了回归模型——线性回归的原理和Python实现。这一篇来介绍分类模型——逻辑回归(Logistic Regression)的原理和实现。
如果大家理解了线性回归的原理、公式推导和代码实现过程,那这个分类模型理解起来也不难。想想机器学习的流程是什么?
1.对于一个现实问题,我们把它抽象出来,用一个数学模型来表示它,一般就是我们假设这个模型可能是线性或非线性,例如线性回归模型或者逻辑回归模型或者树模型或者神经网络模型;
2.通过最大似然、最大后验概率或者最小分类误差等方法建立模型的损失函数(代价函数),也就是说使得最后回归预测或分类预测效果最好(就是以最大似然或最小分类误差来衡量)的关于参数θ的函数。然后就转化为在已知数据点(x_i,y_i)的前提下求出参数θ的数学问题。
如果这个函数存在解析解,那么我们大家可以对损失函数进行求导,令导数为0,也就是最大(最小值)的地方,这样我们就找到使得函数最大或最小时的解θ,这样我们就确定了数学模型的具体形式;
但是很可能损失函数无法求导或者求导计算量很大,又或者未知参数的个数大于已知方程组的个数等等。那怎么办?就需要用迭代法一步一步找到“θ的理想值”,但其实并不能找到完美的值,只能找到跟它近似的解,这就是所说的最优解。问题就又转化到用迭代法找到数学模型的最优解问题。
那怎么迭代呢?就是假设我们已知那个理想值θ作为标杆,给损失函数一个初始的θ去计算函数值,再拿这个函数值跟实际函数值比较看误差是不是最小或者可能性是不是最大,如果不是就再用一个新的θ计算、比较,这样的一个过程就是轮回的用新的θ、旧的θ迭代慢慢逼近最优解。
4.找到最优解、确定数学模型最终形式,用这个数学模型去预测新的数据,再用一些评估指标评价这个数学模型好不好,如果不好再从头再来。
这个过程就跟把大象放进冰箱分几步一样(开门——放大象——关门),基本逻辑很简单:假设数学模型——找模型最优解——预测。比较难的是这些步骤里要实现起来有很多细节、环环相扣,所以比把大象放进冰箱又复杂一些。
还是跟线性回归模型一样,我们假设我们所拥有的的数据可以被线性模型反映(当然还可以假设是非线性的比如树模型和神经网络模型,区别就在于反映程度大小),如果说之前线性回归模型我们是希望找到一条线来拟合所有数据点,像下面这样:
那么现在这一些数据分为两类,我想把它们用一条线都区分开,该怎么办?如下图:
那我是不是在上图里随便画一条直线呢?并不是。一种比较好理解的方法就是:找到一条直线,绿色的点离直线越远,我们就认定它越有很大的可能是绿色这一类,红色的点离直线越远,我们就认定它越有很大的可能是红色这一类,是否很合理?
那怎么找到这条直线呢?我们既然假定它是线性模型,就假设它的数学模型是线性函数,如下:
上面这是线性回归模型的函数形式,它的y值是连续的,但是我现在的因变量y(或者说标签是绿色和红色,用0和1表示)只有两个值,所以这里还不能直接让y与等式右边相等,中间还需要一次转换才行。那我们再换个思路,假设我用1代表红色,0代表绿色,我们的目的是要从已知的x,得到y,那可以从条件概率的角度理解,如果一个样本点属于1类的概率与它属于0类的概率相比越大,是不是就更有把握判定它属于1类:
因为我们大家都知道概率P始终在0到1之间,所以分子分母都小于1,而且是单调递增函数(高中数学可证明),为便于计算,外面我再加上一个以自然数e底的对数函数(同样是单调递增的,不改变原函数的性质):
这样我们就把只有两个值的y转换为了连续值,现在我们把这个表示样本点属于1类的式子和上面线性函数结合:
这样我们的线性模型不就是预测样本点属于1类的的概率了吗(我们判断了1类,另一类就是0类)?不过我们大家常常习惯把函数值y单独表示出来,而不是等式左右都是式子,所以经过下面的转换:
现在我们找到了我们最终想要找到的数学模型的样子了。记住f(x)就是前面的条件概率,取值范围在0到1之间。现在的问题就转换为了怎么求出函数式里的参数θ。在这之前还得解释几个名词,上面的:
这也是为什么模型叫做逻辑回归,因为利用了对数几率作为函数目标,虽然它用于二分类但实质上还是线 Sigmoid函数
1.sigmoid函数连续,严格单调,以(0,0.5)中心对称,是一个非常良 好的阈值函数。当x为0时,Sigmoid函数值为0.5,随着x的增大对应的Sigmoid值将逼近于1; 而随着x的减小, Sigmoid函数会趋近于0。Sigmoid函数的值域范围限制在(0,1)之间,与概率值的范围是相对应。
2.sigmoid函数的导数是关于自身的函数,由高中求导公式可知f(x)是个复合函数,复合函数求导先求里再求外。公式推导如下:
好,数学模型的形式我们找到了,也了解这一个函数的一些特性。那么我们怎么求解这个函数的参数θ呢?还是像之前那样用预测值和实际值之间的误差和最小来计算吗?这种方法当然可以(可以看李宏毅的课程有解释,大家也能自己推导一下),但是这里要介绍另一种方式。因我们这里说到用条件概率来模拟数据点分类的可能性,那再回到条件概率上来,在已知样本(x,y)和参数θ的情况下,样本(x,y)属性为正样本(y=1)和负样本(y=0)的条件概率如下:
上面损失函数L(θ)最小化还能这样理解,我们看下面Sigmoid函数图:
现在损失函数也找到了,问题就转化为求损失函数最大,方法还是有两种,一种就是直接矩阵求解(如果你去尝试的话会发现无法求解析解),另一种就是迭代法。在我的另一篇文章里解释了十种优化算法,我们在这里使用梯度上升法。迭代法的关键就是求梯度,也就是L(θ)对θ的偏导。上面也说了复合函数求偏导采用链式法则,我们以此来推导一下:
第一步:设置初始θ(随机设置),设置步长(也叫做学习率,通常在0~1之间)α,设置迭代终止的最大概率接受度(或者是精度P阈值)也就是所有样本概率和最大到多少就可以停止计算了;
第一次迭代:将参数θnew1带入到损失函数在θ_new1这一点的损失函数的导数值(即梯度),然后将参数θ_new1带入到上面的迭代公式求计算新的梯度和θ_new,同时计算损失函数(也是概率之和)的大小,比较损失函数与精度P阈值的大小,如果小于阈值,进行第三次迭代,具体的计算步骤如下:
第二次迭代:将参数θ_new1带入到损失函数在θ_new1这一点的损失函数的导数值(即梯度),然后将参数θ_new1带入到上面的迭代公式求计算新的梯度和θ_new,同时计算损失函数(也是概率之和)的大小,比较损失函数与精度P阈值的大小,如果小于阈值,进行第三次迭代,具体的计算步骤如下:
第三步:当损失函数(即最大概率和)的值小于设定的精度P阈值,满足条件,退出循环,返回最新的参数θ_new,此时的θ_new就是我们要找的理想的模型参数。
以上我们要求得的数学模型的具体形式就确定了,我们就可以用这个模型去预测新的数据了。是不是很好理解?
逻辑回归模型就此推导完了,下面我们用具体的数据来写一下代码。数据还是最上面的区分红色和绿色的数据点。
当然,这还并不全是最优的决策边界,你还能够最终靠随机梯度下降法、拟牛顿法等等来优化。这里要说的一点是改进的那些优化方法是针对数据量大、拟合曲线复杂的情况,这些函数可能是非凸函数,有很多局部最小值所以要很多方法来优化,但是这个数据集最简单,是凸函数,只有一个最大值,所以梯度下降法就可以求解最优解了。
对逻辑回归从原理、公式推导和代码实现基本都解释清楚了,希望对你起到一定的帮助。代码都有注释,如果希望获得源代码,关注同名二八Data。