2、逻辑回归

1、逻辑回归模型

逻辑回归是一种针对二分类问题的算法。在二分类算法中,标签 y 往往都等于 0 或者 1,以此表示某个样本是否属于某个类别。比如在一个针对猫的二分类任务中,y=0 表示这张图片不是猫,y=1 表示这张图片是猫。

对于输入的 x,逻辑回归算法能够输出一个预测值,我们称之为 y ^ \hat{y} y^,这代表对真实标签 Y 的估计。准确的说 y ^ \hat{y} y^ 是当给定输入特征 x 时,预测标签 y 为 1 的概率。

一般来说 x 是一个 n 维的向量,表示一个样本包含 n 个特征。约定逻辑回归的参数是 w 和 b,w 也是一个 n 维的向量,b 是一个实数。给定一个 x 以及参数 w 和 b, 如何产生输出 y ^ \hat{y} y^ 呢?线性回归 y ^ = w T x + b \hat{y} = w^Tx + b y^=wTx+b 可以吗。显然这对于二分类并不是一个好的算法,因为我们希望 y ^ \hat{y} y^ 能够输出 y 为 1 的概率,所以 y ^ \hat{y} y^ 的值应该在0和1之间。而线性回归 w T x + b w^Tx+b wTx+b 可能会比1大很多或者是一个负,这对于概率就失去了意义。

所以这里我们采用逻辑回归,而逻辑回归就只是在线性回归的基础上加入了 sigmoid 激活函数。如何实现逻辑回归呢?根据刚刚的描述,我们先创建一个线性回归模型

z = w T x + b z = w^Tx + b z=wTx+b

接着再将线性回归的输出传入 sigmoid 函数

y ^ = s i g m o i d ( z ) = 1 1 + e − z \hat{y} = sigmoid(z) = \frac{1}{1+e^{-z} } y^=sigmoid(z)=1+ez1

这样就使线性模型转变成了一个非线性的模型。我们可以用下图来描述逻辑回归的结构。
在这里插入图片描述
根据 sigmoid 函数的表达式,可以描绘出它的曲线:
sigmoid曲线
通过 sigmoid 曲线可以看到,不管 z 取到何值,sigmoid 函数总能巧妙的把 z 映射到 0 到 1 的范围内,这样就能很好的表示样本属于某个类别的概率。sigmoid 函数是使逻辑回归成为一个非线性模型的关键,所以往往又把 sigmoid 函数叫做逻辑函数。

给定包含 m 个样本的数据集,假设每个样本包含一个 n 维的特征向量 x 和 一个标签 y,则可以表示为:

{ ( x ( 1 ) , y ( 1 ) ) , ⋯ , ( x ( m ) , y ( m ) ) }   . \{(x(1), y(1)), ⋯ , (x(m), y(m))\} \ . {(x(1),y(1)),,(x(m),y(m))} .

则对于数据集中的第 i 个样本:

y ^ ( i ) = s i g m o i d ( z ( i ) ) = 1 1 + e − z ( i )   ,     其 中 z ( i ) = w T x ( i ) + b   . \hat{y}^{(i)} = sigmoid(z^{(i)}) = \frac{1}{1+e^{-z^{(i)}}} \ , \ \ \ 其中 z^{(i)} = w^Tx^{(i)} + b \ . y^(i)=sigmoid(z(i))=1+ez(i)1 ,   z(i)=wTx(i)+b .

我们希望逻辑回归模型的预测值接近于样本的真实标签,即 y ^ ( i ) ≈ y ( i ) \hat{y}^{(i)} \approx y^{(i)} y^(i)y(i)

2、逻辑回归的代价函数

为了优化逻辑回归模型的参数 w 和 b,需要定义一个代价函数。在讨论代价函数之前,先学习一下损失函数。损失函数(Loss function) 用来计算对单个样本的预测值 y ^ ( i ) \hat{y}^{(i)} y^(i) 和期望输出 y ( i ) y^{(i)} y(i) 之间的差异。换句话说,损失函数作用是计算模型在单个样本上的误差。

在线性回归中,损失函数为平方差函数,其是凸函数,执行梯度下降算法时,loss 能很好地收敛,从而得到更优的参数。理论上来说,我们也可以在逻辑回归中使用平方差函数为损失函数,但因为逻辑回归中存在 sigmod 函数,最终得到的损失函数并不能保证是凸函数,存在许多局部最优解,这对于梯度下降是不利的。所以逻辑回归模型需要定义新的损失函数。
参考链接:https://blog.csdn.net/tianguiyuyu/article/details/79644347

逻辑回归使用交叉熵作为损失函数。以下是它的定义:
在这里插入图片描述

y ( i ) y^{(i)} y(i) = 1 时, L ( y ^ ( i ) , y ( i ) ) = − l o g ( y ^ ( i ) ) L(\hat{y}^{(i)} ,y^{(i)}) =-log( \hat{y}^{(i)}) L(y^(i),y(i))=log(y^(i)),此时 y ^ ( i ) \hat{y}^{(i)} y^(i) 越靠近 1, L ( y ^ ( i ) , y ( i ) ) L(\hat{y}^{(i)} ,y^{(i)}) L(y^(i),y(i)) 越小。在学习过程中,我们要使 L ( y ^ ( i ) , y ( i ) ) L(\hat{y}^{(i)} ,y^{(i)}) L(y^(i),y(i)) 越来越小,使需要让 y ^ ( i ) \hat{y}^{(i)} y^(i) 逐渐靠近 1。 当 y ( i ) y^{(i)} y(i) = 0 时, L ( y ^ ( i ) , y ( i ) ) = − l o g ( 1 − y ^ ( i ) ) L(\hat{y}^{(i)} ,y^{(i)}) =-log(1- \hat{y}^{(i)}) L(y^(i),y(i))=log(1y^(i)),此时 y ^ ( i ) \hat{y}^{(i)} y^(i) 越靠近 0, L ( y ^ ( i ) , y ( i ) ) L(\hat{y}^{(i)} ,y^{(i)}) L(y^(i),y(i)) 越小。在学习过程中,我们要使 L ( y ^ ( i ) , y ( i ) ) L(\hat{y}^{(i)} ,y^{(i)}) L(y^(i),y(i)) 越来越小,使需要让 y ^ ( i ) \hat{y}^{(i)} y^(i) 逐渐靠近 0。

代价函数(Cost function) 用来计算模型在整个训练集中所有样本的损失的平均值。与损失函数不同的是,它体现的是整体的误差,通过整体误差的高低也可以判断模型性能的好坏。代价函数的定义如下:
在这里插入图片描述
逻辑回归的本质是最大似然估计,其代价函数的详细推导可参考: https://www.cnblogs.com/loongofqiao/p/8642045.html

3、梯度下降

需要注意的是,逻辑回归模型的自变量是样本的特征向量 x,因变量是预测结果 y ^ \hat{y} y^。而代价函数是用来评估这个模型的性能,从它的定义也可以看出它的自变量为模型的参数 w 和 b,它的因变量为模型在整个训练集上的误差。对于不同的 w 和 b,损失函数输出的整体误差也不尽相同。学习的目的就是找到使代价函数达到最小的参数 w 和 b,换句话说就是找到使整体误差最小的参数 w 和 b,而梯度下降算法刚好可以达到这个目的。
在这里插入图片描述
模型参数 w 与 x 的维度一样,都是 n 维的向量。但是为了更好地绘图,在这里定义 w 和 b 都是单一实数。代价函数 J(w,b) 是在 水平轴 w 和 b 上的曲面 因此曲面的高度就是 J(w,b)在某一点的值。理想的代价函数是一个凸函数,这样就存在一个全局最优值(最小值),同时它也是梯度下降想要到达的位置,它位于图中最底下的红点处。

对于逻辑回归,几乎所有的初始化方法都有效,通常用 0 来进行初始化。随机初始化也有效,但是对于逻辑回归通常不这么做。但是因为函数是凸函数,无论在哪里初始化,应该达到同一点或大致相同的点。梯度下降算法从初始点开始,每到达一点,都会先找到最陡的下坡方向,然后朝着这个方向向下移动到一个新的位置并且更新参数 w 和 b,重复这两个步骤,最终可以到达至曲面的最低点附近。而这个最低点对应的 w 和 b,就是我们想要得到的 w 和 b。

在数学上,这个最陡的下坡方向可以用代价函数对参数 w 和 b 的偏导来体现。则通过刚刚的描述,我们可以把梯度下降定义为:

重复以下步骤 { w = w − α ∂ J ( w , b ) ∂ w w = w - \alpha \frac{\partial J(w,b)}{\partial w} w=wαwJ(w,b) b = b − α ∂ J ( w , b ) ∂ b b = b - \alpha \frac{\partial J(w,b)}{\partial b} b=bαbJ(w,b) }

其中 α \alpha α 被称为 学习率(learning rate),它可以用来控制梯度下降每一步移动的大小,从而控制训练的时间。如果我们令 X = ( x ( 1 ) , x ( 2 ) , ⋯ , x ( m ) ) ;     Y = ( y ( 1 ) , y ( 2 ) , . . . , y ( m ) ) ;     Y ^ = ( y ^ ( 1 ) , y ^ ( 2 ) , . . . , y ^ ( m ) )   . X=(x^{(1)}, x^{(2)}, ⋯ , x^{(m)}); \ \ \ Y=(y^{(1)},y^{(2)},...,y^{(m)}); \ \ \ \hat{Y}=(\hat{y}^{(1)},\hat{y}^{(2)},...,\hat{y}^{(m)}) \ . X=(x(1),x(2),,x(m));   Y=(y(1),y(2),...,y(m));   Y^=(y^(1),y^(2),...,y^(m)) . 则根据链式求导法则我们可以求得:

∂ J ( w , b ) ∂ w = 1 m ∑ i = 1 m x ( i ) ( y ^ ( i ) − y ( i ) ) = 1 m X ( Y ^ − Y ) T \frac{\partial J(w,b)}{\partial w} = \frac{1}{m} \sum_{i=1}^{m}x^{(i)}(\hat{y}^{(i)}-y^{(i)}) = \frac{1}{m}X(\hat{Y}-Y)^T wJ(w,b)=m1i=1mx(i)(y^(i)y(i))=m1X(Y^Y)T ∂ J ( w , b ) ∂ b = 1 m ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) \frac{\partial J(w,b)}{\partial b} = \frac{1}{m} \sum_{i=1}^{m} (\hat{y}^{(i)}-y^{(i)}) bJ(w,b)=m1i=1m(y^(i)y(i))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值