正则化线性回归及错误和方差

正文依照水库中蓄水标线(water
level) 使用正则化的线性回归模型预 水流量(water flowing out of dam),然后
debug 学习算法 以及 钻探偏差和方差对 该线性回归模型的震慑。

正文依据水库中蓄水标线(water
level) 使用正则化的线性回归模型预 水流量(water flowing out of dam),然后
debug 学习算法 以及 探究偏差和方差对 该线性回归模型的影响。

 

 

①可视化数据集

①可视化数据集

本作业的数码集分成三片段:

本作业的多少集分成三有的:

ⓐ磨炼集(training
set),样本矩阵(磨炼集):X,结果标签(label of result)向量 y

ⓐ磨练集(training
set),样本矩阵(陶冶集):X,结果标签(label of result)向量 y

ⓑ交叉验证集(cross
validation set),鲜明正则化参数 Xval 和 yval

ⓑ交叉验证集(cross
validation set),鲜明正则化参数 Xval 和 yval

ⓒ测试集(test
set) for evaluating performance,测试集中的数据 是从未出现在
练习集中的

ⓒ测试集(test
set) for evaluating performance,测试集中的数额 是从未出现在
磨练集中的

将数据加载到Matlab中如下:陶冶集中一共有拾3个教练实例,每一种磨练实例唯有二个风味。故借使函数hθ(x)
= θ0·x0 + θ1·x1
,用向量表示成:hθ(x)
= θT·x

将数据加载到Matlab中如下:练习集中一共有十二个教练实例,每一种陶冶实例唯有二个表征。故要是函数hθ(x)
= θ0·x0 + θ1·x1
,用向量表示成:hθ(x) =
θT·x

一般地,x0
为 bais unit,默认 x0==1

一般地,x0
bais unit,默认 x0==1

图片 1

图片 2

 

 

陶冶多少集中的数量图形表示如下:

磨炼多少汇总的数额图形表示如下:

图片 3

图片 4

 

 

②正则化线性回归模型的代价函数

②正则化线性回归模型的代价函数

代价函数公式如下:

代价函数公式如下:

图片 5

图片 6

 

 

Matlab代码完毕如下:那里的代价函数是用向量(矩阵)乘法来促成的。

Matlab代码达成如下:那里的代价函数是用向量(矩阵)乘法来落到实处的。

实际表明可参照:Linear
Regression—落实八个线性回归

切切实实表明可参看:Linear
Regression—落到实处三个线性回归

reg = (lambda / (2*m)) * ( ( theta( 2:length(theta) ) )' * theta(2:length(theta)) );
J = sum((X*theta-y).^2)/(2*m) + reg;
reg = (lambda / (2*m)) * ( ( theta( 2:length(theta) ) )' * theta(2:length(theta)) );
J = sum((X*theta-y).^2)/(2*m) + reg;

 注意:由于θ0不参预正则化项的,故上面Matlab数组下标是从2初步的(Matlab数组下标是从1发端的,θ0是Matlab数组中的第一个因素)。

 注意:由于θ0不插足正则化项的,故上边Matlab数组下标是从2方始的(Matlab数组下标是从1早先的,θ0是Matlab数组中的第伍个因素)。

 

 

③正则化的线性回归梯度

③正则化的线性回归梯度

梯度的计算公式如下:

梯度的总结公式如下:

图片 7

图片 8

 

 

中间,上面公式的向量表示正是:[XT ·
(X·θ – y)]/m,用Matlab表示就是:X’*(X*theta-y) /
m

当中,上边公式的向量表示正是:[XT ·
(X·θ – y)]/m,用Matlab表示就是:X’*(X*theta-y) /
m

图片 9

图片 10

 

 

梯度的Matlab代码完成如下:

梯度的Matlab代码完毕如下:

grad_tmp = X'*(X*theta-y) / m;
grad = [ grad_tmp(1:1); grad_tmp(2:end) + (lambda/m)*theta(2:end) ];
grad_tmp = X'*(X*theta-y) / m;
grad = [ grad_tmp(1:1); grad_tmp(2:end) + (lambda/m)*theta(2:end) ];

 

 

④采用Matlab的函数
fmincg
函数练习线性回归模型,得到模型的参数,trainLinearReg.m如下:

④采取Matlab的函数
fmincg
函数陶冶线性回归模型,获得模型的参数,trainLinearReg.m如下:

function [theta] = trainLinearReg(X, y, lambda)
%TRAINLINEARREG Trains linear regression given a dataset (X, y) and a
%regularization parameter lambda
%   [theta] = TRAINLINEARREG (X, y, lambda) trains linear regression using
%   the dataset (X, y) and regularization parameter lambda. Returns the
%   trained parameters theta.
%

% Initialize Theta
initial_theta = zeros(size(X, 2), 1); 

% Create "short hand" for the cost function to be minimized
costFunction = @(t) linearRegCostFunction(X, y, t, lambda);

% Now, costFunction is a function that takes in only one argument
options = optimset('MaxIter', 200, 'GradObj', 'on');

% Minimize using fmincg
theta = fmincg(costFunction, initial_theta, options);

end

图片 11

 

function [theta] = trainLinearReg(X, y, lambda)
%TRAINLINEARREG Trains linear regression given a dataset (X, y) and a
%regularization parameter lambda
%   [theta] = TRAINLINEARREG (X, y, lambda) trains linear regression using
%   the dataset (X, y) and regularization parameter lambda. Returns the
%   trained parameters theta.
%

% Initialize Theta
initial_theta = zeros(size(X, 2), 1); 

% Create "short hand" for the cost function to be minimized
costFunction = @(t) linearRegCostFunction(X, y, t, lambda);

% Now, costFunction is a function that takes in only one argument
options = optimset('MaxIter', 200, 'GradObj', 'on');

% Minimize using fmincg
theta = fmincg(costFunction, initial_theta, options);

end

但是,在作业一中,大家并不是经过Matlab的
fmincg 函数来求得模型参数的,而是经过下边包车型大巴公式 在for循环中 求得
模型参数θ

图片 12

图片 13

 

其Matlab达成如下:

但是,在作业一中,大家并不是由此Matlab的
fmincg 函数来求得模型参数的,而是通过上面包车型地铁公式 在for循环中 求得
模型参数θ

for iter = 1:num_iters
    theta = theta - (alpha/m)*X'*(X*theta-y); % theta 就是用上面的向量表示法的 matlab 语言实现
....
end

图片 14

 

其Matlab落成如下:

⑤线性回归模型的图形化表示

for iter = 1:num_iters
    theta = theta - (alpha/m)*X'*(X*theta-y); % theta 就是用上面的向量表示法的 matlab 语言实现
....
end

上面已经因此fmincg
求得了模型参数了,那么我们求得的模子 与 数据的拟合程度
如何呢?看下图:

 

图片 15

⑤线性回归模型的图形化表示

 

地点已经通过
fmincg
求得了模型参数了,那么我们求得的模型 与 数据的拟合程度
怎么着呢?看下图:

从上海教室中能够看出,由于大家的数额是二维的,不过却用三个线性模型去拟合,故很扎眼现身了
underfiting problem

图片 16

在此地,大家很简单将模型以图形化格局呈现出来,因为,我们的磨炼多少的表征很少(一维)。当教练多少的性状很多(feature
variables)时,就很难画图了(三维以上很难间接用图片表示了…)。那时,就须求用 “学习曲线”来检查
磨练出来的模型与数据是不是很好地拟合了。

 

The best fit line tells us that the model is not a good fit to the data because the data has a non-linear pattern.
While visualizing the best fit as shown is one possible way to debug your learning algorithm,
it is not always easy to visualize the data and model(比如,当特征超过3维时...)

从上海教室中得以观望,由于我们的数目是二维的,不过却用多个线性模型去拟合,故很显然出现了
underfiting problem

 

在那边,大家很不难将模型以图形化格局展现出来,因为,大家的训练多少的特色很少(一维)。当教练多少的风味很多(feature
variables)时,就很难画图了(三维上述很难直接用图片表示了…)。那时,就供给用 “学习曲线”来检查
演习出来的模子与数据是还是不是很好地拟合了。

⑥偏差与方差之间的衡量

The best fit line tells us that the model is not a good fit to the data because the data has a non-linear pattern.
While visualizing the best fit as shown is one possible way to debug your learning algorithm,
it is not always easy to visualize the data and model(比如,当特征超过3维时...)

高偏差—欠拟合,underfit

 

高方差—过拟合,overfit

⑥偏差与方差之间的衡量

能够用学习曲线(learning
curve)来诊断偏差–方差 难点。学习曲线的 x 轴是教练集大小(training set
size),y 轴则是穿插验证误差和教练误差。

高偏差—欠拟合,underfit

教练误差的定义如下:

高方差—过拟合,overfit

图片 17

能够用学习曲线(learning
curve)来诊断偏差–方差 难点。学习曲线的 x 轴是教练集大小(training set
size),y 轴则是穿插验证误差和练习误差。

 

练习误差的定义如下:

在意:陶冶误差Jtrain(θ)是尚未正则化项的,因而在调用linearRegCostFunction时,lambda==0。Matlab实现如下(learningCurve.m)

图片 18

 

 

图片 19图片 20

注意:磨练误差Jtrain(θ)是不曾正则化项的,由此在调用linearRegCostFunction时,lambda==0。Matlab落成如下(learningCurve.m)

function [error_train, error_val] = ...
    learningCurve(X, y, Xval, yval, lambda)
%LEARNINGCURVE Generates the train and cross validation set errors needed 
%to plot a learning curve
%   [error_train, error_val] = ...
%       LEARNINGCURVE(X, y, Xval, yval, lambda) returns the train and
%       cross validation set errors for a learning curve. In particular, 
%       it returns two vectors of the same length - error_train and 
%       error_val. Then, error_train(i) contains the training error for
%       i examples (and similarly for error_val(i)).
%因为 m 是一样的,所以 error_val 和 error_train 向量有着相同的元素个数
%   In this function, you will compute the train and test errors for
%   dataset sizes from 1 up to m. In practice, when working with larger
%   datasets, you might want to do this in larger intervals.
%

% Number of training examples
m = size(X, 1);

% You need to return these values correctly
error_train = zeros(m, 1);
error_val   = zeros(m, 1);

% ====================== YOUR CODE HERE ======================
% Instructions: Fill in this function to return training errors in 
%               error_train and the cross validation errors in error_val. 
%               i.e., error_train(i) and 
%               error_val(i) should give you the errors
%               obtained after training on i examples.
%
% Note: You should evaluate the training error on the first i training
%       examples (i.e., X(1:i, :) and y(1:i)).
%
%       For the cross-validation error, you should instead evaluate on
%       the _entire_ cross validation set (Xval and yval).
%
% Note: If you are using your cost function (linearRegCostFunction)
%       to compute the training and cross validation error, you should 
%       call the function with the lambda argument set to 0. 
%       Do note that you will still need to use lambda when running
%       the training to obtain the theta parameters.
%
% Hint: You can loop over the examples with the following:
%
%       for i = 1:m
%           % Compute train/cross validation errors using training examples 
%           % X(1:i, :) and y(1:i), storing the result in 
%           % error_train(i) and error_val(i)
%           ....
%           
%       end
%

% ---------------------- Sample Solution ----------------------

for i = 1:m
        theta = trainLinearReg(X(1:i, :), y(1:i), lambda);
        error_train(i) = linearRegCostFunction(X(1:i, :), y(1:i), theta, 0);
        error_val(i) = linearRegCostFunction(Xval, yval, theta, 0);

% -------------------------------------------------------------
% =========================================================================

end

 

View Code

图片 21

 

图片 22

读书曲线的图样如下:能够见见欠拟合时,在
training examples
数目很少时,锻炼出来的模子还是可以拟合”一丢丢数据”,故陶冶误差相对较小;但对于交叉验证误差而言,它是利用未知的数码得算出来到的,目前天模型欠拟合,故差不多不能拟合未知的多少,因而交叉验证误差一些都十分大。

function [error_train, error_val] = ...
    learningCurve(X, y, Xval, yval, lambda)
%LEARNINGCURVE Generates the train and cross validation set errors needed 
%to plot a learning curve
%   [error_train, error_val] = ...
%       LEARNINGCURVE(X, y, Xval, yval, lambda) returns the train and
%       cross validation set errors for a learning curve. In particular, 
%       it returns two vectors of the same length - error_train and 
%       error_val. Then, error_train(i) contains the training error for
%       i examples (and similarly for error_val(i)).
%因为 m 是一样的,所以 error_val 和 error_train 向量有着相同的元素个数
%   In this function, you will compute the train and test errors for
%   dataset sizes from 1 up to m. In practice, when working with larger
%   datasets, you might want to do this in larger intervals.
%

% Number of training examples
m = size(X, 1);

% You need to return these values correctly
error_train = zeros(m, 1);
error_val   = zeros(m, 1);

% ====================== YOUR CODE HERE ======================
% Instructions: Fill in this function to return training errors in 
%               error_train and the cross validation errors in error_val. 
%               i.e., error_train(i) and 
%               error_val(i) should give you the errors
%               obtained after training on i examples.
%
% Note: You should evaluate the training error on the first i training
%       examples (i.e., X(1:i, :) and y(1:i)).
%
%       For the cross-validation error, you should instead evaluate on
%       the _entire_ cross validation set (Xval and yval).
%
% Note: If you are using your cost function (linearRegCostFunction)
%       to compute the training and cross validation error, you should 
%       call the function with the lambda argument set to 0. 
%       Do note that you will still need to use lambda when running
%       the training to obtain the theta parameters.
%
% Hint: You can loop over the examples with the following:
%
%       for i = 1:m
%           % Compute train/cross validation errors using training examples 
%           % X(1:i, :) and y(1:i), storing the result in 
%           % error_train(i) and error_val(i)
%           ....
%           
%       end
%

% ---------------------- Sample Solution ----------------------

for i = 1:m
        theta = trainLinearReg(X(1:i, :), y(1:i), lambda);
        error_train(i) = linearRegCostFunction(X(1:i, :), y(1:i), theta, 0);
        error_val(i) = linearRegCostFunction(Xval, yval, theta, 0);

% -------------------------------------------------------------
% =========================================================================

end

趁着 training examples
数指标加码,由于欠拟合,练习出来的模子越来越来能拟合一些数量了,故练习误差增大了。而对此交叉验证误差而言,最后慢慢地与磨练误差一致并变得越发平坦,此时,再扩大陶冶样本(training
examples)已经对模型的教练功效没有太大影响了—在欠拟合意况下,再追加操练集的个数也不可能再下滑演练误差了。

图片 23

图片 24

 

 

学习曲线的图形如下:可以看看欠拟合时,在
training examples
数目很少时,练习出来的模型还能拟合”一丝丝数码”,故陶冶误差相对较小;但对此交叉验证误差而言,它是应用未知的数目得算出来到的,而现行反革命模型欠拟合,故大致不可能拟合未知的数额,因而交叉验证误差距常的大。

⑦多项式回归

乘势 training examples
数指标加码,由于欠拟合,练习出来的模子越来越来能拟合一些多少了,故锻练误差增大了。而对此交叉验证误差而言,最后渐渐地与陶冶误差一致并变得更为平坦,此时,再充实验和培养和演练练样本(training
examples)已经对模型的教练效益没有太大影响了—在欠拟合情况下,再扩充练习集的个数也不能够再下降磨炼误差了。

从地点的读书曲线图形能够看到:出现了underfit
problem,通过抬高越来越多的表征(features),使用更高幂次的多项式来作为即使函数拟合数据,以消除欠拟合难题。

图片 25

多项式回归模型的要是函数如下:

 

图片 26

⑦多项式回归

 

从上面的上学曲线图形能够见到:出现了underfit
problem,通过抬高越多的性情(features),使用更高幂次的多项式来作为若是函数拟合数据,以化解欠拟合难点。

经过对特色“扩大”,以添加越多的features,代码完成如下:polyFeatures.m

多项式回归模型的假若函数如下:

图片 27图片 28

图片 29

function [X_poly] = polyFeatures(X, p)
%POLYFEATURES Maps X (1D vector) into the p-th power
%   [X_poly] = POLYFEATURES(X, p) takes a data matrix X (size m x 1) and
%   maps each example into its polynomial features where
%   X_poly(i, :) = [X(i) X(i).^2 X(i).^3 ...  X(i).^p];
%


% You need to return the following variables correctly.
X_poly = zeros(numel(X), p);

% ====================== YOUR CODE HERE ======================
% Instructions: Given a vector X, return a matrix X_poly where the p-th 
%               column of X contains the values of X to the p-th power.
%
% 
%X_ploy(:, 1) = X;
for i = 1:p
    X_poly(:,i) = X.^i;
end
% =========================================================================

end

 

View Code

因此对特色“扩展”,以添加愈多的features,代码完毕如下:polyFeatures.m

 

图片 30

“扩张”了特征之后,就变成了多项式回归了,但鉴于多项式回归的性状取值范围差别太大(比如有个别特征的取值非常的小,而略带特征的取值一点都十分大),故必要使用Normalization(归一化),归一化的代码如下:

图片 31

图片 32图片 33

function [X_poly] = polyFeatures(X, p)
%POLYFEATURES Maps X (1D vector) into the p-th power
%   [X_poly] = POLYFEATURES(X, p) takes a data matrix X (size m x 1) and
%   maps each example into its polynomial features where
%   X_poly(i, :) = [X(i) X(i).^2 X(i).^3 ...  X(i).^p];
%


% You need to return the following variables correctly.
X_poly = zeros(numel(X), p);

% ====================== YOUR CODE HERE ======================
% Instructions: Given a vector X, return a matrix X_poly where the p-th 
%               column of X contains the values of X to the p-th power.
%
% 
%X_ploy(:, 1) = X;
for i = 1:p
    X_poly(:,i) = X.^i;
end
% =========================================================================

end
function [X_norm, mu, sigma] = featureNormalize(X)
%FEATURENORMALIZE Normalizes the features in X 
%   FEATURENORMALIZE(X) returns a normalized version of X where
%   the mean value of each feature is 0 and the standard deviation
%   is 1. This is often a good preprocessing step to do when
%   working with learning algorithms.

mu = mean(X);
X_norm = bsxfun(@minus, X, mu);

sigma = std(X_norm);
X_norm = bsxfun(@rdivide, X_norm, sigma);

% ============================================================
end

图片 34

View Code

 

 

“扩张”了特征之后,就改成了多项式回归了,但鉴于多项式回归的天性取值范围差异太大(比如有个别特征的取值非常小,而有点特征的取值相当大),故需求动用Normalization(归一化),归一化的代码如下:

接轨再用原来的linearRegCostFunction.m总计多项式回归的代价函数和梯度,得到的多项式回归模型的假诺函数的图样如下:(注意:lambda==0,没有利用正则化):

图片 35

图片 36

图片 37

从多项式回归模型的
图形看出:它差不离很好地拟合了具有的磨炼样本数据。因而,可认为出现了:过拟合难点(overfit
problem)—高方差

function [X_norm, mu, sigma] = featureNormalize(X)
%FEATURENORMALIZE Normalizes the features in X 
%   FEATURENORMALIZE(X) returns a normalized version of X where
%   the mean value of each feature is 0 and the standard deviation
%   is 1. This is often a good preprocessing step to do when
%   working with learning algorithms.

mu = mean(X);
X_norm = bsxfun(@minus, X, mu);

sigma = std(X_norm);
X_norm = bsxfun(@rdivide, X_norm, sigma);

% ============================================================
end

多项式回归模型的读书曲线
图形如下:

图片 38

图片 39

 

从多项式回归的学习曲线图形看出:陶冶误差大概为0(分外贴近
x
轴了),那就是因为过拟合—模型大概应有尽有地穿过了练习多少汇总的各个数据点,从而练习误差非常小。

接轨再用原来的linearRegCostFunction.m总计多项式回归的代价函数和梯度,获得的多项式回归模型的假如函数的图样如下:(注意:lambda==0,没有利用正则化):

交叉验证误差先是一点都不小(练习样本数目为2时),然后趁着陶冶样本数指标增添,cross
validation error 变得特别小了(磨炼样本数目2 扩张到 5
进度中);然后,当磨练样本数目再扩展时(拾个以上的磨练样本时…),交叉验证误差又变得大了(过拟合导致泛化能力下落)。

图片 40

 

从多项式回归模型的
图形看出:它差不多很好地拟合了具有的练习样本数据。因而,可认为现身了:过拟合难题(overfit
problem)—高方差

⑧行使正则化来消除多项化回归模型的过拟合难题

多项式回归模型的求学曲线
图形如下:

安装正则化项
lambda ==
1(λ==1)时,获得的模子假诺函数图形如下:

图片 41

图片 42

从多项式回归的上学曲线图形看出:练习误差差不多为0(格外贴近
x
轴了),那多亏因为过拟合—模型差不离无所不包地通过了磨炼多少集中的各种数据点,从而练习误差相当的小。

能够看看:那里的拟合曲线不再是
lambda == 0 时
那样弯弯曲曲的了,也不是那么些精准地通过每贰个点,而是变得绝相比较平缓。那便是正则化 的功用。

接力验证误差先是极大(练习样本数目为2时),然后趁着磨炼样本数指标增多,cross
validation error 变得越来越小了(磨炼样本数目2 扩展到 5
进程中);然后,当磨炼样本数目再充实时(13个以上的练习样本时…),交叉验证误差又变得大了(过拟合导致泛化能力下落)。

lambda==1
(λ==1) 时的就学曲线如下:

 

图片 43

⑧用到正则化来化解多项化回归模型的过拟合难点

lambda==1时的上学曲线注解:该模型有较好的泛化能力,能够对未知的数据实行较好的展望。因为,它的陆续验证误差和教练误差相当相近,且很是小。(训练误差小,评释模型能很好地拟合数据,但有也许出现过拟合的题材,过拟合时,是不可能很好地对未知数据开展展望的;而那边交叉验证误差也小,申明模型也能够很好地对未知数据开始展览预测)

安装正则化项
lambda ==
1(λ==1)时,获得的模子假设函数图形如下:

 

图片 44

末尾来看下,多项式回归模型的正则化参数
lambda == 100(λ==100)时的场地:(出现了underfit
problem–欠拟合–高偏差)

能够见见:那里的拟合曲线不再是
lambda == 0 时
那样弯弯曲曲的了,也不是这些精准地通过每一个点,而是变得相对相比平缓。那多亏
正则化 的功力。

模型“假使函数”曲线如下:

lambda==1
(λ==1) 时的求学曲线如下:

图片 45

图片 46

 

lambda==1时的学习曲线注明:该模型有较好的泛化能力,能够对未知的数目开展较好的预测。因为,它的交叉验证误差和教练误差分外类似,且十分的小。(练习误差小,表明模型能很好地拟合数据,但有或许出现过拟合的标题,过拟合时,是无法很好地对未知数据举办预测的;而那边交叉验证误差也小,申明模型也能够很好地对未知数据开始展览前瞻)

上学曲线图形如下:

 

图片 47

末尾来看下,多项式回归模型的正则化参数
lambda == 100(λ==100)时的情况:(出现了underfit
problem–欠拟合–高偏差)

 

模型“若是函数”曲线如下:

⑨如何自动选用适当的
正则化参数 lambda(λ) ?

图片 48

从第9点中看出:正则化参数
lambda(λ) 等于0时,出现了过拟合, lambda(λ)
等于100时,又冒出了欠拟合, lambda(λ)
等于1时,模型刚刚好。

 

那在教练进度中怎样自动选拔适合的lambda参数呢?

学习曲线图形如下:

能够动用交叉验证集(根据交叉验证误差来摘取分外的
lambda 参数)

图片 49

Concretely, you will use a cross validation set to evaluate how good each lambda value is.
 After selecting the best lambda value using the cross validation set, 
we can then evaluate the model on the test set to estimate how well the model will perform on actual unseen data.

 

 

⑨哪些自动选取合适的
正则化参数 lambda(λ) ?

 具体的挑三拣四格局如下:

从第七点中看出:正则化参数
lambda(λ) 等于0时,出现了过拟合, lambda(λ)
等于100时,又并发了欠拟合, lambda(λ)
等于1时,模型刚刚好。

第②有一名目繁多的待选择的
lambda(λ) 值,在本λ作业中用三个lambda_vec向量保存这几个 lambda
值(一共有13个):

那在教练进程中哪些自动接纳适合的lambda参数呢?

lambda_vec
= [0 0.001 0.003 0.01 0.03 0.1 0.3 1 3 10]’

能够应用交叉验证集(依据交叉验证误差来抉择适当的
lambda 参数)

然后,使用磨炼多少集
针对那11个 lambda 分别演练拾贰个正则化的模子。然后对每种磨练出来的模型,计算它的接力验证误差,选拔交叉验证误差最小的十三分模型所对应的lambda(λ)值,作为最适合的
λ
。(注意:在测算陶冶误差和陆续验证误差时,是向来不正则化项的,也等于lambda==0)

Concretely, you will use a cross validation set to evaluate how good each lambda value is.
 After selecting the best lambda value using the cross validation set, 
we can then evaluate the model on the test set to estimate how well the model will perform on actual unseen data.
for i = 1:length(lambda_vec)
   theta = trainLinearReg(X,y,lambda_vec(i));%对于每个lambda,训练出模型参数theta
   %compute jcv and jval without regularization,causse last arguments(lambda) is zero 
   error_train(i) = linearRegCostFunction(X, y, theta, 0);%计算训练误差
   error_val(i) = linearRegCostFunction(Xval, yval, theta, 0);%计算交叉验证误差
end

 

 

 具体的挑三拣四方式如下:

对于那拾二个不一样的
lambda,总结出来的教练误差和穿插验证误差如下:

首先有一多级的待选拔的
lambda(λ) 值,在本λ作业中用二个lambda_vec向量保存那个 lambda
值(一共有1二个):

lambda     Train Error   Validation Error
 0.000000    0.173616    22.066602
 0.001000    0.156653    18.597638
 0.003000    0.190298    19.981503
 0.010000    0.221975    16.969087
 0.030000    0.281852    12.829003
 0.100000    0.459318    7.587013
 0.300000    0.921760    4.636833
 1.000000    2.076188    4.260625
 3.000000    4.901351    3.822907
 10.000000   16.092213   9.945508

lambda_vec
= [0 0.001 0.003 0.01 0.03 0.1 0.3 1 3 10]’

 

接下来,使用陶冶多少集
针对那10个 lambda 分别练习11个正则化的模子。然后对每一个磨练出来的模型,计算它的交叉验证误差,采纳交叉验证误差最小的尤其模型所对应的lambda(λ)值,作为最适合的
λ
。(注意:在盘算演练误差和陆续验证误差时,是没有正则化项的,也正是lambda==0)

锻炼误差、交叉验证误差以及
lambda 之间的关联 图形表示如下:

for i = 1:length(lambda_vec)
   theta = trainLinearReg(X,y,lambda_vec(i));%对于每个lambda,训练出模型参数theta
   %compute jcv and jval without regularization,causse last arguments(lambda) is zero 
   error_train(i) = linearRegCostFunction(X, y, theta, 0);%计算训练误差
   error_val(i) = linearRegCostFunction(Xval, yval, theta, 0);%计算交叉验证误差
end

当 lambda >= 3
的时候,交叉验证误差起始进步,如若再增大 lambda
就或者出现欠拟合了…

 

图片 50

对此那拾1个差别的
lambda,总括出来的教练误差和穿插验证误差如下:

 

图片 51

从地方看出:lambda
== 3 时,交叉验证误差最小。lambda==3时的拟合曲线如下:(可与
lambda==1时的拟合曲线及学习曲线对比一下,看有什么差别)

lambda     Train Error   Validation Error
 0.000000    0.173616    22.066602
 0.001000    0.156653    18.597638
 0.003000    0.190298    19.981503
 0.010000    0.221975    16.969087
 0.030000    0.281852    12.829003
 0.100000    0.459318    7.587013
 0.300000    0.921760    4.636833
 1.000000    2.076188    4.260625
 3.000000    4.901351    3.822907
 10.000000   16.092213   9.945508

图片 52

图片 53

 

 

上学曲线如下:

陶冶误差、交叉验证误差以及
lambda 之间的关联 图形表示如下:

图片 54

当 lambda >= 3
的时候,交叉验证误差早先提高,假如再增大 lambda
就或许出现欠拟合了…

完整地理三次这几个事物,真的好累啊。照旧有俯拾便是不懂。。。。

图片 55

 

 

原文:http://www.cnblogs.com/hapjin/p/6114466.html

从上边看出:lambda
== 3 时,交叉验证误差最小。lambda==3时的拟合曲线如下:(可与
lambda==1时的拟合曲线及学习曲线相比较一下,看有什么差异)

图片 56

 

学习曲线如下:

图片 57

 

 

原文:http://www.cnblogs.com/hapjin/p/6114466.html