拟合算法与插值算法的不同
拟合:
- 不需要曲线一定经过给定的点。
- 目标为寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接技能,即曲线拟合的最好(最小化损失函数)
插值:
- 得到的多项式 f ( x ) f(x) f(x)需要经过所有的样本点,但当样本点过多时,会产生龙格现象。
尽管分段插值的方法可以避免这种现象,但有时候我们更倾向于得到一个确定的曲线,而这条曲线不一定要经过每一个样本点,但只要保证误差足够小即可。这就是拟合的思想。(拟合得到的结果为一个确定的值)
最小二乘法
一个小例子:
第一种定义:
y
i
^
=
k
x
i
+
b
\hat{y_i}=kx_i+b
yi^=kxi+b
k
i
^
,
b
^
=
arg
k
,
b
min
(
∑
i
=
1
n
∣
y
i
−
y
i
^
∣
)
\hat{k_i},\hat{b}=\arg_{k,b}\min(\sum_{i=1}^n|y_i-\hat{y_i}|)
ki^,b^=argk,bmin(∑i=1n∣yi−yi^∣)
第二种定义:
y
i
^
=
k
x
i
+
b
\hat{y_i}=kx_i+b
yi^=kxi+b
k
i
^
,
b
^
=
arg
k
,
b
min
(
∑
i
=
1
n
(
y
i
−
y
i
^
)
2
)
\hat{k_i},\hat{b}=\arg_{k,b}\min(\sum_{i=1}^n(y_i-\hat{y_i})^2)
ki^,b^=argk,bmin(∑i=1n(yi−yi^)2)
因为第一种定义为绝对值不容易求导,计算比较复杂,因此我们往往使用第二种定义。
为什么不用四次方:
1.避免极端数据对拟合曲线的影响。
2.最小二乘法得到的结果和MLE极大似然估计一致。
不用奇次方:
误差会正负相抵。
求解最小二乘法
Matlab中求解最小二乘法
clear;clc;
load datal
plot(x,y,'o')
xlabel('x的值')
ylabel('y的值')
n=size(x,1);
k=(n*sum(x.*y)-sum(y)*sum(x))/(n*sum(x.*x)-sum(x)*sum(x))
b=(sum(x.*x)*sum(y)-sum(x)*sum(x*.y))/(n*sum(x.*x)-sum(x)*sum(x))
hold on
grid on
f=@(x)k*x+b;
fplot(f,[2.5,7]);
legend('样本数据',拟合数据,'locationo','SouthEast')
如何评价拟合的好坏
拟
合
优
度
(
可
决
系
数
)
R
2
拟合优度(可决系数)R^2
拟合优度(可决系数)R2
总
体
平
方
和
S
S
T
:
S
S
T
=
∑
i
=
1
n
(
y
i
−
y
‾
)
2
总体平方和SST:SST=\sum_{i=1}^n(y_i-\overline{y})^2
总体平方和SST:SST=i=1∑n(yi−y)2
误
差
平
方
总
和
S
S
E
:
S
S
E
=
∑
i
=
1
n
(
y
i
−
y
i
^
)
2
误差平方总和SSE: SSE=\sum_{i=1}^n(y_i-\hat{y_i})^2
误差平方总和SSE:SSE=i=1∑n(yi−yi^)2
回
归
平
方
和
S
S
R
:
S
S
R
=
∑
i
=
1
n
(
y
i
^
−
y
‾
)
回归平方和SSR:SSR=\sum_{i=1}^n(\hat{y_i}-\overline{y})
回归平方和SSR:SSR=i=1∑n(yi^−y)
可
以
证
明
:
S
S
T
=
S
S
E
+
S
S
R
可以证明:SST=SSE+SSR
可以证明:SST=SSE+SSR
证明过程如下
拟
合
优
度
:
0
≤
R
2
=
S
S
R
S
S
T
=
S
S
T
−
S
S
E
S
S
T
=
1
−
S
S
E
S
S
T
≤
1
拟合优度:0 \leq R^2 = \frac{SSR}{SST}=\frac{SST-SSE}{SST}=1-\frac{SSE}{SST}\leq 1
拟合优度:0≤R2=SSTSSR=SSTSST−SSE=1−SSTSSE≤1
R
2
越
接
近
1
,
说
明
误
差
平
方
和
越
接
近
0
,
误
差
越
小
说
明
误
差
拟
合
越
好
。
R^2越接近1,说明误差平方和越接近0,误差越小说明误差拟合越好。
R2越接近1,说明误差平方和越接近0,误差越小说明误差拟合越好。
由于函数越复杂,拟合的越好(龙格现象),因此在判读拟合的好坏时,应该保证模型的简单
注意:
R
2
R^2
R2只能说明用于拟合函数事线性函数时,拟合结果的评价
如果函数比较复杂(列如指数函数),在比较拟合的好坏的时候,看
S
S
E
SSE
SSE即可
对参数线性
拟合算法中的线性是指对参数线性
Matlab中求拟合优度的代码
y_hat=k*x+b%y的拟合值
SSR=sum((y_hat-mean(y)).^2)% 回归平方和
SSE=sum((y_hat-y).^2)%误差平方和
SST=sum((y-mean(y)).^2) %总体平方和
R_2=SSR/SST