码迷,mamicode.com
首页 > 其他好文 > 详细

最小二乘法学习一

时间:2015-07-04 23:34:03      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:最小二乘

本文主要讲解基本最小二乘法和带有约束条件的最小二乘法。

一  基本最小二乘法

最小二乘法是回归中最为基础的算法。它是对模型的输出和训练样本输出的平方误差(这里还乘以了1/2只是为了求导简化)为最小时的参数 进行学习。

技术分享

特别地,对于线性模型有:

技术分享

求导可得:

技术分享

其中设计矩阵:

技术分享

%基本最小二乘法
clear all;
close all;

n = 50;
N = 1000;
x = linspace(-3,3,n)';
X = linspace(-3,3,N)';

y =  x.^2 + 2*x + 3 + 0.05*randn(n,1);
%设计矩阵
p(:,1) = ones(n,1);
p(:,2) = x ;
p(:,3) = x.^2;

P(:,1) = ones(N,1);
P(:,2) = X ;
P(:,3) = X.^2;

t = p\y
F = P*t;

figure(1);
clf;
hold on;
axis([-3 3 0 10]);
plot(X,F,'g-');
plot(x,y,'bo');

技术分享


最后得到 y = 2.9896*x^2 +1.9999*x + 0.9997 

设计矩阵的维数是n*b,当训练样本很大时,大规模的求偏导开销很大,容易计算内存不足,这时采用随机梯度算法往往会效果很好。

 随机梯度算法是指沿着训练平方误差 J 的梯度下降,对目标参数θ 进行学习的算法。下面是使用随机梯度算法对线性模型进行最小二乘法的算法步骤:

step 1 :指定θ初值

step 2:随机选择一个训练样本 如(xi,yi)

step 3: 对于选定训练样本,采用梯度下降的方式,对参数θ进行更新。

技术分享

step 4 重复步骤2,3直到θ达到收敛精度

二 带有约束条件的最小二乘法

基本的最小二乘法对于包含噪声的学习过程常常有过拟合的弱点,主要是因为学习模型对于训练样本而言过度复杂,为了控制模型复杂程度,下面简述带约束条件额最小二乘法。

2.1部分空间约束的最小二乘法

基本最小二乘法中,所求参数θ 是在全体参数空间求取,而部分空间约束的最小二乘法,则是通过把参数空间约束在一定范围内,来防止过拟合现象。

技术分享

其中矩阵P是正交投影矩阵,一般通过主成分分析法手动设置,将设计矩阵变为=设计矩阵右乘P求得。

下面是对以三角多项式作为基函数的线性模型进行部分空间约束的最小二乘法学习的例子。其中绿色曲线是基本最小二乘拟合曲线结果,可以看到,为了尽量达到最小平方误差,学习模型对于训练样本而言过于复杂,出现过拟合现象,而红色曲线是带空间约束后的结果,可见红色曲线的效果明显比绿色曲线好。

技术分享

%基本最小二乘法与加入部分空间约束的最小二乘学习法
clear all;
close all;

n = 50;
N = 1000;
x = linspace(-3,3,n)';
X = linspace(-3,3,N)';
pix = pi*x;
y = sin(pix)./(pix)  + 0.1*x + 0.2*randn(n,1);

p(:,1) = ones(n,1);
P(:,1) = ones(N,1);
for j = 1:15
    p(:,2*j) = sin(j/2*x); p(:,2*j+1) = cos(j/2*x);
    P(:,2*j) = sin(j/2*X); P(:,2*j+1) = cos(j/2*X);
end
t = p\y;
%基本最小二乘
F = P*t;
%部分空间约束最小二乘,设计矩阵 = 设计矩阵*正交投影矩阵P
t2 = (p*diag([ones(1,11) zeros(1,20)]))\y;
F2 = P*t2;

figure(1);
clf;
hold on;
axis([-3 3 -1 2]);
plot(X,F,'g-');
plot(x,y,'bo');
plot(X,F2,'r-');

技术分享

事实上,可以看到,部分空间约束的最小二乘法,只使用了参数空间的一部分,P矩阵的设置难度很大,后面介绍相对容易使用的l2约束的最小二乘法。





版权声明:本文为博主原创文章,未经博主允许不得转载。

最小二乘法学习一

标签:最小二乘

原文地址:http://blog.csdn.net/u010498696/article/details/46753655

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!