何为线性回归?就是给定一组散乱数据,要求拟合出一条直线,使得整体误差最小,如下左图所示(下图来源于马同学高等数学博客)。
已知散点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi), 现要估计直线方程:
y
=
k
x
+
b
y = kx+b
y=kx+b.
如果所有点共线,那么有
y
i
=
k
x
i
+
b
y_i = kx_i+b
yi=kxi+b严格成立。如果真是这样还需要拟合吗? 抽取两个点立即可以计算一条直线。为了衡量模型的优劣,我们定义一个如下的误差函数,并使得该误差函数最小,就得到了最优的线性回归。上图右侧就标记了:
y
i
−
(
k
x
i
+
b
)
y_i -( kx_i+b)
yi−(kxi+b),即观测数据 到 模型数据的距离,最小二乘的目的就是要让这个距离的平方之和最小。
ϵ = ∑ ( y i − f ( x i ) ) 2 = ∑ ( y i − ( k x i + b ) ) 2 (1) \epsilon = \sum{(y_i -f(x_i))^2} =\sum{(y_i -( kx_i+b))^2} \tag1 ϵ =∑(yi−f(xi))2=∑(yi−(kxi+b))2 (1)
现在要估计直线 y = k x + b y = kx+b y=kx+b, 因此需要求解 k k k 和 b b b 的值。有两类方法可以求解这个问题,但其实可以统一起来。
1、通过求导计算
直接对公式(1)求导,可以得到
∂ ϵ / ∂ k = − 2 ∑ [ y i − ( k x i + b ) ] x i (2) \partial \epsilon / \partial k= -2\sum{[y_i-(kx_i+b)]x_i}\tag2 ∂ϵ/∂k=−2∑[yi−(kxi+b)]xi(2)
∂ ϵ / ∂ b = − 2 ∑ y i − ( k x i + b ) (3) \partial \epsilon / \partial b = -2\sum{y_i-(kx_i+b)}\tag3 ∂ϵ/∂b=−2∑yi−(kxi+b)(3)
令导数为0,联立(2)(3)可以构造关于 k k k 和 b b b的方程组,求解可以得到
k = [ ∑ ( x i − x ˉ ) ( y i − y ˉ ) ] / ∑ ( x i − x ˉ ) 2 (4) k = [\sum(x_i-\bar{x})(y_i-\bar{y})] / \sum(x_i-\bar{x})^2\tag4 k=[∑(xi−xˉ)(yi−yˉ)]/∑(xi−xˉ)2(4)
b = y ˉ − k x ˉ (5) b = \bar{y} - k\bar{x}\tag5 b=yˉ−kxˉ(5)
其中, x ˉ = ∑ x i / n , y ˉ = ∑ y i / n \bar{x} = \sum{x_i} / n, \bar{y} = \sum{y_i} / n xˉ=∑xi/n,yˉ=∑yi/n,具体推导参见:知乎:线性回归与最小二乘法
2、通过矩阵计算
具体推导如下所示(来源于:线性回归原理及实现(一):最小二乘法)
3、线性方程组角度理解
一般来讲,线性方程组
A
x
=
b
Ax = b
Ax=b 按约束条件可以分为三类:
(1)未知数个数 小于 方程个数 , 方程超定, 无解
(2)未知数个数 等于 方程个数 , 方程有唯一解
(3)未知数个数 大于 方程个数, 方程欠定,无解
最小二乘线性回归实际应当属于第一类问题,求解的未知数只有两个,但限定条件很多。
如下如下,如果我们只看没有平方运算的误差项,我们的目标其实是希望用n维空间的
X
⃗
\vec{X}
X 和
1
⃗
\vec{1}
1来线性逼近
Y
⃗
\vec{Y}
Y. 很显然如果上述向量都是二维的,那么可以做到完美逼近。
∑ y i − ( k x i + b ) = [ y 1 y 2 ⋮ y n ] − ( k [ x 1 x 2 ⋮ x n ] + b [ 1 1 ⋮ 1 ] ) \sum{y_i - (kx_i + b)} = \begin{bmatrix} y_1\\ y_2\\ \vdots \\ y_n\\ \end{bmatrix} -( k \begin{bmatrix} x_1\\ x_2\\ \vdots \\ x_n\\ \end{bmatrix} + b \begin{bmatrix} 1\\ 1\\ \vdots \\ 1\\ \end{bmatrix} ) ∑yi−(kxi+b)=⎣⎢⎢⎢⎡y1y2⋮yn⎦⎥⎥⎥⎤−(k⎣⎢⎢⎢⎡x1x2⋮xn⎦⎥⎥⎥⎤+b⎣⎢⎢⎢⎡11⋮1⎦⎥⎥⎥⎤)
但是,这几个向量都是高维的,这几个向量几乎无法共面,因此根本无法做到。终于要搬出这张图,
y
y
y本身不能被
x
x
x 和
1
1
1 两个向量张成,那只需将
y
y
y投影到
x
x
x 和
1
1
1所在的平面, 然后这个垂足到
y
y
y的距离即是最小值。
假设:
A
=
[
a
1
,
a
2
]
=
[
e
1
,
e
2
]
A = [a_1,a_2] = [e_1,e_2]
A=[a1,a2]=[e1,e2], 注意这里
a
1
、
a
2
a_1、a_2
a1、a2是列向量
e 3 e_3 e3是 e 1 e_1 e1 和 e 2 e_2 e2的线性组合: O P ⃗ = k a 1 + b a 2 \vec{OP} = ka_1+ba_2 OP=ka1+ba2, 设 X = [ k , b ] T X=[k,b]^T X=[k,b]T,则有
O P ⃗ = A X \vec{OP} = AX OP=AX
另外, y − e 3 = y − A X y-e_3 = y - AX y−e3=y−AX, 当 O P OP OP 垂直于 y P yP yP时这个距离最近。
所以有
a 1 T ( y − A X ) = 0 , a 2 T ( y − A X ) = 0 a_1^T(y-AX) = 0, a_2^T(y-AX) = 0 a1T(y−AX)=0,a2T(y−AX)=0
合并起来:
A T y − A T A X = 0 → A T A X = A T y A^Ty-A^TAX = 0 \to A^TAX = A^Ty ATy−ATAX=0→ATAX=ATy
所以
X = ( A T A ) − 1 A T y X = (A^TA)^{-1}A^Ty X=(ATA)−1ATy
参考资料:
[1] 线性回归原理及实现(一):最小二乘法 https://blog.csdn.net/qq_32864683/article/details/80368135
[2] 如何理解最小二乘法? https://blog.csdn.net/ccnt_2012/article/details/81127117
[3] 最小二乘法理论、推导、算法 https://blog.csdn.net/lql0716/article/details/70165695
[4] 最小二乘解(Least-squares Minimization ) https://blog.csdn.net/kokerf/article/details/72437294
[5] 知乎:线性回归与最小二乘法 https://zhuanlan.zhihu.com/p/36910496
[6] 简书:线性最小二乘和非线性最小二乘:https://www.jianshu.com/p/bf6ec56e26bd