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:只有一種,ab*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);
Library Model Name | Description |
---|---|
poly1 | 線性多項式曲線 |
poly11 | 線性多項式表面 |
poly2 | 二次多項式曲線 |
linearinterp | 分段線性插值 |
cubicinterp | 分段三次插值 |
smoothingspline | 平滑樣條(曲線) |
lowess | 局部線性迴歸(曲面) |