1. 程式人生 > >最小二乘法曲線擬合原理與實現

最小二乘法曲線擬合原理與實現

最小二乘學習法是對模型的輸出這裡寫圖片描述和訓練集輸出這裡寫圖片描述的平方誤差這裡寫圖片描述為最小時的引數這裡寫圖片描述進行學習,式中之所以加上係數1/2,是為了約去對這裡寫圖片描述進行微分時得到的2。

這裡寫圖片描述

“LS”是Least Squares的首字母。平方誤差這裡寫圖片描述是殘差這裡寫圖片描述這裡寫圖片描述範數,因此最小二乘學習法有時也稱為這裡寫圖片描述損失最小化學習法。
如果使用線性模型
這裡寫圖片描述的話,訓練樣本的平方差這裡寫圖片描述就能夠表示為如下形式。這裡寫圖片描述

在這裡,這裡寫圖片描述是訓練輸出的n維向量,這裡寫圖片描述是下式中定義的n*b階矩陣,也稱為設計矩陣
這裡寫圖片描述

訓練樣本的平方差這裡寫圖片描述的引數向量這裡寫圖片描述的偏微分這裡寫圖片描述
這裡寫圖片描述這樣的形式給出。如果將其微分設定為0,最小二乘解就滿足關係式這裡寫圖片描述

這個方程式的解這裡寫圖片描述使用設計矩陣這裡寫圖片描述的廣義逆矩陣這裡寫圖片描述來進行計算,可以得出這裡寫圖片描述

相對於只有方陣、非奇異矩陣才能定義逆矩陣,如果存在逆矩陣,這裡寫圖片描述

可以使用如下公式計算這裡寫圖片描述
廣義逆矩陣則是矩形矩陣或奇異矩陣都可以定義,是對逆矩陣的推廣。這裡寫圖片描述有逆矩陣的時候,廣義逆矩陣這裡寫圖片描述可以用下式表示這裡寫圖片描述

接下來談談這個線性函式這裡寫圖片描述,在上式中,這裡寫圖片描述是基函式向量這裡寫圖片描述的第i個因子,這裡寫圖片描述是引數向量這裡寫圖片描述的第i個因子。另外,b是基函式的個數。

對與曲線的擬合,我們通常把基函式變為多項式的形式這裡寫圖片描述或者變為b=2m+1的三角多項式形式這裡寫圖片描述

對於基函式是多項式,設計矩陣這裡寫圖片描述這裡寫圖片描述

matlab程式程式碼擬合如下所示

clear ;
%在[-3*pi,3*pi]生成50個數據點 sin(x)/x
n = 50 ;
x = linspace(-3,3,n)' ;
pix = pi * x ;
y = sin(pix) ./ (pix) + 0.1 * x + 0.05 * randn(n,1) ;

%儲存係數矩陣
p(:,1) = ones(n,1) ;
%預設15個引數
for j = 1 : 15
    p(:,j+1) = x .^ j ;
end

%求出引數
t = p \ y ;

%曲線擬合,生成100個數據點
N = 100 ;
X = linspace(-3,3,N)'
; %生成y座標 P(:,1) = ones(N,1) ; for j = 1 : 15 P(:,j+1) = X .^ j ; end F = P * t ; %生成影象 hold on ; axis([-2.8 2.8 -0.5 1.2]) ; plot(X,F,'g-') ; plot(x,y,'bo') ;

生成的影象如圖所示
這裡寫圖片描述

對於基函式是三角多項式,設計矩陣這裡寫圖片描述這裡寫圖片描述

matlab程式程式碼擬合如下所示

clear ;
n = 50 ;
N = 100 ;
x = linspace(-3,3,n)' ;
X = linspace(-3,3,N)' ;
pix = pi * x ;
y = sin
(pix) ./ (pix) + 0.1 * x + 0.05 * randn(n,1) ; p(:,1) = ones(n,1) ; P(:,1) = ones(N,1) ; for j = 1 : 15 p(:,2*j) = sin(j*x) ; p(:,2*j+1) = cos(j*x) ; P(:,2*j) = sin(j*X) ; P(:,2*j+1) = cos(j*X) ; end t = p\y ; F = P * t ; figure(1) ; clf ; hold on ; axis([-2.8 2.8 -0.5 1.2]) ; plot(X,F,'g-') ; plot(x,y,'bo') ;

生成的影象如圖所示

這裡寫圖片描述