美文网首页
machine-learning-ex5

machine-learning-ex5

作者: Wincent__ | 来源:发表于2019-06-02 18:48 被阅读0次

            写完ex5的作业之后蓦然回首发现我原来完成作业的进度还是挺慢的,人家吴教授写的建议是3h完成的作业,我可能用上两天:我就是纠结那几行英文的理解,纠结几个小细节,充分吃透,才能往下一步走。

            这一期的练习,就是有两个地方需要着重说明一下:

    1.learningCurve:学习曲线。Learning Curve是计算随着样本数量m的变化,训练集和验证集的误差,所以每一个单元的训练集误差(error_train(i)),应该以i为m计算出先训练出theta值,然后再计算error_train值,而error_validation应当以你在训练集有限的m训练出来的theta,在我所有训练集验证产生的error。

    它的总体思想就是:若干不同数量的训练集得出的theta,在validation集的误差到底有多大。

    for i = 1:m

      Xi = X(1:i, :);

      yi = y(1:i);

      [theta] = trainLinearReg(Xi, yi, lambda);

      error_train(i) = linearRegCostFunction(Xi, yi, theta, 0);

      error_val(i) = linearRegCostFunction(Xval, yval, theta, 0);//原先这里用的Xval是跟上面的Xi一样截取同样数量的长度的,其实是不用截取的。

    endfor

    2.lambda = 0

        在最后一项练习validationCurve中要计算随着不同的lambda,训练集和验证集的误差到底有多大。计算步骤有三:1.先按照给定的X, y,lambda训练出theta,2拿这个theta值计算验证集的代价。注意哦,第一步计算出theta的时候lambda要放指定的值,但是计算第二步代价函数的时候lambda要设为0.为什么呢?依我理解,lambda值拿来训练处theta的,lambda越高,惩罚越大,计算出来的theta是不同的,对不?但之后,theta已经计算出来了,如果再套上lambda计算代价,就会显得重复多余。lambda的职责主要是用来训练,而不是计算误差。(其实在ex5的最前面已经提醒过了哦)

    % ====================== YOUR CODE HERE ======================

    for i = 1:length(lambda_vec)

      lambda = lambda_vec(i);

      [theta] = trainLinearReg(X, y, lambda);

      error_train(i) = linearRegCostFunction(X, y, theta, 0);//原来这里放的是lambda,结果跟答案出入太大,后来改为0

      error_val(i) = linearRegCostFunction(Xval, yval, theta, 0);

    end

    % =========================================================================

    end

    相关文章

      网友评论

          本文标题:machine-learning-ex5

          本文链接:https://www.haomeiwen.com/subject/wkzxxctx.html