机器学习基石 之 线性回归(Linear Regression)

线性回归(Linear Regression)

理论实现

最简单的想法是

\[y \approx \sum _ { i = 0 } ^ { d } w _ { i } x _ { i } \]

线性回归的假设函数为: \(h(\mathrm{x}) = \mathrm{w}^{T} \mathrm{x}\)。类似于 perceptron 只是没有 sign 函数。

线性回归的目的是找到一个方差最小的超平面(线条),所以误差检测使用流行的方差(squared error)

\[\operatorname{err}(\tilde{y}, y) =(\tilde{y}-y)^{2} \]

in-sample / out-of-sample 误差为:

\[E _ { \mathrm { in } } ( \mathbf { w } ) = \frac { 1 } { N } \sum _ { n = 1 } ^ { N } ( \underbrace { h \left( \mathbf { x } _ { n } \right) } _ { \mathbf { w } ^ { T } \mathbf { x } _ { n } } - y _ { n } ) ^ { 2 }\\ E _ { \text {out } } ( \mathbf { w } ) = \underset { ( \mathbf { x } , y ) \sim P } { \mathcal { E } } \left( \mathbf { w } ^ { T } \mathbf { x } - y \right) ^ { 2 } \]

为了表示方便写出 in-sample 误差 \(E _ { \mathrm { in } } ( \mathbf { w } )\) 的矩阵形式:

\[\begin{aligned} E _ { \mathrm { in } } ( \mathbf { w } ) & = \frac { 1 } { N } \sum _ { n = 1 } ^ { N } \left( \mathbf { w } ^ { T } \mathbf { x } _ { n } - y _ { n } \right) ^ { 2 } = \frac { 1 } { N } \sum _ { n = 1 } ^ { N } \left( \mathbf { x } _ { n } ^ { T } \mathbf { w } - y _ { n } \right) ^ { 2 } \\ &= \frac { 1 } { N } \left\| \begin{array} { c } \mathbf { x } _ { 1 } ^ { T } \mathbf { w } - y _ { 1 } \\ \mathbf { x } _ { 2 } ^ { T } \mathbf { w } - y _ { 2 } \\ \cdots \\ \mathbf { x } _ { N } ^ { T } \mathbf { w } - y _ { N } \end{array} \right\| ^ { 2 }\\ &= \frac { 1 } { N } \left\| \left[ \begin{array} { c } - - \mathbf { x } _ { 1 } ^ { T } - - \\ - - \mathbf { x } _ { 2 } ^ { T } - - \\ \cdots \\ - - \mathbf { x } _ { N } ^ { T } - - \end{array} \right] \mathbf { w } - \left[ \begin{array} { c } y _ { 1 } \\ y _ { 2 } \\ \cdots \\ y _ { N } \end{array} \right] \right\| ^ { 2 }\\ & = \frac { 1 } { N } \| \underbrace { X } _ { N \times d + 1 } \underbrace { \mathbf { w } } _ { d + 1 \times 1 } - \underbrace { \mathbf { y } } _ { N \times 1 } \| ^ { 2 } \end{aligned} \]

那现在的任务便是

\[\min _ { w } E _ { i n } ( \mathbf { w } ) = \frac { 1 } { N } \| X \mathbf { w } - \mathbf { y } \| ^ { 2 } \]

此时的 \(E _ { \mathrm { in } } ( \mathbf { w } )\) 曲线如下:

由公式和图形可知 \(E _ { \mathrm { in } } ( \mathbf { w } )\) 是连续(continuous),可微(differentiable),凸(convex)的。那么最小化 \(E _ { \mathrm { in } } ( \mathbf { w } )\) 的必要条件(necessary condition)是:

\[\nabla E _ { \text {in } } ( \mathbf { w } ) \equiv \left[ \begin{array} { c } \frac { \partial E _ { \text {in } } } { \partial w _ { 0 } } ( \mathbf { w } ) \\ \frac { \partial E _ { \text {in } } } { \partial w _ { 1 } } ( \mathbf { w } ) \\ \cdots \\ \frac { \partial E _ { \text {in } } } { \partial w _ { d } } ( \mathbf { w } ) \end{array} \right] = \left[ \begin{array} { c } 0\\ 0\\ \cdots\\ 0\\ \end{array} \right] \]

那么现在的任务便是找出\(\mathbf{w}_{LIN}\) 使得 \(\nabla E _ { \text {in } }(\mathbf{w}_{LIN}) = 0\)

矩阵形式的多项式展开为:

\[E _ { \mathrm { in } } ( \mathbf { w } ) = \frac { 1 } { N } \| \mathrm { Xw } - \mathbf { y } \| ^ { 2 } = \frac { 1 } { N } \left( \mathbf { w } ^ { T } \mathbf { X } ^ { T } \mathbf { X } \mathbf { w } - 2 \mathbf { w } ^ { T } \mathbf { X } ^ { T } \mathbf { y } + \mathbf { y } ^ { T } \mathbf { y } \right) \]

所以其矩阵求导结果为(可类比于非向量形式):

\[\nabla E _ { \text {in } } ( \mathbf { w } ) = \frac { 2 } { N } \left( X ^ { T } X \mathbf { w } - X ^ { T } \mathbf { y } \right) \]

那么现在令其为零可求得:

\[\mathbf { w } _ { \mathrm { LIN } } = \mathrm { X } ^ { \dagger } \mathbf { y } \]

其中 \({ \dagger }\) 代表伪逆,当\(\mathrm { X }^{T} \mathrm { X }\)非奇异时也可使用 \(\mathbf { w } _ { \mathrm { LIN } } = (\mathrm { X }^{T} \mathrm { X })^{-1} \mathrm { X } \mathbf { y }\) 求得。

总结一下Linear Regression算法的实现步骤为:

  1. 通过数据集,获取输入矩阵(input matrix)和输出向量(output vector)

\[X = \underbrace{\left[ \begin{array} { c } - - \mathbf { x } _ { 1 } ^ { T } - - \\ - - \mathbf { x } _ { 2 } ^ { T } - - \\ \cdots \\ - - \mathbf { x } _ { N } ^ { T } - - \end{array} \right]}_{N \times (d+1)} \,\,\,\,\,\,\,\,\,\, \mathbf{y} = \underbrace{\left[ \begin{array} { c } y _ { 1 } \\ y _ { 2 } \\ \cdots \\ y _ { N } \end{array} \right]}_{N \times 1} \\ \]

  1. 计算伪逆 (pseudo-inverse)\(\underbrace{\mathrm { X } ^ { \dagger }}_{(d+1) \times N}\)
  2. return \(\underbrace{\mathbf { w } _ { \mathrm { LIN } }}_{d+1 \times 1} = \mathrm { X } ^ { \dagger } \mathbf { y }\)

Hat Matrix 的几何视角

下面公式的意义为对于服从统一分布的数据,经过多次抽取后训练误差的平均 \(\overline{E _ { \text {in } }}\),而其大概长下面这个样子是

\[\overline{E _ { \text {in } }} = \underset { \mathcal { D } _ { \sim P N } } { \mathcal { E } } \left\{ E _ { \text {in } } \left( \mathbf { w } _ { \text {LIN } } \text { w.r.t. } \mathcal { D } \right) \right\} = \text{noise level} \cdot \left( 1 - \frac { d + 1 } { N } \right) \]

\[\begin{aligned} E _ { \mathrm { in } } \left( \mathbf { w } _ { \mathrm { LIN } } \right) = \frac { 1 } { N } \| \mathbf { y } - \underbrace { \hat { \mathbf { y } } } _ { \text {predictions } } \| ^ { 2 } & = \frac { 1 } { N } \| \mathbf { y } - \mathrm { X } \underbrace { \mathrm { X } ^ { \dagger } \mathbf { y } } _ { \mathrm { W } _ { \mathrm { LIN } } } \| ^ { 2 }\\ & = \frac { 1 } { N } \| (\underbrace{\mathbf { I }}_{\text{identity}} - \mathrm { X } \underbrace { \mathrm { X } ^ { \dagger }) \mathbf { y } } _ { \mathrm { W } _ { \mathrm { LIN } } } \| ^ { 2 } \end{aligned} \]

这里叫 \(\mathrm { X } \mathrm { X } ^ {\dagger}\) 为 hat matrix \(H\)

image-20200414230036244

经过上述推导,可以得出 \(\hat {\mathbf { y } }= \mathrm { X }\mathbf { w } _ { \mathrm { LIN } }\) ,即 \(\hat {\mathbf { y } }\)\(\mathbf{x}_{n}\) 的线性组合,也是由 \(\mathbf{x}_{n}\) 展开的空间中的一个向量;同时由于 \(\mathbf { y }\) 是独立于该空间外的一个向量,同时由于 \(\mathbf { y }-\hat {\mathbf { y } }\) 最小,那么 \(\mathbf { y }-\hat {\mathbf { y } }\) 必然垂直于该空间。进而可以得出 \(\hat {\mathbf { y } }\)\(\mathbf { y }\) 在该空间上的一个投影,而投影矩阵便是 \(H\)。所以 \(I - H\) 也可以看作 \(\mathbf { y }\)\(\mathbf { y }-\hat {\mathbf { y } }\) 映射的投影矩阵。

可以推导得 \(\text{trace}(I - H) = N - (d + 1)\),不详细解释。物理意义是将一个\(N\)维向量向\(d+1\)维空间做投影时,其余数的自由度最多有只有\(N - (d + 1)\)

那么 noise 向量向该空间内投影后取余仍然是 \(( \mathbf { I } - \mathrm { H } )\text{noise} = \mathbf { y }-\hat {\mathbf { y } }\) ,即:

\[\begin{aligned} E _ { \text {in } } \left( \mathbf { w } _ { \mathrm { LIN } } \right) = \frac { 1 } { N } \| \mathbf { y } - \hat { \mathbf { y } } \| ^ { 2 } & = \frac { 1 } { N } \| ( \mathbf { I } - \mathrm { H } ) \text { noise } \| ^ { 2 } \\ & = \frac { 1 } { N } ( N - ( d + 1 ) ) {\| \text{noise} \|} ^ { 2 } \\ & = \frac { 1 } { N } ( N - ( d + 1 ) ) \sigma ^ { 2 } \end{aligned} \]

经过理论推导可以得出(这里不详细推导):

\[\begin{aligned} \overline{E _ { \text {in} }} &= ( 1 - \frac { d + 1 } { N } ) \sigma ^ { 2 } \\ \overline{E _ { \text {out} }} &= ( 1 + \frac { d + 1 } { N } ) \sigma ^ { 2 } \end{aligned} \]

将两者绘制出随数据量增加的变化曲线如下:

image-20200414232001639.png

可以看出当 \(N \rightarrow \inf\) 时,两者均收敛,且两者之差为 \(\frac { 2(d + 1) } { N }\)。类似于 VC bound。

线性回归(Linear Regression)\(\rightarrow\)分类(Classification)

由于 Linear Classification 是一种 NP-Hard 问题,那可以将回归的解决方法用于分类吗?

先对比一下两者的误差测量函数:

\[\operatorname { err } _ { 0 / 1 } = \left\| \operatorname { sign } \left( \mathbf { w } ^ { T } \mathbf { x } \right) \neq y \right\| \quad \text { err } _ { \mathrm { sqr } } = \left( \mathbf { w } ^ { T } \mathbf { x } - y \right) ^ { 2 } \]

绘制出曲线如下:

image-20200414232841581.png

可见\(\operatorname { err } _ { 0 / 1 } < \operatorname { err } _ { \text{sqr} }\),所以可以得出:

\[\begin{aligned} \text{classification } E_{out}(\mathbf{w}) & \leq \text{classification } E_{in}(\mathbf{w}) + \sqrt{\cdots \cdots} \\ & \leq \text{regression } E_{in}(\mathbf{w}) + \sqrt{\cdots \cdots} \end{aligned} \]

所以说如果回归误差作为上限很小,那么分类误差也会很小。所以线性回归可以用于分类

由于存在误差所以可以将\(\mathbf{w}_{LIN}\)作为 PLA/Pocket 算法的初始(基础)向量。

posted @ 2021-04-28 23:22  FlameAlpha  阅读(219)  评论(0编辑  收藏  举报