一、引言在对模型进行评估与选择之前首先要知道用什么评估方法和性能度量来评估一个模型其次选择模型时如何比较模型先来解答第一个问题。二、预备知识了解评估方法就需要先学习误差、精度、过拟合、欠拟合这四个概念。1、误差一般我们把学习器的实际预测输出与样本的真实输出之间的差异称之为“误差(error)”。误差 实际预测输出 — 样本真实输出通常我们把分类错误的样本数占样本总数的比例称之为“错误率(error rate)”。比如有m个样本其中有a个样本分类错误那么错误率 E a/m。而精度(accuracy)则是A 1 - a/m即“精度 1 - 错误率”。1.1 经验误差学习器模型在训练集上产生的误差称之为“训练误差 (training error)或经验误差(empirical error)”。1.2 泛化误差学习器模型在新样本上产生的误差称之为“泛化误差(generalization error)”。【说明】我们想要的是一个泛化误差很小的学习器模型。但是大多数情况下 我们得到的是一个经验误差很小、在训练集上表现很好的学习器模型。我们实际希望的是学习器在新样本上也能够表现的很好。那为了达到这个目的应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”。这样才能在遇到新样本时做出正确的判断。2、欠拟合2.1 欠拟合产生的原因【原因】学习器模型并没有把训练样本中一般特征学习到导致学习器模型的学习能力低下机器学习把这种情况称之为“欠拟合”。2.2欠拟合的影响学习器模型欠拟合时是比较容易克服的比如在决策树学习中扩展分支在神经网络学习中增加训练轮数。3、过拟合3.1 过拟合产生的原因【原因】学习器模型把训练样本中学的“太好了”以至于把训练样本本身的一些特点训练样本不太一般的特性当作了所有潜在样本都会具有的一般性质。导致学习器模型的泛化能力降低这种现象在机器学习中成为“过拟合”。3.2过拟合的影响产生过拟合的因素很多。上述所描述的原因是最常见的情况。 它是学习器模型在机器学习中面临的关键障碍处理起来比较麻烦而且我们是无法彻底避免过拟合能做的只是缓解它产生的风险。【说明】:关于过拟合大致可以这样理解机器学习面临的问题通常是NP非确定性多项式时间难而有效的学习算法必然是要在多项式时间内运行完成如果彻底避免过拟合那通过最小化经验误差就可以得到了最优解也就构造性证明了 “ P NP ”。但是实际上P ! NP 过拟合无法彻底避免。 P问题可以在多项式时间内找到正确答案的问题 NP问题指一旦给出候选答案能在多项式时间内验证其正确性的问题 NP问题找答案很难但是验证答案却是相对容易的4、总结现实中一个需要完成的任务往往有很多学习算法可以选择甚至同一个学习算法使用不同的参数配置会产生不同的模型。我们1如何选择学习算法2使用哪一种参数配置这就是机器学习中 “模型选择” 问题。理想的解决办法就是对候选模型的泛化误差进行评估选择泛化误差最小的那个模型。【面临的问题】① 无法直接获得泛化误差② 训练误差由于过拟合现象的存在不适合作为标准所以现实中如何进行模型的评估和选择三、评估方法1、测试集1.1 测试集的来由通常可以通过实验测试来对学习器的泛化误差进行评估从而做出选择。既然做实验测试那就需要用一个 “测试集(testing set)” 来测试学习器模型对新样本的判别能力并以测试集上的 “测试误差(testing error)” 作为 “泛化误差” 的近似。1.2测试样本的要求通常测试样本是从样本真实分布中独立同分布采样得来。同时满足测试集与训练集互斥。也就是说测试样本尽量不在训练集中出现、未在训练过程中使用。1.3 要求测试集与训练集互斥的原因【举例】 以这个场景理解老师出了10道练习题供学生练习考试老师依然用这10道题作为考试题考试那学生最终的考试成绩能反映出学生学的好不好嘛当然不能因为有些学生只能做这10道题也能得高分。回到测试集与训练集互斥的原因上来。我们最终希望得到泛化性能强的模型这就类似于希望同学对课程学习的很好、获得了对所学知识 “ 举一反三” 的能力训练样本就相当于给同学练习的习题测试样本就相当于考试的考题显然如果测试样本被拿去训练最终得到的将是一个过于“乐观”的结果。2、训练集和测试集划分方法2.1 引言若我们有一个包含m个样例的数据集D{ (x1, y1), (x2, y2), (x3, y3), ..., (xm, ym) }那怎么对数据集D进行处理产生训练集S和测试集T分别用在训练与测试过程。下面详细介绍三种常见的方法。2.2 留出法 (hold-out)该方法直接将数据集D划分为两个互斥的集合其中一个集合作为训练集S另一个作为测试集T即D STST 。在S上训练出模型后在T上评估模型的测试误差将测试误差作为泛化误差进行近似。【举例】①以二分类任务为例。假设D包含1000个样本将其划分为S包含700个样本T包含300个样本。在S上训练之后若模型在T上有90个样本分类错误。E (错误率) (90/300) ×100% 30%A (精度) 1 - 30% 70%【注意】在训练集和测试集划分时要尽可能保持数据分布一致。避免因为数据划分过程引入额外的偏差对最终结果产生影响。【补充说明1】在分类任务中要尽量保证样本类别比例相似。从采样角度看待数据集划分过程则保留类别比例的采样方式通常称为 “分层采样( stratified sample)”。【例子】对D进行分层采样得到含70% 样本的训练集 S包含30% 样本的测试集 TD中包含500 个正例、 500个反例分层采样得到的S应包含350个正例、350个反例而T 包含 150 个正例、150个反例。若 S 与 T 样本类别比例差别很大那么误差估计将由于训练集/测试集数据分布的差异而产生偏差【补充说明2】给定训练集和测试集的样本比例之后仍然存在多种划分方式对数据集D进行分割。【比如】将 D 中的样本排序然后将前350个正例放入训练集中或者将最后 350 个正例放入训练集中......。【影响】这些不同的划分将导致不同的训练集和测试集那么模型评估的结果也会有差别。因此单次使用留出法得到的估计结果往往不够稳定。【解决办法】采用若干次随机划分、重复进行实验评估取所有评估结果的平均值作为留出法的评估结果。如进行100次随机划分每次产生的训练/测试集用于实验评估100次后得到100个结果留出法则是取这100个结果的平均【留出法的局限】留出法是在划分训练集和测试集。这就导致一个窘境① 若令训练集 S 包含绝大多数样本那么训练出的模型可能更接近用D训练出的模型但是测试集 T 比较少评估结果可能不够稳定准确。② 若令测试集 T 多包含一些样本那么训练集 S 与 D 差别更大了被评估的模型与用 D 训练出的模型相比可能差别较大也就降低了评估结果的保真性。【总结】这个局限没有完美的解决方案所以常见的做法就是将大约2/3~4/5的样本用于训练剩下的样本用于测试。2.3 交叉验证法 (cross validation)交叉验证法先将数据集 D 划分为k 个大小相似的互斥子集即D D1D2D3...Dk , DiDj ( ij )每个子集Di都尽可能保持数据分布的一致性即每个子集Di从 D 中通过分层采样得到。接下来每次用k-1 个子集的并集作为训练集剩下的那个子集作为测试集这样便可以得到k 组训练集和测试集从而进行 k 次训练和测试最终返回的是这 k 个测试结果的均值。【注意】交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k 的取值也正是这个原因通常把交叉验证法称之为 “k折交叉验证 (k-flod cross validation)”。其常用的 k 值为 5、20等。为了方便大家理解可以看这个示意图。【补充说明1】与留出法相似将数据集 D 划分为 k 个子集同样存在多种划分方式。为了减少因为样本划分不同而引入的差异。k 折交叉验证通常要随机使用不同的划分重复 p 次最终的评估结果是这 p 次 k 折交叉验证结果的均值。【举例】假设数据集 D 中包含m个样本令 k m则得到一个交叉验证的特例留一法 (Leave-One-Out, 简称LOO)。留一法不受随机样本划分的影响。【留一法优势】因为 m 个样本只有唯一的方式划分为 m 个子集每个子集包含一个样本留一法使用训练集与初始数据集相比只少了一个样本这就使得在绝大多数情况下留一法中被实际评估的模型 与 期望评估所用的 D 训练出的模型很相似。因此留一法的评估结果往往被认为比较准确【留一法的缺陷】在数据集比较大时训练 m 个模型的计算开销非常大而且这还是在没有考虑算法调参的情况下。留一法的估计结果业未必永远比其他评估方法准确2.4 自助法自助法是一个直接以自助采样法为基础给定包含 m 个样本的数据集 D 对它进行采样产生数据集 D‘然后再将该样本放回初始数据集 D 中使得该样本在下次采样的时候仍然有可能被采样到这个过程重复执行 m 次之后我们就得到了包含 m 个样本的数据集 D这就是自助采样的结果。【注意】① 自助法D中有一部分样本会在D中多次出现而另一部分样本不出现。可以做一个简单的估计样本在 m 次采样中始终不被采到的概率是1/e0.368。也就是通过自助采样初始数据集 D 中大约有 36.8% 的样本未出现在现在采样数据集 D 中。可以将 D’ 用做训练集D\D‘ 做为测试集。这样实际评估的模型与期望评估的模型都使用了 m 个训练样本而且仍然有数据总量大约1/3没在训练集中出现刚好将这些样本用于测试。这样得到的测试结果也成为 “ 外包估计 (out-if-bag estimate) ”② 自助法在数据集较小、难以有效划分训练集和测试集的时候很有用③ 自助法能从初始的数据集产生很多不同的训练集这对集成学习等方法有很大的好处。【缺点】自助法产生的数据集改变初始数据集的分布会因此引入估计偏差。因此初始数据集足够的时候留出法和交叉验证法更常用。———————————————————————————————————————————希望能给读者带来一些帮助。博客文字较多知识点较为密集可以多停留一下耐心看完
机器学习——模型评估与选择(一)————(评估方法)
一、引言在对模型进行评估与选择之前首先要知道用什么评估方法和性能度量来评估一个模型其次选择模型时如何比较模型先来解答第一个问题。二、预备知识了解评估方法就需要先学习误差、精度、过拟合、欠拟合这四个概念。1、误差一般我们把学习器的实际预测输出与样本的真实输出之间的差异称之为“误差(error)”。误差 实际预测输出 — 样本真实输出通常我们把分类错误的样本数占样本总数的比例称之为“错误率(error rate)”。比如有m个样本其中有a个样本分类错误那么错误率 E a/m。而精度(accuracy)则是A 1 - a/m即“精度 1 - 错误率”。1.1 经验误差学习器模型在训练集上产生的误差称之为“训练误差 (training error)或经验误差(empirical error)”。1.2 泛化误差学习器模型在新样本上产生的误差称之为“泛化误差(generalization error)”。【说明】我们想要的是一个泛化误差很小的学习器模型。但是大多数情况下 我们得到的是一个经验误差很小、在训练集上表现很好的学习器模型。我们实际希望的是学习器在新样本上也能够表现的很好。那为了达到这个目的应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”。这样才能在遇到新样本时做出正确的判断。2、欠拟合2.1 欠拟合产生的原因【原因】学习器模型并没有把训练样本中一般特征学习到导致学习器模型的学习能力低下机器学习把这种情况称之为“欠拟合”。2.2欠拟合的影响学习器模型欠拟合时是比较容易克服的比如在决策树学习中扩展分支在神经网络学习中增加训练轮数。3、过拟合3.1 过拟合产生的原因【原因】学习器模型把训练样本中学的“太好了”以至于把训练样本本身的一些特点训练样本不太一般的特性当作了所有潜在样本都会具有的一般性质。导致学习器模型的泛化能力降低这种现象在机器学习中成为“过拟合”。3.2过拟合的影响产生过拟合的因素很多。上述所描述的原因是最常见的情况。 它是学习器模型在机器学习中面临的关键障碍处理起来比较麻烦而且我们是无法彻底避免过拟合能做的只是缓解它产生的风险。【说明】:关于过拟合大致可以这样理解机器学习面临的问题通常是NP非确定性多项式时间难而有效的学习算法必然是要在多项式时间内运行完成如果彻底避免过拟合那通过最小化经验误差就可以得到了最优解也就构造性证明了 “ P NP ”。但是实际上P ! NP 过拟合无法彻底避免。 P问题可以在多项式时间内找到正确答案的问题 NP问题指一旦给出候选答案能在多项式时间内验证其正确性的问题 NP问题找答案很难但是验证答案却是相对容易的4、总结现实中一个需要完成的任务往往有很多学习算法可以选择甚至同一个学习算法使用不同的参数配置会产生不同的模型。我们1如何选择学习算法2使用哪一种参数配置这就是机器学习中 “模型选择” 问题。理想的解决办法就是对候选模型的泛化误差进行评估选择泛化误差最小的那个模型。【面临的问题】① 无法直接获得泛化误差② 训练误差由于过拟合现象的存在不适合作为标准所以现实中如何进行模型的评估和选择三、评估方法1、测试集1.1 测试集的来由通常可以通过实验测试来对学习器的泛化误差进行评估从而做出选择。既然做实验测试那就需要用一个 “测试集(testing set)” 来测试学习器模型对新样本的判别能力并以测试集上的 “测试误差(testing error)” 作为 “泛化误差” 的近似。1.2测试样本的要求通常测试样本是从样本真实分布中独立同分布采样得来。同时满足测试集与训练集互斥。也就是说测试样本尽量不在训练集中出现、未在训练过程中使用。1.3 要求测试集与训练集互斥的原因【举例】 以这个场景理解老师出了10道练习题供学生练习考试老师依然用这10道题作为考试题考试那学生最终的考试成绩能反映出学生学的好不好嘛当然不能因为有些学生只能做这10道题也能得高分。回到测试集与训练集互斥的原因上来。我们最终希望得到泛化性能强的模型这就类似于希望同学对课程学习的很好、获得了对所学知识 “ 举一反三” 的能力训练样本就相当于给同学练习的习题测试样本就相当于考试的考题显然如果测试样本被拿去训练最终得到的将是一个过于“乐观”的结果。2、训练集和测试集划分方法2.1 引言若我们有一个包含m个样例的数据集D{ (x1, y1), (x2, y2), (x3, y3), ..., (xm, ym) }那怎么对数据集D进行处理产生训练集S和测试集T分别用在训练与测试过程。下面详细介绍三种常见的方法。2.2 留出法 (hold-out)该方法直接将数据集D划分为两个互斥的集合其中一个集合作为训练集S另一个作为测试集T即D STST 。在S上训练出模型后在T上评估模型的测试误差将测试误差作为泛化误差进行近似。【举例】①以二分类任务为例。假设D包含1000个样本将其划分为S包含700个样本T包含300个样本。在S上训练之后若模型在T上有90个样本分类错误。E (错误率) (90/300) ×100% 30%A (精度) 1 - 30% 70%【注意】在训练集和测试集划分时要尽可能保持数据分布一致。避免因为数据划分过程引入额外的偏差对最终结果产生影响。【补充说明1】在分类任务中要尽量保证样本类别比例相似。从采样角度看待数据集划分过程则保留类别比例的采样方式通常称为 “分层采样( stratified sample)”。【例子】对D进行分层采样得到含70% 样本的训练集 S包含30% 样本的测试集 TD中包含500 个正例、 500个反例分层采样得到的S应包含350个正例、350个反例而T 包含 150 个正例、150个反例。若 S 与 T 样本类别比例差别很大那么误差估计将由于训练集/测试集数据分布的差异而产生偏差【补充说明2】给定训练集和测试集的样本比例之后仍然存在多种划分方式对数据集D进行分割。【比如】将 D 中的样本排序然后将前350个正例放入训练集中或者将最后 350 个正例放入训练集中......。【影响】这些不同的划分将导致不同的训练集和测试集那么模型评估的结果也会有差别。因此单次使用留出法得到的估计结果往往不够稳定。【解决办法】采用若干次随机划分、重复进行实验评估取所有评估结果的平均值作为留出法的评估结果。如进行100次随机划分每次产生的训练/测试集用于实验评估100次后得到100个结果留出法则是取这100个结果的平均【留出法的局限】留出法是在划分训练集和测试集。这就导致一个窘境① 若令训练集 S 包含绝大多数样本那么训练出的模型可能更接近用D训练出的模型但是测试集 T 比较少评估结果可能不够稳定准确。② 若令测试集 T 多包含一些样本那么训练集 S 与 D 差别更大了被评估的模型与用 D 训练出的模型相比可能差别较大也就降低了评估结果的保真性。【总结】这个局限没有完美的解决方案所以常见的做法就是将大约2/3~4/5的样本用于训练剩下的样本用于测试。2.3 交叉验证法 (cross validation)交叉验证法先将数据集 D 划分为k 个大小相似的互斥子集即D D1D2D3...Dk , DiDj ( ij )每个子集Di都尽可能保持数据分布的一致性即每个子集Di从 D 中通过分层采样得到。接下来每次用k-1 个子集的并集作为训练集剩下的那个子集作为测试集这样便可以得到k 组训练集和测试集从而进行 k 次训练和测试最终返回的是这 k 个测试结果的均值。【注意】交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k 的取值也正是这个原因通常把交叉验证法称之为 “k折交叉验证 (k-flod cross validation)”。其常用的 k 值为 5、20等。为了方便大家理解可以看这个示意图。【补充说明1】与留出法相似将数据集 D 划分为 k 个子集同样存在多种划分方式。为了减少因为样本划分不同而引入的差异。k 折交叉验证通常要随机使用不同的划分重复 p 次最终的评估结果是这 p 次 k 折交叉验证结果的均值。【举例】假设数据集 D 中包含m个样本令 k m则得到一个交叉验证的特例留一法 (Leave-One-Out, 简称LOO)。留一法不受随机样本划分的影响。【留一法优势】因为 m 个样本只有唯一的方式划分为 m 个子集每个子集包含一个样本留一法使用训练集与初始数据集相比只少了一个样本这就使得在绝大多数情况下留一法中被实际评估的模型 与 期望评估所用的 D 训练出的模型很相似。因此留一法的评估结果往往被认为比较准确【留一法的缺陷】在数据集比较大时训练 m 个模型的计算开销非常大而且这还是在没有考虑算法调参的情况下。留一法的估计结果业未必永远比其他评估方法准确2.4 自助法自助法是一个直接以自助采样法为基础给定包含 m 个样本的数据集 D 对它进行采样产生数据集 D‘然后再将该样本放回初始数据集 D 中使得该样本在下次采样的时候仍然有可能被采样到这个过程重复执行 m 次之后我们就得到了包含 m 个样本的数据集 D这就是自助采样的结果。【注意】① 自助法D中有一部分样本会在D中多次出现而另一部分样本不出现。可以做一个简单的估计样本在 m 次采样中始终不被采到的概率是1/e0.368。也就是通过自助采样初始数据集 D 中大约有 36.8% 的样本未出现在现在采样数据集 D 中。可以将 D’ 用做训练集D\D‘ 做为测试集。这样实际评估的模型与期望评估的模型都使用了 m 个训练样本而且仍然有数据总量大约1/3没在训练集中出现刚好将这些样本用于测试。这样得到的测试结果也成为 “ 外包估计 (out-if-bag estimate) ”② 自助法在数据集较小、难以有效划分训练集和测试集的时候很有用③ 自助法能从初始的数据集产生很多不同的训练集这对集成学习等方法有很大的好处。【缺点】自助法产生的数据集改变初始数据集的分布会因此引入估计偏差。因此初始数据集足够的时候留出法和交叉验证法更常用。———————————————————————————————————————————希望能给读者带来一些帮助。博客文字较多知识点较为密集可以多停留一下耐心看完