【机器学习】线性回归之Normal Equation(矩阵求导与线性代数视角)

39 篇文章 3 订阅
24 篇文章 53 订阅

Normal Equation

之前我们用梯度下降来求解线性回归问题的最优参数,除此之外我们还可以用正规方程法(Normal Equation)来求解其最优参数。

Normal Equation方法的推导有两种方式

矩阵求导(matrix derivative)

其中(X\theta)^T=\theta^TX^T

其中X的行表示样本,列表示特征:

令导数等于零:

因此:

关于矩阵求导的公式可以参见:常用的向量矩阵求导公式

下面解释一下部分求导的过程:


线性代数视角

一、求解不可解的方程组

先看一个最最简单的例子——

例1.0 如图,在R^2空间中有两个向量,求一个常数\theta使两个向量满足\theta \overrightarrow{a} =\overrightarrow{b}

这个方程明显不可解,因为\overrightarrow{b}\overrightarrow{a}不共线,无法通过对\overrightarrow{a}数乘得到\overrightarrow{b}

再看下一个比较简单的例子——

例2.0 R^3空间中的平面P有一组基\overrightarrow{a_1}\overrightarrow{a_2},如图所示,求出常数\theta_1\theta_2使向量\overrightarrow{b}满足条件\theta_1\overrightarrow{a_1}+\theta_2\overrightarrow{a_2} =\overrightarrow{b}

这个方程也明显不可解,因为\overrightarrow{b}不在平面P上,而\overrightarrow{a_1}\overrightarrow{a_2}的线性组合只能得到平面上的向量

以上两个问题非常的典型,因为在解决实际问题的时候,我们很难得到Perfect Solution,我们只能尽力而为的争取Best Solution。以上两个例子明显没有做到perfect(连基本的方向都错了),那么如何找到Best Solution呢?

二、投影的应用(Projection

思路很简单:我们只要找到一个\theta^*使\overrightarrow{a}方向上的向量\overrightarrow{p} =\theta^* \overrightarrow{a}距离\overrightarrow{b}最近。

回到最简单的例子例1.0,这里重复一遍

如图,在R^2空间中有两个向量,求一个常数\theta使两个向量满足\theta \overrightarrow{a} =\overrightarrow{b}

现在应该如何寻找\theta \overrightarrow{a} =\overrightarrow{b}的解呢?

最好的方法就是抛弃\overrightarrow{b}向量中垂直\overrightarrow{a}的分量,只要计算\theta使\theta \overrightarrow{a}等于向量\overrightarrow{b}\overrightarrow{a}方向的分量(即\overrightarrow{b}\overrightarrow{a}上的投影(Proj)\overrightarrow{p}),同时我们把向量\overrightarrow{b}垂直\overrightarrow{a}方向的分量称为\overrightarrow{e}(error)

原来的问题\theta \overrightarrow{a} =\overrightarrow{b}变成了求解\theta^* \overrightarrow{a} =\overrightarrow{p}\theta^*\theta的估计量

因为\overrightarrow{p}\overrightarrow{e}合成了\overrightarrow{b}向量(\overrightarrow{e} +\overrightarrow{p}= \overrightarrow{b}),而且\overrightarrow{e}垂直于\overrightarrow{a}(\overrightarrow{e}\bot  \overrightarrow{a}),所以我们得出了一个非常重要的结论(敲黑板)!!!核心啊!!!

\overrightarrow{a}^T(\overrightarrow{b}-\theta^*\overrightarrow{a} ) = 0

这个方程的核心就是写成向量内积形式的\overrightarrow{e}\overrightarrow{a}的垂直关系,只不过\overrightarrow{e}被拆开书写。其实这个方程也可以写作\overrightarrow{a}\times (\overrightarrow{b}-\theta^*\overrightarrow{a} ) = 0,但是写作转置向量\overrightarrow{a}^T的形式可以让这个方程更自然的拓展到高维(向量内积)。好了,我们继续改写方程……

\theta^*\overrightarrow{a}^T \overrightarrow{a} =   \overrightarrow{a}^T\overrightarrow{b}
\theta^* = \frac{\overrightarrow{a}^T\overrightarrow{b}}{\overrightarrow{a}^T\overrightarrow{a}}

在这一步我们就得到了best\theta,但考虑到这并不perfect,所以我们称之为\theta^*

P.S.如果想用投影矩阵P来简化从\overrightarrow{a}转换到\overrightarrow{p}的过程,可以把\theta^*的结果带入到\overrightarrow{p} =\theta^* \overrightarrow{a}中。我们发现投影矩阵P在形式上就等于乘数\theta^* = \frac{\overrightarrow{a}^T\overrightarrow{b}}{\overrightarrow{a}^T\overrightarrow{a}},即\overrightarrow{p}满足\overrightarrow{p} =P\overrightarrow{a}

向量a·向量b=| a |*| b |*cosΘ
Θ为两向量夹角
| b |*cosΘ叫做向量b在向量a上的投影
| a |*cosΘ叫做向量a在向量b上的投影

\theta^* = \frac{\overrightarrow{a}^T\overrightarrow{b}}{\overrightarrow{a}^T\overrightarrow{a}}分子为\overrightarrow{b}\overrightarrow{a}上的投影,分母为\overrightarrow{a}\overrightarrow{a}上的投影,同乘了\overrightarrow{a}向量的模,投影的比值即为\theta^*

现在我们再看看怎么在R^3中解决不可解方程。

例2.0 在R^3空间中的平面P有一组基\overrightarrow{a_1}\overrightarrow{a_2},如图所示,求出常数\theta_1\theta_2使向量\overrightarrow{b}满足条件\theta_1\overrightarrow{a_1}+\theta_2\overrightarrow{a_2} =\overrightarrow{b}

平面P有基向量\overrightarrow{a_1}\overrightarrow{a_2},故投影P可以表示成基的线性组合\theta_1\overrightarrow{a_1}+\theta_2\overrightarrow{a_2},即\begin{bmatrix}a_1 a_2\end{bmatrix}\begin{pmatrix}\theta_1 \\\theta_2\end{pmatrix}

基向量组成的矩阵A=\begin{bmatrix}| \ \ |\\a_1 a_2\\| \ \ |\\\end{bmatrix}参数组成的向量\overrightarrow{\theta} = \theta_{1 \dots n} \ (n = 2)与平面垂直的误差向量\overrightarrow{e} = \overrightarrow{b}-A \overrightarrow{\theta^*}。(这里插一句话,最小二乘法的核心就是找出一个\theta^*就是让\left|| A\theta-b \right||^2最小化

我们发现在R^2中的问题\theta \overrightarrow{a} =\overrightarrow{b}在这里拓展成为了A\overrightarrow{\theta }=\overrightarrow{b}

相应的,\theta^* \overrightarrow{a} =\overrightarrow{p}问题在这里拓展成了A\overrightarrow{\theta^*}=\overrightarrow{p},其中

还是一样的套路,我们还是从垂直关系入手——因为P \bot \overrightarrow{e},而且,所以有以下方程组——

\begin{cases}\overrightarrow{a_1}^T(\overrightarrow{b}-A\overrightarrow{\theta^*})=0\\\overrightarrow{a_2}^T(\overrightarrow{b}-A\overrightarrow{\theta^*})=0\end{cases}

整理成矩阵的形式——

\begin{bmatrix}-\overrightarrow{a_1}^T-\\-\overrightarrow{a_2}^T-\\\end{bmatrix}(\overrightarrow{b}-A\overrightarrow{\theta^*})=0

(敲黑板!!!敲黑板!!!)
A^T(\overrightarrow{b}-A\overrightarrow{\theta^*})=0

写到这里回头看看R^2情景下的核心公式\overrightarrow{a}^T(\overrightarrow{b}-\theta^*\overrightarrow{a} ) = 0,可以这家伙换一套马甲又出现了!!!看来方程A^T(\overrightarrow{b}-A\overrightarrow{\theta^*})=0是一种高维的拓展。我们可以把R^2中的\overrightarrow{a}看成一个只有一列的矩阵。

我们继续整理这个公式——

A^T\overrightarrow{b} = A^TA\overrightarrow{\theta}
\overrightarrow{\theta} = (A^TA)^{-1}A^T\overrightarrow{b}

写到这里我们就没什么可以干的了。

有人可能想说——明明还可以继续化简啊!!!

\begin{equation}\begin{split}\overrightarrow{\theta} &= (A^TA)^{-1}A^T\overrightarrow{b}\\& = A^{-1}(A^T)^{-1}A^T\overrightarrow{b}\\& = A^{-1}\overrightarrow{b}\end{split}\end{equation}

但实际的情况中,我们不能保证矩阵A总是方阵(square),但是A^TA总是可以保证是方阵。因为只有方阵才有逆矩阵,所以我们只能保证有(A^TA)^{-1},而不能保证有A^{-1}

所以我们只能回到\overrightarrow{\theta} = (A^TA)^{-1}A^T\overrightarrow{b}这里。如果你有读过Andrew Ng著名的公开课CS229的Lecture Notes,你一定记得他用矩阵求导得出的Normal Equation——

你会发现除了\overrightarrow{y}\overrightarrow{b}不一样以外,我们已经把Normal Equation(\overrightarrow{\theta} = (A^TA)^{-1}A^T\overrightarrow{b})推出来了……我居然在下一部分还没有开始讲就把内容说完了,场面一度非常尴尬啊。可见从投影推出Normal Equation是一件多么自然的事情啊~~~我都不知道哪里切开。

说到这里先总结一下投影的几个意义(敲黑板)!!!

A\overrightarrow{\theta}的所有可能结果都在一个固定的区域中,在线性代数中我们称这个区域为列空间(column space),列空间顾名思义就是矩阵各列的所有线性组合\overrightarrow{\theta_1}\overrightarrow{a_1}+\overrightarrow{\theta_2}\overrightarrow{a_2}+\dots+\overrightarrow{\theta_n}\overrightarrow{a_n}。在1-D的情况下列空间就是一条线,在2-D的情况下列空间就是一个平面。但是我们的数据哪里会这么恰好的落在矩阵的列空间里呢?天底下哪有这样的好事啊!!!

特别是在数据量特别大的情况下,矩阵特别是在数据量特别大的情况下,矩阵A会成为一个n\gg  m的超级高大的n\times m矩阵(如下图)。在这种等式数量远大于未知数数量的情况中,我们很难满足每一个等式的约束。A = \begin{bmatrix}1 & 1\\1 & 2\\. & .\\. & .\\ . & .\\1 & 3\\\end{bmatrix}

但是目标不再在空间里并不代表不能求出解,只能说没有perfect solution(语出Gilbert Strang),但是我们努力一下还是可以做到最好的(best solution)。我们用投影向量\overrightarrow{p}来寻找最合适的\overrightarrow{\theta^*}\overrightarrow{\theta^*}就是并不存在的完美解\overrightarrow{\theta}的估计值。

三、矩阵求导与投影推导之间的联系

回顾矩阵求导得到的Normal Equation:

以及投影视角得到的公式

\overrightarrow{\theta} = (A^TA)^{-1}A^T\overrightarrow{b}

两者除了在符号表示上有所区别,其它的一模一样,现在从符号本身的含义去联系两者。

归根结底,Normal Equation是用来求解一个最优化问题。在投影的方法中,矩阵A作为一个基向量空间,用于寻找最优的\overrightarrow{\theta^*}以使得最接近\overrightarrow{b}

矩阵A有多少行就表示基向量空间有多少维(每个特征有多少样本量,就表明在这个空间中有多少维度),有多少列,就表示有多少个基向量。

在线性回归中矩阵A就等同于X,行数为样本量,列数为特征量,b等同于Y,为目标向量。

当特征远远少于样本量的时候说明基向量的空间维数很高,但基向量很少。也就是说在一个很大的空间中,只有少数几个方向给定,需要去拟合向量Y,那难度当然很大,误差就很大。

当特征数量远远大于样本量的时候就相反,基向量空间不大,但基向量的个数很多。也就是说在一个不大的空间中,有很多的基向量,基本涵盖了所有的方向,此时我想要找到一个基向量的线性组合去逼近目标向量Y,那就容易很多了。此时\overrightarrow{\theta^*}就会强依赖于当前的样本,泛化能力就很差,过拟合。

四、Normal Equation应用

既然Normal Equation在上文都推导完了,这里我们就随便带几个数据来玩玩咯。

练手案例 找一条直线来拟合点 (1,1)、(2,2)、(3,2)

我们如果用一条直线来拟合的话,设h(\theta) = \theta_0 + \theta_1x_1,我们先得到以下值——

\overrightarrow{\theta} = \theta_{0 \dots n} \ (n = 1)

A = \begin{bmatrix}1 & 1\\1 & 2\\1 & 3\\\end{bmatrix} A^T = \begin{bmatrix}1 & 1 & 1 \\1 & 2 & 3 \\\end{bmatrix} A^TA = \begin{bmatrix}3 & 6 \\6 & 14\\\end{bmatrix} \overrightarrow{h(\theta)}= (1,2,2)^T

我们发现A\overrightarrow{\theta} =\overrightarrow{h(\theta)}很遗憾的没有解,于是我们左右各乘上A^T,祭出了投影大招——A^TA\overrightarrow{\theta^*}=A^T\overrightarrow{h(\theta^*)}

再把这个方程变换成Normal Equation:\overrightarrow{\theta^*} = (A^TA)^{-1}A^T\overrightarrow{h(\theta^*)}

带入数值在Matlab中小跑一下就得到了结果\overrightarrow{\theta^*} = \begin{pmatrix}\frac 23\\\\\frac 12 \\ \end{pmatrix}

即直线h(x) = \frac 23 +  \frac 12 x是上述三个点的拟合结果。

五、其他想说的话

1.关于A^TA\overrightarrow{\theta^*}=A^T\overrightarrow{h(\theta^*)}的暴力使用

在前一步可以不用判断是否可解,可以直接使用A^TA\overrightarrow{\theta^*}=A^T\overrightarrow{h(\theta^*)}事实上,在最小二乘时遇到长方形矩阵A^T,我们就可以用上A^TA替代A^T计算。这是是一种路子很野的但是很简单实用的经验规则,可以简单实验如下——

用直线 h(\theta) = \theta_0 + \theta_1x_1拟合三个点 (1,1)、(2,2)、(3,2)时,自然希望 真实值和估计值的误差\left \| h(\theta^*)-h(x)\right \|^2越小越好。 \begin{equation}\begin{split}error=\left \| h(\theta^*)-h(x)\right \|^2 &= (\theta_0 +\theta_1 -1 )^2+(\theta_0 +2\theta_1-2 )^2+(\theta_0 +3\theta_1 -2 )^2\\\end{split}\end{equation}

分别对\theta_0\theta_1偏导数等于的零的值——

\begin{equation}\begin{split}\partial error/\partial\theta_0&= 2(\theta_0 +\theta_1 -1 )+2(\theta_0 +2\theta_1-2 )+2(\theta_0 +3\theta_1 -2 )\\& = 6\theta_0+12\theta_1-10\\& = 0\\\end{split}\end{equation}
\begin{equation}\begin{split}\partial error/\partial\theta_0&= 2(\theta_0 +\theta_1 -1 )+2(\theta_0 +2\theta_1-2 )\times 2+2(\theta_0 +3\theta_1 -2 )\times 3\\& = 12\theta_0+28\theta_1-22\\& = 0\\\end{split}\end{equation}这边有个小笔误,是对 \theta_1做偏导做偏导

整理以上公式我们得到了方程组——

\begin{cases}3\theta_0+6\theta_1 = 5\\6\theta_0+14\theta_1 = -11\\\end{cases}

再整理一下,把这个方程写成矩阵乘法的形式——

\begin{bmatrix}3&6\\6&14\end{bmatrix}\begin{pmatrix}\theta_0\\\theta_1\end{pmatrix}= \begin{pmatrix}5\\-11\end{pmatrix}

在最后一步整理以后我们发现刚才千辛万苦算出来的\begin{bmatrix}3 & 6 \\6 & 14\\\end{bmatrix}就是上文的A^TA啊!!!

说明这个经验方法是可以信得过的!!!

2.关于化简的问题

因为投影的性质非常美妙,如果矩阵A是各行线性无关的方阵(square),说明存在A^{-1},则Normal Equation会变成如下形式——

\begin{equation}\begin{split}\overrightarrow{\theta} &= (A^TA)^{-1}A^T\overrightarrow{b}\\&=A^{-1}{A^T}^{-1}A^T\overrightarrow{b}\\&=A^{-1} \overrightarrow{b}\\\end{split}\end{equation}

说明如果存在一个perfect solution,该解不会受到影响。

3.多次投影有影响吗?

已经在空间中的向量乘上投影矩阵P仍然等于本身,二次投影不会有任何副作用!也就是说P^2 = P。证明如下——

\begin{equation}\begin{split}P^2 &= (A(A^TA)^{-1}A^T)(A(A^TA)^{-1}A^T)\\&=A(A^TA)^{-1}(A^TA)(A^TA)^{-1}A^T\\&=A(A^TA)^{-1}A^T\\&=P\end{split}\end{equation}

参考文章:

线性回归及其概率解释

NormalEquation推导过程

  • 11
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值