MATLAB程式设计进阶篇曲线拟合与回归分析(精)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB 程式設計進階篇 曲線擬合與迴歸分析
張智星 (Roger Jang) jang@mirlab.org http://mirlab.org/jang 清大資工系 多媒體檢索實驗室
資料擬和簡介

資料擬合(Data Fitting)


給定一組資料(含輸入及輸出),建立一個數學模 型,來逼近此資料的輸入輸出特性 如果此資料包含一維輸入及輸出,則此數學模型可 以表示成一條曲線,在此情況下又稱為曲線擬合 (Curve Fitting) 使用統計的方法來進行資料擬和,並分析每一個變 數的統計特性,此過程稱為迴歸分析

迴歸分析(Regression Analysis)

曲線擬合簡介

曲線擬合(Curve Fitting)

欲建立的數學模型是「單輸入、單輸出」 (Single-input Single-output,簡稱SISO),其 特性可用一條曲線來表示 若模型是線性模型,則此類問題稱為線性迴歸 (Linear Regression) 若模型是非線性模型,則稱為非線性迴歸 (Nonlinear Regression)。
y f ( x) a0 a1 x a2 x 2 21130 23.51x 0.00654 x2
提示:左除及右除

迴歸分析之分類


曲線擬合:美國人口範例

觀察資料是美國自 1790 至 1990 年(以 10 年為一單位)的總人口,此資料可由載入檔案 census.mat 得到:

範例10-1: censusPlot01.m
% 載入人口資料 % cdate 代表年度,pop 代表人口總數
250 200
load census.mat plot(cdate, pop, 'o'); xlabel('年度'); ylabel('美國人口總數');


總平方誤差 E 為 a0, a1 , a2的二次式 導式 E 、 E 及 E 為a0, a1 , a2 的一次式
a0 a1 a2

令上述導式為零之後,我們可以得到一組三元一次 線性聯立方程式,就可以解出參數 a0 、 a1 、a2的最 佳值。
Βιβλιοθήκη Baidu
矩陣表示法

假設 21 個觀察點均通過此拋物線,將這 21 個點帶入拋物線方程式,得到下列21個等式:
a 0 a1 x1 a 2 x1 y1 a 0 a1 x 2 a 2 x 2 y 2 2 a 0 a1 x 21 a 2 x 21 y 21
2 2

亦可寫成
1 x1 x12 2 1 x x 2 2 2 1 x21 x21
E (a0 , a1 , a2 ) yi f ( xi ) yi a0 a1 xi a2 xi
2 i 1 i 1 21 21

2

2
目標函數之求解

求得參數 a0 、 a、 1 a2 的最佳值 a2 的導式,令其為零,即可解 求出 E 對 a0、a1 、 出 a0、 a1、a2 的最佳值。

目標

曲線擬合之目標函數

曲線擬和的平方誤差

yi

假設觀察資料可寫成 ( xi , yi ),i= 1~21。當輸入為 x i 時,實際輸出為 yi 。 模型的預測值為 f ( xi ; a0 , a1, a2 ) a0 a1xi a2 xi 2 平方誤差: yi f ( xi )2 總平方誤差 E是參數 a0, a1 , a2 的函數,這也是我 們要最小化的目標函數,可表示如下:
y A
2
( y A ) T ( y A )
此即為前述的總平方誤差 E

MATLAB 提供一個簡單方便的「左除」(\)指 令,來解出最佳的 ,使得總平方誤差為最小。
曲線擬合運算範例

利用「左除」來算出最佳的參數值,並同時畫 出具有最小平方誤差的二次曲線

範例10-2: census01.m
A 1 1 y 2 2 3
y


y 21
y

為未知向量。 其中 A 、 y 為已知,
MATLAB的最小平方解

觀察


上述21個方程式,只有 3 個未知數 1,2 ,3 T,所 以通常不存在一組解來滿足這 21 個方程式。 在一般情況下,只能找到一組 ,使得等號兩邊的 差異為最小,此差異可寫成
曲線擬合結果
250 200 實際人口數 預測人口數
美國人口總數
150
100
50
0 1750
1800
1850 年度
1900
1950
2000

由上述範例,我們可以找出最佳的
a0 , a1 , a2 21130 , 23.51, 0.00654

因此具有最小平方誤差的拋物線可以寫成:
load census.mat % 載入人口資料 plot(cdate, pop, 'o'); % cdate 代表年度,pop 代表人口總數 A = [ones(size(cdate)), cdate, cdate.^2]; y = pop; theta = A\y; % 利用「左除」,找出最佳的 theta 值 plot(cdate, pop, 'o', cdate, A*theta, '-'); legend('實際人口數', '預測人口數'); xlabel('年度'); ylabel('美國人口總數');
美國人口總數
150
100
50
0 1750
1800
1850 年度
1900
1950
2000
曲線擬合之模型選取

模型選取


由上圖資料分佈,可猜測這適合的曲線可能是二次 2 拋物線 y f ( x; a0 , a1 , a2 ) a0 a1 x a2 x 其中y為輸出,x為輸入,a0, a1 , a2 則為此模型的參 數。由於參數相對於y呈線性關係,所以此模型為 稱線性模型 找出最好的參數值,使得模型輸出與實際資料越接 近越好,此過程即稱為線性迴歸
相关文档
最新文档