《机器学习》 第二章 模型的评估与选择
第二章 模型的评估与选择
2.1 经验误差和过拟合
2.1.1 经验误差和泛化误差
错误率
分类错误的样本数占样本总数的比例
精度(accuracy)
精度=1-错误率
误差
学习器的实际预测输出和样本的真是输出之间的差异
训练误差/经验误差
学习器在训练集上的误差
泛化误差
在新样本上的误差
实际上,我们能做的就是使训练误差最小化
2.1.2 过拟合和欠拟合
但是,我们想要的是,在新样本上表现好
- 过拟合
由于在训练集上学习器已经把样本学得“太好了”,很可能会把训练样本自身的一些特点当做所有潜在样本都具有的一般性质,
这样就会导致泛化性能下降
欠拟合
对训练样本的一般性质尚未学好
欠拟合通常是由于学习能力过于低下导致的,容易避免。
克服方法:如换更复杂的模型,增加训练轮数等
过拟合常见的是学习能力过于强大,把不太一般的特性都学习到了。
克服较难:关键障碍。无法彻底避免,只能缓解
2.2 评估方法
通常来说会有多种算法可以选择,理想的方案是根据泛化误差进行评估,找到泛化误差最小的那个
但是我们无法直接获得泛化误差,而训练误差又可能存在过拟合,那么该如何选择?
通常,我们可以通过实验测试来对泛化误差进行评估。
具体来说就是设置一个“测试集”,来测试学习器对新样本的判别能力,以“测试误差”作为泛化误差的近似。
通常我们假设测试样本也是从样本的真是分布中采集得到;同时还要尽可能与训练集互斥。
如果训练样本出现在测试集中,就有可能得到过于“乐观”的结果。
现在我们有一个训练集,既要训练又要测试,如何做呢?
答案是对D进行适当的处理,从中产生训练集S和测试集T。下面介绍几种常见的做法:
2.2.1 留出法
直接将数据集划分为两个互斥的集合。
划分时要尽可能保持数据分布的一致性,避免因为划分引入额外的偏差而对最终结果造成影响。所以一般采用“分层抽样”的方式保留类别比例。
尽管给定两个集合相同的样本比例,仍然存在多种划分方式对原始数据集进行分割。
单次使用留出法结果往往不够稳定可靠,一般采用若干次随机划分、重复试验后取平均。窘境:
1、如果训练集S包含绝大多数样本,训练出来的模型可能接近于用D训练的,但是测试集T比较小,评估结果可能不够可靠
2、如果T的样本多一些,训练集S和D的差别更大了,降低了评估结果的保真性。
做法:(没有完美解决方案)
2/3~4/5作为训练集
2.2.2 交叉验证法
先将数据集划分为k个大小相似的互斥子集(尽可能保持数据分布的一致性,即从数据集D中分层采样得到)。每次用k-1个子集的并集作为训练集,余下的子集作为测试集,从而进行k次训练和测试,最终返回k个测试结果的均值。
这被称作“k折交叉验证”,k最常用的取值是10。
交叉验证法也可能由于不同的划分而有所差别,所以也要划分p次,最终评估结果是p次k折交叉验证的均值。如“10次10折交叉验证”
2.2.3 留一法(LOO)
m个样本划分为m个子集——每个子集包含一个样本。
是交叉验证法的一个特例
训练集与D极为相似,所以评估结果比较准确。
但在数据集较大时,计算开销很大(多少个样本就要计算多少个模型)。
2.2.4 自助法
以“自助采样法”为基础,大致做法,从D中采用一个样本,采样完放回D,采样次数和原始数据集规模一致。这样就有可能有的样本被采样多次,有的没有被采样到,没有被采样到的就可以作为测试集。
优势:
自助法在训练集较小时、难以有效划分训练集、测试集时很有用;
劣势:
改变了初始数据集的分布,可能引入“偏差”
所以,当数据集足够时,通常采用留出法和交叉验证法。
2.2.5 调参与最终模型
大多数模型需要设定参数,不同的参数性能往往有巨大的差别
调参和算法选择没有本质差别,每种参数配置训练一个模型,挑选最好的模型作为结果。
在调参的过程中,每个参数通常是个实数或者范围很大,因此我们需要设定步长,在性能和计算开销中折中。
验证集:
模型评估与选择中用于评估测试的数据集。(同一算法不同模型对比,也就是训练过程中)
测试集:
对比不同算法的泛化性能。(不同算法对比)
2.3 性能度量
对学习器的泛化性能进行评估不仅需要有效的评估方法,还需要衡量泛化能力的评估标准,就是性能度量
回归任务最常见的性能度量就是“均方误差”(mean squared error,MSE)
下面介绍分类任务中常见的性能度量。
2.3.1 错误率和精度
本章开头提出的错误率和精度,是分类任务中最常用的两种性能度量,既适用于二分类,也适用于多分类。
错误率:分类错误的样本总数占样本总数的百分比
精度:是分类正确的样本数占的百分比
2.3.2 查准率、查全率与F1
光有错误率和精度不能满足所有要求。比如拉来一车西瓜,我们通常想要知道的是:经过判别器判别之后,“挑出来的瓜中真正有多少好瓜”,或者“所有的好瓜中有多少被挑选出来了”
对于二分类问题,可以根据真实类别和学习器预测的类别进行组合划分:真正例(true positive)、假正例(false positive)、真反例(true negative)、假反例(false negative)。
TP+FP+TN+FN=ALL。混淆矩阵如下:
预测结果 | 预测结果 | |
---|---|---|
真实情况 | 正例 | 反例 |
正例 | TP(真正例) | FN(假反例) |
反例 | FP(假正例) | TN(真反例) |
1、查准率(precision)
就是预测为正例的那一列数据中真正的正例的百分比
2、查全率(recall)
真实为正例的那一行数据中预测为正例的百分比
查准率和查全率通常是一对矛盾的度量。一个高另一个往往比较低。
举例:
如果希望好瓜尽可能挑选出来,那么可以把所有西瓜都选上,但是查准率会比较低;如果希望好瓜比例尽可能高,那么只需要选择把握最高的瓜,那样查全率又会比较低。
3、P-R图
学习器把预测结果对样例进行排序,概率高的在前面,逐个把样例看作是正例,每次可以计算出当前的查全率、查准率。
以查准率为纵轴、查全率为横轴作图,就叫做 “P-R图”
P-R图能够整体上反映查全率、查准率。
性能比较:
1)完全包住:面积大的性能优。
2)有交叉时:使用平衡点(BEP)度量,利用平衡点对应的查全率进行比较。
4、F1
F1度量:根据对查准率和查全率的而重视程度不同而用的度量方法。
当有多个二分类矩阵,希望估计全局最优或者是执行多分类任务时每两两类别对应一个混淆矩阵。
5、宏平均和微平均
宏平均的做法是在各个混淆矩阵上分别计算查准率和查全率、F1,再计算平均值
微平均的做法是先对各个混淆矩阵的对应元素进行平均,再计算P、R、F1
1)宏查准率(macro-P):${macro-P} = \frac{1}{n} \sum_{i=1}^{n}{P_i}$
2)宏查准率(macro-R):${macro-R} = \frac{1}{n} \sum_{i=1}^{n}{R_i}$
3)宏查准率(macro-F1):${macro-F1} = \frac{1}{n} \sum_{i=1}^{n}{F1_i}$
4)微查准率(micro-P):${micro-P} = \frac{\overline {TP}}{\overline {TP} + \overline {FP}}$
5)微查准率(micro-P):${micro-R} = \frac{\overline {TP}}{\overline {TP} + \overline {FN}}$
6)微查准率(micro-P):${micro-P} = \frac{2 \times micro-R \times micro-P}{micro-P + micro-R}$
2.3.3 ROC和AUC
1、ROC曲线
与P-R曲线不同,ROC曲线纵轴是“真正例率”(TPR),横轴是“假正例率”(FPR)
对于表格,这两个指标是按行看,
TPR是第一行中(也就是所有真正正例样本),预测为正例的样本数的比例
FPR是第二行在(也就是所有真正反例样本),预测为正例样本数的比例
就是正反例样本中预测为正例的比例。
ROC曲线的绘制:
根据学习器的预测结果进行排序,逐个将样本作为正例,每次计算出两个重要的值作为横纵坐标。
如一开始把分类阈值设置为最大,即把所有样例分为反例,那么真、假正例率都是0;然后逐步调小阈值,也就是每次分一个正例样本。
现实中的例子通常是有限的,曲线不是很平滑。
2、AUC
如果ROC曲线包住另一个,可以说性能优秀。
如果有交叉,那么需要计算AUC(曲线下面积)判断。
2.3.4 代价敏感错误率与代价曲线
1、代价敏感错误率
不同的错误有不同的代价,计算求和即可
2、代价曲线
由ROC曲线转换而来,$FNR=1-TPR$,由(FPR,TPR)计算FNR,然后绘制(0,FPR)到(1,FNR)的线段,取得所有线段的下界。
2.4 比较检验(略)
2.5 偏差和方差
泛化误差
可分解为偏差、方差和噪声之和。
偏差:
期望输出与真实标签的偏离程度。刻画了学习算法本身的拟合能力。
方差:
同样大小的训练集的变动造成学习性能的变化。刻画了数据扰动所造成的影响。
噪声:
当前任务上任何学习算法所能达到的期望泛化误差的下界。刻画的学习本身的难度。
偏差-方差窘境
一般来说,偏差和方差是有冲突的
1)训练不足:拟合能力不够,训练数据的扰动不足以使分类器性能发生显著变化,偏差占主导地位
2)训练加深:拟合能力增强,训练数据发生扰动逐渐能够被检测到,方差主导
3)训练充足:拟合能力已经非常强,训练数据发生扰动会导致分类器发生显著变化;若数据的自身特性被学习到,那么会发生过拟合。