Matlab-函數擬合

0. 評價指標

一、SSE(和方差)
該統計參數計算的是擬合數據和原始數據對應點的誤差的平方和,計算公式如下

在這裏插入圖片描述
SSE越接近於0,說明模型選擇和擬合更好,數據預測也越成功。接下來的MSE和RMSE因爲和SSE是同出一宗,所以效果一樣

二、MSE(均方差)
該統計參數是預測數據和原始數據對應點誤差的平方和的均值,也就是SSE/n,和SSE沒有太大的區別,計算公式如下
在這裏插入圖片描述

三、RMSE(均方根)
該統計參數,也叫回歸系統的擬合標準差,是MSE的平方根,就算公式如下
在這裏插入圖片描述

在這之前,我們所有的誤差參數都是基於預測值(y_hat)和原始值(y)之間的誤差(即點對點)。從下面開始是所有的誤差都是相對原始數據平均值(y_ba)而展開的(即點對全)!!!

四、R-square(確定係數)
在講確定係數之前,我們需要介紹另外兩個參數SSR和SST,因爲確定係數就是由它們兩個決定的
(1)SSR:Sum
of squares of the regression,即預測數據與原始數據均值之差的平方和,公式如下

(2)SST:Total sum of squares,即原始數據和均值之差的平方和,公式如下
在這裏插入圖片描述
細心的網友會發現,SST=SSE+SSR,呵呵只是一個有趣的問題。而我們的“確定係數”是定義爲SSR和SST的比值,故

其實“確定係數”是通過數據的變化來表徵一個擬合的好壞。由上面的表達式可以知道“確定係數”的正常取值範圍爲[0
1],越接近1,表明方程的變量對y的解釋能力越強,這個模型對數據擬合的也較好。

1. 工具箱擬合——cftool

在這裏插入圖片描述
在命令行輸入數據:
x
y

啓動曲線擬合工具箱
命令:cftool

進入曲線擬合工具箱界面“Curve Fitting tool”
1)利用X data和Y data的下拉菜單讀入數據x,y
2)選擇曲線擬合類型
3)自動擬合 即可在結果窗口和曲線窗口顯示出擬合結果

工具箱提供的擬合類型如下,進行簡要說明,可以嘗試各種不同類型擬合效果

英文名稱 逼近類型 種類數量 基礎類型
Custom Equations 用戶自定義的函數類型
Exponential 指數逼近 2
Fourier 傅立葉逼近 7
Gaussian 高斯逼近 8
Interpolant 插值逼近 4 linear、nearest neighbor、cubic spline、shape-preserving
Polynomial 多形式逼近 9 linear ~、quadratic ~、cubic ~、4-9th degree ~
Power 冪逼近 2 ax^b 、ax^b + c
Rational 有理數逼近 ,分子、分母共有的類型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子還包括constant型
Smoothing Spline 平滑逼近
Sum of Sin Functions 正弦曲線逼近 8 a1sin(b1x + c1)
Weibull 1 abx(b-1)*exp(-a*xb)

注意 : Interpolant是插值逼近僅僅是對函數進行插值畫圖顯示,並不能得到擬合的函數。

Exponential:指數逼近,有2種類型, aexp(bx) 、 aexp(bx) + cexp(dx)
Fourier:傅立葉逼近,有7種類型,基礎型是 a0 + a1cos(xw) + b1sin(xw)
Gaussian:高斯逼近,有8種類型,基礎型是 a1exp(-((x-b1)/c1)^2)
Interpolant:插值逼近,有4種類型,linear、nearest neighbor、cubic spline、shape-preserving
Polynomial:多形式逼近,有9種類型,linear ~、quadratic ~、cubic ~、4-9th degree ~
Power:冪逼近,有2種類型,ax^b 、ax^b + c
Rational:有理數逼近,分子、分母共有的類型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子還包括constant型
Smoothing Spline:平滑逼近(翻譯的不大恰當,不好意思)
Sum of Sin Functions:正弦曲線逼近,有8種類型,基礎型是 a1sin(b1x + c1)
Weibull:只有一種,a
b*x(b-1)*exp(-a*xb)
選擇View > Residuals Plot,可以查看殘差圖。

在Table of Fits中右擊選擇Duplicate “XX” (或者在Fit主菜單裏面複製) 複製某個擬合,重新生成別的擬合,進行對比。

觀察Results以及residuals plot 殘差圖。
The residuals from a good fit should look random with no apparent pattern. A pattern, such as a tendency for consecutive residuals to have the same sign, can be an indication that a better model exists.

2. 萬能擬合 ——nlinfit

matlab 萬能實用的非線性曲線擬合方法 - It’s All Uphill From Here
matlab函數擬合 - 學習時間軸 - 博客園

clear
clc   %清除工作空間
syms x;

%公共參數設置
xx=[3,5]';   %這裏設置已知自變量向量(列向量)
yy = [0.8,1]';  %對應因變量(列向量)
startPos = [1,1];   %設置係數的起始搜索點
%使用fit函數擬合的
%設置參數
f = '(1+alpha*(x-belta)^(-2))^(-1)';  %設置需要擬合的函數形式
funType=fittype(f,'independent','x',...
'coefficients',{'alpha','belta'});  %在independent後面設置自變量,在coefficients後面設置待定係數(多個值用{}括起來)
%使用nlinfit函數進行擬合的
%設置參數
f1 = @(coef,x)(1+coef(1)*(x-coef(2)).^(-2)).^(-1);  %設置需要擬合的函數(內聯函數形式)

%後面的代碼不用改
%fit擬合相關代碼
opt=fitoptions(funType);
set(opt,'StartPoint',startPos);
cfun=fit(xx,yy,funType,opt)   %命令行顯示結果
plot(cfun,'r',xx,yy,'*')

%nlinfit擬合相關代碼
coef=nlinfit(xx,yy,f1,startPos);
disp('nlinfit擬合後的係數矩陣爲:');
disp(coef);

hold on
xmax = max(xx);
xmin = min(xx);
xnum = 2*length(xx)+50;
x = linspace(xmin,xmax,xnum);
y = f1(coef,x);
plot(x,y,'g');

legend('原始數據','fit擬合','nlinfit擬合')

3. 多項式擬合 ——polyfit

p=polyfit(x,y,2);

如何使用MATLAB進行曲線擬合-百度經驗

Library Model Name Description
poly1 線性多項式曲線
poly11 線性多項式表面
poly2 二次多項式曲線
linearinterp 分段線性插值
cubicinterp 分段三次插值
smoothingspline 平滑樣條(曲線)
lowess 局部線性迴歸(曲面)

參考

matlab 萬能實用的非線性曲線擬合方法 - It’s All Uphill From Here

發佈了125 篇原創文章 · 獲贊 319 · 訪問量 66萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章