吴恩达机器学习(四)局部加权回归

吴恩达机器学习(四)局部加权回归

  • 使用局部加权回归的原因
  • 局部加权回归的原理
  • 实例
  • 讨论

使用局部加权回归的原因

在讲义中描述的是: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=1mw(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)
由于讲义中没有推导推导算法的解析解,在此简单推导一下:

  1. 目标函数
    将目标函数写为矩阵形式,式中变量的定义参见讲义。
    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θ)
  2. 求目标函数最小的 θ \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θ(y TWy y TWXθθTXTWy +θTXTWXθ)=21θ(θTXTWXθy TWXθθTXTWy )=21θtr(θTXTWXθy TWXθθTXTWy )=21θtr(θTXTWXθ2y TWXθ)=21θ(trθTXTWXθtr2y TWXθ)=21(XTWTXθ+XTWXθ2XTWy )=XTWXθXTWy
    上面的推导中用到的相关矩阵性质可参见讲义(在CSDN其他博主的文章里有下载链接)。
    ∇ θ 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.csdn.net/weixin_43084928/article/details/82529596

%% 局部加权线性回归
% 作者:sddfsAv
% 日期:20190313
% Matlab版本:2018b
% 简介:吴恩达机器学习课程学习例子,数据集来源于https://blog.csdn.net/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);

拟合结果:
吴恩达机器学习(四)局部加权回归_第1张图片
注意:带宽过大会出现欠拟合,带宽过小会出现过拟合。
可以看到整个拟合曲线并不是线性的,这是因为针对每个感兴趣的点,采用局部加权回归得到的 θ \theta θ值是不一样的

讨论

讲义中说明了钟形函数是一种常用的权值函数选择方法,但并没有说用其他形式的函数不行,因此,可以选择其他函数,比如三角形函数,窗函数或者其他一些有趣形状的函数,看看有什么样的结果。

你可能感兴趣的:(机器学习)