吴恩达机器学习(四)局部加权回归
- 使用局部加权回归的原因
- 局部加权回归的原理
- 实例
- 讨论
使用局部加权回归的原因
在讲义中描述的是:makes the choice of features less critical(为了让特征的选择不是那么重要)
另外,局部加权回归可以用线性回归的方法得到一个非线性的拟合结果。这句话有点奇怪,但了解局部加权回归的原理就能明白其中的原因了。
局部加权回归的原理
相关参数定义:
:训练集数量
:第个训练样本的输入
:第个训练样本的输出
:预测函数,对于一维的局部加权回归为:(请注意:我在这儿特地在上添加了一个上标,说明每一个对应一个,另外,代表感兴趣的点,并不一定是某个样本)
局部加权回归与前面的线性回归相比,其目标函数发生了变化。
此处为非负权值项,其具体意义讲义中描述的是:if is large for a particular value of , then in picking , we’ll try hard to make small. If w(i) is small, then the error term will be pretty much ignored in the fit.(对应特定的样本,若较大,则表明该项在拟合中对影响更大,相反,若很小,则表明这项对影响很小,基本可以忽略不计)
的常用计算方法为:
由于讲义中没有推导推导算法的解析解,在此简单推导一下:
- 目标函数
将目标函数写为矩阵形式,式中变量的定义参见讲义。 - 求目标函数最小的
目标函数本质上是一个无约束的二次规划问题,首先求其对的梯度(注意为对角矩阵:)
上面的推导中用到的相关矩阵性质可参见讲义(在CSDN其他博主的文章里有下载链接)。
令得到:
实例
数据来源
%% 局部加权线性回归
% 作者:sddfsAv
% 日期:20190313
% Matlab版本:2018b
% 简介:吴恩达机器学习课程学习例子,数据集来源于
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);
拟合结果:
注意:带宽过大会出现欠拟合,带宽过小会出现过拟合。
可以看到整个拟合曲线并不是线性的,这是因为针对每个感兴趣的点,采用局部加权回归得到的值是不一样的。
讨论
讲义中说明了钟形函数是一种常用的权值函数选择方法,但并没有说用其他形式的函数不行,因此,可以选择其他函数,比如三角形函数,窗函数或者其他一些有趣形状的函数,看看有什么样的结果。