线性回归,顾名思义就是用线性模型来拟合数据,也就是说假设标签与特征之间存在 y i = θ T x i y_{i}=\boldsymbol{\theta}^{T} \boldsymbol{x_i} yi=θTxi这样的线性关系,线性回归中用的一般都是最小二乘估计,DataWhale的教材中给出了线性回归使用最小二乘回归的两个解释,一个是基于概率的解释,一个是基于几何的解释,这里我也照猫画虎的给出一点自己的见解。
定义一个回归问题:有带标签数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) ⋯ ( x m , y m ) } D=\{(\boldsymbol{x_1},y_1),(\boldsymbol{x_2},y_2)\cdots(\boldsymbol{x_m},y_m)\} D={ (x1,y1),(x2,y2)⋯(xm,ym)},其中 x i ∈ R d \boldsymbol{x_i}\in\mathbb R^d xi∈Rd, m m m个样本的特征组成特征矩阵 X X X,其中 X ∈ R m × d X\in\mathbb R^{m\times d} X∈Rm×d(每一行是一个样本); m m m个样本的标签组成标签向量 y = ( y 1 , y 2 ⋯ y m ) T \boldsymbol{y}=(y_1,y_2\cdots y_m)^T y=(y1,y2⋯ym)T。 我们的目的是求出未知参数 θ \boldsymbol{\theta} θ, 其中, θ ∈ R d \boldsymbol{\theta}\in \mathbb R^d θ∈Rd,使得 ∣ ∣ X θ − y ∣ ∣ 2 2 || X\boldsymbol{\theta}-\boldsymbol{y}||^2_2 ∣∣Xθ−y∣∣22最小。我们记 J ( θ ) = ∣ ∣ X θ − y ∣ ∣ 2 2 J(\boldsymbol{\theta})=|| X\boldsymbol{\theta}-\boldsymbol{y}||^2_2 J(θ)=∣∣Xθ−y∣∣22, J ( θ ) J(\boldsymbol{\theta}) J(θ)就是我们要优化的目标函数。
第一个要回答的问题就是为什么我们的目标函数要定义为 ∣ ∣ X θ − y ∣ ∣ 2 2 || X\boldsymbol{\theta}-\boldsymbol{y}||^2_2 ∣∣Xθ−y∣∣22这种形式,为什么是残差向量二范数的平方, ∣ ∣ X θ − y ∣ ∣ 2 3 || X\boldsymbol{\theta}-\boldsymbol{y}||^3_2 ∣∣Xθ−y∣∣23这样的三次方不可以吗?这样定义的背后的数学意义在哪里?
这里我们从概率出发,给出一个数学上的解释,我们考虑某单个样本 ( x i , y i ) ( \boldsymbol{x_i},y_i) (xi,yi),在参数 θ \boldsymbol{\theta} θ确定的情况下存在以下公式:
y i = θ T x i + ϵ i (1) y_{i}=\boldsymbol{\theta}^{T} \boldsymbol{x_i}+\epsilon_i \tag{1} yi=θTxi+ϵi(1)
其中, ϵ i \epsilon_i ϵi代表的是误差项,每一个样本都有一个自己的误差项 ϵ \epsilon ϵ,我们将 ϵ \epsilon ϵ看作一个随机变量,在样本间是独立同分布的,而且服从高斯分布 ϵ ∼ N ( 0 , σ 2 ) \epsilon\sim \mathcal{N}(0,\sigma^2) ϵ∼N(0,σ2) 。根据公式(1)我们可知,此时我们是将 θ \boldsymbol{\theta} θ和 x i \boldsymbol{x_i} xi看作已知量的,所以 y i y_i yi也为随机变量,且 y i ∼ N ( θ T x i , σ 2 ) y_i\sim \mathcal{N}(\boldsymbol{\theta}^{T} \boldsymbol{x_i},\sigma^2) yi∼N(θTxi,σ2), y i y_i yi的概率密度函数为:
p ( y i ∣ x i ; θ ) = 1 2 π σ exp ( − ( y i − θ T x i ) 2 2 σ 2 ) (2) p\left(y_i \mid \boldsymbol{x_i} ; \boldsymbol{\theta}\right)=\frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(y_i-\boldsymbol{\theta}^{T} \boldsymbol{x_i}\right)^{2}}{2 \sigma^{2}}\right) \tag{2} p(yi∣xi;θ)=2πσ1exp⎝⎜⎛−2σ2(yi−θTxi)2⎠⎟⎞(2)
我们知道,标签 y i y_i yi也是独立同分布的,此时已经知道了 y y y的概率分布,接下来就是求未知参数 θ \boldsymbol{\theta} θ,其实也很简单,使用极大似然估计一波带走,先求出似然函数 L ( θ ) L(\boldsymbol\theta) L(θ):
L ( θ ) = log ∏ i = 1 m 1 2 π σ exp ( − ( y i − θ T x i ) 2 2 σ 2 ) = ∑ i = 1 m log 1 2 π σ exp ( − ( y i − θ T x i ) 2 2 σ 2 ) = m log 1 2 π σ − 1 σ 2 ⋅ 1 2 ∑ i = 1 m ( y i − θ T x i ) 2 (3) \begin{aligned}L(\boldsymbol\theta)&=\log \prod_{i=1}^{m} \frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(y_i-\boldsymbol\theta^{T} \boldsymbol x_i\right)^{2}}{2 \sigma^{2}}\right) \\ &=\sum_{i=1}^{m} \log \frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(y_i-\boldsymbol\theta^{T} \boldsymbol x_i\right)^{2}}{2 \sigma^{2}}\right) \\ &=m \log \frac{1}{\sqrt{2 \pi} \sigma}-\frac{1}{\sigma^{2}} \cdot \frac{1}{2} \sum_{i=1}^{m}\left(y_i-\boldsymbol\theta^{T} \boldsymbol x_i\right)^{2} \end{aligned} \tag{3} L(θ)=logi=1∏m2πσ1exp⎝⎜⎛−2σ2(yi−θTxi)2⎠⎟⎞=i=1∑mlog2πσ1exp⎝⎜⎛−2σ2(yi−θTxi)2⎠⎟⎞=mlog2πσ1−σ21⋅21i=1∑m(yi−θTxi)2(3)
通常顺序是接着对似然函数求导,然后让导数为0,但是从公式(3)我们可以很清楚的看出,要想让 L ( θ ) L(\boldsymbol\theta) L(θ)最大,那 ∑ i = 1 m ( y i − θ T x i ) 2 \sum_{i=1}^{m}\left(y_i-\boldsymbol\theta^{T} \boldsymbol x_i\right)^{2} ∑i=1m(yi−θTxi)2就应该最小,又因为:
∑ i = 1 m ( y i − θ T x i ) 2 = ∣ ∣ X θ − y ∣ ∣ 2 2 (4) \sum_{i=1}^{m}\left(y_i-\boldsymbol\theta^{T} \boldsymbol x_i\right)^{2}=|| X\boldsymbol{\theta}-\boldsymbol{y}||^2_2 \tag{4} i=1∑m(yi−θTxi)2=∣∣Xθ−y∣∣22(4)
有意思的是,我们一开始假设 ϵ ∼ N ( 0 , σ 2 ) \epsilon\sim \mathcal{N}(0,\sigma^2) ϵ∼N(0,σ2) ,最后通过公式化简我们发现,无论 σ \sigma σ取什么值都不影响我们的结论。所以我们至此证明了,最小二乘背后的数学假设是:模型预测的残差服从均值为0的高斯分布。其实以上证明只是Generalize Linear Models模型的一个特殊情况,对Generalize Linear Models感兴趣的朋友可以看一下An Introduction to Generalized Linear Models这篇论文。
第一个问题已经解决了,第二问题是如何优化 J ( θ ) J(\boldsymbol{\theta}) J(θ)求出 θ \boldsymbol{\theta} θ,这个问题其实十分好解决,只要遇到一阶可导的优化问题,直接SGD一波带走(大雾),其实如何优化这个问题,涉及到了矩阵论的一些知识(让我回想起了以前被矩阵论课支配的恐惧),内容比较多,这里只做一个最简单的推导。
最小化 ∣ ∣ X θ − y ∣ ∣ 2 2 || X\boldsymbol{\theta}-\boldsymbol{y}||^2_2 ∣∣Xθ−y∣∣22,从矩阵论的角度,可以看作求方程组:
X θ = y (5) X\boldsymbol{\theta}=\boldsymbol{y} \tag{5} Xθ=y(5)
我们知道,当方程组方程的个数大于未知数的个数的时候,方程组称为"超定方程组",是没有解的。在我们这个线性拟合问题中,就是当样本个数 m m m大于特征维度 d d d时,为超定方程组,在绝大时候,样本的个数是远远大于特征的维度的。在矩阵论中,最小二乘问题可以看作这样一个问题:求集合 { θ ∈ R d : ∣ ∣ X θ − y ∣ ∣ i s m i n i m i z e d } \{ \boldsymbol{\theta}\in \mathbb R^d :|| X\boldsymbol{\theta}-\boldsymbol{y}|| \ is\ minimized\} { θ∈Rd:∣∣Xθ−y∣∣ is minimized} ,意思就是,虽然方程组没有解,但是在2范数意义下,存在 θ \boldsymbol{\theta} θ使得 X θ X\boldsymbol{\theta} Xθ最接近 y \boldsymbol y y。其具体求解过程如下:
设残差向量 r = X θ − y \boldsymbol r=X\boldsymbol{\theta}-\boldsymbol{y} r=Xθ−y,我们先在二维空间中进行讨论,此时, X θ X\boldsymbol{\theta} Xθ为一条直线, y \boldsymbol{y} y为空间中的一个向量,根据定义,在 X θ X\boldsymbol{\theta} Xθ这条直线上存在最优点 θ ∗ \boldsymbol{\theta^*} θ∗使得 ∣ ∣ X θ − y ∣ ∣ || X\boldsymbol{\theta}-\boldsymbol{y}|| ∣∣Xθ−y∣∣最小,这个 θ ∗ \boldsymbol{\theta^*} θ∗就是最小二乘解集合中的一个元素,如下图所示:
可以很明显的看出,当残差向量 r = X θ − y \boldsymbol r=X\boldsymbol{\theta}-\boldsymbol{y} r=Xθ−y中的 θ = θ ∗ \boldsymbol{\theta}=\boldsymbol{\theta^*} θ=θ∗时, r \boldsymbol r r垂直于 X θ X\boldsymbol{\theta} Xθ。我们知道, X θ X\boldsymbol{\theta} Xθ定义的是矩阵 X X X的列空间 C ( X ) C(X) C(X),由矩阵论中矩阵四个基本空间的知识可知,与 C ( X ) C(X) C(X)垂直的空间为矩阵 X X X的左零空间 N ( X T ) N(X^T) N(XT),所以残差向量 r ∈ N ( X T ) \boldsymbol r\in N(X^T) r∈N(XT),由左零空间的定义可知:
X T r = 0 X^T \boldsymbol r=\boldsymbol 0 XTr=0
将 r = X θ − y \boldsymbol r=X\boldsymbol{\theta}-\boldsymbol{y} r=Xθ−y代入,得到:
X T ( X θ − y ) = 0 X^T(X\boldsymbol{\theta}-\boldsymbol{y})=\boldsymbol0 XT(Xθ−y)=0
最后我们得到The normal equations(正规方程组)
X T X θ = X T y X^TX\boldsymbol{\theta}=X^T\boldsymbol y XTXθ=XTy
解此方程组即可得到最优的参数。
简单的线性模型只能拟合线性关系,在复杂的数据集中肯定无法取得好的结果,一般的方法是对原始特征进行一些特征映射(feature transform),将原始数据映射到更高维的空间中。像下面这张图一样(图来自林轩田老师的《机器学习基石》课程,一个非常棒的公开课),样本点 { ( x n , y n ) } , n = 1 , 2 , ⋯ \{(\boldsymbol{x_n},y_n)\},n=1,2,\cdots { (xn,yn)},n=1,2,⋯在原始的样本空间中只能用一个圈分割,很显然是线性不可分的,但是通过特征映射,将原始的特征空间 X \mathcal X X映射到空间 Z \mathcal Z Z中,在空间 Z \mathcal Z Z中就成线性可分了。一个大家比较熟悉的应用是SVM中的核函数,起到的作用也是特征映射。
第一次听说这个模型,公式如下所示,好像是把其他模型得到的结果当作特征,再输入一个线性模型,只不过这个线性模型没有权重,只有一个偏置。感觉这就是集成学习中的Blending和Stacking的一个简化版啊,不知道它们的区别在哪里。 y i = θ 0 + ∑ j f j ( x i ) + ϵ i y_i = {\theta_0} + \sum\limits_{j}f_{j}(x_{i}) + \epsilon_i yi=θ0+j∑fj(xi)+ϵi
决策树回归就是用一般的决策树做回归问题,常用的还是CART树,关于CART树的知识,《统计学习方法》这本书中给出了很详细的介绍,CART树是GBDT和XGboost的基础。支持向量回归可以参考周志华老师的《机器学习》,和我们上面介绍的线性回归的差别在于损失函数不同,线性回归用平方误差做损失函数,支持向量回归的损失函数设计了一个阈值 ϵ \epsilon ϵ,误差小于这个阈值 ϵ \epsilon ϵ是不计算的,我们还是以林轩田老师课中的图片当例子,图片中的tube函数就是支持向量回归中使用的损失函数,通过加了阈值 ϵ \epsilon ϵ,且使用绝对值作为误差函数,使得算法的抗噪点能力更强。