Programming Exercise 5: Regularized Linear Regression and Bias v.s. Variance

1.2 Regularized linear regression cost function

1.3 Regularized linear regression gradient  

%刚开始没看到传进来的参数本身就已经给X加了一列了
J=1/2/m*(X*theta-y)'*(X*theta-y)+lambda/2/m*theta(2:end)'*theta(2:end);

grad=1/m*X'*(X*theta-y)+lambda/m*theta;
grad(1)=grad(1)-lambda/m*theta(1);

学习曲线的横坐标是m,在for循环中,用前i个训练集中的数据算出来一个theta,然后用这个theta算前i个训练集的error,但是算验证集的error时,注意所有的验证集都需要算进去,如果算测试集的error,也是把测试机中的所有样例都算进去。。。

所以说,这里的m,实际上是训练集的样例个数。 

2.1 Learning curves
 
for i=1:m
    theta=trainLinearReg(X(1:i,:),y(1:i), lambda);
    [error_train(i) g]= linearRegCostFunction(X(1:i,:),y(1:i), theta,0);
    [error_val(i) g]= linearRegCostFunction(Xval,yval, theta,0);
end

运行ex5,从图像中我们可以看出来他是高偏差的。

3 Polynomial regression
 
X_poly(:,1)=X;
for i=2:p
    X_poly(:,i)=X_poly(:,i-1).*X;
end
3.3 Selecting λ using a cross validation set
 
num_lambda=size(lambda_vec)
for i=1:num_lambda
    theta=trainLinearReg(X,y, lambda_vec(i));
    [error_train(i) g]= linearRegCostFunction(X,y, theta,0);
    [error_val(i) g]= linearRegCostFunction(Xval,yval, theta,0);
end

 

3.4 Optional (ungraded) exercise: Computing test set error
 

%找出使验证集误差最小的lambda
final_lambda=lambda_vec(find(error_val==min(error_val)));
%算出theta
final_theta=trainLinearReg(X_poly,y,final_lambda);
%计算测试集的误差
[error_test g]= linearRegCostFunction(X_poly_test,ytest, final_theta,0);

最后算出来error_test=3.8599

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值