#Deciding what to try next?(决定下一步做什么)
如何改进算法?
- 使用更多训练样本(但有时候没有用)
- 尝试使用更少的特征(仔细挑选一小部分来防止过拟合)
- 使用更多特征
- 增加多项式特征
- 增加或减小正则化参数λ
#Evaluationg a hypothesis(评估假设)
仅仅因为一个假设具有很小的训练误差并不能说明它一定是一个好的假设。
#评价假设的标准方法:
将数据分成两部分,第一部分成为训练集,第二部分成为测试集;
典型的分割方法是按照7:3的比例(随机)。
1、对训练集进行学习得到参数θ,即最小化训练误差J(θ)
2、计算出测试误差,实际上是测试集的平方误差的平均值
*misclassification error(错误分类)/zero one misclassification error(0/1分类错误):定义测试误差
#Model selection & training/validation/test sets(模型选择&训练、验证、测试集)
训练误差并不能很好地估计出实际的generalization error(泛化错误),即该假设对新样本的泛化能力。
如果你想选择一个模型,即选择一个degree of polynomial(多项式次数),从几个中选出来一个拟合这个模型并且估计这个拟合好的模型假设对新样本的泛化能力:
首先选择第一个模型,然后最小化训练误差,得到一个参数向量θ;
然后再选择第二个模型拟合训练集,得到另外一个参数向量θ;
以此类推,然后对所有这些模型求出测试集误差,为了从这些模型中选出最好的一个,要看哪个模型有最小的测试误差;
*我们的参数向量很可能是对泛化误差过于乐观的估计,因为我是用测试集拟合得到的参数d,再在测试集上评估假设就不公平了,因为我用测试集拟合得到的参数,用测试集选择了多项式的次数,所以假设很可能对于测试集的表现好过对于新的它没见过的样本,而后者才是我们真正关心的。
为了解决模型选择出现的问题,通常采用如下方法:
把数据分为三个部分,training set(测试集)、cross validation set(交叉验证集cv)、test set(测试集),典型比例是6:2:2。
要用验证集(交叉验证集)来选择模型而不是原来的测试集:
1、选取第一种假设,最小化代价函数,以此类推;
2、用交叉验证集来测试,而不像原来一样用测试集来测试这些假设;
3、选择交叉验证误差最小的那个假设作为模型。
*省下测试集用来衡量或者估计算法选出的模型的泛化误差。
#Diagnosing bias VS variance(诊断偏差VS方差)
即underfitting(欠拟合)问题 VS overfitting(过拟合)问题
- 如果算法有bias(偏差)问题,则训练集误差会比较大,交叉验证误差也会很大,接近训练误差;
- 如果算法有variance(方差)问题,则训练误差很小,交叉验证误差远大于训练集误差。
#Regularization & bias/variance(正则化&偏差、方差)
如何自动地选择出一个最合适的正则化参数λ的值?
对于训练集、验证集误差的定义都是平均误差平方和或者是不使用正则化项时训练集验证集和测试集的平均误差平方和的一半。
用交叉验证集来评价,选交叉验证误差最小的那个模型作为最终选择。
当改变正则化参数λ时,交叉验证误差和训练误差怎么变化:
#Learning curves(学习曲线)
判断某个学习算法是否处于偏差、方差问题或是二者皆有。
绘制训练集的平均误差平方和,或者交叉验证集的平均误差平方和:
#总结
- 收集更多的训练集数据:对于解决high variance(高方差)问题有帮助;
- 减少特征数量:对high variance(高方差)问题有效;
- 增加特征:通常是解决high bias(高偏差)问题的一个方法;
- 增加多项式特征:也属于增加特征;
- 增大λ:可修正high bias(高偏差)问题;
- 减小λ:可修正high variance(高方差)问题;
- 简单神经网络参数不多,容易欠拟合,但最大优势是计算量小;
- 复杂神经网络参数较多,容易过拟合,可使用正则化来修正。
PS.内容为学习吴恩达老师机器学习的笔记【https://study.163.com/course/introduction/1004570029.htm】