常见的几种方法
1.收集更多样本
2.使用更小规模的方法
3.增加方法的规模
4.使用多项式
5.增加正则化参数λ
如何判断下一步该采用什么方法
引入概念,误差(error),可用下面公式求得
如何划分我们的样本
按照比例6:2:2划分为三个样本,训练集,验证集,测试集
训练集:找到方法参数theta
验证集:确定方法多项式的度数d
测试集:确定正则化参数λ
通过学习曲线来确定高方差/高偏差
根据学习曲线来选择要使用哪种优化方法
同上
代码部分
1.error的计算代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function [error_train, error_val] = ... learningCurve(X, y, Xval, yval, lambda) m = size(X, 1); error_train = zeros(m, 1); error_val = zeros(m, 1); for i = 1:m theta = trainLinearReg(X(1:i,:),y(1:i,:),lambda);%注意,每增加一个训练集就要重新获取一次theta,获取方法为正规化方程或者梯度下降 error_train(i) = linearRegCostFunction(X(1:i,:),y(1:i,:),theta,0);%正则化参数为0的时候代价函数和误差是相同的 error_val(i) = linearRegCostFunction(Xval,yval,theta,0); end end |
2.选取不同的正则化参数
一般使用的集合为 [0 0.001 0.003 0.01 0.03 0.1 0.3 1 3 10]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
function [lambjda_vec, error_train, error_val] = ... validationCurve(X, y, Xval, yval) lambda_vec = [0 0.001 0.003 0.01 0.03 0.1 0.3 1 3 10]'; lambjda_vec = lambda_vec; error_train = zeros(length(lambda_vec), 1); error_val = zeros(length(lambda_vec), 1); for i = 1:length(lambda_vec) theta = trainLinearReg(X,y,lambda_vec(i)); error_train(i) = linearRegCostFunction(X,y,theta,0); error_val(i) = linearRegCostFunction(Xval,yval,theta,0); end end |