资源描述:
《曲线拟合与回归分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、MATLAB程式設計進階篇曲線擬合與迴歸分析張智星(RogerJang)jang@mirlab.orghttp://mirlab.org/jang清大資工系多媒體檢索實驗室資料擬和簡介資料擬合(DataFitting)給定一組資料(含輸入及輸出),建立一個數學模型,來逼近此資料的輸入輸出特性如果此資料包含一維輸入及輸出,則此數學模型可以表示成一條曲線,在此情況下又稱為曲線擬合(CurveFitting)迴歸分析(RegressionAnalysis)使用統計的方法來進行資料擬和,並分析每一個變數的統計特性,此過程稱為迴歸分析曲線擬合簡介曲線擬合(CurveF
2、itting)欲建立的數學模型是「單輸入、單輸出」(Single-inputSingle-output,簡稱SISO),其特性可用一條曲線來表示迴歸分析之分類若模型是線性模型,則此類問題稱為線性迴歸(LinearRegression)若模型是非線性模型,則稱為非線性迴歸(NonlinearRegression)。觀察資料是美國自1790至1990年(以10年為一單位)的總人口,此資料可由載入檔案census.mat得到:範例10-1:censusPlot01.m曲線擬合:美國人口範例loadcensus.mat%載入人口資料plot(cdate,pop,'o'
3、);%cdate代表年度,pop代表人口總數xlabel('年度');ylabel('美國人口總數');模型選取由上圖資料分佈,可猜測這適合的曲線可能是二次拋物線其中y為輸出,x為輸入,則為此模型的參數。由於參數相對於y呈線性關係,所以此模型為稱線性模型目標找出最好的參數值,使得模型輸出與實際資料越接近越好,此過程即稱為線性迴歸曲線擬合之模型選取曲線擬和的平方誤差假設觀察資料可寫成,i=1~21。當輸入為時,實際輸出為。模型的預測值為平方誤差:總平方誤差是參數的函數,這也是我們要最小化的目標函數,可表示如下:曲線擬合之目標函數求得參數、、的最佳值求出對、、的導
4、式,令其為零,即可解出、、的最佳值。總平方誤差為的二次式導式、及為的一次式令上述導式為零之後,我們可以得到一組三元一次線性聯立方程式,就可以解出參數、、的最佳值。目標函數之求解假設21個觀察點均通過此拋物線,將這21個點帶入拋物線方程式,得到下列21個等式:亦可寫成其中、為已知,為未知向量。矩陣表示法觀察上述21個方程式,只有3個未知數,所以通常不存在一組解來滿足這21個方程式。在一般情況下,只能找到一組,使得等號兩邊的差異為最小,此差異可寫成此即為前述的總平方誤差MATLAB提供一個簡單方便的「左除」()指令,來解出最佳的,使得總平方誤差為最小。MATLA
5、B的最小平方解利用「左除」來算出最佳的參數值,並同時畫出具有最小平方誤差的二次曲線範例10-2:census01.m曲線擬合運算範例loadcensus.mat%載入人口資料plot(cdate,pop,'o');%cdate代表年度,pop代表人口總數A=[ones(size(cdate)),cdate,cdate.^2];y=pop;theta=Ay;%利用「左除」,找出最佳的theta值plot(cdate,pop,'o',cdate,A*theta,'-');legend('實際人口數','預測人口數');xlabel('年度');ylabel('美
6、國人口總數');曲線擬合結果由上述範例,我們可以找出最佳的因此具有最小平方誤差的拋物線可以寫成:提示:左除及右除左除的概念,可記憶如下:原先的方程式是A*theta=y,我們可將A移項至等號右邊,而得到theta=Ay。必須小心的是:原先A在乘式的第一項,所以移到等號右邊後,A仍然必須是除式的第一項。若我們要解的方程式是theta*A=y,則同樣的概念可得到最小平方解theta=y/A。根據上拋物線數學模型,我們可以預測美國在2000年的人口總數為:範例10-3:census02.m以模型預測人口總數loadcensus.mat%載入人口資料A=[ones(
7、size(cdate)),cdate,cdate.^2];theta=Apop;%利用「左除」,找出最佳的theta值t=2000;pop2000=[1,t,t^2]*theta;%在2000年美國人口線數預測值t=2010;pop2010=[1,t,t^2]*theta;%在2010年美國人口線數預測值fprintf('美國人口在2000年的預測值=%g(百萬人)',pop2000);fprintf('美國人口在2010年的預測值=%g(百萬人)',pop2010);>>美國人口在2000年的預測值=274.622(百萬人)>>美國人口在2010年
8、的預測值=301.824(百萬人)上述