matlab練習程序(局部加權線性回歸)


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

而大多數情況是我們是不知道這個模型的,比如這篇博客中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);

結果如下:

可以看出,紅色的局部線性函數最終擬合出了全局的數據。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM