引子:对于一个任务,往往有多种算法可供选择,甚至同一种算法,参数设置不同,对应的模型也不一样,我们需要对模型进行评估与选择。评估依据是模型的泛化误差。
1.泛化误差概念理解
错误率(error rate)与精度(accuracy):根据模型分类错误的样本占中样本的比例,如m个样本中有a个分类错误,E =a/m。对应的,精度=1-a/m。
以此推广,我们将预测输出与实际真实输出的差异称之为误差(这里说的误差均为误差期望),学习器在训练集中的误差为训练误差(training error)或经验误差(empirical error),在新样本中的误差为泛化误差(generalization error)。
我们的目标是选择泛化误差小,即泛化能力强(对新样本适应性好)的模型。
影响泛化能力的重要因素——过拟合:学习器把训练样本的某些不一般特效当成“普遍规律”。过拟合不可彻底消除,可以通过一些手段减小(见后续章节)。与过拟合对应的是欠拟合,学习器学习能力低下导致的,可以通过在决策树种增加分枝或者神经网络中增加层数等手段克服。二者类比见西瓜书图示如下。
2.泛化误差评估方法
泛化误差是模型在新样品中的误差,自然无法直接得到,通常采用实验测试来对其评估。通过一个测试集的测试误差来进行近似泛化误差。这里就需要将数据集分成两部分:训练集S和测试集T,二者需要彼此互斥。划分方法常用的有一下几个。
2.1.留出法
概念:直接将数据集D 划分为两个互斥的集合,其中一个集合作为训练集,另一个作为测试集T。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。
注意事项:(1)数据划分必须保证分布一致性,如采用分层采样;(2)存在多种划分方法,单次往往不可靠,一般多次划分求平均;(3)测试集小时,评估结果的方差较大, 训练集小时,评估结果的偏差较大,一般是将大约2/3~4/5 的样本用于训练,剩余样本用于测试。
2.2.交叉验证法
交叉验证法是将数据集D分为k个大小相似的互斥子集Di,每个子集尽可能保持数据分布一致。每次选取一个子集作为测试集,其余k-1个子集的并集作为训练集进行验证,这样可以进行k次验证,最后结果取k次验证结果的均值。这种方式称为“k折