拟合算法
与插值算法的区别:拟合不需要曲线一定经过给定的点。
拟合的目的在于 最小化损失函数(loss)
步骤
1. 散点图
% 先将数据导入
% matlab
plot(x,y,'o')
xlabel('x的值')
ylabel('y的值')
画出散点图,进行大致的观察
2. 最小二乘法
核心表达式:
matlab求解:
clear;clc
load % +.xlsx文件
plot(x,y,'o')
xlabel('x值')
ylabel('y值')
n = size(x,1);
k = (n*sum(x.*y)-sum(x)*sum(y))/(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
3. 拟合标准
拟合优度(可决系数) R2
总体平方和 SST
误差平方和 SSE
回归平方和 SSR
性质:
SST = SSE + SSR
0 <= R2 = SSR/SST = (SST-SSE)/SST = 1-SSE/SST <= 1
R2 越接近1,说明SSE越接近0,误差越小拟合越好
ps. R2 只能用于线性函数
复杂的指数函数直接看SSE
ps. 对于’线性函数’的判定
此处是对参数的线性 (线性于参数)
即参数仅以一次方的形式出现,且不能出现参数的复合函数形式
eg. y = a+bx2 是线性函数
4. 计算拟合优度
matalb
mean( ) 求均值函数
% 以最简单拟合函数 y=k*x+b 为例
% 已经求得拟合的k,b
y_h = k*x+b;
% y_h为y的的拟合值
SSR = sum((y_h-mean(y)).^2)
SSE = sum((y_h-y).^2)
SST = sum((y-mean(y)).^2)
SST-SSE-SSR % 5.6843e-14 = 5.6843*10^-14 matlab浮点数计算的一个误差
R_2 = SSR / SST
5. matlab 曲线拟合工具箱
可以输入 cftool 直接打开
or
图形界面: APP -> Cure Fitting
使用方法:
核心:result 分析
ps. from 清风数学建模
matlab生成随机数(拓)
rand( ) : 产生均匀分布的随机数
randi( ): 产生均匀分布的随机整数(int)
roundn( ): 选择任意位 进行四舍五入操作
normrnd( ): 产生正态分布的随机数
用法:
注意在matlab中返回的是 矩阵
s1 = rand(1,5) % 0~1 矩阵1*5
s2 = a+(b-a)rand(1,5) % a~b 矩阵1*5
s3 = randi(10,1,5) % int(1~10) 矩阵1*5
s4 = randi([-10,10],1,5) % int(-10~10) 矩阵1*5
a = 3.141592
roundn(a,-2) % ans = 3.140000