线性回归问题
线性回归就是对所给的样本进行建模,从而来对未给定或者未来的数据进行预测。如上图,给定了一系列的样本点,通过找到一条“最逼近”所有样本点的曲线进行拟合。
最小二乘法
目的
通过最小化误差的平方和,来寻找到最佳的数据匹配
方法
利用最小二乘可以简便的求得未知的数据,并使得这写求得的数据与实际数据之间误差的平方和为最小。
这里引入几种概念:
1.残差:预测值
h
(
x
i
)
h(x_i)
h(xi)和真实值
y
i
y_i
yi之间的误差:
r
i
=
h
(
x
i
)
−
y
i
r_i = h(x_i)-y_i
ri=h(xi)−yi
2.三种范数:
L
∞
L_∞
L∞-范数:残差绝对值中的最大值,即所有数据点中残差距离的最大值:
max
1
≤
i
≤
m
∣
r
i
∣
\max _{1 \leq i \leq m}\left|r_{i}\right|
max1≤i≤m∣ri∣
L
1
L_1
L1-范数:绝对残差和,即所有数据点残差距离之和:
∑
i
=
1
m
∣
r
∣
\sum{}_{i=1}^m \lvert r\lvert
∑i=1m∣r∣
L
2
L_2
L2范数:残差平方和:
∑
i
=
1
m
r
i
2
\sum{}_{i=1}^mr_i^2
∑i=1mri2
3.拟合程度:通俗的来说,拟合函数 h ( x ) h(x) h(x)与带求解的 y y y之间的相似性,如果误差越小,则越相似。
虽然前两种范数作为误差很容易想到,但是对于计算机来说,计算消耗大,且不利于微分计算。第三种 L 2 L_2 L2-范数的平方为乘法,求和加法,都是基本操作,最小二乘法就是使用 L 2 L_2 L2-范数作为误差计算。
实例
下面以一次函数
y
=
k
x
+
b
y=kx+b
y=kx+b为例,介绍最小二乘法:
首先给出最小二乘法对于这个一次函数的定义:
min
k
,
b
∑
n
=
1
N
(
y
n
−
(
k
×
x
n
+
b
)
)
2
(1)
\min _{k, b} \sum_{n=1}^{N}\left(y_{n}-(k \times x_n+b)\right)^{2}\tag 1
k,bminn=1∑N(yn−(k×xn+b))2(1)
对于以上的无约束问题,求解一个最合适的k和b。首先分别对k和b求偏导,并令其为0,即可获得极值点:
展开(1)式:
L
o
s
s
=
(
y
1
−
(
k
x
1
+
b
)
)
2
+
(
y
2
−
(
k
x
2
+
b
)
)
2
+
.
.
.
+
(
y
N
−
(
k
x
N
+
b
)
)
2
Loss = (y_1-(kx_1+b))^2+(y_2-(kx_2+b))^2+...+(y_N-(kx_N+b))^2
Loss=(y1−(kx1+b))2+(y2−(kx2+b))2+...+(yN−(kxN+b))2
分别对k和b求偏导,并且令为0:
∂
L
o
s
s
∂
k
=
−
2
x
1
(
y
1
−
(
k
x
1
+
b
)
)
−
.
.
.
−
2
x
N
(
y
N
−
(
k
x
n
+
b
)
)
=
0
\frac{\partial{Loss}}{\partial{k}} = -2x_1(y_1-(kx_1+b))-...-2x_N(y_N-(kx_n+b))=0
∂k∂Loss=−2x1(y1−(kx1+b))−...−2xN(yN−(kxn+b))=0
∂
L
o
s
s
∂
b
=
−
2
(
y
1
−
(
k
x
1
+
b
)
)
−
.
.
.
−
2
(
y
N
−
(
k
x
n
+
b
)
)
=
0
\frac{\partial{Loss}}{\partial{b}} = -2(y_1-(kx_1+b))-...-2(y_N-(kx_n+b))=0
∂b∂Loss=−2(y1−(kx1+b))−...−2(yN−(kxn+b))=0
化简得:
{
k
∑
n
=
1
N
x
n
2
+
b
∑
n
=
1
N
x
n
=
∑
n
=
1
N
x
n
y
n
,
k
∑
n
=
1
N
x
n
+
b
N
=
∑
n
=
1
N
y
n
\begin{cases} k\sum_{n=1}^N x_n^2+b\sum_{n=1}^Nx_n=\sum_{n=1}^Nx_ny_n,\\ k\sum_{n=1}^Nx_n+bN = \sum_{n=1}^N y_n\\ \end{cases}
{k∑n=1Nxn2+b∑n=1Nxn=∑n=1Nxnyn,k∑n=1Nxn+bN=∑n=1Nyn
两个式子两个未知数,求得:
{
k
=
N
∑
n
=
1
N
x
n
×
y
n
−
(
∑
n
=
1
N
x
n
)
(
∑
n
=
1
N
y
n
)
(
N
∑
n
=
1
N
(
x
n
)
2
−
(
∑
n
=
1
N
x
n
)
2
)
b
=
(
∑
n
=
1
N
y
n
)
N
−
k
×
(
∑
n
=
1
N
x
n
)
N
\begin{cases} k=\frac{N \sum_{n=1}^{N} x_{n} \times y_{n}-\left(\sum_{n=1}^{N} x_{n}\right)\left(\sum_{n=1}^{N} y_{n}\right)}{\left(N \sum_{n=1}^{N}\left(x_{n}\right)^{2}-\left(\sum_{n=1}^{N} x_{n}\right)^{2}\right)}\\ b=\frac{\left(\sum_{n=1}^{N} y_{n}\right)}{N}-k \times \frac{\left(\sum_{n=1}^{N} x_{n}\right)}{N} \end{cases}
⎩⎪⎨⎪⎧k=(N∑n=1N(xn)2−(∑n=1Nxn)2)N∑n=1Nxn×yn−(∑n=1Nxn)(∑n=1Nyn)b=N(∑n=1Nyn)−k×N(∑n=1Nxn)
求出了需要的未知数k和b,即这个斜率和截距,使得误差最小。
由此同样可以推广到更加复杂的函数计算。