相對而言,非線性迴歸(Nonlinear Regression)是一個比較困難的問題,原因如下:
- 無法一次找到最佳解。
- 無法保證能夠找到最佳解。
- 須引用各種非線性最佳化的方法。
- 各種相關數學性質並不明顯。
以數學來描述,假設所用的數學模型是 y=f(x,θ),其中 f(x 是輸入向量,θ) 是可變非線性函數,y 是輸出變數,則總平方誤差為 E(θ)=n∑i=1(yi−f(xi,θ))2
其中 (xi,yi) 是第 i 個已知資料點。由於 θ 是 f 的非線性參數,所以 E(θ) 並不是 θ 的二次式,因此我們並無法由 θ 對 θ 的導式為零來解出最佳的 θ 值。退而求其次,我們必須用一般最佳化(Optimization)的方法,來找出 E(θ) 的最小值,例如梯度下降法(Gradient Descent),或是 Simplex 下坡式搜尋(Simplex Downhill search)等。
舉例來說,假設所用的數學模型為
y=a1eλ1x+a2eλ2x其中,a1、a2 為線性參數,但 λ1、λ2 為非線性參數,則此模型為非線性,總平方誤差可表示如下: E(a1,a2,λ1,λ2)=m∑i=1(yi−a1eλ1xi−a2eλ2xi)2
欲找出使 E(a1,a2,λ1,λ2) 為最小的 a1、a2、λ1 及 λ2,我們需將 E 寫成一個 MATLAB 函式,並由其它最佳化的方法來求出此函式的最小值。假設此函式為 errorMeasure1.m,其內容可顯示如下:
其中 theta 是參數向量,包含了 a1、a2、λ1 及 λ2,data 則是觀察到的資料點,傳回的值則是總平方誤差。欲求出此函式的最小值,我們可使用 fminsearch 指令,請見下列範例:
上圖的曲線即為 fminsearch 指令所產生的迴歸曲線。在上述程式中,data 矩陣包含自變數(即data(:,1))和因變數(即 data(:,2)),以方便將之傳入函式 errorMeasure1.m。Theta0 則是可變參數 theta 的起始值。fminsearch 指令則是一個使用 Simplex 下坡式搜尋法(Downhill Simplex Search)的最佳化方法,用來找出 errorMeasure1 的極小值,並傳回 theta 的最佳值。欲詳知此方法的細節,可詳閱筆者的另一著作「Neural-Fuzzy and Soft Computing – A Computational Approach to Learning and Machine Intelligence」,Prentice Hall ,1997。
MATLAB程式設計:進階篇![]()