当前位置:网站首页 > Haskell函数式编程 > 正文

sigmoid函数求导 矩阵(sigmoid函数推导)



逻辑回归(Logistic)虽带有回归二字,但它却是一个经典的二分类算法,它适合处理一些二分类任务,例如疾病检测、垃圾邮件检测、用户点击率以及上文所涉及的正负情感分析等等。

首先了解一下何为回归?假设现在有一些数据点,我们利用一条直线对这些点进行拟合(该线称为最佳拟合直线),这个拟合的过程就称作回归。利用逻辑回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。

线性回归算法后面的笔记会介绍,这里简单对比一下两者,逻辑回归和线性回归的本质相同,都意在拟合一条直线,但线性回归的目的是拟合输入变量的分布,尽可能让所有样本到该条直线的距离最短;而逻辑回归的目的是拟合决策边界,使数据集中不同的样本尽可能分开,所以两个算法的目的是不同的,处理的问题也不同。

我们想要的函数应该是,能接受所有的输入并且预测出类别,比如二分类中的0或者1、正或者负,这种性质的函数被称为海维赛德阶跃函数,图像如下:

在这里插入图片描述

但这种函数的问题在于从0跳跃到1的过程非常难处理,比如我们常接触的多次函数,可能在某种条件下需要求导解决问题;而Sigmoid函数也具有类似的性质,并且在数学上更容易处理,其公式如下:

在这里插入图片描述

下图是Sigmoid函数在不同坐标尺度下的两条曲线图。当x为0时,Sigmoid函数值为0.5,随着x的增大,对应的Sigmoid值将逼近于1;而随着x的减小,Sigmoid值将逼近于0。如果横坐标刻度足够大,Sigmoid函数看起来就很像一个阶跃函数。

在这里插入图片描述

若我们将Sigmoid函数的输入记作z,可推出下面公式:

在这里插入图片描述

它表示将这两个数值向量对应元素相乘然后全部相加起来得到z值,其中向量x是分类器的输入数据,向量w就是我们要找到的能使分类器尽可能准确的最佳参数。

由上述公式就可得:

在这里插入图片描述

其中$h_w(x)$的作用就是给定输入时,输出分类为正向类(1)的可能性。例如,对于一个给定的x,$h_w(x)$的值为0.8,则说明有80%的可能输出为正向类(1),有20%的可能输出为负向类(0),二者成补集关系。

对于一个二分类问题而言,我们给定输入,函数最终的输出只能有两类,0或者1,所以我们可以对其分类。

在这里插入图片描述

为了运算便捷,我们将其整合为一个公式,如下:

在这里插入图片描述

由于乘法计算量过大,所以可以将乘法变加法,对上式求对数,如下:

在这里插入图片描述

可以看出当y=1时,加号后面式子的值为0;当y=0时,加号前面式子的值为0,这与上文分类式子达到的效果是一样的。L(w)称为似然函数,l(w)称为对数似然函数,是依据最大似然函数推导而成。此时的应用是梯度上升求最大值,如果梯度下降求最小值,可在公式之前乘以$-frac{1}{n}$。

为了学习嘛,这里再介绍一下另一种方式,利用损失函数推导应用于梯度下降的公式;损失函数是衡量真实值与预测值之间差距的函数,所以损失函数值越小,对应模型的效果也越好,损失函数公式如下:

在这里插入图片描述

可能只看公式理解相对抽象,通过对应的函数图像足以理解上式,如下:

在这里插入图片描述

注意!!!公式后面的y*不代表纵坐标 !!!
当类标签y=1时,对应的-log(x)图像越接近于1,其距离x轴越近,代表其损失越小;反之当类标签y=0时,对应的-log(1-x)图像越接近于0,其距离x轴越近,代表其损失越小,也就是预测值越接近于真实值。

将两个损失函数综合起来得:

在这里插入图片描述

对于m个样本,总损失函数为:

在这里插入图片描述

其中m为样本个数、yi为标签,可取0或1、i为第i个样本、$p(x_i)$为预测输出。

3.1梯度上升

上面已经列出了一大堆的公式,难道这又要开始一连串的大公式?

在这里插入图片描述

心态放平,上文虽说公式有点多,但目的都是为了推出最后的对数似然函数或者总损失函数,掌握这两个是关键,梯度上升和梯度下降也会利用上面的公式做推导,所以二者之间存在关联。首先梯度下降你需要了解一下何为梯度?

如果将梯度记为▽,则函数f(x,y)的梯度可由下式表示:

在这里插入图片描述

通俗的说,即对多元函数的参数求偏导,并把求得的各个参数的偏导以向量的形式写出来。或者你只要理解这个梯度要沿着x的方向移动$frac{delta f(x,y)}{delta x}$,沿着y方向移动$frac{delta f(x,y)}{delta y}$足以,但f(x,y)必须要在待计算的点上有定义且可微。

下图为一个梯度下降的例子,梯度下降法在到达每一个点之后都会重新评估下一步将要移动的方向。从x0开始,在计算完该点的梯度,函数就会移动到下一个点x1。在x1点,梯度会重新计算,继而移动到x2点。如此循环迭代此过程,直到满足停止条件,每次迭代过程都是为了找出当前能选取到的最佳移动方向。

在这里插入图片描述

所以对于上文所提及的对数似然函数$J(w)$,我们也可以利用上述迭代的方式,一步一步移动到目标值或者无限接近于目标值,$J(w)$求偏导的公式如下:

在这里插入图片描述

可能有的人看到这个偏导公式有点蒙,其实这里面用到的三个函数公式都是上文所提及的,来回顾一下。

在这里插入图片描述

求偏导过程涉及到高数知识,即最外层函数对外层函数求偏导、外层函数对内层函数求偏导、内层函数对其元素求偏导,三者相乘可得出所需偏导。推导过程有些麻烦,这里只给出推导结果,在后面运用时我们也只会运用到最终结果,如下:

在这里插入图片描述

3.2梯度下降

如果利用将对数似然函数换成损失函数$J(Theta)$,则得到的是有关计算梯度下降的公式,如下:

在这里插入图片描述

4.1数据概览

有这样一份数据集,共100个样本、两个特征(X1与X2)以及一个分类标签,部分数据和所绘制图像如下:

X1 X2 类别 0. 9. 0 0.078557 0.059736 1 -1.099458 1. 1 1. 2. 1 -0. 11.009725 0

在这里插入图片描述

 
  
4.2加载数据集
 
  

loadDataSet函数的作用是打开存储数据的文本文件并逐行读取。每行的前两个值分别对应X1和X2,第三个值是数据对应的类别标签。为了方便计算,函数还在X1和X2之前添加了一个值为1.0的X1,X1可以理解为偏置,即下图中的x0。

在这里插入图片描述

4.3训练算法
 
  

sigmoid函数就是传入一个参数(这里是一个100*1的向量),通过公式计算并返回值。

 
  

最后weights返回的是一个3x1的矩阵,运行截图如下:

在这里插入图片描述

gradAscent传入参数为loadDataSet的两个返回值,然后通过numpymat方法将dataMatrixlabelMat 分为转化为100x3和1x100的矩阵,但labelMat 经过T转置后变成100x1的矩阵。然后初始化权重,利用的方法就是创建一个n行1列的矩阵。整个算法的关键处于for循环中,我们先回顾一下上文的两个公式。

在这里插入图片描述
在这里插入图片描述

其中h的计算结果即$h_w(x)$,权重weight为W向量,输入矩阵dataMatrix为x向量。误差error代表$y^{(i)}-h_w x^{(i)}$,有人可能会发现$frac{1}{m}$没有出现在代码中,因为$alpha$和$frac{1}{m}$都为常数,二者相乘也为常数,所以只需要用$alpha$代替即可。

公式中的加和部分又怎么体现呢?如果学过线性代数或者了解numpy运算的伙伴应该都理解矩阵的乘法,不理解也没有关系,看下图这个例子,当两个矩阵相乘时,对应元素之间会求和作为最终元素。

在这里插入图片描述

4.4绘制决策边界
 
  

这部分代码唯一需要注意的是,将sigmoid的值设置为0,可以回忆一下文章刚开始时的Sigmoid函数图像,0是两个分类的分解处。因此,我们设定$0=w_0x_0+w_1x_1+w_2x_2$,$x_0$的值为1,所以已知回归系数,就可求得$x_1和x_2$的关系式,从而画出决策边界。

在这里插入图片描述

上图可以看出分类的效果还是不错的,根据函数绘制出的直线已经很大程度上将两类样本分隔开,100个样本中,只有五个样本分类错误,其中有三个还是位于回归线上。

本文所讲的梯度上升公式,是属于批量梯度上升,此外还有随机梯度上升、小批量梯度上升,而批量梯度上升每次计算都要计算所有的样本,所以程序计算过程是十分复杂的,并且容易收敛到局部最优,而随机梯度上升将会对算法进行调优,下一篇文章将会介绍随机梯度上升,并分析两者之间的区别。

欢迎关注公众号【奶糖猫】,后台回复"逻辑回归"可获取数据和源码供参考,感谢阅读。
到此这篇sigmoid函数求导 矩阵(sigmoid函数推导)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 合并数组的函数有哪些(excel数组合并函数)2025-10-22 12:18:04
  • conv1d函数(conv()函数)2025-10-22 12:18:04
  • modbus RTU报文格式(modbuspoll报文在哪看)2025-10-22 12:18:04
  • ofdm调制的作用(ofdm调制方式的优缺点)2025-10-22 12:18:04
  • a标签打开方式(a标签如何设定页面打开方式)2025-10-22 12:18:04
  • sigmoid函数计算公式导数(sigmoid函数导数形式)2025-10-22 12:18:04
  • docker网络模型(docker的五种网络模式总结)2025-10-22 12:18:04
  • 支付方式是什么意思(亲属卡暂无可用支付方式是什么意思)2025-10-22 12:18:04
  • cmip6模式(cmip6模式评估)2025-10-22 12:18:04
  • ewma模型(ewma模型计算公式)2025-10-22 12:18:04
  • 全屏图片