一、模型评估
训练集和测试集
用训练集去训练模型,用测试集去测试模型效果
假设现在有一个问题需要拟合回归方程,那要拟合几阶是最合适的?有以下两种方法:
1. 分别把一阶、二阶、三阶...拟合完后,计算出它们对应的测试集误差,哪个最小,就说明哪个阶最合适(这种方法不推荐,因为这种算出来的测试集误差一般低于实际误差,所以不用这种)
2.不再把数据集分为测试集和训练集,而是训练集、交叉验证集(the cross-validation set)还有测试集(比如说训练集6成,交叉验证集2成,测试集2成)
交叉验证集是一个额外的数据集,我们将使用它来检查或信任检查不同模型的有效性或准确性.
有的时候也被简称为验证集(the validation set),也叫开发集(the dev set)
这样就能通过三个数据集的代价函数来计算训练误差、交叉验证误差和测试误差
通常这三个代价函数都不包含正则化项,因为都包含在训练对象中。
交叉验证误差的代价函数也交叉验证错误、验证错误或开发错误。
这样的话,在方法2中,我们就是在方法1的基础上,计算出它们对应的交叉验证集误差,而不是直接计算测试集误差来判断,哪个的交叉验证集误差最小,说明哪个最优。如果想展示泛化误差估计这个模型在新的数据上表现会有多好,再计算测试集误差即可。
在神经网络中,也可以通过这种方式去计算哪种神经网络的参数、神经元个数选取最合适。
比如关于神经网络的分类问题,可以计算算法错误分类的交叉验证样本的比例,选择最低的交叉验证误差所在的那个神经网络即可。
注意!做决定只看训练集和交叉验证集,不用测试集
只有在确定选择哪个模型后,再来考虑测试集中设计和评估的所有选项,这样就能避免对泛化误差的过度乐观估计。
二、诊断方差偏差
建立机器学习系统的关键过程,就是如何决定下一步做什么,以及提高它的表现
而在许多运用场景下,观察算法的偏差和方差能够更好指导下一步该怎么做。
1. 如果算法有很高的偏差,或者它欠拟合:
那它的J_train 和J_cv都会很高
2. 如果算法过拟合了:
J_train很高,J_cv远低于J_train
也就是说,高偏差意味着算法在训练集上表现不好,高方差意味着在交叉验证集上表现要比训练集上差得多。
三、如何合理选择正则化参数?
使用交叉验证误差。其实就是把正则化参数的值去慢慢代入去试,去看交叉验证误差的大小。
四、如何判断方差偏差是否过高?
要建立一个基准
常见的方法是衡量人类在这项任务上能做的多好(交叉误差)
再去比较算法在测试集上的训练误差
如果相差无几就说明不是偏差的问题,说明这个准确率是可以的
但如果算法在交叉验证集上的误差远大于测试集上的训练误差,就说明是高方差的问题。
除此之外,还可以比较先前别人已经做过的算法的表现,看看差距。