机器学习5 正则化的线性回归(Regularized Linear Regression)和偏差对方差(Bias v.s. Variance)
Posted 拉风小宇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习5 正则化的线性回归(Regularized Linear Regression)和偏差对方差(Bias v.s. Variance)相关的知识,希望对你有一定的参考价值。
在这篇博文中我们将会实现正则化的线性回归以及利用他去学习模型,不同的模型会具有不同的偏差-方差性质,我们将研究正则化以及偏差和方差之间的相互关系和影响。
这一部分的数据是关于通过一个水库的水位来预测水库的流水量。为了进行偏差和方差的检验,这里用12组数据进行回归而用交叉数据集中的21组数据进行验证。
正则化的线性回归(Regularized Linear Regression)
首先这12组数据由上图展现出来,下面进行线性回归。
正则化线性回归代价函数
正则化的线性回归的代价函数为
其中 λ λ 是控制正则化程度的参数。正则化项是作为代价函数中惩罚项存在的。这里需要注意的是 θ0 θ 0 并不需要正则化。
正则化线性回归梯度函数
对应地,正则化线性函数对于
θj
θ
j
的偏导定义为
∂J(θ)∂θj=(1m∑i=1m(hθ(x(i))−y(i))x(i)j)+λmθj for j≥1 ∂ J ( θ ) ∂ θ j = ( 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) ) + λ m θ j f o r j ≥ 1
拟合线性回归
在这么小的数据规模下正则化项的用处将不会很明显,这里设置为0.然后利用fmincg函数求得
J(θ)
J
(
θ
)
的最小值,得到下面的回归直线。
训练
θ
θ
的函数如下
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
以及调用的
function [J, grad] = linearRegCostFunction(X, y, theta, lambda)
%LINEARREGCOSTFUNCTION Compute cost and gradient for regularized linear
%regression with multiple variables
% [J, grad] = LINEARREGCOSTFUNCTION(X, y, theta, lambda) computes the
% cost of using theta as the parameter for linear regression to fit the
% data points in X and y. Returns the cost in J and the gradient in grad
% Initialize some useful values
m = length(y); % number of training examples
% You need to return the following variables correctly
J = 0;
grad = zeros(size(theta));
% ====================== YOUR CODE HERE ======================
% Instructions: Compute the cost and gradient of regularized linear
% regression for a particular choice of theta.
%
% You should set J to the cost and grad to the gradient.
%
h = X*theta;
J = (1/(2*m))*sum((h-y).^2) + (lambda/(2*m))*sum(theta(2:end,:).^2);
grad(1,:) =(1/m)*sum((h-y) .* X(:,1));
for c = 2:size(theta,1)
grad(c,:) = (1/m)*sum((h-y) .* X(:,c)) + (lambda/m)*(theta(c,:));
end
% =========================================================================
end
由于给定的数据并不是线性的,因此线性回归的效果是一般的,那么如何衡量回归效果的好坏呢,主要依赖于两个指标:偏差(Bias)和方差(variance)
偏差(Bias)-方差(variance)
关于偏差和方差,可以通过绘制训练误差和测试误差机型评判,通过学习曲线来判断两个指标的变化。参考如下博客
学习曲线
绘制学习曲线,我们需要针对不同的训练(training)集规模有训练(training error)和交叉验证集合误差(cross validation set error)。为了获得不同的训练集规模,需要利用原始训练集
X
X
的不同子集。特别地,我们可以用前个例子(例如
X(1:i,:)
X
(
1
:
i
,
:
)
和
y(1:i)
y
(
1
:
i
)
)
首先训练
θ
θ
,之后计算两个误差,其中训练误差由下式定义