Regularized Linear Regression

前言:

在机器学习中,如果模型参数过多,并且训练样本较小的情况下,经常会出现过抑合。为了解决该问题,通过在目标函数中加入正则项,通常使L2范式。本文主要介绍线性回归中正则项的运用,参考http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex5/ex5.html

理论基础:

目标函数:

由于目标函数是凸函数,因此可以直接求解最小值,此时:

由上式可以看出,如果没有加正则项,当特征维度大于样本数目时,不能直接求解theta.

 

实验结果:

分别取,画直线,如何画该直线,参考http://www.cnblogs.com/dupuleng/articles/4171465.html

当lambda = 0时,即无正则项时,出现过抑合现象,随着lambda的增大,过抑合现象降低。

 

实验代码:

%load data
x = load('ex5Linx.dat');
y = load('ex5Liny.dat');

%show original data
plot(x,y,'o','MarkerEdgeColor','b','MarkerFaceColor','r');
hold on;

n = size(x,1);
lambda = [0 1 10];
t = diag([0; ones(5 , 1)] );
X = [ ones(length(x) , 1) x x.^2 x.^3 x.^4 x.^5 ];
x_range = linspace( min(x) , max(x))'; % column vector
y_range = zeros(  size(x_range , 1), length(lambda)  ); % each column is the corresponding y of lambda
theta = zeros( 6 ,length(lambda) ); % each colum is the corresponding theta of lambda
color = ['r' , 'g' , 'b'] ;
for i = 1 : length(lambda)
    theta(:,i) = inv(X'*X + lambda(i)*t) * X'*y;
    y_range(:,i) =( [ones( size(x_range,1) , 1)  x_range x_range.^2 x_range.^3 x_range.^4 x_range.^5] * theta(:,i) )';
end

for i = 1 : size(lambda,2)
    plot( x_range , y_range(:,i) , color(i) );
    hold on;
end
legend('original data' , '\lambda = 0' , '\lambda = 1' , '\lambda = 10 ');
hold off;

 参考资料:

http://www.cnblogs.com/dupuleng/articles/4171465.html

http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex5/ex5.html

posted @ 2014-12-20 20:59  dupuleng  阅读(400)  评论(0)    收藏  举报