插值算法是要经过所有的点,但当数据很大的时候,如果还要经过所有的样本点,这个时候用于插值的多项式阶数就会非常高,就会出现龙格现象,在样本点附近函数的导数非常大,通常趋于无穷,这就造成了曲线陡峭,波动非常大,此种情况下拟合算法便出现来解决这个问题。
与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数)。
插值算法中,得到的多项式 f ( x ) f(x) f(x)要经过所有样本点。但是如果样本点太多,那么这个多项式次数过高,会造成龙格现象。尽管我们可以选择分段的方法避免这种现象,但是更多时候我们更倾向于得到一个确定的曲线,尽管这条曲线不能经过每一个样本点,但只要保证误差足够小即可,这就是拟合的思想。(拟合的结果是得到一个确定的曲线)
X
,Y
的最佳拟合曲线画散点图,查看X和Y的分布趋势
以不同的颜色标记散点:要使用不同的颜色,请将 c
指定为向量,使用这个有个前提是颜色的数量要与数据的长度保持一致
c = linspace(1,10,length(x));
用’.'标记数据
scatter(x,y,'.')
改变标记点大小
>> size = 600;
>> scatter(x,y,size,c,'.')
可以看到大致呈直线一次函数关系。
那么问题来了,k
和b
取何值时样本点和拟合曲线最接近呢?我们先一步一步来,这里要用到最小二乘法的有关知识。
先介绍最小二乘法的两种定义方式:
其中 y ∧ i = k x i + b \overset{\land}{y}_i=kx_i+b y∧i=kxi+b是将x的坐标代入拟合曲线中得到的拟合纵坐标,因为y头上有个三角形的符号,所以我们也叫它y-hat
,像戴了一顶帽子一样,arg
是参数的英文单词arguement
的缩写,以上两种定义方式都是将拟合的纵坐标与实际的纵坐标进行比较,不过第一种是两个直接相减取绝对值,第二个是相减后取平方,而argmin
和其下标的意思是,参数(arg
)k
和b
取何值时 y ∧ i , y i \overset{\land}{y}_i\text{,}y_i y∧i,yi的比较值(两种方式)取得最小,也就是用哪一种定义方式可以使得到的误差最小。
因为不管哪种定义方式,以上得到的肯定是一个函数,既然是一个函数,我们要求它的最小值的话,就必须对其求导,而第一种定义方式含有绝对值,不容易求导,因此计算起来就会比较复杂,而在MATLAB
中对高阶的函数求导是十分方便的,所以我们毫不犹豫的选择第二种定义方式,这也是为什么最小二乘法带个二的原因,因为有平方(本人瞎猜的)。
那肯定就有人要问了,既然MATLAB
求解高阶导数比较容易的话,为什么不用三阶,四阶…呢。
况且,我问你,拟合的初衷是什么?难道像插值一样经过每个样本点然后产生龙格现象?拟合就是要用最简单的函数模拟出数据的走势。
设这些样本点为 ( x i , y i ) , i = 1 , 2 , ⋯ , n \left( x_i,y_i \right) ,i=1,2,\cdots ,n (xi,yi),i=1,2,⋯,n,我们设置的拟合曲线为 y = k x + b y=kx+b y=kx+b,拟合值等于 y ∧ i = k x i + b \overset{\land}{y}_i=kx_i+b y∧i=kxi+b,那么 k ^ , b ^ = arg min k , b ( ∑ i = 1 n ( y i − y ^ i ) 2 ) = arg min k , b ( ∑ i = 1 n ( y i − k x i − b ) 2 ) \hat{k},\hat{b}=\underset{k,b}{\text{arg}\min}\left( \sum_{i=1}^n{\left( y_i-\hat{y}_i \right) ^2} \right) =\underset{k,b}{\text{arg}\min}\left( \sum_{i=1}^n{\left( y_i-kx_i-b \right) ^2} \right) k^,b^=k,bargmin(i=1∑n(yi−y^i)2)=k,bargmin(i=1∑n(yi−kxi−b)2)
令 L = ∑ i = 1 n ( y i − k x i − b ) 2 L=\sum_{i=1}^n{\left( y_i-kx_i-b \right) ^2} L=∑i=1n(yi−kxi−b)2
现在要找k
,b
使得L
最小,最小的k
和b
就是 k ∧ , b ∧ \overset{\land}{k},\overset{\land}{b} k∧,b∧
因为L
的函数中k
和b
都是变量,所以要求解最小值的话就需要分别对其求偏导。
k
b
clear,clc;
load xy;
size = 300;
n = length(x) %求出x矩阵有多少行
c = linspace(1,10,l) %产生一系列颜色,颜色向量c要与数据x的维度一致
scatter(x,y,size,c,'.') %以大小为300,系列可变颜色,标记符号为"."的规则绘制散点图
hold on;
k = (n*sum(x.*y)-sum(y)*sum(x)) / (n*sum(x.^2)-sum(x)*sum(x)) %拟合曲线的斜率
b = (sum(x.^2)*sum(y)-sum(x)*sum(x.*y)) / (n*sum(x.^2)-sum(x)*sum(x)) %拟合曲线的截距
%% 根据已知斜率绘制直线
f = @(x) k*x+b; %求解函数的形式,@符号后面跟上自变量(如果自变量有两个的话,则括号里面也有两个)
fplot(f,[-5,5]) %第一个参数是函数,第二个参数是自变量的范围
legend('样本数据','拟合数据')
S S T = ∑ i = 1 n ( y i − y ˉ ) 2 SST=\sum_{i=1}^n{\left( y_i-\bar{y} \right) ^2} SST=i=1∑n(yi−yˉ)2
S S E = ∑ i = 1 n ( y i − y ^ i ) 2 SSE=\sum_{i=1}^n{\left( y_i-\hat{y}_i \right) ^2} SSE=i=1∑n(yi−y^i)2
S S R = ∑ i = 1 n ( y ^ i − y ˉ ) 2 SSR=\sum_{i=1}^n{\left( \hat{y}_i-\bar{y} \right) ^2} SSR=i=1∑n(y^i−yˉ)2
S S T = S S E + S S R SST =SSE+SSR SST=SSE+SSR
R 2 R^2 R2称为拟合优度,也叫可决优度,是表示拟合好坏的指标, R 2 R^2 R2越接近1,说明误差平方和 S S E SSE SSE越接近0,误差越小说明拟合的越好。
这里要用到前面的求导的条件
而 y ∧ i = k x i + b \overset{\land}{y}_i=kx_i+b y∧i=kxi+b,带入得到
所以
即
S S T = S S E + S S R SST =SSE+SSR SST=SSE+SSR
R 2 R^2 R2只能用于拟合函数是线性函数时,拟合结果的评价
线性函数通常有两个概念,第一个是对参数线性,另一个是对变量线性,我们主要讨论的是对参数线性。
参考古扎拉蒂《计量经济学基础》
y = a + b x 2 y=a+bx^2 y=a+bx2是线性函数吗?
a
,b
都是常数的情况下,y
就是一个线性函数,线性于参数。
在函数中,参数仅以一次方出现,且不能乘以或除以其他任何的参数,并不能出现参数的复合函数形式。
mean()
是求均值的函数
y_hat = k*x+b; %y的拟合值
SSR = sum((y_hat-mean(y)).^2) %回归平方和
SSE = sum((y-y_hat).^2) %误差平方和
SST = sum((y-mean(y)).^2) %总体平方和
R_2 = SSR/SST %拟合优度
k =
2.0948
b =
-1.0548
SSR =
151.1583
SSE =
5.7281
SST =
156.8863
R_2 =
0.9635
clear,clc;
load xy;
size = 300;
l = length(x) %求出x矩阵有多少行(2表示列)
c = linspace(1,10,l) %产生一系列颜色,颜色向量c要与数据x的维度一致
scatter(x,y,size,c,'.') %以大小为300,系列可变颜色,标记符号为"."的规则绘制散点图
hold on;
k = (l*sum(x.*y)-sum(y)*sum(x)) / (l*sum(x.^2)-sum(x)*sum(x)) %拟合曲线的斜率
b = (sum(x.^2)*sum(y)-sum(x)*sum(x.*y)) / (l*sum(x.^2)-sum(x)*sum(x)) %拟合曲线的截距
%% 根据已知斜率绘制直线
f = @(x) k*x+b; %求解函数的形式,@符号后面跟上自变量(如果自变量有两个的话,则括号里面也有两个)
fplot(f,[-5,5]) %第一个参数是函数,第二个参数是自变量的范围
legend('样本数据','拟合数据')
y_hat = k*x+b; %y的拟合值
SSR = sum((y_hat-mean(y)).^2) %回归平方和
SSE = sum((y-y_hat).^2) %误差平方和
SST = sum((y-mean(y)).^2) %总体平方和
R_2 = SSR/SST %拟合优度
转载请注明出处