吴恩达机器学习(四)局部加权回归
使用局部加权回归的原因
在讲义中描述的是:makes the choice of features less critical(为了让特征的选择不是那么重要)
另外,局部加权回归可以用线性回归的方法得到一个非线性的拟合结果。这句话有点奇怪,但了解局部加权回归的原理就能明白其中的原因了。
局部加权回归的原理
相关参数定义:
m
m
m:训练集数量
x
1
(
i
)
x^{(i)}_1
x1(i) :第
i
i
i个训练样本的输入
y
(
i
)
y^{(i)}
y(i) :第
i
i
i个训练样本的输出
h
(
x
t
(
j
)
)
h(x^{(j)}_t)
h(xt(j)):预测函数,对于一维的局部加权回归为:
h
(
x
t
(
j
)
)
=
(
x
t
(
j
)
)
T
θ
(
j
)
h(x^{(j)}_t)=(x^{(j)}_t)^T\theta^{(j)}
h(xt(j))=(xt(j))Tθ(j)(请注意:我在这儿特地在
θ
\theta
θ上添加了一个上标
j
j
j,说明每一个
x
t
(
j
)
x^{(j)}_t
xt(j)对应一个
θ
(
j
)
\theta^{(j)}
θ(j),另外,
x
t
(
j
)
x^{(j)}_t
xt(j)代表感兴趣的点,并不一定是某个样本)
局部加权回归与前面的线性回归相比,其目标函数发生了变化。
J
(
θ
(
i
)
)
=
1
2
∑
i
=
1
m
w
(
i
)
(
y
(
i
)
−
h
(
x
(
i
)
)
)
2
J(\theta^{(i)}) = \frac{1}{2}\sum_{i=1}^mw^{(i)}(y^{(i)}-h(x^{(i)}))^2
J(θ(i))=21i=1∑mw(i)(y(i)−h(x(i)))2
此处
w
(
i
)
w^{(i)}
w(i)为非负权值项,其具体意义讲义中描述的是:if
w
(
i
)
w^{(i)}
w(i) is large for a particular value of
i
i
i, then in picking
θ
\theta
θ, we’ll try hard to make
(
y
(
i
)
−
θ
T
x
(
i
)
)
2
(y(i) −θ^Tx(i))^2
(y(i)−θTx(i))2 small. If w(i) is small, then the
(
y
(
i
)
−
θ
T
x
(
i
)
)
2
(y(i) −θ^Tx(i))^2
(y(i)−θTx(i))2 error term will be pretty much ignored in the fit.(对应特定的样本
i
i
i,若
w
(
i
)
w^{(i)}
w(i)较大,则表明该项在拟合中对
θ
\theta
θ影响更大,相反,若
w
(
i
)
w^{(i)}
w(i)很小,则表明这项对
θ
\theta
θ影响很小,基本可以忽略不计)
w
(
i
)
w^{(i)}
w(i)的常用计算方法为:
w
(
i
)
=
e
x
p
(
−
(
x
(
i
)
−
x
)
2
(
2
τ
2
)
)
w^{(i)}=exp(-\frac{(x^{(i)}-x)^2}{(2\tau^2)})
w(i)=exp(−(2τ2)(x(i)−x)2)
由于讲义中没有推导推导算法的解析解,在此简单推导一下:
- 目标函数
将目标函数写为矩阵形式,式中变量的定义参见讲义。
J ( θ ) = 1 2 ( y ⃗ − X θ ) T W ( y ⃗ − X θ ) J(\theta) =\frac{1}{2}(\vec{y}-X\theta)^TW(\vec{y}-X\theta) J(θ)=21(y−Xθ)TW(y−Xθ) - 求目标函数最小的
θ
\theta
θ
目标函数本质上是一个无约束的二次规划问题,首先求其对 θ \theta θ的梯度(注意 W W W为对角矩阵: W = W T W=W^T W=WT)
∇ θ J ( θ ) = 1 2 ∇ θ ( y ⃗ T W y ⃗ − y ⃗ T W X θ − θ T X T W y ⃗ + θ T X T W X θ ) = 1 2 ∇ θ ( θ T X T W X θ − y ⃗ T W X θ − θ T X T W y ⃗ ) = 1 2 ∇ θ t r ( θ T X T W X θ − y ⃗ T W X θ − θ T X T W y ⃗ ) = 1 2 ∇ θ t r ( θ T X T W X θ − 2 y ⃗ T W X θ ) = 1 2 ∇ θ ( t r θ T X T W X θ − t r 2 y ⃗ T W X θ ) = 1 2 ( X T W T X θ + X T W X θ − 2 X T W y ⃗ ) = X T W X θ − X T W y ⃗ \nabla_\theta J(\theta) =\frac{1}{2}\nabla_\theta(\vec{y}^TW\vec{y}-\vec{y}^TWX\theta-\theta^TX^TW\vec{y}+\theta^TX^TWX\theta)\\=\frac{1}{2}\nabla_\theta(\theta^TX^TWX\theta-\vec{y}^TWX\theta-\theta^TX^TW\vec{y})\\=\frac{1}{2}\nabla_\theta tr(\theta^TX^TWX\theta-\vec{y}^TWX\theta-\theta^TX^TW\vec{y})\\=\frac{1}{2}\nabla_\theta tr(\theta^TX^TWX\theta-2\vec{y}^TWX\theta)\\=\frac{1}{2}\nabla_\theta (tr\theta^TX^TWX\theta-tr2\vec{y}^TWX\theta)\\=\frac{1}{2}(X^TW^TX\theta+X^TWX\theta-2X^TW\vec{y})\\=X^TWX\theta-X^TW\vec{y} ∇θJ(θ)=21∇θ(yTWy−yTWXθ−θTXTWy+θTXTWXθ)=21∇θ(θTXTWXθ−yTWXθ−θTXTWy)=21∇θtr(θTXTWXθ−yTWXθ−θTXTWy)=21∇θtr(θTXTWXθ−2yTWXθ)=21∇θ(trθTXTWXθ−tr2yTWXθ)=21(XTWTXθ+XTWXθ−2XTWy)=XTWXθ−XTWy
上面的推导中用到的相关矩阵性质可参见讲义(在优快云其他博主的文章里有下载链接)。
令 ∇ θ J ( θ ) = 0 \nabla_\theta J(\theta)=0 ∇θJ(θ)=0得到:
θ = ( X T W X ) − 1 X T W y ⃗ \theta=(X^TWX)^{-1}X^TW\vec{y} θ=(XTWX)−1XTWy
实例
数据来源https://blog.youkuaiyun.com/weixin_43084928/article/details/82529596
%% 局部加权线性回归
% 作者:sddfsAv
% 日期:20190313
% Matlab版本:2018b
% 简介:吴恩达机器学习课程学习例子,数据集来源于https://blog.youkuaiyun.com/weixin_43084928/article/details/82529596
clear
clc
%% 导入原始数据
Data=csvread('Salary_Data.csv',1,0); % 读取csv数据文件
scatter(Data(:,1),Data(:,2),40,'MarkerEdgeColor',[0 .5 .5],...
'MarkerFaceColor',[0 .7 .7],...
'LineWidth',1.5); % 绘制散点图
title("Experience and Salary"); % 图表标题
xlabel("Experience(years)"); % x轴标题
ylabel("Salary(dollar)"); % y轴标题
hold on;
%% locally weighted linear regression
X=Data(:,1);
Y=Data(:,2);
tao=0.2; % bandwidth,带宽
X_target=1:0.02:10.5;
W=zeros(length(X),length(X)); % 初始化矩阵W
Theta=zeros(length(X_target),1); % 建立一个Theta向量用于存储目标点对应的学习算法参数
for i=1:length(X_target)
for j=1:length(Data(:,1))
w=exp(-(X(j)-X_target(i))^2/(2*tao^2));
W(j,j)=w;
end
theta=inv(X'*W*X)*X'*W*Y;
Theta(i)=theta;
end
Y_hat=Theta.*X_target';
plot(X_target,Y_hat);
拟合结果:
注意:带宽过大会出现欠拟合,带宽过小会出现过拟合。
可以看到整个拟合曲线并不是线性的,这是因为针对每个感兴趣的点,采用局部加权回归得到的
θ
\theta
θ值是不一样的。
讨论
讲义中说明了钟形函数是一种常用的权值函数选择方法,但并没有说用其他形式的函数不行,因此,可以选择其他函数,比如三角形函数,窗函数或者其他一些有趣形状的函数,看看有什么样的结果。