一、最小二乘法
最小二乘法是一种数学优化技术,它通过最小化误差的平方和来寻找数据的最佳函数匹配。这种方法常用于数据拟合,其中我们尝试找到一个函数,尽可能地接近一组给定的数据点。
基本原理:
最小二乘法的基本原理是,如果我们有一组数据点
(
x
1
,
y
1
)
,
(
x
2
,
y
2
,
.
.
.
,
x
n
,
y
n
)
(x_1,y_1),(x_2,y_2,...,x_n,y_n)
(x1,y1),(x2,y2,...,xn,yn),我们想要找到一个函数
y
=
f
(
x
)
y=f(x)
y=f(x),使得这个函数在所有数据点上的预测值与实际值之间的差异(即残差)的平方和最小。
如果我们考虑的是线性函数
y
=
a
x
+
b
y=ax+b
y=ax+b,那么最小二乘法的目标就是找到系数
a
a
a 和
b
b
b ,使得所有误差平方和最小:
M
=
∑
i
=
1
m
(
y
i
−
y
)
2
=
∑
i
=
1
m
[
y
i
−
(
a
x
i
+
b
)
]
2
M=\sum_{i=1}^m(y_i-y)^2=\sum_{i=1}^m[y_i-(ax_i+b)]^2
M=∑i=1m(yi−y)2=∑i=1m[yi−(axi+b)]2
此处把
M
M
M看成与自变量
a
a
a和
b
b
b的因变量,那么问题就可以归结为求函数
M
=
M
(
a
,
b
)
M=M(a,b)
M=M(a,b)在哪些点处取得最小值,即通过求方程组
{
M
a
(
a
,
b
)
=
0
M
b
(
a
,
b
)
=
0
(1)
\begin{cases} M_a(a,b)=0 \\ M_b(a,b)=0\\ \tag{1} \end{cases}
{Ma(a,b)=0Mb(a,b)=0(1)
的解来解决,即令
{
∂
M
∂
a
=
−
2
∑
i
=
0
m
x
i
[
y
i
−
(
a
x
i
+
b
)
]
=
0
,
∂
M
∂
b
=
−
2
∑
i
=
0
m
[
y
i
−
(
a
x
i
+
b
)
]
=
0
(2)
\begin{cases} \frac{\partial M}{\partial a}= -2 \sum_{i=0}^m x_i[y_i-(ax_i+b)] =0 ,\\ \frac{\partial M}{\partial b}= -2 \sum_{i=0}^m [y_i-(ax_i+b)] =0 \\ \tag{2} \end{cases}
{∂a∂M=−2∑i=0mxi[yi−(axi+b)]=0,∂b∂M=−2∑i=0m[yi−(axi+b)]=0(2)
∂ M ∂ a \frac{\partial M}{\partial a} ∂a∂M 表示对 a a a进行求导, ∂ M ∂ b \frac{\partial M}{\partial b} ∂b∂M表示对 b b b进行求导,此处是一个复合函数求导,根据链式求导法则获得
解以上线性方程组,得到 a a a的值, b b b的值
如果一个结果受
n
n
n个因素影响,则我们要求解的方程就变成:
y
=
a
1
x
1
+
a
2
x
2
+
⋯
+
a
n
x
n
+
b
y=a_1 x_1 +a_2x_2+\cdots+a_n x_n+b
y=a1x1+a2x2+⋯+anxn+b
它在
n
n
n维坐标系下的图形是一个"超平面"。
一个结果受多个因素影响的情形,在人工智能领域非常常见。
二、最小二乘法求解及推导
线性回归模型: h θ ( x ) = θ x 1 + θ x 2 + ⋯ + θ x n + θ 0 h\theta(x)=\theta x_1+\theta x_2+\cdots+\theta x_n+\theta0 hθ(x)=θx1+θx2+⋯+θxn+θ0
预测值: h θ ( X ) = θ 1 X + θ 0 h\theta(X)=\theta_1X+\theta0 hθ(X)=θ1X+θ0
其实就是求出参数 θ \theta θ的值
理论参数 θ = ( X T X ) − 1 X T Y \theta = (X^T X)^{-1} X^TY θ=(XTX)−1XTY
为了衡量最小二乘的好坏,引入模型代价函数(基于均方差定义)
J ( θ ) = 1 2 m ∑ i = 0 m [ h θ ( x i ) − y i ] 2 J(\theta)=\frac{1}{2m}\sum_{i=0}^m [h\theta(x_i)-y_i]^2 J(θ)=2m1∑i=0m[hθ(xi)−yi]2
直线方程: h θ ( x ) = θ 0 + θ 1 x h\theta(x)=\theta0+\theta_1x hθ(x)=θ0+θ1x
此处:
样本数:m;
第
i
i
i个样本的特征:
x
i
x_i
xi
第
i
i
i个样本的真实值:
y
i
y_i
yi
第
i
i
i个样本的预测值:
h
θ
(
x
)
h\theta(x)
hθ(x)
求解
θ
\theta
θ的方式可以分为以下几种:
①基于迭代的梯度下降算法
②基于求导的数学方法
此处我们简述基于矩阵微分,推导出来的求解公式。
推导过程
此处 θ 、 X 、 Y \theta 、X、Y θ、X、Y是整体的,是矩阵,进行矩阵的加、减、乘、求导
∂ ∂ θ J ( θ ) = 0 ⟹ ∂ ( Y − X ∗ θ ) ∂ θ = 0 ⟹ θ = ( X T X ) − 1 X T Y \frac{\partial }{\partial \theta} J(\theta)=0\Longrightarrow \frac{\partial(Y-X*\theta) }{\partial \theta}=0 \Longrightarrow \theta=(X^T X)^{-1} X^TY ∂θ∂J(θ)=0⟹∂θ∂(Y−X∗θ)=0⟹θ=(XTX)−1XTY
未知数: θ \theta θ;已知数: X 、 Y X、Y X、Y
代价函数 J ( θ ) J(\theta) J(θ)化简
此处用到两个矩阵转置公式
(
A
+
B
)
T
=
A
T
+
B
T
(A+B)^T=A^T+B^T
(A+B)T=AT+BT
(
A
B
)
T
=
B
T
A
T
(AB)^T=B^TA^T
(AB)T=BTAT
∂
(
Y
−
X
θ
)
T
(
Y
−
X
θ
)
∂
θ
\frac{\partial(Y-X\theta)^T (Y-X\theta) }{\partial \theta}
∂θ∂(Y−Xθ)T(Y−Xθ)
=
∂
(
Y
T
−
θ
T
X
T
)
(
Y
−
X
θ
)
∂
θ
=\frac{\partial(Y^T-\theta^TX^T)(Y-X\theta) }{\partial \theta}
=∂θ∂(YT−θTXT)(Y−Xθ)
=
∂
(
Y
T
(
Y
−
X
θ
)
)
−
(
θ
T
X
T
)
(
Y
−
X
θ
)
∂
θ
=\frac{\partial(Y^T(Y-X\theta))-(\theta^TX^T)(Y- X\theta) }{\partial \theta}
=∂θ∂(YT(Y−Xθ))−(θTXT)(Y−Xθ)
=
∂
(
Y
T
Y
−
Y
T
X
θ
−
θ
T
X
T
Y
+
θ
T
X
T
X
θ
)
∂
θ
=\frac{\partial(Y^TY-Y^TX\theta-\theta^TX^TY+\theta^TX^TX\theta )}{\partial \theta}
=∂θ∂(YTY−YTXθ−θTXTY+θTXTXθ)
=
∂
Y
T
Y
∂
θ
−
∂
Y
T
X
θ
∂
θ
−
∂
θ
T
X
T
Y
∂
θ
+
∂
θ
T
X
T
X
θ
∂
θ
=\frac{\partial Y^T Y}{\partial \theta}-\frac{\partial Y^T X\theta}{\partial \theta}-\frac{\partial \theta^TX^T Y}{\partial \theta}+\frac{\partial \theta^TX^TX\theta }{\partial \theta}
=∂θ∂YTY−∂θ∂YTXθ−∂θ∂θTXTY+∂θ∂θTXTXθ
此处用到矩阵求导公式:
公式1:常数矩阵求导等于0
公式2: d A X d X = A T \frac{d AX}{d X}=A^T dXdAX=AT
公式3: d X T A d X = A \frac{d X^TA}{d X}=A dXdXTA=A
公式4: d X T A X d X = ( A + A T ) X \frac{d X^TAX}{d X}=(A+A^T)X dXdXTAX=(A+AT)X
此处:未知量:X; 常数矩阵:A
对上式进行求导可得
∂ Y T Y ∂ θ \frac{\partial Y^T Y}{\partial \theta} ∂θ∂YTY=0
∂ Y T X θ ∂ θ \frac{\partial Y^T X\theta}{\partial \theta} ∂θ∂YTXθ 对应公式2,此处 A = Y T X ⟶ ∂ Y T X θ ∂ θ = ( Y T X ) T = X T Y A=Y^TX \longrightarrow \frac{\partial Y^T X\theta}{\partial \theta}=(Y^TX)^T=X^TY A=YTX⟶∂θ∂YTXθ=(YTX)T=XTY
∂ θ T X T Y ∂ θ \frac{\partial \theta^TX^T Y}{\partial \theta} ∂θ∂θTXTY对应公式3,此处 A = X T Y ⟶ ∂ θ T X T Y ∂ θ = X T Y A=X^TY \longrightarrow \frac{\partial \theta^TX^T Y}{\partial \theta}=X^TY A=XTY⟶∂θ∂θTXTY=XTY
∂ θ T X T X θ ∂ θ \frac{\partial \theta^TX^TX\theta }{\partial \theta} ∂θ∂θTXTXθ对应公式4,此处 A = X T X ⟶ ∂ θ T X T X θ ∂ θ = ( X T X + ( X T X ) T ) θ = 2 X T X θ A=X^TX \longrightarrow \frac{\partial \theta^TX^TX\theta }{\partial \theta}=(X^TX+(X^TX)^T)\theta =2X^TX\theta A=XTX⟶∂θ∂θTXTXθ=(XTX+(XTX)T)θ=2XTXθ
求关于 θ \theta θ的矩阵方程
同项相加和为0: 0 − X T − X T Y + 2 X T X θ = 0 0-X^T-X^TY+2X^TX\theta =0 0−XT−XTY+2XTXθ=0
整理: − 2 X T Y + 2 X T X θ = 0 -2X^TY+2X^TX\theta =0 −2XTY+2XTXθ=0
移项: X T X θ = X T Y X^TX\theta = X^TY XTXθ=XTY
化简: ( X T X ) − 1 X T X θ = ( X T X ) − 1 X T Y (X^TX)^{-1}X^TX\theta=(X^TX)^{-1}X^TY (XTX)−1XTXθ=(XTX)−1XTY
解出
θ
\theta
θ:
θ
=
(
X
T
X
)
−
1
X
T
Y
\theta=(X^TX)^{-1}X^TY
θ=(XTX)−1XTY
三、最小二乘法求解举例
假设我们有一组数据点
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
n
,
y
n
)
(x_1,y_1),(x_2,y_2),...,(x_n,y_n)
(x1,y1),(x2,y2),...,(xn,yn),我们想要找到一个线性模型
y
=
a
x
+
b
y=ax+b
y=ax+b来拟合这些数据点。我们可以将这个问题表达为一个矩阵方程:
X
×
θ
=
Y
X\times \theta = Y
X×θ=Y
其中:
- X X X 是一个 n × 2 n \times 2 n×2 的矩阵,,第一列是所有 x i x_i xi的值,第二列是常数 1。
- θ \theta θ是一个 2 × 1 2×1 2×1 的列向量,包含未知数 a a a和 b b b。
- Y Y Y是一个 n × 1 n \times 1 n×1的列向量,包含所有 y i y_i yi的值。
具体来说,矩阵和向量可以表示为:
X
=
[
x
1
1
x
2
1
⋮
⋮
x
n
1
]
,
θ
=
[
a
b
]
,
Y
=
[
y
1
y
2
⋮
y
n
]
X = \left[ \begin{matrix} {x_1} & {1} \\ {x_2} & {1} \\ \vdots &\vdots \\ {x_n} & {1} \end{matrix} \right], \theta = \left[ \begin{matrix} {a} \\ {b} \end{matrix} \right], Y = \left[ \begin{matrix} {y_1} \\ {y_2} \\ \vdots \\ {y_n} \end{matrix} \right]
X=
x1x2⋮xn11⋮1
,θ=[ab],Y=
y1y2⋮yn
为了找到 θ \theta θ,我们可以使用最小二乘法的正规方程:
θ = ( X T X ) − 1 X T Y \theta=(X^TX)^{-1}X^TY θ=(XTX)−1XTY
下面是一个具体的示例:
假设我们有以下三个数据点:
( 1 , 2 ) , ( 2 , 3 ) , ( 3 , 5 ) (1,2),(2,3),(3,5) (1,2),(2,3),(3,5)
我们想要找到通过这些点的直线 y = a x + b y=ax+b y=ax+b
首先,我们构建矩阵 X X X和向量 Y Y Y
X = [ 1 1 2 1 3 1 ] , Y = [ 2 3 5 ] X = \left[ \begin{matrix} {1} & {1} \\ {2} & {1} \\ {3} & {1} \end{matrix} \right], Y = \left[ \begin{matrix} {2} \\ {3} \\ {5} \end{matrix} \right] X= 123111 ,Y= 235
然后我们计算 X T × X X^T\times X XT×X和 X T × Y X^T \times Y XT×Y
X T = [ 1 2 3 1 1 1 ] , X T X = [ 14 6 6 3 ] , X T Y = [ 23 10 ] X^T = \left[ \begin{matrix} {1} & {2} & {3} \\ {1} & {1} & {1} \\ \end{matrix} \right], X^TX = \left[ \begin{matrix} {14} &{6} \\ {6} & {3} \end{matrix} \right], X^TY = \left[ \begin{matrix} {23} \\ {10} \end{matrix} \right] XT=[112131],XTX=[14663],XTY=[2310]
接下来,我们计算 ( X T × X ) − 1 (X^T \times X)^{-1} (XT×X)−1
( X T X ) − 1 = [ 0.5 − 1 − 1 2.33 ] (X^TX)^{-1} = \left[ \begin{matrix} {0.5} &{-1} \\ {-1} & {2.33} \end{matrix} \right] (XTX)−1=[0.5−1−12.33]
最后,我们计算
θ
\theta
θ:
θ
=
[
0.5
−
1
−
1
2.33
]
×
[
23
10
]
=
[
1.5
0.33
]
\theta = \left[ \begin{matrix} {0.5} &{-1} \\ {-1} & {2.33} \end{matrix} \right] \times \left[ \begin{matrix} {23} \\ {10} \end{matrix} \right] = \left[ \begin{matrix} {1.5} \\ {0.33} \end{matrix} \right]
θ=[0.5−1−12.33]×[2310]=[1.50.33]
所以,最佳拟合直线是 y = 1.5 x + 0.33 y=1.5x+0.33 y=1.5x+0.33
numpy实现以上计算
计算 X T × X X^T\times X XT×X
import numpy as np
# 创建X值的二维数组
X = np.array([[1, 1], [2, 1], [3, 1]])
# 创建Y值的二维数组
Y = np.array([[2], [3], [5]])
# 计算X的转置与X的乘积
dot = np.dot(X.T, X)
# [[14 6]
# [ 6 3]]
计算 ( X T × X ) − 1 (X^T \times X)^{-1} (XT×X)−1
# 计算X的转置与X的乘积的逆矩阵
inv = np.linalg.inv(dot)
# [[ 0.5 -1. ]
# [-1. 2.33333333]]
计算 ( X T × X ) − 1 × X T (X^T \times X)^{-1} \times X^T (XT×X)−1×XT
# 计算X的转置与X的乘积的逆矩阵,然后乘以X的转置
transfer = np.dot(inv, X.T)
# [[-0.5 0. 0.5 ]
# [ 1.33333333 0.33333333 -0.66666667]]
计算 ( X T × X ) − 1 × X T × Y (X^T \times X)^{-1} \times X^T \times Y (XT×X)−1×XT×Y
# 计算transfer与Y的乘积
result = np.dot(transfer, Y)
# [[1.5 ]
# [0.33333333]]
函数图像如下:
图中红色的数据点为已知的数据点:
(
1
,
2
)
,
(
2
,
3
)
,
(
3
,
5
)
(1,2),(2,3),(3,5)
(1,2),(2,3),(3,5)
四、最小二乘法局限性
1、最小二乘法需要计算
X
T
X
X^TX
XTX的逆矩阵,有可能它的逆矩阵不存在,这样就没有办法直接用最小二乘法了,此时梯度下降法仍然可以使用。当然,我们可以通过对样本数据进行整理,去掉冗余特征。让
X
T
X
X^TX
XTX 的行列式不为0,然后继续使用最小二乘法。(行列式相关计算可以参考我另一篇博文,Numpy学习笔记(二))
2、当样本特征 非常的大的时候,计算 X T X X^TX XTX的逆矩阵是一个非常耗时的工作( n ∗ n n*n n∗n的矩阵求逆),甚至不可行。此时以梯度下降为代表的迭代法仍然可以使用。那这个 n n n到底多大就不适合最小二乘法呢?如果你没有很多的分布式大数据计算资源,建议超过10000个特征就用迭代法吧。或者通过主成分分析降低特征的维度后再用最小二乘法。
3、如果拟合函数不是线性的,这时无法使用最小二乘法,需要通过一些技巧转化为线性才能使用,此时梯度下降仍然可以用。
4、数据应该是准确和可靠的,因为最小二乘法对异常值和错误数据非常敏感。
5、使用最小二乘法之前,需要对模型做出一些基本假设,如线性关系、误差项的独立性、常数方差等。