通常我們使用的最小二乘都需要預先設定一個模型,然后通過最小二乘方法解出模型的系數。
而大多數情況是我們是不知道這個模型的,比如這篇博客中z=ax^2+by^2+cxy+dx+ey+f 這樣的模型。
局部加權線性最小二乘就不需要我們預先知道待求解的模型,因為該方法是基於多個線性函數的疊加,最終只用到了線性模型。
計算線性模型時引入了一個加權函數:
來給當前預測數據分配權重,分配機制是:給距離近的點更高的權重,給距離遠的點更低的權重。
公式中的k類似與高斯函數中的sigma。
當sigma變大時,函數變得矮胖,計算局部線性函數時更多的使用全局數據;
當sigma變小時,函數變得瘦高,計算局部線性函數時更多的使用局部數據。
代碼如下:
clear all; close all; clc; x=(1:0.1:10)'; y=x.^2+x+3 +rand(length(x),1)*6; plot(x,y,'.') sigma=0.1; %設置局部窗口,越大越使用全局數據,越小越使用局部數據 W=zeros(length(x)); C=[]; for i=1:length(x) for j=1:length(x) W(j,j)=exp(-((x(i)-x(j))^2)/(2*sigma^2)); %權重矩陣 end XX=[x ones(length(x),1)]; YY=y; C=[C inv(XX'*W*XX)*XX'*W*YY]; %加權最小二乘,計算求得局部線性函數的系數 end re=diag(XX*C); hold on; plot(x,re);
結果如下:
可以看出,紅色的局部線性函數最終擬合出了全局的數據。
不過該方法既然不需要知道模型,那我們如何預測未來的數據結果呢?