NLP 手册

线性回归

Posted by Pelhans on July 5, 2019

面试和自己学着玩有很大差别,学着玩你可以嘴上说的溜,手上推个大概就行了(就是学的水)。但面试要求推得准确,同时在推得过程中有自己的思考,面对面试官提出的问题能根据自己的所学进行相应的推导。部分重要的算法还要能手写代码。当然面试还有一些 “必备” 问题列表,都是需要准备的。

线性回归

问题的定义

回归问题的目标是在给定 D 维输入(input) 的情况下,预测一个或者多个连续目标(target)变量 y 的值。线性回归模型有着可调节的参数,具有线性函数的性质。

给定数据集 , 其中 , $\tilde{y}_{i}\in Y\in R $. 线性回归问题试图学习模型:

该问题也被称为多元线性回归模型。对于每个 ,其预测值为:

采用平方损失函数,则在训练集上,模型的损失函数为:

优化目标是损失函数最小化。最小化的方式一般有两种,即最小二乘法和梯度下降法。

最小二乘法

最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。通过它可以获得该问题的解析解。

令:

带入有:

为了求 L(w) 的极小值,需要对 求导,并令导数零,从而得到解析解。

上式利用了矩阵求导公式:

现在要考虑矩阵的奇异性,当 为非奇异矩阵(不满秩),则上式有无穷解或无解。如果它为非奇异矩阵(满秩且行列式的值不为0),那么此时有且只有唯一解。

  • 为满秩矩阵时,可得:

  • 非满秩矩阵,此时存在多个解析解,它们都能使得均方误差最小化。究竟选择哪个由算法偏好决定。当样本数量小于特征种类的数量时,不是满秩矩阵。

梯度下降法就是在上面基础上对每个变量分别进行求导,而后代入更新公式每步更新即可。

正则化

由于最小二乘法需要计算矩阵的逆,所以有很多的限制,比如矩阵不可逆,又或者矩阵中有多重共线性的情况,会导致计算矩阵的逆的时候行列式接近0,对数据很敏感,还有可能在训练模型的时候有过拟合的情况出现,因此可以引入正则化,当引入 L1 正则化时,称作 Lasso Regression, L2 时叫 Ridge Regression, 同时包含 L1、L2的叫 Elastic Net。

所谓共线性是指如果存在一组不全为零的系数 $a_{0}, a_{1}, \dots, a_{n}$,使得 $a_{0}X_{0} + a_{1}X_{1} + \dots + a_{n}X_{n} = 0 $,则称该模型存在完全共线性。如果还存在随机误差 $\nu$,满足 $E(\nu) = 0, E(\nu^{2}) < \infty$。使得 $a_{0}X_{0} + a_{1}X_{1} + \dots + a_{n}X_{n} + \nu = 0 $,则称模型存在非完全共线性。如果线性回归模型存在完全共线性,那么回归系数的估计不存在。因此线性回归分析中所谈到的共线性主要是非完全共线性,也成多重共线性。可以采用 特征分析法、条件数法和方差扩大因子法等。

多重共线性会使得参数估计值的方差增大,计算矩阵的逆后得到的模型系数往往也比较大(行列式接近0),这样模型会很不稳定。而 L2 正则化使得权重更加接近原点,不重要的分量会在训练过程中衰减。L1 正则化能大幅度简化模型,减少参数的数量,解更稀疏,从一定程度上解决 多重共线性的问题。

为什么用平方损失函数?

在误差服从正态分布的前提下,与极大似然估计的思想在本质上相同,也就是说不是我们特意去选择 MSE 作为线性回归损失函数而是因为我们假设误差服从正态分布,使用极大似然法来求解参数,进一步推到之后得到的MSE 公式。

假设目标变量 t由 确定的函数$y(x,w)$ 给出,这个函数被附加了高斯噪声,即 $t = y(x,w) + \epsilon$。其中$\epsilon$ 是一个零均值的高斯随机变量,精度为 $\beta$。因此整体的分布为:

假设数据遵从独立同分布,因此似然函数为:

取似然函数的对数,使用一元高斯分布的 标准形式:

我们有:

其中$ E_{D}(w)$ 定义为:

至此我们得到的MSE 损失函数。

回归分析的五个基本假设

回归分析的五个基本假设 博客给了比较全面的总结,这里概要一下。五个基本假设为:

  • 线性性和可加性:线性性是 Y 随 X 线性变化,可加性是X对Y的影响独立于其他变量。不满足会导致很大的泛化误差
  • 误差项($\epsilon$)之间相互独立:若不满足这一项则称模型具有自相关性。导致标准差变小,置信区间变窄。
  • 自变量之间应相互独立:若不满足则称模型具有多重共线性。会标准差变大。
  • 误差项(\epsilon$)的方差应为常数
  • 误差项应呈正态分布

逻辑回归与线性回归有何异同

  • 逻辑回归处理的是分类问题,线性回归处理的是回归问题,这是最本质的区别。逻辑回归中,因变量的取值y是一个二元分布,模型学习得出的是 $E[y | x; \theta]$,并基于此来处理预测分类问题。而线性回归实际上是学习 $y = \theta^{T}x$,并对新值进行预测。
  • 逻辑回归的因变量是离散的,而线性回归的因变量是连续的。在自变量x与参数确定的情况下,逻辑回归可以看做广义线性模型在因变量y服从二元分布时的特殊情况。而线性回归中y服从正态分布。

当然两者都属于广义线性模型,线性回归优化目标函数用的最小二乘法,而逻辑回归用的是最大似然估计。逻辑回归只是在线性回归的基础上,将加权之和通过 sigmoid 函数,映射到 0−1范围内空间。

简要介绍一下线性回归原理,处理步骤,怎么确定因变量与自变量间线性关系,什么情况下可停止迭代,怎么避免过拟合情况?

原理略,处理步骤包含缺失值处理、类别变量数值化,异常值处理,连续特征离散化等等。当两次迭代所有参数的变化量小于事先给定的阈值时,或者达到事先设定的最大迭代次数,则停止迭代过程,过拟合没法避免只能说是尽量降低过拟合的影响,通过l1、l2正则化、减少特征的数量、增大样本的数量等等。

为什么线性回归和逻辑回归要用对特征进行离散化?

摘自博客: 连续特征如何离散化,为什么要离散化,常用于逻辑回归模型

  • 离散特征的增加和减少都很容易,易于模型的快速迭代
  • 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展
  • 离散化后的特征对异常数据有很强的鲁棒性
  • 逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性(分段线性函数),能够提升模型表达能力,加大拟合
  • 离散化后可以进行特征交叉,加入特征A 离散化为M个值,特征B离散为N个值,那么交叉之后会有M*N个变量,进一步引入非线性,提升表达能力
  • 特征离散化后,模型会更稳定
  • 特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险

如何检测与处理共线性?

多重共线性的诊断一般可采用如下几种方法:

  • 自变量的相关系数矩阵R诊断法:研究变量的两两相关分析,如果自变量间的二元相关系数值很大,则认为存在多重共线性。但无确定的标准判断相关系数的大小与共线性的关系。有时,相关系数值不大,也不能排除多重共线性的可能。
  • 方差膨胀因子(the variance inflation factor,VIF)诊断法:方差膨胀因子表达式为:。其中Ri为自变量xi对其余自变量作回归分析的复相关系数。是指解释变量之间存在多重共线性时的方差与不存在多重共线性时的方差之比。容忍度的倒数,VIF越大,显示共线性越严重。经验判断方法表明:当0<VIF<10,不存在多重共线性;当10≤VIF<100,存在较强的多重共线性;当VIF≥100,存在严重多重共线性。
  • 条件数与特征分析法: 在自变量的观测值构成的设计矩阵X中,求出变量相关系数R的特征值,如果某个特征值很小(如小于0.05 ),或所有特征值的倒数之和为自变量数目的5倍以上,表明自变量间存在多重共线性关系。