拟合算法1(含推导+matlab代码)

拟合算法1(含推导+matlab代码)

1.线性拟合(y = k*x + b) + 最小二乘法

k ^ , b ^ = a r g m i n ( ∑ i = 1 n ( y i ^ − y i ) 2 ) \hat{k},\hat{b} = argmin(\sum_{i = 1}^{n}{(\hat{y_i}-y_i)^2}) k^,b^=argmin(i=1n(yi^yi)2)

计 算 式 : L ( k , b ) = ∑ i = 1 n ( y i ^ − y i ) 2 ↔ ∂ L ( k , b ) ∂ k = 0 、 ∂ L ( k , b ) ∂ b = 0 计算式:L(k,b) = \sum_{i=1}^{n}{(\hat{y_i}-y_i)^2}\leftrightarrow \frac{\partial{L(k,b)}}{\partial{k}} = 0、\frac{\partial{L(k,b)}}{\partial{b}} = 0 L(k,b)=i=1n(yi^yi)2kL(k,b)=0bL(k,b)=0

结 果 : k ^ = n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 结果:\hat{k} = \frac{n\sum_{i=1}^{n}{x_iy_i}-\sum_{i=1}^{n}{y_i}\sum_{i=1}^{n}{x_i}}{n\sum_{i=1}^{n}{x_i^2}-(\sum_{i=1}^{n}{x_i})^2} k^=ni=1nxi2(i=1nxi)2ni=1nxiyii=1nyii=1nxi

b ^ = ∑ i = 1 n x i 2 ∑ i = 1 n y i − ∑ i = 1 n x i ∑ i = 1 n x i y i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 \hat{b} = \frac{\sum_{i=1}^{n}{x_i^2}\sum_{i=1}^{n}{y_i}-\sum_{i=1}^{n}{x_i}\sum_{i=1}^{n}{x_iy_i}}{n\sum_{i=1}^{n}{x_i^2}-(\sum_{i=1}^{n}{x_i})^2} b^=ni=1nxi2(i=1nxi)2i=1nxi2i=1nyii=1nxii=1nxiyi

2.评判拟合好坏:SST、SSE、SSR、R^2
2.1 总体、误差、回归平方和及拟合优度公式公式

总 体 平 方 和 : S S T = ∑ i = 1 n ( y i − y ‾ ) 2 总体平方和:SST = \sum_{i = 1}^{n}{(y_i - \overline{y})^2} SST=i=1n(yiy)2

误 差 平 方 和 : S S E = ∑ i = 1 n ( y i − y ^ ) 2 误差平方和:SSE = \sum_{i = 1}^{n}{(y_i - \hat{y})^2} SSE=i=1n(yiy^)2

回 归 平 方 和 : S S R = ∑ i = 1 n ( y i ^ − y ‾ ) 2 回归平方和:SSR = \sum_{i = 1}^{n}{(\hat{y_i} - \overline{y})^2} SSR=i=1n(yi^y)2

S S T , S S R , S S E 关 系 : S S T = S S R + S S E ( 证 明 见 下 ↓ ) SST,SSR,SSE关系:SST = SSR + SSE(证明见下\downarrow) SST,SSR,SSESST=SSR+SSE()

拟 合 优 度 ( R 2 ) : 0 ≤ R 2 = S S R S S T = 1 − S S E S S T ≤ 1 拟合优度(R^2):0 \leq R^2 = \frac{SSR}{SST} = 1-\frac{SSE}{SST} \leq 1 (R2)0R2=SSTSSR=1SSTSSE1

2.2 SST、SSR、SSE关系证明

jyQNRK.png

2.3 R^2的使用条件——线性函数
  • 对参数呈线性,而非对变量呈线性

线 性 函 数 : f ( x ) = k ∗ x + b 、 g ( x ) = a x 2 + b x + c 、 h ( x ) = e a x 3 + b x 2 + c x + d 线性函数:f(x)=k*x+b、g(x) = ax^2+bx+c、h(x) = e^{ax^3+bx^2+cx+d} 线f(x)=kx+bg(x)=ax2+bx+ch(x)=eax3+bx2+cx+d

非 线 性 函 数 : f ( x ) = a ∗ c ∗ x 、 g ( x ) = a l o g c ( b x + d ) 非线性函数:f(x) = a*c*x、g(x) = alog_{c}{(bx+d)} 线f(x)=acxg(x)=alogc(bx+d)

  • 对于非线性函数,应该用SSE判断其拟合好坏
3.代码实战(matlab实现线性拟合)
3.1使用的函数和技巧:
# 将工作区数据保存成.mat文件,用load + 文件名来导入数据
# 用.* .^来进行矩阵的内积运算
# 用sum函数对矩阵进行求和 sum(M,1或2或无)->1对列求和,2对行求和
# plot函数画图
3.2拟合代码:
clear,clc;

%可以将工作区的数据保存成.mat数据文件
%用load加载数据↓
load matching_data_code1;

%使用.*.^来进行矩阵的内积
k = ( size(x,1) * sum(x.*y) - sum(y) * sum(x) ) / ( size(x,1) * sum(x.^2) - sum(x)^2 )
b = ( sum(x.^2) * sum(y) - sum(x) * sum(x.*y) ) / ( size(x,1) * sum(x.^2) - sum(x)^2 )

new_x = 2 : 0.01 : 7;
new_y = k * new_x + b;

plot(x,y,"o", new_x , new_y , "m-" , linewidth = 1.5);
xlabel("x的值");
ylabel("y的值");
title("线性拟合函数")
legend("原样本点","拟合曲线","location","southeast");
3.3效果图:

jyQtG6.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值