- 目前已经学习了多种机器学习模型:
- 朴素贝叶斯
- 逻辑回归
- SVM
- KNN
- 决策树
- 随机森林等集成学习算法
- 也学习了特征选择等有效的提升模型精度的方法
- 今天在这部分内容中,着重讨论进一步的模型评估:
- 如何衡量一个模型是否足够好
- 什么时候应该停止模型的训练
- 如何进行超参数的调整
- 哪几种类型的原因导致模型的表现变差
- 找出导致模型性能差的原因并进行修正
Evaluation 第一阶段
- 在之前的文章:机器学习理论之(4):模型评估方法,如何评价分类器,如何切分数据集,错误类型,二分类的混淆矩阵,多分类混淆矩阵,baseline & benchmark 中,介绍了如何评估一个模型的表现:
交叉验证
混淆矩阵
精确度 & 错误率
Evaluation 第二阶段
- 除了上面说的那些评估的方法和指标,我们必须还关注模型的:
- 泛化性:用来衡量分类器从训练实例中归纳出预测目标函数的能力;如果一个模型的泛化性够好,就代表举一反三的能力强,对于没有见过的样本也能够给出较好的预测。甚至对于相似的数据集也能够给出较好的表现。
- 一致性:模型是否可以完美地预测所有训练样本的类别
机器学习中的偏差和方差种类
偏差种类
- 机器学习中,偏差 bias 可以代指很多事情:
- 模型偏差(model bias):模型能够系统地做出错误预测的倾向
- 评估偏差(evaluation bias): 评估策略倾向于高估或低估模型有效性的趋势
- 抽样偏差(sampling bias):如果训练或评估数据集不能代表总体,这就打破了归纳学习假设
方差种类
- 方差通常指的是:
- 模型方差(model variance)
- 评估方差(evaluation variance)
泛化性问题
- 泛化性不好主要体现在两个方面:
- 模型过拟合 overfitting
- 模型欠拟合 underfitting
过拟合 overfitting
- 模型太复杂,甚至连数据中的噪声也捕捉了
过拟合的原因
-
决策边界很容易被噪声影响
- 如果对于一个简单的模型,遇到图中的 noise point 可能没有那么强的能力去拟合,但是如果模型过于复杂,他就有强大的能力连噪声也拟合了,反而导致模型的泛化性不如简单模型
-
训练集中没有足够多的训练样本支持模型学到整个数据集的分布
- 如果训练集只有这么几个简单的样本,那么如果在测试集中如果出现了下面的情况:
- 即测试样本中的分布与训练样本中的差距很大,也就是说:模型没有通过训练集学到整个样本集的分布情况;这样也会导致过拟合和模型精度不高的情况
- 如果训练集只有这么几个简单的样本,那么如果在测试集中如果出现了下面的情况:
-
另外一种情况就是训练集合测试集在划分的时候没有按照相同的分布(也就是划分数据集的时候采样的随机性不足),在这种情况下,即使训练集样本很多也不能够学到整个数据集的分布,照样会造成过拟合的问题
欠拟合 underfitting
- 模型表达能力不够,无法捕获数据中的潜在的模式
适当的拟合模型捕捉数据中的基本模式
训练曲线观察泛化性
- 通过模型的训练曲线,可以观察模型是否发生了过拟合或者欠拟合的现象。
- 曲线的纵轴(y-axis)可以反映模型的精度、错误率或者其他的评估指标
- 曲线的横轴(x-axis)可以反映例如:训练集大小,模型复杂度,迭代次数
- 此图展示了一个贝叶斯模型随着训练样本的增加,其训练集精度和验证集精度的变化情况
- 最开始的 200 个样本之前,由于训练集很小,所以在训练集上得到的训练精度很高,而测试集的样本很多,所以验证集的精度比较低,但是随着训练样本的不断增多、测试样本的不断减少,模型训练的越来越充分,因此在测试集上的精度表现越来越好。
- 最后达到模型的收敛状态,训练就可以停止了
- 在这个例子中存在一个需要讨论的问题:
训练集和测试集的比例按照多少划分才比较合适呢?如果训练的数据太多,就会导致测试集的数据太少从而不能够反映出模型真实的泛化能力;而如果测试集太大导致训练集太小又会导致模型的训练不充分。
- 为了选择更好的比例对训练集和测试集进行切分,我们可以通过下面的例子来探讨:
Example 1
在下面的例子中,如果让你选择训练集和测试集的切分比例,到底是选 60% 还是 80% 呢:
- 在这个例子中,其实应该选择 60% 的样本训练,因为 60% 样本用来训练就足以表现的很好了,这种情况下保留更多的测试样本会更加充分地衡量模型的泛化能力
- 讨论了关于训练集尺寸带来的泛化性问题,我们下面要通过一个例子来讨论模型的复杂度可能带来的泛化性问题:
Example 2
-
在线性回归中,我们会使用关于 的多项式来增加线性回归的灵活性,使得模型的拟合能力更加强大,这是因为多项式的引入使得模型的复杂度更高,可以找出更加复杂的内部关系。
- 但是从这个图上来看,模型的错误率在多项式的最高次项 > 2 之后不降反增,说明了模型的表现其实是在下降。
- 这个例子告诉我们模型并不是越复杂越好。
-
模型复杂度的问题几乎在所有的模型中都会有超参数进行调整,例如:
- 在深度学习中,神经网络的层数
- 决策树中,决策树的最大深度
模型偏差和方差(bias and variance)
公式定义
偏差 Bias
- 其中 是期望;
- 模型对于某个样本 真实值 和预测值 之间的偏差是
- 数据集中所有 个样本的偏差总和的均值就是 期望偏差
- 也可以写成下面这种形式:
回归任务的 Bias
- 在回归任务中,均方误差可以被用来衡量模型的偏差:
- 一个模型如果 预测比真实值系统地高,或者预测比真实值系统地低 即是存在偏差:
- 如果一个模型:
- 预测值总是对的
- 或者一些预测值特别高而另外一些预测值特别低
- 上述两种情况都是无偏差的 unbiased
分类任务 Bias
- 在分类任务的场景中:
方差 Variance
-
也是期望;只不过它是对方差的期望
-
每个样本的预测值 ;所有样本在这个模型下的预测值的期望(均值) 是
-
由此我们可以得到整个模型的 期望方差 是:
- 一共有 个数据集(标签的类别数一样),在不同数据集上训练的模型表示为
- 不管预测的对不对,只要在具有相同分布的数据集上,训练出的模型的预测结果是一致的,例如对于 A 类数据,哪怕全判错成 C 类,哪怕都错了,但只要预测的方向一致,模型的方差就低。
方差偏差总结
- 根据维基百科上的定义:
- 偏差指的是模型的假设过于简单和真实情况之间的差距,比如一个非线性的数据集,我们使用一个线性的假设,那么这样的假设必然会导致偏差,所以高偏差的数据肯定是欠拟合的。
- 方差刻画了数据扰动对模型产生的影响,比如相同类型的两个数据集 ,他们都包含 3 个类别的数据 ,模型 分别在两个数据集上进行训练,然后用相同的测试集测试,发现模型 对于样本的判断情况差距很大。例如同样对一个标签为的样本,在 上训练的 判断成 而在 上训练的 却判断成 ,但是在 理想情况 下,只要是数据样本类别相同的数据集,无论包含的图片数量多少,使用他们训练出来的模型在同一个测试集上表现应该是一样的。但现在在不同数据集上训练的结果竟然有较大的差距。
- 但是方差大的模型并不代表就一定过拟合了,因为如果方差和偏差同时高,那就代表这个模型更多地拟合了数据中的噪声。只有方差大偏差小的模型才是过拟合的。
模型的泛化性(Generalization)
-
一个泛化性好的模型应该对于没见过的样本能够给出很好的预测结果
-
如何评估一个模型的泛化性能?
-
给定一个数据集 ,假设这个数据集是通过一个函数 混入一些随机噪声 ,这个随机噪声是一个不可测的误差,可能来自于标注错误等,我们用下列式子表示这个数据集的情况:
-
在这种情况下我们对数据集 D 中的数据进行多次随机采样,得到多个随机采样的子数据集,然后在这些子数据集上训练不同的模型,将他们在验证集上进行验证得到预测结果 ,真实的情况用红线和 表示,多个子训练集预测的情况及对应模型用黄线和 来表示:
-
对于一个模型的误差问题,在之前的部分讲到了 bias 和 variance,还有一个很重要的部分就是随机误差:
-
模型的 泛化误差 有 bias,variance 和 irreducible 误差三部分构成。
- variance 衡量了在不同数据集上训练的模型对于同一个测试集的表现差异
- bias 反映了模型的假设在多大程度上和数据的真实情况是相符的,即有没有在构建模型的时候对数据进行较为准确的假设。
- noise 是一种不可避免的由数据分布和特征等很多方面的综合表示而造成的误差
导致泛化性错误的原因
-
高偏差和高方差都可以导致模型的泛化性很差
- 0-R 模型的方差为 0,但是偏差很高
- 一个很复杂的模型可能偏差很低但是方差很高
-
拥有低偏差和低方差的模型被认为是泛化性能好的模型。
诊断高偏差/方差问题
- 从根本上说,处理偏差和方差其实就是处理过拟合和欠拟合。偏差减少,方差增加与模型的复杂性有关。
- 下面展示的是方差和偏差随着模型复杂度的变化:
- 下图展示的是训练样本数量与 accuracy 的变化关系:这三个图分别表示了欠拟合(高偏差),过拟合(高方差低偏差),以及一个泛化性较好的模型。
高 bias 诊断
- 增加训练集的规模对于 bias 小的模型并不会有什么帮助,下图红色点是训练集的样本,蓝色线是拟合出的 高 bias 模型
- 高 bias 的学习曲线特点是训练误差和测试误差都大
高 Variance 诊断
- 使用更多的样本进行训练可以缓解高方差的问题,因为训练样本越大,分布就越接近理想分布,方差就能够有效减小
- 高方差的学习曲线特征是 train error 和 test error 之间存在差距。
针对bias 和 variance 的补救措施
高 bias 补救措施
- 采用更复杂的模型(例如非线性模型)
- 增加训练模型所使用的特征数量
- 使用 boosting 集成方法不断地对模型的残差进行迭代学习
Boosting 集成
高 variance 补救措施
- 增加更多的训练数据
- 减少构建模型时使用的特征数量
- 减小模型训练的复杂度
- 采用正则化方法(regularization)
- bagging 的方式进行模型集成
Regularization
- 例如在 SVM 模型中,调整正则化参数 C 来控制对落在决策边界中的样本的严苛程度。
Bagging 集成
- 从原始数据集中构建新数据集: 随机有放回地选取训练数据,构造多个新数据集
- 结合多个不同的模型常用投票法来集成,可以减少模型的方差。
评估偏差和方差(Evaluation bias / Variance)
evaluation 偏差和方差的定义
-
评估的质量与模型无关,只与评估的方法有关
-
如果有无限大的测试集,那么在这个测试集上表现出的测试精度才能完全反映当前模型的训练情况
-
评估结果可能存在的问题:
- 对于某些特定的 evaluation set,模型有很好的精度,但是对于其他不可见的 evaluation set,模型的精度很差
- 评估函数(evaluation function)也有可能对验证数据(valuation data)过拟合
-
我们想要知道一个分类器的“真实”错误率,但是我们只对错误率进行了估计,这取决于一些特定的评估样本集(因为没办法获得无穷大的测试样本集)
-
评估偏差(evaluation bias):我们对于模型的评估是偏颇的; 我们对模型有效性的估计系统地过高/过低
-
评估方差(evaluation variance):当我们改变 测试集 中的样本时(采用不同的测试样本集),我们对模型有效性的估计会改变很多。
如何解决 evaluation 偏差和方差
- 合理的划分训练测试集:训练集越大测试集越小——训练方差会更小,测试方差会更大
- 重复随机采样(repeated random subsampling)和交叉验证(cross-evaluation)可以得到更小的模型方差和评估方差。
- 分层采样(stratification) / 垂直采样(vertical sampling):有效降低模型和评估的偏差
- 留一法交叉验证(leave-one-out Cross validation):消除了采样偏差(sampling bias),通常也有最低的偏差/方差。
文章出处登录后可见!