matlab多元非線性回歸_第1頁
matlab多元非線性回歸_第2頁
matlab多元非線性回歸_第3頁
matlab多元非線性回歸_第4頁
matlab多元非線性回歸_第5頁
已閱讀5頁,還剩14頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、matlab回歸(擬合)總結前言1、學三條命令polyfit(x,y,n)-擬合成一元冪函數(一元多次)regress(y,x)-可以多元, nlinfit(x,y,fun,beta0) (可用于任何類型的函數,任意多元函數,應用范圍最廣,最萬能的)2、同一個問題,這三條命令都可以使用,但結果肯定是不同的,因為擬合的近似結果,沒有唯一的標準的答案。相當于咨詢多個專家。3、回歸的操作步驟:根據圖形(實際點),選配一條恰當的函數形式(類型)-需要數學理論與基礎和經驗。(并寫出該函數表達式的一般形式,含待定系數)-選用某條回歸命令求出所有的待定系數。所以可以說,回歸就是求待定系數的過程(需確定函數的

2、形式)一、多元回歸分析對于多元線性回歸模型(其實可以是非線性,它通用性極高):設變量的n組觀測值為記 ,則 的估計值為排列方式與線性代數中的線性方程組相同(),擬合成多元函數-regress使用格式:左邊用b=b, bint, r, rint, stats右邊用=regress(y, x)或regress(y, x, alpha)-命令中是先y后x, -須構造好矩陣x(x中的每列與目標函數的一項對應)-并且x要在最前面額外添加全1列/對應于常數項-y必須是列向量-結果是從常數項開始-與polyfit的不同。)其中: b為回歸系數,的估計值(第一個為常數項),bint為回歸系數的區間估計,r:

3、殘差 ,rint: 殘差的置信區間,stats: 用于檢驗回歸模型的統計量,有四個數值:相關系數r2、F值、與F對應的概率p和殘差的方差(前兩個越大越好,后兩個越小越好),alpha: 顯著性水平(缺省時為0.05,即置信水平為95%),(alpha不影響b,只影響bint(區間估計)。它越小,即置信度越高,則bint范圍越大。顯著水平越高,則區間就越小)(返回五個結果)-如有n個自變量-有誤(n個待定系數),則b 中就有n+1個系數(含常數項,-第一項為常數項)(b-b的范圍/置信區間-殘差r-r的置信區間rint-點估計-區間估計 如果的置信區間(bint的第行)不包含0,則在顯著水平為時

4、拒絕的假設,認為變量是顯著的*(而rint殘差的區間應包含0則更好)。b,y等均為列向量,x為矩陣(表示了一組實際的數據)必須在x第一列添加一個全1列。-對應于常數項。相關系數r2越接近1,說明回歸方程越顯著;(r2越大越接近1越好)F越大,說明回歸方程越顯著;(F越大越好)與F對應的概率p越小越好,一定要P<a時拒絕H0而接受H1,即回歸模型成立。乘余(殘差)標準差(RMSE)越小越好(此處是殘差的方差,還沒有開方)(前兩個越大越好,后兩個越小越好)重點:regress(y,x) 重點與難點是如何加工處理矩陣x。 y是函數值,一定是只有一列。也即目標函數的形式是由矩陣X來確定如s=a+

5、b*x1+c*x2+d*x3+e*x12+f*x2*x3+g*x12,一定有一個常數項,且必須放在最前面(即x的第一列為全1列)X中的每一列對應于目標函數中的一項(目標函數有多少項則x中就有多少列)X=ones, x1, x2, x3, x1.2, x2.*x3,x1.2 (剔除待定系數的形式)regress: y/x順序,矩陣X需要加工處理nlinfit: x/y順序,X/Y就是原始的數據,不要做任何的加工。(即regress靠矩陣X來確定目標函數的類型形式(所以X很復雜,要作很多處理) 而nlinfit是靠程序來確定目標函數的類型形式(所以X就是原始數據,不要做任何處理)例1 測16名成年

6、女子的身高與腿長所得數據如下:身高143145146147149150153154155156157158159160162164腿長8885889192939395969897969899100102配成y=a+b*x形式>> x=143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164'>> y=88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102'>> plot(x,y,'r+')>> z=x;

7、>> x=ones(16,1),x;-常數項>> b,bint,r,rint,stats=regress(y,x);-處結果與polyfit(x,y,1)相同>>b,bint,stats得結果:b = bint = -16.0730 -33.7071 1.5612-每一行為一個區間 0.7194 0.6047 0.8340stats = 0.9282 180.9531 0.0000即;的置信區間為-33.7017,1.5612, 的置信區間為0.6047,0.834; r2=0.9282, F=180.9531, p=0.0。p<0.05, 可知回歸模

8、型 y=-16.073+0.7194x 成立.>> b,bint,r,rint,stats=regress(Y,X,0.05);-結果相同>> b,bint,r,rint,stats=regress(Y,X,0.03);>> polyfit(x,y,1)-當為一元時(也只有一組數),則結果與regress是相同的,只是命令中x,y要交換順序,結果的系數排列順序完全相反,x中不需要全1列。ans =0.7194 -16.0730-此題也可用polyfit求解,殺雞用牛刀,脖子被切斷。3、殘差分析,作殘差圖:>>rcoplot(r,rint)從殘差圖

9、可以看出,除第二個數據外,其余數據的殘差離零點均較近,且殘差的置信區間均包含零點,這說明回歸模型 y=-16.073+0.7194x能較好的符合原始數據,而第二個數據可視為異常點(而剔除)4、預測及作圖:>> plot(x,y,'r+') >> hold on >> a=140:165; >> b=b(1)+b(2)*a;>> plot(a,b,'g')例2 觀測物體降落的距離s與時間t的關系,得到數據如下表,求s關于t的回歸方程t (s)1/302/303/304/305/306/307/30s (c

10、m)11.8615.6720.6026.6933.7141.9351.13t (s)8/309/3010/3011/3012/3013/3014/30s (cm)61.4972.9085.4499.08113.77129.54146.48法一:直接作二次多項式回歸 t=1/30:1/30:14/30; s=11.86 15.67 20.60 26.69 33.71 41.93 51.13 61.49 72.90 85.44 99.08 113.77 129.54 146.48; >> p,S=polyfit(t,s,2)p =489.2946 65.8896 9.1329得回歸模型

11、為 :方法二-化為多元線性回歸:t=1/30:1/30:14/30;s=11.86 15.67 20.60 26.69 33.71 41.93 51.13 61.49 72.90 85.44 99.08 113.77 129.54 146.48;>> T=ones(14,1), t', (t.2)' %?是否可行?等驗證.-因為有三個待定系數,所以有三列,始于常數項>> b,bint,r,rint,stats=regress(s',T);>> b,statsb = 9.1329 65.8896 489.2946stats =1.0e+

12、007 * 0.0000 1.0378 0 0.0000得回歸模型為 : %結果與方法1相同polyfit-一元多次regress-多元一次-其實通過技巧也可以多元多次regress最通用的,萬能的,表面上是多元一次,其實可以變為多元多次且任意函數,如x有n列(不含全1列),則表達式中就有n+1列(第一個為常數項,其他每項與x的列序相對應)。例3 設某商品的需求量與消費者的平均收入、商品價格的統計數據如下,建立回歸模型,預測平均收入為1000、價格為6時的商品需求量.需求量10075807050659010011060收入1000600 1200500300400130011001300300

13、價格5766875439選擇純二次模型,即 -用戶可以任意設計函數>> x1=1000 600 1200 500 300 400 1300 1100 1300 300;>> x2=5 7 6 6 8 7 5 4 3 9;>> y=100 75 80 70 50 65 90 100 110 60'>>X=ones(10,1) x1' x2' (x1.2)' (x2.2)' b,bint,r,rint,stats=regress(y,X)>> b,stats b = 110.5313 0.1464

14、-26.5709 -0.0001 1.8475stats = 0.9702 40.6656 0.0005 20.5771故回歸模型為:剩余標準差為4.5362, 說明此回歸模型的顯著性較好.三、非線性回歸(擬合)使用格式:beta = nlinfit(x,y, 程序名,beta0) beta,r,J = nlinfit(X,y,fun,beta0)X給定的自變量數據,Y給定的因變量數據,fun要擬合的函數模型(句柄函數或者內聯函數形式),beta0函數模型中待定系數估計初值(即程序的初始實參)beta返回擬合后的待定系數其中beta為估計出的回歸系數;r為殘差;J為Jacobian矩陣輸入數據

15、x、y分別為n*m矩陣和n維列向量,對一元非線性回歸,x為n維列向量。可以擬合成任意函數。最通用的,萬能的命令x,y順序,x不需要任何加工,直接用原始數據。-所編的程序一定是兩個形參(待定系數/向量,自變量/矩陣:每一列為一個自變量)結果要看殘差的大小和是否有警告信息,如有警告則換一個b0初始向量再重新計算。本程序中也可能要用.* ./ .如結果中有警告信息,則必須多次換初值來試算.難點是編程序與初值存在的問題:不同的beta0,則會產生不同的結果,如何給待定系數的初值以及如何分析結果的好壞,如出現警告信息,則換一個待定系數試一試。因為擬合本來就是近似的,可能有多個結果。1:重點(難點)是預先

16、編程序(即確定目標函數的形式,而regress的目標函數由x矩陣來確定,其重難點為構造矩陣a)2:x/y順序列向量-x/y是原始數據,不要做任何修改3:編程: 一定兩個形參(beta,x)a=beta(1); b=beta(2);c=beta(3); x1=x(:,1); x2=x(:,2); x3=x(:,3); 即每一列為一個自變量4:regress/nlinfit都是列向量5:regress:有n項(n個待定系數),x就有n列;nlinfit:有m個變量則x就有m列例1 已知數據:x1=0.5,0.4,0.3,0.2,0.1; x2=0.3,0.5,0.2,0.4,0.6; x

17、3=1.8,1.4,1.0,1.4,1.8;y=0.785,0.703,0.583,0.571,0.126;且y與x1,x2 , x3關系為多元非線性關系(只與x2,x3相關)為: y=a+b*x2+c*x3+d*(x2.2)+e*(x3.2)此函數是由用戶根據圖形的形狀等所配的曲線,即自己選定函數類型求非線性回歸系數a , b , c , d , e 。(1)對回歸模型建立M文件model.m如下:function yy=myfun(beta,x) %一定是兩個參數:系數和自變量-一個向量/一個矩陣a=beta(1)b=beta(2)c=beta(3)d=beta(4)e=beta

18、(5)x1=x(:,1); %系數是數組,b(1),b(2),b(n)依次代表系數1, 系數2, 系數nx2=x(:,2); %自變量x是一個矩陣,它的每一列分別代表一個變量,有n列就可以最多nx3=x(:,3);yy=beta(1)+beta(2)*x2+beta(3)*x3+beta(4)*(x2.2)+beta(5)*(x3.2);(b(i)與待定系數的順序關系可以任意排列,并不是一定常數項在最前,只是結果與自己指定的相對應)(x一定是一列對應一個變量,不能x1=x(1),x2=x(2),x3=x(3))(2)主程序如下:x=0.5,0.4,0.3,0.2,0.1;0.3,0.5,0.2

19、,0.4,0.6;1.8,1.4,1.0,1.4,1.8'-每一列為一個變量y=0.785,0.703,0.583,0.571,0.126'beta0=1,1, 1,1, 1,1' %有多少個待定系數,就給多少個初始值。beta,r,j = nlinfit(x,y,myfun,beta0)beta = -0.4420 5.5111 0.3837 -8.1734 -0.1340例2混凝土的抗壓強度隨養護時間的延長而增加,現將一批混凝土作成12個試塊,記錄了養護日期(日)及抗壓強度y(kg/cm2)的數據: 養護時間:x =2 3 4 5 7 9 12 14 17 21 2

20、8 56 抗壓強度:y =35+r 42+r 47+r 53+r 59+r 65+r 68+r 73+r 76+r 82+r 86+r 99+r 建立非線性回歸模型,對得到的模型和系數進行檢驗。 注明:此題中的+r代表加上一個-0.5,0.5之間的隨機數 模型為:y=a+k1*exp(m*x)+k2*exp(-m*x); -有四個待定系數Matlab程序:x=2 3 4 5 7 9 12 14 17 21 28 56; r=rand(1,12)-0.5; y1=35 42 47 53 59 65 68 73 76 82 86 99; y=y1+r ;myfunc=inline('bet

21、a(1)+beta(2)*exp(beta(4)*x)+beta(3)*exp(-beta(4)*x)','beta','x'); -beta=nlinfit(x,y,myfunc,0.5 0.5 0.5 0.5); -初值為0.2也可以,如為1則不行,則試著換系數初值-此處為一元,x,y行/列向量都可以a=beta(1),k1=beta(2),k2=beta(3),m=beta(4)%test the modelxx=min(x):max(x); -2:56yy=a+k1*exp(m*xx)+k2*exp(-m*xx); plot(x,y,'o

22、',xx,yy,'r') 結果: a = 87.5244 k1 = 0.0269 k2 = -63.4591 m = 0.1083 圖形:例3 出鋼時所用的盛鋼水的鋼包,由于鋼水對耐火材料的侵蝕,容積不斷增大.我們希望知道使用次數與增大的容積之間的關系.對一鋼包作試驗,測得的數據列于下表:使用次數增大容積使用次數增大容積234567896.428.209.589.509.7010.009.939.991011121314151610.4910.5910.6010.8010.6010.9010.76對將要擬合的非線性模型y= aeb/x,(如再加y= c*sin(x)+a

23、eb/x)建立m-文件volum.m如下:function yhat=volum(beta,x) yhat=beta(1)*exp(beta(2)./x);或function f=zhang1(beta,x)a=beta(1);b=beta(2);f=a*exp(b./x);-2、輸入數據:>> x=2:16;>> y=6.42 8.20 9.58 9.5 9.7 10 9.93 9.99 10.49 10.59 10.60 10.80 10.60 10.90 10.76;>> beta0=8 2'-初值1,1也可以3、求回歸系數:>>

24、beta,r ,J=nlinfit(x',y','volum',beta0); %beta0初值為列/行向量都可以,還是為列吧。>> betabeta = 11.6037 -1.0641即得回歸模型為:4、預測及作圖: >> YY,delta=nlpredci('volum',x',beta,r ,J)>>plot(x,y,'k+',x,YY,'r')或>> plot(x,y,'ro')>> hold on>> xx=2

25、:0.05:16;>> yy=beta(1)*exp(beta(2)./xx);>> plot(xx,yy,'g')又或>> plot(x,y,'ro') >> hold on>> xx=2:0.05:16;>> yy=volum(beta,xx);-通過調用用戶自編的函數>> plot(xx,yy,'g')>> beta,r ,J=nlinfit(x',y','volum',1,1); %下面換了多個初值,結果都是一樣

26、的。>> betabeta =11.6037 -1.0641>> beta,r ,J=nlinfit(x',y','volum',1,5);>> betabeta = 11.6037 -1.064>> beta,r ,J=nlinfit(x',y','volum',10,5);beta =11.6037 -1.0641>> beta,r ,J=nlinfit(x',y','volum',10,50);beta =11.6037 -1.064

27、1例4 財政收入預測問題:財政收入與國民收入、工業總產值、農業總產值、總人口、就業人口、固定資產投資等因素有關。下表列出了1952-1981年的原始數據,試構造預測模型。財政收入預測問題:財政收入與國民收入、工業總產值、農業總產值、總人口、就業人口、固定資產投資等因素有關。下表列出了1952-1981年的原始數據,試構造預測模型。年份國民收入(億元)工業總產值(億元)農業總產值(億元)總人口(萬人)就業人口(萬人)固定資產投資(億元)財政收入(億元)1952598349461574822072944184195358645547558796213648921619547075204916026

28、621832972481955737558529614652232898254195682571555662828230181502681957837798575646532371113928619581028123559865994266002563571959111416815096720726173338444196010791870444662072588038050619617571156434658592559013827119626779644616729525110662301963779104651469172266408526619649431250584704992773

29、612932319651152158163272538286701753931966132219116877454229805212466196712491647697763683081415635219681187156568078534319151273031969137221016888067133225207447197016382747767829923443231256419711780315679085229356203556381972183333657898717735854354658197319783684855892113665237469119741993369689

30、19085937369393655197521214254932924213816846269219762052430995593717388344436571977218949259719497439377454723197824755590105896259398565509221979270260651150975424058156489019802791659211949870541896568826198129276862127310007273280496810解 設國民收入、工業總產值、農業總產值、總人口、就業人口、固定資產投資分別為x1、x2、x3、x4、x5、x6,財政收入為

31、y,設變量之間的關系為:y= ax1+bx2+cx3+dx4+ex5+fx6使用非線性回歸方法求解。1  對回歸模型建立M文件model.m如下: function yy=model(beta0,X) %一定是兩個參數,第一個為系數數組,b(1),b(2),b(n) %分別代表每個系數,而第二個參數代表所有的自變量, %是一個矩陣,它的每一列分別代表一個自變量。 a=beta0(1); b=beta0(2); %每個元素 c=beta0(3); d=beta0(4); e=beta0(5); f=beta0(6); x1=X(:,1); %每一列 x2=X(:,2); x3=X(:,

32、3); x4=X(:,4); x5=X(:,5); x6=X(:,6); yy=a*x1+b*x2+c*x3+d*x4+e*x5+f*x6; 2. 主程序liti6.m如下:X=598.00, 349.00 ,461.00, 57482.00, 20729.00, 44.00;586, 455, 475, 58796, 21364, 89;707, 520, 491, 60266, 21832, 97;737, 558, 529, 61465, 22328, 98;825, 715, 556, 62828, 23018, 150;837, 798, 575, 64653, 23711, 139

33、;1028, 1235, 598, 65994, 26600, 256;1114, 1681, 509, 67207, 26173, 338;1079, 1870, 444, 66207, 25880, 380;757, 1156, 434, 65859, 25590, 138;677, 964, 461, 67295, 25110, 66;779, 1046, 514, 69172, 26640, 85;943, 1250, 584, 70499, 27736, 129;1152, 1581, 632, 72538, 28670, 175;1322, 1911, 687, 74542, 29

34、805, 212;1249, 1647, 697, 76368, 30814, 156;1187, 1565, 680, 78534, 31915, 127;1372, 2101, 688, 80671, 33225, 207;1638, 2747, 767, 82992, 34432, 312;1780, 3156, 790, 85229, 35620, 355;1833, 3365, 789, 87177, 35854, 354;1978, 3684, 855, 89211, 36652, 374;1993, 3696, 891, 90859, 37369, 393;2121, 4254,

35、 932, 92421, 38168, 462;2052, 4309, 955, 93717, 38834, 443;2189, 4925, 971, 94974, 39377, 454;2475, 5590, 1058, 96259, 39856, 550;2702, 6065, 1150, 97542, 40581, 564;2791, 6592, 1194, 98705, 41896, 568;2927, 6862, 1273, 100072, 73280, 496;y=184.00 216.00 248.00 254.00 268.00 286.00 357.00 444.00 506

36、.00 . 271.00 230.00 266.00 323.00 393.00 466.00 352.00 303.00 447.00 . 564.00 638.00 658.00 691.00 655.00 692.00 657.00 723.00 922.00 . 890.00 826.00 810.0'beta0=0.50 -0.03 -0.60 0.01 -0.02 0.35;betafit = nlinfit(X,y,'model',beta0)結果為betafit = 0.5243 -0.0294 -0.6304 0.0112 -0.0230 0.3658(結果也可能是:0.3459 -0.0180 -0.3700 0.0030 -0.0020 0.4728)即y= 0.5243x1-0.0294x2-0.6304x3+0.0112x4-0.0230x5+0.3658x6此題也可以用regress來求解(我自己做的,不一定對?)-結果有些不同,含有一個常數>> clear>> x=xlsread('cz.xls'); %已經把所有的有效數據拷入到cd.xls文件中去了。>> y=x(:,7);&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論