一文详尽系列之逻辑回归
点击上方“Datawhale”,选择“星标”公众号
第一时间获取价值内容
模型介绍
直接对分类的概率建模,无需实现假设数据分布,从而避免了假设分布不准确带来的问题; 不仅可预测出类别,还能得到该预测的概率,这对一些利用概率辅助决策的任务很有用; 对数几率函数是任意阶可导的凸函数,有许多数值优化算法都可以求出最优解。
原函数曲线等高线(同颜色曲线上,每一组 带入后值都相同)
如果不加 和 正则化的时候,对于线性回归这种目标函数凸函数的话,我们最终的结果就是最里边的紫色的小圈圈等高线上的点。 当加入 正则化的时候,我们先画出 的图像,也就是一个菱形,代表这些曲线上的点算出来的 范数 都为 。那我们现在的目标是不仅是原曲线算的值要小(越来越接近中心的紫色圈圈),还要使得这个菱形越小越好( 越小越好)。那么还和原来一样的话,过中心紫色圈圈的那个菱形明显很大,因此我们要取到一个恰好的值。那么如何求值呢?
以同一条原曲线目标等高线来说,现在以最外圈的红色等高线为例,我们看到,对于红色曲线上的每个点都可做一个菱形,根据上图可知,当这个菱形与某条等高线相切(仅有一个交点)的时候,这个菱形最小,上图相割对比较大的两个菱形对应的 范数更大。用公式说这个时候能使得在相同的 ,由于相切的时候的 $ C||w||_1}N} \sum_{i = 1}^N{(y_i -w^T x_i)^2 }+ C$ 更小; 有了第一条的说明我们可以看出,最终加入 范数得到的解一定是某个菱形和某条原函数等高线的切点。现在有个比较重要的结论来了,我们经过观察可以看到,几乎对于很多原函数等高曲线,和某个菱形相交的时候及其容易相交在坐标轴(比如上图),也就是说最终的结果,解的某些维度及其容易是 0,比如上图最终解是 ,这也就是我们所说的 更容易得到稀疏解(解向量中 0 比较多)的原因; 当然光看着图说, 的菱形更容易和等高线相交在坐标轴一点都没说服力,只是个感性的认识,我们接下来从更严谨的方式来证明,简而言之就是假设现在我们是一维的情况下 ,其中 是目标函数, 是没加 正则化项前的目标函数, 是 正则项,要使得 0 点成为最值可能的点,虽然在 0 点不可导,但是我们只需要让 0 点左右的导数异号,即 即可也就是 的情况下,0 点都是可能的最值点。
这个过程如下图所示:
所以并行计算 LR 的流程如下所示。
所以并行 LR 实际上就是在求解损失函数最优解的过程中,针对寻找损失函数下降方向中的梯度方向计算作了并行化处理,而在利用梯度确定下降方向的过程中也可以采用并行化。
与其他模型的对比
{1,t},...,g_{c,t}...g_{n,t}>2.1 与线性回归{1,t},...,g_{c,t}...g_{n,t}>{1,t},...,g_{c,t}...g_{n,t}>
逻辑回归是在线性回归的基础上加了一个 {1,t},...,g_{c,t}...g_{n,t}> 函数(非线形)映射,使得逻辑回归称为了一个优秀的分类算法。本质上来说,两者都属于广义线性模型,但他们两个要解决的问题不一样,逻辑回归解决的是分类问题,输出的是离散值,线性回归解决的是回归问题,输出的连续值。{1,t},...,g_{c,t}...g_{n,t}>
我们需要明确 {1,t},...,g_{c,t}...g_{n,t}> 函数到底起了什么作用:{1,t},...,g_{c,t}...g_{n,t}>
线性回归是在实数域范围内进行预测,而分类范围则需要在 {1,t},...,g_{c,t}...g_{n,t}>,逻辑回归减少了预测范围;{1,t},...,g_{c,t}...g_{n,t}> 线性回归在实数域上敏感度一致,而逻辑回归在 0 附近敏感,在远离 0 点位置不敏感,这个的好处就是模型更加关注分类边界,可以增加模型的鲁棒性。{1,t},...,g_{c,t}...g_{n,t}>
{1,t},...,g_{c,t}...g_{n,t}>2.2 与最大熵模型{1,t},...,g_{c,t}...g_{n,t}>{1,t},...,g_{c,t}...g_{n,t}>
逻辑回归和最大熵模型本质上没有区别,最大熵在解决二分类问题时就是逻辑回归,在解决多分类问题时就是多项逻辑回归。{1,t},...,g_{c,t}...g_{n,t}>
首先进行符号定义:{1,t},...,g_{c,t}...g_{n,t}>
表示,输入时 {1,t},...,g_{c,t}...g_{n,t}>,输出的 {1,t},...,g_{c,t}...g_{n,t}> 的概率;{1,t},...,g_{c,t}...g_{n,t}> 是一个指示函数,若 {1,t},...,g_{c,t}...g_{n,t}>,则 {1,t},...,g_{c,t}...g_{n,t}>,否则 {1,t},...,g_{c,t}...g_{n,t}>;{1,t},...,g_{c,t}...g_{n,t}> 我们的目标就是从训练数据中,学习得到一个模型,使得 {1,t},...,g_{c,t}...g_{n,t}> 最大化,也就是输入 {1,t},...,g_{c,t}...g_{n,t}>,预测结果是 {1,t},...,g_{c,t}...g_{n,t}> 的概率最大,也就是使得 {1,t},...,g_{c,t}...g_{n,t}> 最大。{1,t},...,g_{c,t}...g_{n,t}>
对于逻辑回归而言:{1,t},...,g_{c,t}...g_{n,t}>
我们这里可以用更泛化的形式来表示 {1,t},...,g_{c,t}...g_{n,t}>π:{1,t},...,g_{c,t}...g_{n,t}>
回到我们的目标:令 {1,t},...,g_{c,t}...g_{n,t}> 最大,可以用极大似然估计的方法来求解。{1,t},...,g_{c,t}...g_{n,t}>
然后我们求偏导:{1,t},...,g_{c,t}...g_{n,t}>
另偏导数为 0:{1,t},...,g_{c,t}...g_{n,t}>
使用 {1,t},...,g_{c,t}...g_{n,t}> 这个函数,我们可以重写等式:{1,t},...,g_{c,t}...g_{n,t}>
想要证明逻辑回归跟最大熵模型是等价的,那么,只要能够证明它们的 {1,t},...,g_{c,t}...g_{n,t}> 是相同,结论自然就出来了。现在,我们不知道最大熵模型的 {1,t},...,g_{c,t}...g_{n,t}>,但是我们知道下面的一些性质:{1,t},...,g_{c,t}...g_{n,t}>
利用信息论,我们可以得到 {1,t},...,g_{c,t}...g_{n,t}> 的熵,定义如下:{1,t},...,g_{c,t}...g_{n,t}>
现在,我们有了目标:{1,t},...,g_{c,t}...g_{n,t}> 最大,也有了上面的4个约束条件。求解约束最优化问题,可以通过拉格朗日乘子,将约束最优化问题转换为无约束最优化的对偶问题。我们的拉格朗日式子可以写成如下:{1,t},...,g_{c,t}...g_{n,t}>
对 {1,t},...,g_{c,t}...g_{n,t}> 求偏导,得到:{1,t},...,g_{c,t}...g_{n,t}>
令偏导 = 0,得到:{1,t},...,g_{c,t}...g_{n,t}>
从而得到:{1,t},...,g_{c,t}...g_{n,t}>
因为有约束条件:{1,t},...,g_{c,t}...g_{n,t}>
所以:{1,t},...,g_{c,t}...g_{n,t}>
因此,可以得到:{1,t},...,g_{c,t}...g_{n,t}>
把 {1,t},...,g_{c,t}...g_{n,t}> 代入 {1,t},...,g_{c,t}...g_{n,t}>,并且简化一下式子:{1,t},...,g_{c,t}...g_{n,t}>
这就是逻辑回归中提到的那个泛化的式子,这就证明了逻辑回归是最大熵模型的一个特殊例子。到此,逻辑回归与最大熵模型的关系就解释完毕了。{1,t},...,g_{c,t}...g_{n,t}>
{1,t},...,g_{c,t}...g_{n,t}>2.3 与 SVM{1,t},...,g_{c,t}...g_{n,t}>{1,t},...,g_{c,t}...g_{n,t}>
相同点:{1,t},...,g_{c,t}...g_{n,t}>
都是分类算法,本质上都是在找最佳分类超平面;{1,t},...,g_{c,t}...g_{n,t}> 都是监督学习算法;{1,t},...,g_{c,t}...g_{n,t}> 都是判别式模型,判别模型不关心数据是怎么生成的,它只关心数据之间的差别,然后用差别来简单对给定的一个数据进行分类;{1,t},...,g_{c,t}...g_{n,t}> 都可以增加不同的正则项。{1,t},...,g_{c,t}...g_{n,t}>
不同点:{1,t},...,g_{c,t}...g_{n,t}>
LR 是一个统计的方法,SVM 是一个几何的方法;{1,t},...,g_{c,t}...g_{n,t}> SVM 的处理方法是只考虑 Support Vectors,也就是和分类最相关的少数点去学习分类器。而逻辑回归通过非线性映射减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重;{1,t},...,g_{c,t}...g_{n,t}> 损失函数不同:LR 的损失函数是交叉熵,SVM 的损失函数是 HingeLoss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。对 HingeLoss 来说,其零区域对应的正是非支持向量的普通样本,从而所有的普通样本都不参与最终超平面的决定,这是支持向量机最大的优势所在,对训练样本数目的依赖大减少,而且提高了训练效率;{1,t},...,g_{c,t}...g_{n,t}> LR 是参数模型,SVM 是非参数模型,参数模型的前提是假设数据服从某一分布,该分布由一些参数确定(比如正太分布由均值和方差确定),在此基础上构建的模型称为参数模型;非参数模型对于总体的分布不做任何假设,只是知道总体是一个随机变量,其分布是存在的(分布中也可能存在参数),但是无法知道其分布的形式,更不知道分布的相关参数,只有在给定一些样本的条件下,能够依据非参数统计的方法进行推断。所以 LR 受数据分布影响,尤其是样本不均衡时影响很大,需要先做平衡,而 SVM 不直接依赖于分布;{1,t},...,g_{c,t}...g_{n,t}> LR 可以产生概率,SVM 不能;{1,t},...,g_{c,t}...g_{n,t}> LR 不依赖样本之间的距离,SVM 是基于距离的;{1,t},...,g_{c,t}...g_{n,t}> LR 相对来说模型更简单好理解,特别是大规模线性分类时并行计算比较方便。而 SVM 的理解和优化相对来说复杂一些,SVM 转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算。{1,t},...,g_{c,t}...g_{n,t}>
{1,t},...,g_{c,t}...g_{n,t}>2.4 与朴素贝叶斯{1,t},...,g_{c,t}...g_{n,t}>{1,t},...,g_{c,t}...g_{n,t}>
朴素贝叶斯和逻辑回归都属于分类模型,当朴素贝叶斯的条件概率 {1,t},...,g_{c,t}...g_{n,t}> 服从高斯分布时,它计算出来的 {1,t},...,g_{c,t}...g_{n,t}> 形式跟逻辑回归是一样的。{1,t},...,g_{c,t}...g_{n,t}>
两个模型不同的地方在于:{1,t},...,g_{c,t}...g_{n,t}>
逻辑回归是判别式模型 {1,t},...,g_{c,t}...g_{n,t}>,朴素贝叶斯是生成式模型 {1,t},...,g_{c,t}...g_{n,t}>:判别式模型估计的是条件概率分布,给定观测变量 x 和目标变量 y 的条件模型,由数据直接学习决策函数 {1,t},...,g_{c,t}...g_{n,t}> 或者条件概率分布 {1,t},...,g_{c,t}...g_{n,t}> 作为预测的模型。判别方法关心的是对于给定的输入 x,应该预测什么样的输出 y;而生成式模型估计的是联合概率分布,基本思想是首先建立样本的联合概率概率密度模型 {1,t},...,g_{c,t}...g_{n,t}>,然后再得到后验概率 {1,t},...,g_{c,t}...g_{n,t}>,再利用它进行分类,生成式更关心的是对于给定输入 x 和输出 y 的生成关系;{1,t},...,g_{c,t}...g_{n,t}> 朴素贝叶斯的前提是条件独立,每个特征权重独立,所以如果数据不符合这个情况,朴素贝叶斯的分类表现就没逻辑会好了。{1,t},...,g_{c,t}...g_{n,t}>
模型细节
{1,t},...,g_{c,t}...g_{n,t}>3.1 为什么适合离散特征{1,t},...,g_{c,t}...g_{n,t}>{1,t},...,g_{c,t}...g_{n,t}>
我们在使用逻辑回归的时候很少会把数据直接丢给 LR 来训练,我们一般会对特征进行离散化处理,这样做的优势大致有以下几点:{1,t},...,g_{c,t}...g_{n,t}>
离散后稀疏向量内积乘法运算速度更快,计算结果也方便存储,容易扩展;{1,t},...,g_{c,t}...g_{n,t}> 离散后的特征对异常值更具鲁棒性,如 age>30 为 1 否则为 0,对于年龄为 200 的也不会对模型造成很大的干扰;{1,t},...,g_{c,t}...g_{n,t}> LR 属于广义线性模型,表达能力有限,经过离散化后,每个变量有单独的权重,这相当于引入了非线性,能够提升模型的表达能力,加大拟合;{1,t},...,g_{c,t}...g_{n,t}> 离散后特征可以进行特征交叉,提升表达能力,由 M+N 个变量编程 M*N 个变量,进一步引入非线形,提升了表达能力;{1,t},...,g_{c,t}...g_{n,t}> 特征离散后模型更稳定,如用户年龄区间,不会因为用户年龄长了一岁就变化;{1,t},...,g_{c,t}...g_{n,t}>
总的来说,特征离散化以后起到了加快计算,简化模型和增加泛化能力的作用。{1,t},...,g_{c,t}...g_{n,t}>
{1,t},...,g_{c,t}...g_{n,t}>3.2 为什么不用平方误差{1,t},...,g_{c,t}...g_{n,t}>{1,t},...,g_{c,t}...g_{n,t}>
假设目标函数是 MSE,即:{1,t},...,g_{c,t}...g_{n,t}>
这里 {1,t},...,g_{c,t}...g_{n,t}> 的导数项为:{1,t},...,g_{c,t}...g_{n,t}>
根据 w 的初始化,导数值可能很小(想象一下 {1,t},...,g_{c,t}...g_{n,t}> 函数在输入较大时的梯度)而导致收敛变慢,而训练途中也可能因为该值过小而提早终止训练(梯度消失)。{1,t},...,g_{c,t}...g_{n,t}>
另一方面,交叉熵的梯度如下,当模型输出概率偏离于真实概率时,梯度较大,加快训练速度,当拟合值接近于真实概率时训练速度变缓慢,没有 MSE 的问题。{1,t},...,g_{c,t}...g_{n,t}>
引用
{1,t},...,g_{c,t}...g_{n,t}>