首页 > 技术文章 > 局部加权回归实例

shenyuanyuan 2014-01-17 20:06 原文

背景知识:

θ求解为: θ=(XTWX)-1*(XTWY)

其中加权系数为:w(i,i)=exp(-(x-x(i))2⁄(2*τ2)), W是m*m且只含对角元素的矩阵

 

MATLAB实例:

clear all;clc;
load Q2x;%之前存好的.mat文件,Q2x是一个列向量。
load Q2y;
X=Q2x;Y=Q2y;
plot(X,Y,'*k');%绘制*形原始数据图
hold on;

X1=[ones(length(X),1),X];
xdelta=(max(X)-min(X))/100;
x=min(X):xdelta:max(X)-xdelta;
y=zeros(length(x),1);
theta=inv(X1'*X1)*(X1'*Y);%计算θ值
y=theta(1)+theta(2)*x;%预测y
plot(x,y,'r'); %绘制出线性拟合曲线

tau=1
for k=1:1:size(X)
        w=zeros(size(X));
        for i=1:1:size(X)       
            w(i,i)=exp(-((x(k)-X(i))^2)/(2*tau^2));%τ值的大小直接影响拟合出的曲线灵敏度(过拟合or欠拟合)
        end
        theta=inv(X1'*w*X1)*(X1'*w*Y);%θ=(X1'*W*X1)\(X1'*W*Y);
        y(k)=theta(1)+theta(2)*x(k);
end
    plot(x,y,'g');%局部加权回归法拟合的曲线

 例2

t=0:0.1:20;
T=[ones(length(t),1),t'];
y=sin(t);
plot(t,y,'.b');hold on;
Y=y';
theta=inv(T'*T)*(T'*Y);%%
tau=2;
for j=1:1:length(t)
    w=zeros(length(t));
    for i=1:1:length(t)
        w(i,i)=exp(-(y(j)-y(i))^2/2*tau^2);%%改变tau值可看到拟合曲线与实际正弦曲线的相似程度
    end
    theta1=inv(T'*w*T)*(T'*w*Y);%%
    yy(j)=theta1(1)+theta1(2)*t(j);%

end
plot(t,yy,'r');

为加强理解可以看看这篇文章《数据挖掘中强局部加权回归算法实现》http://wenku.baidu.com/link?url=Sk-pIPKAOIrUVwg1L00GHmIMPjuFsqj13308opURYRARvyQh-pzOEOUm5_uwk7C-YBGUTO1h945pSFlcjzzyHVkPL069Qfm3mep1GQD0m5G

推荐阅读