机器学习(斯坦福课程3-1)局部加权回归LWR

来源:互联网 发布:js如何定义变量 编辑:程序博客网 时间:2024/06/09 14:39

为了引出问题,先看一个关于线性的例子,选取不同的特征会得到不同结果。考虑给定一组数据  ,我们要进行线性回归,得到 和  之间的关系。提出了三种不同的特征的选择方式,结果如下:

左图,选取一个特征  ,假设为      ,我们可以看到数据不能很好的和数据相吻合。

中图,我们选取了两个特征  和  ,假设为,我们可以看到拟合效果变好了。那是不是特征越多越好呢?非也。

右图,一共6个数据点,所以用5阶多项式就可以做到所有的数据点都在曲线上了,假设为。虽然将数据点拟合的很perfect,但是我们不认为这是一个很好的假设,因为它不能做到很好的预测。

我们称左图的拟合效果为 underfitting(欠拟合),数据中的明显的结构关系没有被模型所捕获。 称右图的拟合效果为 overfitting(过拟合),这种假设只是用于特定的数据,预测效果不好 。中图的效果最好,那我们应该如何选择特征,使得假设的效果最好?有人说了,那就挨个试呗,先选择1个特征,看效果,2个特征,看效果。。。。我们可不愿意做这种事情。

就像上面讨论的那样,特征的选择对学习算法的性能至关重要,那有没有自动选择特征集的算法,或者是让特征的选择对结果影响不那么大?这就是我们要介绍的Locally weight-

ed linear regression (LWR),这个算法对特征集要求不是非常的严格。

在最初的线性回归算法中,对于输入变量  ,我们要预测 ,我们通常要做的:

相对而言,对于局部加权线性回归,我们要做:

,这里多了一个权值项  。直观上,  的值越大,它所对应的对结果的影响越大,反之越小。

我们选择  的形式如下:

,其中的  就是我们要预测的输入变量。为了理解,看下图:

, 显然,当  足够小时,  近似为1;当  足够大时,  近似为0;也就是说离  很近的样本会得到接近为1的权值,很远的样本权值近乎为0。所以我们无们可以这样理解:在  局部构成了线性回归算法,对于 的学习,主要依赖于 附近的点。如下图:

,图中红色直线使用线性回归做的结果,黑色直线使用LWR做的结果,可以看到局部加权回归的效果较好。

在让我们来看一下形式的  的形式,和高斯函数形式很像,但和那一点关系都没有哦!  是波长参数,控制了权值随距离的下降速率。

总结一下:LWR算法是我们遇到的第一个non-parametric(非参数)学习算法,而线性回归则是我们遇到的以一个parametric(参数)学习算法。所谓参数学习算法它有固定的明确的参数,参数 一旦确定,就不会改变了,我们不需要在保留训练集中的训练样本。而非参数学习算法,每进行一次预测,就需要重新学习一组 , 是变化的,所以需要一直保留训练样本。也就是说,当训练集的容量较大时,非参数学习算法需要占用更多的存储空间,计算速度也较慢。有得必有失,效果好当然要牺牲一些其他的东西。 人不一定什么都擅长,只要有自己的特点就可以了!!




补充:

今天来讲一种非参数学习方法,叫做局部加权回归(LWR)。为什么局部加权回归叫做非参数学习方法呢? 首

先参数学习方法是这样一种方法:在训练完成所有数据后得到一系列训练参数,然后根据训练参数来预测新样本

的值,这时不再依赖之前的训练数据了,参数值是确定的。而非参数学习方法是这样一种算法:在预测新样本值

时候每次都会重新训练数据得到新的参数值,也就是说每次预测新样本都会依赖训练数据集合,所以每次得到的

参数值是不确定的。

 

 

接下来,介绍局部加权回归的原理。

 

之前在普通的线性拟合中,我们得到了最小二乘的损失函数为

 

      

 

找到合适的参数使得上述损失函数最小即可。而在局部加权回归中,损失函数变为

 

      

 

其中的表达式如下

 

      

 

上式中参数为新预测的样本特征数据,它是一个向量,参数控制了权值变化的速率,权值有一个性质

 

     (1)如果,则

     (2)如果,则

 

所以,对于离预测样本数据较近的点权值较大,离预测样本数据较远的点权值较小。

 

很明显,局部加权回归在每一次预测新样本时都会重新确定参数,以达到更好的预测效果。当数据规模比较大的

时候计算量很大,学习效率很低。并且局部加权回归也不是一定就是避免underfitting


matlab代码:

q2x=[1 2 3 6 9 7 5 4 5 6]';q2y=[2 5 8 7 4 1 3 9 7 5]';x = [ones(size(q2x,1),1) q2x];                      %obtain the matrix Xy = q2y;figure;hold on;plot(x(:,2),y,'.b');                                            %plot training examplesmax_x=max(x(:,2));min_x=min(x(:,2));regr_line_x = min_x:(max_x-min_x)/49:max_x;%% theta of second orderorder=5;x2=x;for i=2:order    x2(:,i+1)=q2x.^i;endtheta2 = inv(x2'*x2)*x2'*y;y2=theta2(1)+theta2(2)*regr_line_x;for i=2:order   y2=y2 + theta2(i+1)*regr_line_x.^i;endplot(regr_line_x,y2,'g');%% linear regressiontheta = inv(x'*x)*x'*y                               %get the value of θregr_line_y = theta(2)*regr_line_x + theta(1);plot(regr_line_x,regr_line_y,'b');                % obtain the figure of linear regression  %% locally weighted linear regression%taus = [0.1 0.3 0.8 2 10];                           %the bandwidth parametertaus = [0.5,1,2,5,10];colors = ['r' 'g' 'm' 'y' 'k'];m = size(q2x,1);                                   %number of training examplesfor i=1:size(taus,2)tau=taus(i);    for k=1:size(regr_line_x,2)    W = zeros(m,m);         for t=1:m         W(t,t)=exp(-(regr_line_x(k)-x(t,2))^2/(2*tau^2));         end    theta = pinv(x'*W*x)*x'*W*y;              regr_line_y(k) = theta(2)*regr_line_x(k) + theta(1);    endplot(regr_line_x,regr_line_y,colors(i));endlegend('trainingdata','linear','tau=.5','tau=1','tau=2','tau=5','tau=10',0)



0 0
原创粉丝点击