大白话LR
what is LR
逻辑斯蒂回归既可以解决分类问题也可以解决回归问题,正常情况下都是输出一个概率值,也就是这个值大于那么认为输出是正例,如果小于输出就是负例,正负例是和训练样本中的正负例对应的。一般都是解决二分类问题,也就是说一个预测值是还是。
逻辑斯蒂回归模型在做分类时,其实相当于是一个只有单个输入层单个输出层没有隐含层的感知器模型,多个输入节点通过权值将输入样本值传递给Logistic
函数,然后得到最终的输出值,也就是一个在之间的概率值。
how it works
Logistic
函数的表达式或者也叫做Sigmoid
函数
上面说得多个输入节点通过权值将输入样本传递给输出层的节点的过程可以用下面的公式描述
其中表示输入值向量,的是权值向量,要保证有一个常数项用来控制偏移,所以为,在上面的公式也体现了
然后通过将得到这个非激活值传递给Logistic
函数得到最终的输出
输入样本为负例的概率为
两个式子可以合并为一个
确定了数据传递的关系之后,就可以构造损失函数开始训练了,根据L2
范式,可以构造如下省略了正则化项的损失函数,其实可以从另一个角度理解LR的损失函数,其实就是让原本是负例的样本的输出是负例的概率尽可能大,原本是正例的样本经过输出之后是正例的概率也尽可能大,将每一个样本的概率乘起来的值要尽可能大才能保证模型可以拟合样本数据。
因为要使概率尽可能大,所以构造似然函数
由于乘积项没有求和项好操作,所以我们可以取一个对数从而将乘积变为求和又不改变目标函数的单调性
如果按照这个损失函数去训练的话,我们需要找到这个函数的全局最大值或者是某一个局部最大值,目前没有行之有效的算法,但是如果把问题转换成一个求最小值的问题,就可以使用梯度下降算法来进行训练了
至此,已经构造出了用于训练的损失函数,下面就可以使用梯度下降来推导权值更新的公式了,我们定义为梯度下降的学习速率
上面的推导中用到了Logistic
函数求导的性质
上面公式已经推导出了梯度值,而梯度下降就是沿着负梯度的方向优化,所以最终权值更新的公式就是
因为和都是常数,所以这两项可以合并为一个常数项,更新公式可以最终化简为
之后就可以进行批量梯度下降或者是随机梯度下降了
how to implement vectorization
在批量梯度下降算法中,如果要进行一次迭代更新需要进行遍历操作,需要许多额外的代码,由于LR中的所有项都可以表示为向量,所以也可以推导出一个向量化或者说是矩阵化的学习算法实现
首先定义训练样本集,表示样本集中的输入值,代表输出,可以看出有个样本,每一个样本中有个特征
一次权值向量也可以表示为
将输入给Logistic
的为激活值表示为矩阵形式
计算误差为
所以可以根据上面更新单个权值的公式很容易地推导出矩阵形式的更新公式
最终向量化的更新公式化简后如下所示
所以向量化的更新步骤可以描述如下(上文也提到了1/m是可以省略并入一个常数项的)
- 求
- 求
- 求