1.决定下一步做什么
1.评估你的模型
(1).线性回归
如果是以下后果,那么模型就须要调整
(2).分类问题
以辨认手写数字1/0为例
当机器学习利用于分类问题时,实际上J_test和J_train还有另一个更罕用的定义,这个定义不必逻辑损失计算测试误差和训练误差,而是去掂量测试集和训练集被谬误分类的局部,特地是在国际象棋中,你能够用这个算法,对每个测试样本进行预测1或者0
2.模型抉择&穿插验证
(1).首先将数据集分为三块
而后能够应用这三个公式计算训练误差、穿插验证误差和测试误差
(2).计算并抉择适合的模型
这个模型抉择的流程也实用于在其余类型模型中的抉择
比方:抉择神经网络的架构
3.诊断方差/偏差
·J_train不是太高意味着没有高偏差的问题
·J_cv并不比J_train差太多,这表明它没有高方差的问题
这就是二次模型为什么适宜这个场景
*summery
高偏差意味着算法在训练集上体现上体现不好,高方差意味着,算法在穿插验证集的体现比训练集差很多
4.正则化&偏差方差
正则化参数对拟合的影响
抉择正则化参数
训练误差和穿插验证误差如何随着参数 的函数变动的
越大就会导致,参数w越小, 越小,参数就会越大
通过Baseline performance掂量高偏差(Biase)、高方差(variance)
5.学习曲线(Learning curves)
(1).高偏差算法的学习曲线
如果是模型的问题,不论你再加多少样本到这个图上,直线的拟合性能都不会失去晋升,如下图所示
·这就是为什么投入大量精力收集更多的训练数据之前,查看你的算法是否有高偏差(bias)是很重要的,因为算法有高偏差(variance),那你须要采取更多的措施来改善,而不是仅仅增加更多的训练数据
(2).高方差算法的学习曲线
在这种状况下,你能够通过扩充训练集来升高穿插验证误差,从而让你的算法越来越好
·summary:
如果你正在构建一个机器学习应用程序,你能够画出它的学习曲线,也就是建训练集划分成不同的子集,即便你有,比如说,1000个训练样本你能够只用100个样本来训练一个模型,看看它的训练误差和穿插验证误差,而后用200个样本训练模型,剩下800个样本临时不必,而后画出J_train和J_cv.反复以上。而后画出大抵的学习曲线。如果咱们这样可视化,咱们就把握了另一种通过观察学习曲线判断是否高偏差还是高方差的办法。
(3).6个解决高方差/偏差的办法
6.神经网络&方差偏差
更大的神经网络能够缩小偏差(bisa),但计算成本会减少,可能会使得偏差(variance)变大
对神经网络进行适当的正则化,能够改善偏差大的问题
神经网络的正则化
这里只须要增加一串代码即可,每层的能够不同
4.迁徙学习
首先在大型数据集上进行训练,而后在较小的数据集上进一步参数调优,这两个步骤被称为监督预训练(supervised pretraining).第二步称为微调(fine tuning),即应用你曾经初始化的或从预训练获取的参数,而后运行梯度降落,进一步的微调权重,以适应手写数字辨认的特定程序。
这种算法被成为迁徙学习,因为给人的直观感触是,通过学习辨认猫、狗、牛、人等。它曾经为解决输出图像的前几个层学习了一些正当的参数。而后通过将这些参数迁徙到新的神经网络,新神经网络参数的初始值更适合了,这样咱们只须要再让算法学习一点,它就能成为一个很好的模型,
办法一:只训练输入层的参数,应用随机梯度降落法或Adam优化算法,只须要更新w[5],b[5]来升高代价函数,是针对你用来学习辨认0-9这些数字的训练集的代价函数。
办法二:训练网络中的所有参数,包含w[1],b[1],w[2],b[2]始终到w[5],b[5],然而前四个参数用你下面训练的值(辨认猫狗等动物的神经网络前四层的参数w1,,,)进行初始化。
如果你有一个十分小的训练集,那么选项1可能会更好一些,然而如果你有一个略微大一点的训练集,那么选项2可能会更好一些。
·summary: