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;
参考资料:

浙公网安备 33010602011771号