MATLAB 區域性加權線性迴歸
阿新 • • 發佈:2020-09-10
通常我們使用的最小二乘都需要預先設定一個模型,然後通過最小二乘方法解出模型的係數。
而大多數情況是我們是不知道這個模型的,比如這篇部落格中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);
結果如下:
可以看出,紅色的區域性線性函式最終擬合出了全域性的資料。
不過該方法既然不需要知道模型,那我們如何預測未來的資料結果呢?