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

一般咱們使用的最小二乘都須要預先設定一個模型,而後經過最小二乘方法解出模型的係數。html

而大多數狀況是咱們是不知道這個模型的,好比這篇博客中z=ax^2+by^2+cxy+dx+ey+f 這樣的模型。函數

局部加權線性最小二乘就不須要咱們預先知道待求解的模型,由於該方法是基於多個線性函數的疊加,最終只用到了線性模型。spa

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

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

公式中的k相似與高斯函數中的sigma。blog

當sigma變大時,函數變得矮胖,計算局部線性函數時更多的使用全局數據;get

當sigma變小時,函數變得瘦高,計算局部線性函數時更多的使用局部數據。博客

代碼以下:class

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);

結果以下:方法

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

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

相關文章
相關標籤/搜索