machine-learning-ex5

        写完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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 以西瓜书为主线,以其他书籍作为参考进行补充,例如《统计学习方法》,《PRML》等 第一章 绪论 1.2 基本术语 ...
    danielAck阅读 4,689评论 0 5
  • 一、课程大纲1.1课程内容介绍1.1.1 Supervised Learning关于监督型学习方法,本课程涉及到的...
    xiaorun阅读 1,325评论 0 1
  • 评估一个机器学习算法 01.Evaluating a Hypothesis 给定一个数据集,一般将其分为训练集(7...
    Xylia_Yang阅读 544评论 0 0
  • 本文介绍机器学习算法的性能评估的方法,包括算法高偏差还是高方差的诊断,学习曲线等。从工程应用的角度来讲,算法只需要...
    kamidox阅读 3,267评论 2 21
  • 焦点初级12期杜金玲,坚持分享第131天本周四期末考试了,无论是老师还是学生,都是牟足了劲,天天试卷不断,背诵课文...
    渡小满6阅读 127评论 0 1