1. 程式人生 > 實用技巧 >MATLAB 區域性加權線性迴歸

MATLAB 區域性加權線性迴歸

通常我們使用的最小二乘都需要預先設定一個模型,然後通過最小二乘方法解出模型的係數。

而大多數情況是我們是不知道這個模型的,比如這篇部落格中z=ax^2+by^2+cxy+dx+ey+f 這樣的模型。

區域性加權線性最小二乘就不需要我們預先知道待求解的模型,因為該方法是基於多個線性函式的疊加,最終只用到了線性模型。

計算線性模型時引入了一個加權函式:

來給當前預測資料分配權重,分配機制是:給距離近的點更高的權重,給距離遠的點更低的權重。

公式中的k類似與高斯函式中的sigma。

當sigma變大時,函式變得矮胖,計算區域性線性函式時更多的使用全域性資料;

當sigma變小時,函式變得瘦高,計算區域性線性函式時更多的使用區域性資料。

程式碼如下:

 1 clear all;
 2 close all;
 3 clc;
 4 
 5 x=(1:0.1:10)';
 6 y=x.^2+x+3 +rand(length(x),1)*6;
 7 plot(x,y,'.')
 8 
 9 sigma=0.1;              %設定區域性視窗,越大越使用全域性資料,越小越使用區域性資料
10 W=zeros(length(x));
11 C=[];
12 for i=1:length(x)    
13     for j=1:length(x) 
14         W(j,j)=exp(-((x(i)-x(j))^2)/(2
*sigma^2)); %權重矩陣 15 end 16 17 XX=[x ones(length(x),1)]; 18 YY=y; 19 C=[C inv(XX'*W*XX)*XX'*W*YY]; %加權最小二乘,計算求得區域性線性函式的係數 20 21 end 22 23 re=diag(XX*C); 24 hold on; 25 plot(x,re);

結果如下:

可以看出,紅色的區域性線性函式最終擬合出了全域性的資料。

不過該方法既然不需要知道模型,那我們如何預測未來的資料結果呢?