本文将从KL距离(相对熵)、交叉熵、损失函数和一些公式推导来阐述逻辑回归这个传统的机器学习方法,重理论轻代码。
1.KL距离
KL距离又称作相对熵,通常是用来衡量两分布之间的相似度。公式如下:
其中P,Q是两分布。很显然,KL距离不具有对称性,正是因为这点,描述一些概率性问题的差异性通常使用KL距离,而不用欧式距,逻辑回归也是。
2.Sigmoid函数:
图像如下(网上百度的):
其中wx+b是线性函数,Sigmoid行数的作用就是将线性函数wx+b得到的结果映射到(0,1)之间的一个数,并且具有概率意义。
接下来求下Sigmoid函数的导数,后面会用到。
其中 , 推导完毕。
3.逻辑回归损失函数
文章开头提到过,KL距离通常用来衡量概率之间的相似度,经过Sigmoid函数转换,我们最终得到的一个值正好是一个概率值。又因为逻辑回归是个二分类问题,可以认为有两种类别0和1,假设为类别0的概率为,则为类别1的概率为。接下来我们看下损失函数:
其中为实际训练样本的类别值,是通过sigmoid函数算出来的值,很明显,上面式子中,加号两边对于一个样本只有一边不为0,因为实际样本的类别不是0就是1。上述式子继续简化:
其中 和 可以认为是常数项,因为训练样本的类别都是已知的,所以最终KL距离就为:
机器学习训练的过程,就是不断更新 ,使得损失函数不断减小的过程。而这最常用的方法就是梯度下降法。而一般的梯度下降法的公式如下:
其中 是指的损失函数,是学习因子,是个超参数,可以人为设定
回到逻辑回归中,它的损失函数是,那么
接下来我们看下 这部分其实是决定 的变化方向,那么等于什么呢
在前面我们对 求过导数: ,代入上面式子有
我们将点 代入上面式子中,很容易就可以 要变化的方向,只要数据正常,也不存在得到的值特别大或特别小的情况。如果得到的值特别大,模型容易震荡,如果得到的值特别小, 会学不到东西,即初始化是什么值,训练完后也差不多和这个值相等,显然这两种情况都不是我们想要的。在线性回归问题里面,我们通常用mse来作为我们的损失函数,那逻辑回归为啥不用mse做损失函数呢?
首先,假设我们用mse来做损失函数,那么
我们结合 的图像来观察这一项
我们从sigmoid函数中可以看出,当我们把 的值稍微大些或稍微小写的时候, 很容易趋近于1或0,造成的结果就是会很小,导致 学不到东西,所以mse不适合用于做逻辑回归的损失函数,其实还有一个不用mse做损失函数的原因是,它的极小值点特别多,而且与特征维度的平方成正相关,这对初始化 就有很大的要求了,所以逻辑回归没有选用mse作为它的损失函数。
4.数据归一化
我们接着观察 ,可以看到 每次迭代变化都是和输入数据 相关,如果的值很大,那么整个模型的训练过程就会震荡,如果的值很小,那么每次就学不到什么东西,到时模型训练时间非常长,这些情况都是理想结果,那么通常我们会对数据进行预处理,将数据归一化,其实就是通过一定手段将数据映射到同一个量级。接下来介绍两种常用的数据归一化:
- 离差标准化,是对原始数据的线性变换,使结果值映射到[0 - 1]之间,转换公式,其中的min是数据集中最小值,max是数据集中最大值,因为处理后的都是大于0的,故只会往同一个方向走
- Z-score标准化方法, 这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1,转化函数为:,其中 是数据集的均值, 是数据集的标准差。因为处理后的有正有负,那么不一定会沿着同一方向走,这样会使得训练过程时间大大减少。