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