2.3 两种简单的预测方式(上篇):最小二乘
这是一篇有关《统计学习基础》,原书名The Elements of Statistical Learning的学习笔记,该书学习难度较高,有很棒的学者将其翻译成中文并放在自己的个人网站 上,翻译质量非常高,本博客中有关翻译的内容都是出自该学者的网页,个人解读部分才是自己经过查阅资料和其他学者的学习笔记,结合个人理解总结成的原创内容。 有关ESL更多的学习笔记的markdown文件,可在作者GitHub 上查看下载。
翻译原文
在这一部分中我们讨论两种简单但很有用的预测方法:最小二乘法的线性模型拟合和
k
k
k -最近邻预测规则.线性模型对结构做出很大的假设而且得出稳定但可能不正确的预测.
k
k
k -最近邻方法对结构的假设很温和:它的预测通常是准确的但不稳定.
线性模型和最小二乘
线性模型已经成为过去
30
30
3 0 年统计学的支柱,而且仍然是我们最重要的工具.给定输入向量
X
T
=
(
X
1
,
X
2
,
⋯
,
X
p
)
X^T=(X_1,X_2,\cdots,X_p)
X T = ( X 1 , X 2 , ⋯ , X p ) ,我们通过模型
Y
^
=
β
^
0
+
∑
j
=
1
p
X
j
β
^
j
(2.1)
\hat{Y} = \hat{\beta}_0+\sum\limits_{j=1}^{p}X_j\hat{\beta}_j \tag{2.1}
Y ^ = β ^ 0 + j = 1 ∑ p X j β ^ j ( 2 . 1 )
来预测输出
Y
Y
Y .
β
^
0
\hat{\beta}_0
β ^ 0 是截距,也是机器学习中的 偏差 (bias) .经常为了方便起见把常数变量
1
1
1 放进
X
X
X ,把
β
^
0
\hat{\beta}_0
β ^ 0 放进系数变量
β
^
\hat{\beta}
β ^ 中,然后把用向量内积形式写出线性模型
Y
^
=
X
T
β
^
(2.2)
\hat{Y} = X^T\hat{\beta} \tag{2.2}
Y ^ = X T β ^ ( 2 . 2 )
其中
X
T
X^T
X T 为向量或者矩阵的转置(
X
X
X 为列向量).这里我们对单个输出的建立模型,所以
Y
^
\hat{Y}
Y ^ 为标量;一般地,
Y
^
\hat{Y}
Y ^ 可以是一个
K
K
K 维向量,这种情形下,
β
\beta
β 是一个
p
×
K
p\times K
p × K 的系数矩阵.在
(
p
+
1
)
(p+1)
( p + 1 ) 维 输入输出空间中,
(
X
,
Y
^
)
(X,\hat{Y})
( X , Y ^ ) 表示一个超平面 .如果常数项包含在
X
X
X 中,则超平面过原点,而且是一个子空间 ;如果不是,则是一个过点
(
0
,
β
^
0
)
(0,\hat{\beta}_0)
( 0 , β ^ 0 ) 切
Y
Y
Y 轴的仿射集 .从现在起,我们假设截距项包含在
β
^
\hat{\beta}
β ^ 中.
在
p
p
p 维输入空间从函数观点来看,
f
(
X
)
=
X
T
β
f(X)=X^T\beta
f ( X ) = X T β 是线性的,其梯度
f
′
(
X
)
=
β
f'(X)=\beta
f ′ ( X ) = β 是输入空间里的最速上升方向的向量.
根据训练数据我们怎样拟合线性模型?有许多不同的方法,但目前为止最受欢迎的是最小二乘法.在这个方法里面,我们选取系数
β
\beta
β 使得残差平方和最小:
R
S
S
(
β
)
=
∑
i
=
1
N
(
y
i
−
x
i
T
β
)
2
(2.3)
\rm{RSS}(\beta) = \sum_{i=1}^N(y_i-x_i^T\beta)^2 \tag{2.3}
R S S ( β ) = i = 1 ∑ N ( y i − x i T β ) 2 ( 2 . 3 )
R
S
S
(
β
)
\rm{RSS}(\beta)
R S S ( β ) 是系数的二次函数,因此其最小值总是存在,但是可能不唯一.它的解用矩阵来表示是最简单的.我们可以写成
R
S
S
(
β
)
=
(
y
−
X
β
)
T
(
y
−
X
β
)
(2.4)
\rm{RSS}(\beta) = (\rm{y}-\mathbf{X}\beta)^T(\rm{y}-\mathbf{X}\beta) \tag{2.4}
R S S ( β ) = ( y − X β ) T ( y − X β ) ( 2 . 4 )
其中,
X
\mathbf{X}
X 是
N
×
p
N\times p
N × p 矩阵,每一行是一个输入向量,
y
\mathbf{y}
y 是训练集里面的
N
N
N 维输出向量.对
β
\beta
β 微分我们有 正规方程组 (normal equations)
X
T
(
y
−
X
β
)
=
0
(2.5)
\mathbf{X}^T(\mathbf{y}-\mathbf{X}\beta)=0 \tag{2.5}
X T ( y − X β ) = 0 ( 2 . 5 )
如果
X
T
X
\mathbf{X}^T\mathbf{X}
X T X 非奇异 ,则唯一解为
β
^
=
(
X
T
X
)
−
1
X
T
y
(2.6)
\hat{\beta}=(\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{y} \tag{2.6}
β ^ = ( X T X ) − 1 X T y ( 2 . 6 )
而且第
i
i
i 个输入
x
i
x_i
x i 的拟合值为
y
^
i
=
y
^
(
x
i
)
=
x
i
T
β
^
\hat{y}_i=\hat{y}(x_i)=x_i^T\hat{\beta}
y ^ i = y ^ ( x i ) = x i T β ^ .在任意输入
x
0
x_0
x 0 处,预测值为
y
^
(
x
0
)
=
x
0
T
β
^
\hat{y}(x_0)=x_0^T\hat{\beta}
y ^ ( x 0 ) = x 0 T β ^ .整个拟合曲面 由
β
^
\hat{\beta}
β ^ 的
p
p
p 个系数所决定.直观地,我们不需要非常多的数据集去拟合这样一个模型.
让我们来看线性模型在分类问题中的一个例子.图 2.1 显示了训练数据在一对输入
X
1
X_1
X 1 和
X
2
X_2
X 2 的散点图.数据是模拟的,而且现在模拟模型不是很重要.输出的类变量
G
G
G 取值为蓝色或橘黄色,而且正如散点图表示的那样.每个类里面都有
100
100
1 0 0 个点.线性回归模型是去拟合这些数据,蓝色时响应变量
Y
Y
Y 编码为
0
0
0 ,橘黄色时编码为
1
1
1 .拟合值
Y
^
\hat{Y}
Y ^ 根据下面规则转化为拟合的类变量
G
^
\hat{G}
G ^
G
^
=
{
O
R
A
N
G
E
if
Y
^
>
0.5
B
L
U
E
if
Y
^
≤
0.5
(2.7)
\hat{G}= \left\{ \begin{array}{cc} \color{orange}{ORANGE}\quad&\text{if }\hat{Y} > 0.5\\ \color{blue}{BLUE}\quad & \text{if }\hat{Y}\le 0.5 \end{array} \right. \tag{2.7}
G ^ = { O R A N G E B L U E if Y ^ > 0 . 5 if Y ^ ≤ 0 . 5 ( 2 . 7 )
图 2.1:两维分类的例子.类别被编码为二进制变量(蓝色为
0
0
0 ,橘黄色为
1
1
1 ),然后通过线性回归进行拟合.图中直线是判别边界,直线方程为
x
T
β
^
=
0.5
x^T\hat{\beta}=0.5
x T β ^ = 0 . 5 .橘黄色阴影区域表示这一部分输入区域被分成橘黄色,而蓝色阴影区域分成蓝色.
在
R
2
\mathbf{R}^2
R 2 中被分成橘黄色类的点对应
x
:
x
T
β
^
>
0.5
\\{x:x^T\hat{\beta}>0.5\\}
x : x T β ^ > 0 . 5 ,如图 2.1 中显示的那样,而且两个预测的类被判别边界
x
:
x
T
β
^
=
0.5
\\{x:x^T\hat{\beta}=0.5\\}
x : x T β ^ = 0 . 5 分隔开,在这种情形下是线性的.我们可以看到在判别边界的两边都有被分错的点.或许我们的线性模型太严格了,又或者是这些错误无法避免?记住这些是在训练数据本身上的错误,而且我们没有说这些构造的数据从哪里来的.考虑下面两种可能的情境:
**情境1:**每一类的训练数据是从二元正态分布(不相关且均值不同)中生成的.
**情境2:**每一类的训练数据是来自
10
10
1 0 个低方差的高斯分布的混合,每一个高斯分布都有各自的均值.
就生成模型而言,混合的高斯分布是描述得最好的.首先产生一个离散随机变量,该变量决定使用哪个部分的高斯分布,然后根据选择的密度产生观测值.在每一类是一个高斯分布的情形下,我们将在第四章看到一个线性的判别边界是最好的,而且我们的估计也几乎是最优的.区域的重叠是不可避免的,而且将要被预测的数据因为数据重叠也会变得很麻烦.
在混合紧密聚集的高斯分布中情形不一样了.一个线性的判别边界不大可能是最优的,而且事实上也不是.最优的判别边界是非线性不相交的,而且作为这种判别边界,将会更难确定.
我们现在来看一下另一种分类和回归的过程,在某种程度上是与线性模型相反的一种做法,但却更好地能够适用第二种情形.
个人解读
(
p
+
1
)
(p+1)
( p + 1 ) 维输入输出空间,超平面,子空间以及仿射集等高亮部分解读 :
很简单,
p
p
p 个输入
X
X
X 和一个输出
Y
Y
Y 构成了
(
p
+
1
)
(p+1)
( p + 1 ) 维的输入输出空间,超平面 就是平面中的直线、空间中的平面之推广(只有维度大于3才被称为超平面)。超平面的法向量是:
(
β
^
1
,
β
^
2
,
⋯
,
β
^
p
,
−
1
)
(\hat{\beta}_1, \hat{\beta}_2, \cdots, \hat{\beta}_p, -1)
( β ^ 1 , β ^ 2 , ⋯ , β ^ p , − 1 ) ,
β
^
0
\hat{\beta}_0
β ^ 0 则代表超平面到原点的距离。其中证明过程 不再赘述,但是可以通过超平面的另一种定义感性理解其中原因:
给定向量空间
R
n
R^n
R n 中的一个点
p
p
p 和一个非零向量
n
n
n ,满足:
n
∗
(
i
−
p
)
=
0
n*(i-p) = 0
n ∗ ( i − p ) = 0
则称点集
i
i
i 为通过点
p
p
p 的超平面,向量
n
n
n 为通过超平面的法向量。将此处法向量看作
(
β
^
1
,
β
^
2
,
⋯
,
β
^
p
,
−
1
)
(\hat{\beta}_1, \hat{\beta}_2, \cdots, \hat{\beta}_p, -1)
( β ^ 1 , β ^ 2 , ⋯ , β ^ p , − 1 ) ,从超平面上任取符合等式(2.1)的两个点,相减后,定义
S
j
S_j
S j 作为:两个点在第
j
j
j 维上相减后的结果,即
X
1
j
−
X
2
j
X_{1j}-X_{2j}
X 1 j − X 2 j 。可得最终相减结果为
(
S
1
,
S
2
,
⋯
,
S
p
+
1
)
(S_1, S_2, \cdots, S_{p+1})
( S 1 , S 2 , ⋯ , S p + 1 ) 。法向量乘以最终相减结果再展开后
β
^
0
\hat{\beta}_0
β ^ 0 抵消,最终结果就是0。所以
(
β
^
1
,
β
^
2
,
⋯
,
β
^
p
,
−
1
)
(\hat{\beta}_1, \hat{\beta}_2, \cdots, \hat{\beta}_p, -1)
( β ^ 1 , β ^ 2 , ⋯ , β ^ p , − 1 ) 就是法向量。
而子空间 的定义 则不再赘述,个人理解就类似集合子集的概念,定义里面主要就在声明作为原空间子集的子空间得是一个线性空间。
值得一提的是子空间在SVD上的应用,后面的章节会讲述到。这里先看看上面链接中的图供大家直观感受:
在上图中,蓝色的数据点近似分布在一个二维平面内,svd寻找到了表示这个二维平面的两个基向量 ,就是左图中红色的箭头,然后将数据点投影到这个平面内得到右图所示的数据点近似结果。
提供图的作者解释得很好:假如我们在三维空间内有一些离散分布的数据点,但是这些数据点近似分布在一个二维子平面内,可能有一些偏差,那么奇异值分解所做的就是寻找这个最佳的二维子平面,从而拟合三维空间的数据点分布。这种用子空间去拟合数据的方式实际上就是一般说的线性拟合方法 。
关于仿射集 相关定义 不再多言,具体例子就有直线,平面与超平面。与其相关的概念还有凸集,其直观判断很简单,如下图所示:
任意找出两个点,判断两个点所组成的线段上是否有不在集合内的点即可,如果有就不是凸集。上图中右边两个都不是凸集。
矩阵求导实际意义 :
对于都是
2
∗
2
2*2
2 ∗ 2 的矩阵
A
,
B
,
C
A, B, C
A , B , C ,若是矩阵C对于矩阵A求导,那么从标量的结果上来说就是C中的每一个元素,都要对于A中的每一个元素进行求导。因此会出现16个导数结果,这16个结果如何排列都是按需自取。
上面只是一个简单的例子,若讨论
Y
Y
Y 关于
X
X
X 的导数的话,需要分类讨论两者各自是矩阵,向量或者标量的情况。有些学者在自己的学习笔记 中讨论得很详尽。值得一提的是,向量关于向量的导数获得的矩阵就叫做Jacobian 矩阵,而标量
y
y
y 对矩阵
X
X
X 的导数就是梯度矩阵,可以表示为下式:
∂
y
∂
X
=
[
∂
y
∂
x
11
∂
y
∂
x
21
⋯
∂
y
∂
x
n
1
∂
y
∂
x
12
∂
y
∂
x
22
⋯
∂
y
∂
x
n
2
⋮
⋮
⋱
⋮
∂
y
∂
x
1
n
∂
y
∂
x
2
n
⋯
∂
y
∂
x
n
n
]
\frac{\partial y}{\partial \mathbf{X}}=\left[\begin{array}{cccc} {\frac{\partial y}{\partial x_{11}}} & {\frac{\partial y}{\partial x_{21}}} & {\cdots} & {\frac{\partial y}{\partial x_{n 1}}} \\ {\frac{\partial y}{\partial x_{12}}} & {\frac{\partial y}{\partial x_{22}}} & {\cdots} & {\frac{\partial y}{\partial x_{n 2}}} \\ {\vdots} & {\vdots} & {\ddots} & {\vdots} \\ {\frac{\partial y}{\partial x_{1 n}}} & {\frac{\partial y}{\partial x_{2 n}}} & {\cdots} & {\frac{\partial y}{\partial x_{n n}}} \end{array}\right]
∂ X ∂ y = ⎣ ⎢ ⎢ ⎢ ⎢ ⎡ ∂ x 1 1 ∂ y ∂ x 1 2 ∂ y ⋮ ∂ x 1 n ∂ y ∂ x 2 1 ∂ y ∂ x 2 2 ∂ y ⋮ ∂ x 2 n ∂ y ⋯ ⋯ ⋱ ⋯ ∂ x n 1 ∂ y ∂ x n 2 ∂ y ⋮ ∂ x n n ∂ y ⎦ ⎥ ⎥ ⎥ ⎥ ⎤ 上文中所求得的梯度
f
′
(
X
)
=
β
f'(X)=\beta
f ′ ( X ) = β 应当就是标量
y
y
y 对向量
X
X
X 进行求导,所以得出来的结果只有一行
β
\beta
β ,是向量的形式。
有关矩阵求导的实际运算法则在矩阵求导术 这篇文章中写得很详尽,可依据具体运算法则进行操作,机器学习中设计的矩阵求导根据如下表所示运算法则基本都可进行计算:
例如原始的等式是:
R
S
S
(
β
)
=
(
y
−
X
β
)
T
(
y
−
X
β
)
(2.4)
\rm{RSS}(\beta) = (\rm{y}-\mathbf{X}\beta)^T(\rm{y}-\mathbf{X}\beta)\tag{2.4}
R S S ( β ) = ( y − X β ) T ( y − X β ) ( 2 . 4 )
将等式右边展开后,可得:
R
S
S
(
β
)
=
y
T
y
−
y
T
X
β
−
β
T
X
y
+
β
T
X
T
X
β
\rm{RSS}(\beta) = \rm{y}^T\rm{y} - \rm{y}^T\mathbf{X}\beta - \beta^T\mathbf{X}\rm{y} + \beta^T\mathbf{X}^T\mathbf{X}\beta
R S S ( β ) = y T y − y T X β − β T X y + β T X T X β
接下来就可以根据上表的运算法则对
β
\beta
β 逐项进行求偏导了,值得一提的是上式等式右边的第四项
β
T
X
T
X
β
\beta^T\mathbf{X}^T\mathbf{X}\beta
β T X T X β ,对于该项求导的过程需要知道如下概念,首先把
X
β
X\beta
X β 当作
y
y
y ,先对
y
y
y 求导再对
β
\beta
β 求导,这里就涉及矩阵求导的链式法则:
已知
y
=
A
x
y = Ax
y = A x ,则
∂
f
∂
y
=
(
∂
y
∂
x
)
T
(
∂
f
∂
y
)
\frac{\partial f}{\partial y} = (\frac{\partial y}{\partial x})^T(\frac{\partial f}{\partial y})
∂ y ∂ f = ( ∂ x ∂ y ) T ( ∂ y ∂ f ) 。
该结论的推导过程如下图所示:
根据上面的规则对所有项全部完成求导之后,可得到最终结果:
∂
f
(
β
)
∂
β
=
−
2
X
T
y
+
2
X
T
X
β
=
0
\frac{\partial f(\beta)}{\partial \beta} = -2X^Ty + 2X^TX\beta = 0
∂ β ∂ f ( β ) = − 2 X T y + 2 X T X β = 0
即:
X
T
(
y
−
X
β
)
=
0
\mathbf{X}^T(\mathbf{y}-\mathbf{X}\beta)=0
X T ( y − X β ) = 0
对于残差平方和
R
S
S
RSS
R S S 求得矩阵表达式下的结果后,如果有解需要有前提条件就是
X
T
X
\mathbf{X}^T\mathbf{X}
X T X 要满足非奇异 。在此讨论一下非奇异是什么以及为什么需要非奇异。
首先必须要是非奇异的矩阵才是可逆矩阵,这样
(
X
T
X
)
−
1
(X^TX)^{-1}
( X T X ) − 1 才成立。
接下来讨论非奇异 的概念:
非奇异一定是可逆矩阵 ,而可逆矩阵一定是方阵,也一定满秩 (既是行满秩也是列满秩),反之,满秩的方阵也一定是可逆矩阵,就像
X
T
X
X^TX
X T X 的结果一定是一个方阵,这才可以讨论其可逆性。不可逆矩阵也就是奇异阵 要么不是方阵,要么就是方阵但是不满秩。那么什么是满秩?
首先秩是图像经过矩阵变换之后的空间维度,同时秩也是列空间的维度(列空间的秩等于行空间的秩,所以只看一个就可以了)。对一个方阵来说,满秩就代表每个列向量都线性无关(行向量也线性无关,因为最后通过线性变换都可以变成是单位矩阵的形式,单位矩阵行也是线性无关的)。
如果一个方阵满秩,那么其行列式一定不等于0,这两个互为充要条件,有关行列式的本质 以及如何理解矩阵的秩 可以自行拓展阅读。