1. 线性回归正则化的代价函数和梯度计算
predictions = X*theta;
sigma=predictions-y;
J= sigma'*sigma/(2*m);
J=J+lambda*(theta(2:end)'*theta(2:end))/(2*m);
grad=(predictions-y)'*X./m;
grad(2:end)=grad(2:end)'+lambda.*theta(2:end)./m;
%=========================================================================
grad = grad(:);
2. 学习曲线:
for i=1:m
[theta] = trainLinearReg(X(1:i, :), y(1:i),lambda);
[error_train(i),dummy] =linearRegCostFunction(X(1:i, :), y(1:i), theta, 0);
[error_val(i),dummy] =linearRegCostFunction(Xval, yval, theta, 0);
end
学习曲线的练习时,需要注意,计算训练集时用1:i的子集训练theta(因为要画出样本数量对学习模型的影响),而学习到的theta要计算验证集时,需要计算整个验证集。以此判断不同的样本数量对学习到的模型的影响。
3. 欠拟合
欠拟合时考虑增加特征数量
%将每一行的特征扩展到p个特征。
for i=1:p
X_poly(:,i)=X.^i;
End
4. lambda与学习曲线关系
lambda_vec = [0 0.001 0.003 0.01 0.03 0.1 0.3 1 3 10]';
for i =1:length(lambda_vec)
[theta] = trainLinearReg(X, y, lambda_vec(i));
[error_train(i),dummy] =linearRegCostFunction(X, y, theta, lambda_vec(i));
[error_val(i),dummy] =linearRegCostFunction(Xval, yval, theta, lambda_vec(i));
end