2.2.4 回归问题与回归算法
图2.10 回归分析示意图
“回归”一词是Francis Galton在19世纪创造的,用来描述一种生物现象,即身材高大的祖先,其后代的身高趋向于回归到一个正常的平均值(这种现象也被称为向平均数回归)。对于Galton来说,回归只有这种生物学意义,但他的工作后来被Udny Yule和Karl Pearson扩展到了更普遍的统计学背景下。
最早的回归形式是最小二乘法[11],由Legendre和Gauss在1805年和1809年分别发表。Legendre和Gauss都应用该方法从天文观测数据中确定了彗星围绕太阳的轨道。
在统计建模中,回归分析是一套用于估计因变量(通常称为“结果变量”)和一个或多个独立变量(通常称为“预测因子”“协变量”或“特征”)之间关系的统计过程。回归分析最常见的形式是线性回归,如图2.10所示,即根据特定的数学标准找到最符合数据的线(或更复杂的线性组合)。例如,普通最小二乘计算出真实数据与预测线(或预测超平面)的误差平方和最小的情形。
回归算法属于有监督机器学习算法家族。有监督机器学习算法的主要特点之一是对目标输出和输入特征之间的依赖性和关系进行建模,以预测新输入数据的输出数值。回归算法根据系统中输入数据的属性特征来预测输出值。下面介绍几种典型的回归算法,以便于读者理解回归问题的处理。
2.2.4.1 线性回归
在统计学中,线性回归是一种线性方法,用来模拟因变量与一个或多个自变量(也称为解释变量或独立变量)之间的关系。
在线性回归中,使用线性预测函数对关系进行建模,其未知的模型参数是从数据中估计出来的,这些模型被叫作线性模型。最常用的线性回归建模方法是,将给定自变量X的因变量y的条件均值作为X的仿射函数。有时候,线性回归模型可以是一个因变量的中位数或一些其他分布的分位数作为X的线性函数表示。和所有形式的回归分析一样,线性回归也主要考虑给定自变量X的因变量y的条件概率分布,而不是X和y的联合概率分布(多元分析领域)。
线性回归是回归分析中第一种经过严格研究并在实际应用中广泛使用的类型。这是因为线性回归的模型容易拟合,而且产生的估计的统计特性也更容易确定。线性回归有很多实际用途,可分为以下两类:
●对观测数据集拟合出一个预测模型,用这个拟合模型预测新自变量观测值所对应的因变量值。
●给定一个变量y和一些变量X1,X2,…,Xp,线性回归分析用来量化y与Xj之间相关性的强度,评估与y不相关的Xj,并识别哪些Xj的子集包含关于y的冗余信息。
线性回归模型经常用最小二乘法逼近来拟合。单一标量自变量x和单一标量因变量y的最简单情况被称为简单线性回归。扩展到多个自变量(用大写字母X表示)的情况称为多元线性回归。多元线性回归是简单线性回归的泛化,它的基本模型是
y=β0+β1X1+β2X2+…+βpXp+ε
其中,y为因变量,X1,X2,…,Xp为自变量,βi为系数,ε为干扰项或误差变量。将Xi和βi改写成矩阵形式,上式变为
那么线性回归模型产生的因变量的预测值为
在最小二乘法中,最佳参数被定义为使均方误差之和最小。假设已知自变量与因变量数据有n个,省略掉常数系数1/n之后有
现在把自变量和因变量分别放在矩阵X和Y中,损失函数可以改写为
由于损失函数是凸的,取最佳解时,梯度为零。损失函数的梯度为
将梯度设置为零,得到等式
因此,线性回归的所有系数βi可以通过上式计算得到,从而建立起线性回归模型。为了证明所得到的βi确实是局部最小值,需要再进行一次微分,得到Hessian矩阵,并证明它是正定的。这可以参考高斯-马尔可夫定理。
2.2.4.2 过拟合与正则化
线性回归的优点是结果易于理解,计算不复杂。但是,由于最小二乘法需要计算矩阵的逆,所以有很多限制,比如矩阵不可逆,或者矩阵中有多重共线性的情况,会导致计算矩阵的逆时行列式接近0,还有可能在训练模型的时候有过拟合的情况。
图2.11的第一个模型是一个欠拟合的线性模型,不能很好地适应训练集。我们看看这些数据,很明显,随着房屋面积的增大,房屋价格的变化趋于稳定或者说越往右越平缓。因此线性回归并没有很好地拟合训练数据,称为欠拟合,或者叫作高偏差。
图2.11 欠拟合、合适与过拟合示例图
图2.11的第三个模型是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质(预测新数据)。可以看出,若给出一个新的值进行预测,它将表现得很差。虽然模型能非常好地适应训练集,但在输入新变量进行预测时可能效果不好。这被称为过拟合或者高方差。图2.11的第二个模型似乎最合适。
图2.12是一个分类问题。分类问题可以从多项式的角度理解,次数越高,拟合得越好,但相应的预测能力可能变差。问题是,如果我们发现了过拟合问题,应该如何处理?
●丢弃一些不能帮助我们进行正确预测的特征。可以手工选择保留哪些特征,或者使用一些模型选择的算法(例如PCA)。
●正则化。保留所有的特征,但是减小参数的大小。
图2.12 分类问题示例图
正则化损失函数,假设上面的回归问题使用的模型是
假设特征属性是4个,则有
式中的高次项导致了过拟合的产生,所以如果我们能让这些高次项的系数接近0,就能很好地拟合了。所以我们要做的就是在一定程度上减小参数β的值,这就是正则化的基本方法。
我们决定减少β3和β4的大小,所要做的便是修改损失函数,为β3和β4设置一点惩罚。这样,在尝试最小化损失时也需要将惩罚纳入考虑,并最终导致选择较小一些的β3和β4。修改后的损失函数为
通过这样的代价函数选择出的β3和β4对预测结果的影响比之前小许多。假如有非常多的特征,我们并不知道其中的哪些特征需要惩罚。在这种情况下,我们将对所有的特征进行惩罚,并且让损失函数最优化的算法来选择惩罚程度,这样就得到了一个更简单的可以防止过拟合问题的假设:
其中λ称为正则化参数(regularization parameter)。注意:根据惯例我们不对β0进行惩罚。经过正则化处理的模型与原模型的可能对比如图2.13所示。
如果选择的正则化参数λ过大,则会把所有的参数都最小化,导致模型变成=β0,也就是图2.13中直线所示的情况,造成欠拟合。所以对于正则化,必须选取一个合理的λ值。
图2.13 正则化处理的模型与原模型对比示例图
正则化的作用如下:
●防止过拟合。
●利用先验知识,体现了人对问题的解的认知程度或者对解的估计。
●有助于处理条件数(condition number)不好的情况下矩阵求逆困难的问题。
●平衡了偏差(bias)与方差(variance)、拟合能力与泛化能力、经验风险(平均损失函数)与结构风险(损失函数+正则化项)。
●产生了稀疏性(sparsity),减少了特征向量的个数,降低了模型的复杂度。
正则化符合奥卡姆剃刀原理。奥卡姆剃刀原理应用于模型选择时采用以下想法:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单的模型才是最好的模型,也就是应该选择的模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率,可以假设复杂的模型有较大的先验概率,简单的模型有较小的先验概率。
稀疏性的作用如下:
●特征选择:稀疏性能实现特征的自动选择。在事先假定的特征(或自变量)中,有很多自变量或特征对输出的影响较小,可以看作不重要的特征或自变量。而正则化项会自动对自变量或特征的系数参数进行惩罚,令某些特征或自变量的参数(权重系数)为0或接近0,从而自动选择主要自变量或特征(类似于PCA)。
●可解释性:稀疏使模型更容易解释。抓住影响问题的主要方面(因素)更符合人们的认知习惯。
常用的正则化有L1和L2两种。L2正则化也叫L2范数,表示欧氏距离(参数平方值求和)。L1正则化也叫L1范数,表示曼哈顿距离(参数绝对值求和)。
线性回归的损失函数为
特征属性的个数为m,样本数为n。那么,加入L2正则化项之后,损失函数变为
L2正则化通过减小参数值来降低模型复杂度,即只能将参数值不断减小但永远不会减小到0。加入L1正则化项之后,损失函数变为
L1正则化通过稀疏化(减少参数数量)来降低模型复杂度,即可以将参数值减小到0。结合L1正则化项和L2正则化项,损失函数变为
L1和L2只是比较常用的范数,如果推广到一般情况,可以有多种正则化。q范数的损失函数的一般形式如下:
2.2.4.3 带L2正则化项的线性回归——岭回归
在多元线性回归中,各个参数系数的获得可以通过搜索损失函数
并使其最小化获得。通过对各个特征属性变量求导,获得各个参数系数的值,用矩阵表示为
这个公式有一个问题:X不能为奇异矩阵,否则无法求解矩阵的逆。岭回归的提出恰好可以很好地解决这个问题,它的思路是:在原先的β的最小二乘估计中加一个小扰动λI,这样就可以保证矩阵的逆可以求解,使得问题稳定。因此,损失函数变为
求解β得到
2.2.4.4 带L1正则化项的线性回归——LASSO回归
LASSO回归形式上与岭回归非常相似,只是将平方换成了绝对值。损失函数变为
2.2.4.5 logistic回归(逻辑回归)
从大的类别上来说,logistic回归(或称logit回归、对数概率回归、罗吉斯回归)是一种有监督的统计学习方法,主要用于对样本进行分类。线性回归模型的输出变量是连续的,logistic回归的输入可以是连续的,但输出一般是离散的,即只有有限多个输出值。例如,其值域可以只有两个值{0,1},表示对样本的某种分类,如高/低、患病/健康、阴性/阳性等,这就是最常见的二分类logistic回归。通过logistic回归模型,可以将在整个实数范围上的自变量x值映射到有限个输出值上,这样就实现了对x的分类。
logistic回归也被称为广义线性回归,它与线性回归模型的形式基本上相同,其区别在于因变量不同。
1. logit变换
我们在研究某一结果y与一系列因素(x1,x2,…,xn)之间的关系时,最直白的想法是建立因变量和自变量的多元线性关系:
其中,(β0,β1,β2,…,βm)为模型的参数,如果因变量是数值型的话,可以解释成因素xi的变化导致结果y发生了多少变化。如果因变量y用来刻画结果是否(0-1)发生,或者更一般的,用来刻画某特定结果发生的概率(0~1)呢?这时候因素xi的变化导致的结果y的变化恐怕微乎其微,有时候甚至可以忽略不计。然而实际生活中,我们知道某些关键因素会直接导致某一结果的发生,如亚马逊雨林一只蝴蝶偶尔振动翅膀,就会引起两周后美国得克萨斯州的一场龙卷风。于是,我们需要让不显著的线性关系变得显著,使得模型能够很好地解释随因素的变化,结果也会发生较显著的变化。这时候,人们想到了logit变换,图2.14是其对数函数图像。
图2.14 对数函数图像
从图2.14来看,函数在(0,1)之间的因变量的变化是很迅速的,也就是说自变量的微小变化会导致因变量的巨大变化,这符合之前想要的效果。于是,对因变量进行对数变换,右边依然保持线性关系,得到
上式解决了因变量随自变量变化的敏感性问题,同时将y的取值范围约束在(0,+∞)。我们知道概率是用来描述某件事发生的可能性的,一件事情发生与否,应该是调和对称的,也就是说该事件发生与不发生有对立性,结果可以走向必然发生(概率为1),也可以走向必然不发生(概率为0),概率的取值范围为(0,1)。而式(2.16)左边y的取值范围是(0,+∞),所以需要进一步压缩,由此引进了概率。
2. 概率
概率(odd)是指事件发生的概率与不发生的概率之比,假设事件A发生的概率为p,不发生的概率为1-p,那么事件A的概率为
概率恰好反映了某一事件的两个对立面,具有很好的对称性,如表2.10所示。
表2.10 概率关系表
(续)
首先,我们看到p从0.01不断增大到0.99,p/(1-p)也从0.01随之不断变大到99,两者具有很好的正相关系,我们再对p向两端取极限,得到
于是,概率的取值范围就在(0,+∞),这符合我们之前对因变量取值范围的假设。
3. logistic模型
正因为p和p/(1-p)有如此密切的对等关系,于是想能不能用p/(1-p)代替p来刻画结果发生的可能性大小,这样既能满足结果对特定因素的敏感性,又能满足对称性。于是便有了下面的式子:
现在,我们稍微改一改,让等式左边的对数变成自然对数(ln=loge),等式右边改成向量乘积形式,便有
其中,β=(β0,β1,β2,…,βm),X=(x1,x2,x3,…,xm)T,解得
图2.15 logistic函数图像
其中e是自然常数,保留5位小数是2.71828。这就是我们常见的logistic模型表达式,其函数图像如下(图2.15)。
我们看到logistic函数图像是一条S形曲线,又名sigmoid曲线,以(0,0.5)为对称中心,随着自变量x的不断增大,其函数值不断增大并接近1,随自变量x的不断减小,其函数值不断降低并接近0,函数的取值范围在(0,1)之间,且函数曲线在中心位置变化速度最快,在两端的变化速率较慢。
可以看到,逻辑回归模型在最初的线性回归模型基础上对因变量进行logit变换,使得因变量对自变量显著,同时约束因变量取值范围为0到正无穷大,然后用p/(1-p)表示概率,最后求出概率关于自变量的表达式,把线性回归的结果压缩在(0,1)范围内。这样,最后计算出的结果是一个0到1之间的概率值,表示某事件发生的可能性大小,可以做概率建模,这也是逻辑回归的原因。
4. 二分logistic回归模型
logistic回归把结果压缩到连续的区间(0,1),而不是离散的0或者1,因此我们可以取定一个阈值,通常以0.5为阈值,然后对比概率值与阈值的大小关系。如果计算出来的概率大于0.5,则将结果归为一类(取值为1),如果计算出来的概率小于0.5,则将结果归为另一类(取值为0),用分段函数写出来便是
选择0.5作为阈值是一种一般的做法,实际应用时针对特定的情况可以选择不同阈值。如果对正例的判别准确性要求高,可以选择大一些的阈值,如果对正例的召回要求高,则可以选择小一些的阈值。
利用条件概率分布模型给出基于概率的二项logistic模型如下:
其中,X表示自变量,y表示因变量所属的类别,β为模型待求的参数。模型解释为在特定的因素下,模型结果取1的概率和取0的概率。模型建好了,接下来就需要进行机器训练,而怎么为训练提供一种恰当反馈呢?答案是损失函数,通过损失函数来评估模型学习的好坏和改进机制。
5. 损失函数
由前面阈值的取定原则可知,我们用一个类别值代替概率值,而类别值是sigmoid函数的两个最值,概率不可能时时刻刻都取到最值,这势必会造成误差,我们把这种误差称为损失。为了给出损失函数表达式,我们假设模型第i个样本所求的概率值为pi,而真实类别值可能是0或者1。
在类别真实值是1的情况下,所求的概率值pi越小(越接近0),被划为类别0的可能性越大,被划为类别1的可能性越小,导致的损失越大。反之,所求的概率值pi越大(越接近1),被划为类别1的可能性越大,被划为类别0的可能性越小,导致的损失越小。我们用函数-logpi来描述这种变化关系,其中概率值pi∈(0,1)。
如图2.16所示,在类别真实值是0的情况下,所求的概率值pi越大(越接近1),其结果的类别判定更偏向于1,导致的损失越大。反之,所求的概率值pi越小,越接近0,其结果的类别判断更偏向于0,导致的损失越小。我们用函数-log(1-pi)来描述这种变化关系,其函数图像如图2.17所示。
图2.16 -logpi函数图像
图2.17 -log(1-pi)函数图像
现在把两种情况结合起来,不需要分真实值是1还是0,求出其期望值,得到交叉熵(cross entropy)的整体损失函数:
其中,yi表示第i个样本的真实值,pi是根据模型计算出来的概率值,当yi=1时,costi=-log(pi),当yi=0时,costi=-log(1-pi),这符合前面两种情况。
假设现在有m个样本,总体的损失函数为
代入,则有
上式就是二项逻辑回归的损失函数,是一个关于参数β和X的二元函数,也叫对数似然函数。现在问题转化为以对数似然函数为目标函数的最优化问题,其中β为模型待求的参数,为了求参数β,可以对目标函数求偏导数,记
对L(X|β)求关于β的偏导,主要是对数函数关于β的偏导数求解,假设θ是β向量中的某一个变量,则有
其中,c=ln a,a为对数底数,,求出θ值,然后代入模型便是学到的logistic模型。
2.2.4.6 决策树回归
回归树(regression tree),顾名思义,就是用树模型做回归问题,每一个叶子节点都输出一个预测值。预测值一般是该叶子节点所含训练集样本的输出的均值,决策树也可以应用于回归问题。
CART算法是第一个同时支持分类和回归的决策树算法。在分类问题中,CART使用基尼指数或基尼增益作为选择特征及其分割点的依据;在回归问题中,CART使用均方误差或者平均绝对误差作为选择特征及其分割点的依据。
除了CART算法外,随机森林、GBDT、XGBoost、LightGBM等都支持对回归问题的处理。与构建决策树类似,构建回归树时需要考虑的问题是,选择哪一个属性对当前的数据进行划分。与分类决策树不一样的地方在于,需要预测的属性是连续的,因而在叶子节点选择什么样的预测模型也很关键。