背景知识:
θ求解为: θ=(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