写在前面
这里我们考虑模型评估的目的是挑选出泛化能力最好的模型,实际应用中可能有各种各样的评估标准和场景。笔者曾处理过半导体、半金属材料输运数据,其模型的评估标准更多偏好于得出一个优美自洽的结果,对于输运而言,尤其是电输运,其关联因素过多,很难找到一个干净系统提供研究,而研究的目标往往单纯单一,能通过多几个实验对比,抓住主要矛盾才是最重要的。泛化能力,Loss的高低次之。
2.1 经验误差与过拟合:
数据分为:训练集S(训练模型获得学习器)、验证集(评估挑选学习器,算法超参数等)、测试集T(评估学习器,实际遇到的数据)。
- 训练误差 (经验误差):学习器在训练集上的误差。
- 泛化误差:学习器在新样本上的误差。
- 测试误差:学习器在验证集(书中为方便叙述这里也叫做’测试集‘)上的误差,用于近似泛化误差。
我们希望通过训练集上的训练,抽象出一个描述数据一般性规律的学习器。一般做法是努力降低训练误差,以期获得低的泛化误差。过拟合是指学习器学习过头了,把只属于训练集的偶然性规律也学到了,导致泛化误差较大(泛化误差大也存在测试集中偶然性过多的可能性)。
2.2 评估方法:
要点:即划分训练集与验证集的方法,测试集与验证集应当尽量互斥。以下 D 为数据集,S 训练集,T 验证集。
2.2.1 留出法:将 D 划分为互斥的两部分 S 和 T 。
- S 和 T 应当保持数据分布一致性, e.g.:保留类别比例的分层采样法 。
- 单次结果不可靠,一般采用多次留出法重复实验对误差取平均。
- S 和 T 一般比例为 2:1 ~ 4:1。
2.2.2 交叉验证法:将 D 划分为 k 个互斥子集,k 次训练每次一个子集当 T,其余 S。
- k 通常取 10, 也称 10-折交叉验证。
- 多次随机划分实验,避免划分带来的误差,e.g.: 10次10-折交叉验证。
- 当 k = |D|, 留一法 (LOO)。(不会因样本划分导致误差,但计算开销大,不适用于大样本)。
2.2.3 自助法:有放回的随机采样 |D| 次产生 D' 作为 S , D\D' 作为 T 。
在 留出法 和 交叉验证法 中,|S| < |D|,难以避免样本规模不同导致的估计偏差。自助法保证了样本规模的一致性,多次重复实验可靠性更高。单个样本不出现在 D' 中的概率极限为1/e~0.368。
- 在数据集较小、难以有效划分训练/测试集时很有用。也常用于 集成学习方法。
- 改变了初始数据集的分布,会引入估计偏差,在数据量大时,前两种方法更好。
2.2.4 调参与最终模型:利用验证集来调参(算法超参数,如 k-NN 中的 k)
超参数的设定一般等间隔取点,利用自定义的评估标准去选取。
至此,模型的训练已经完成,下面就是在实际运行中如何度量学习器的泛化能力(不参与训练过程)。
2.3 性能度量:
回归任务:均方误差(离散):
对于数据分布 D 和概率密度函数 p(x) :
分类任务:
- 错误率:分类错误的样本数 / 总样本数
- 精度:分类正确的样本数 / 总样本数
- 混淆矩阵:真正例 (TP)、假正例 (FP)、真反例 (TN)、假反例 (FN) 个数为矩阵元的2x2矩阵。
- 查准率:P = TP / (TP+FP)
- 查全率:R = TP/ (TP+FN),一般而言,若要 R 高,则降低判断正例的阈值,这会导致 P 低。
- P-R曲线:将样本按学习器计算的正例概率从高到底排序,正例阈值从这些概率中逐个挑选,则 R 从1~0,P 从 0~1,由此可做 P-R 曲线。可通过比对 P-R曲线 判断学习器的优劣。
- 学习器的 F1 度量:F1 = 2×P×R / (P+R),F1高的学习器性能好,平衡了 P 和 R 的考量。
- 学习器的 Fβ 度量:, β>1 时 R 重要, β<1 时 P 重要。
- 多个混淆矩阵:宏P,宏R,宏F1,微P,微R,微F1。
- ROC曲线与AUC:与 P-R曲线类似,在不同的正例阈值情况下,做出以 真正例率(TPR) 为纵轴,以 假正例率(FPR)为横轴作图即为 ROC曲线,其中 TPR = TP / (TP+FN),FPR = FP / (TN+FP)。学习器基于ROC的比较,通常比较它们ROC曲线的面积,即AUC,面积大的泛化能力强。
- AUC排序误差:AUC考察的是样本预测的排序质量,他与排序误差精密联系:分别用D+、D-表示正、反例的集合,怎排序误差可定义:
理解:若正例预测值小于负例,记 1 个罚分,若等于则记0.5个罚分。有 。
- 代价敏感错误率:之前的讨论都基于均等代价,实际情况中我们可能希望 真正例 尽可能不要 预测错误,可以给予更多的惩罚。此为代价敏感错误率。实际中我们可以基于分布定义代价敏感错误率。
- 代价曲线:在非均等代价下,ROC曲线不能直接反映学习器的期望总体代价,考虑代价曲线,横轴——正例概率代价 P(+)cost,纵轴——归一化代价cost{norm}。
其中,cost 01实际为 0 预测为 1 的代价。FNR = 1-TPR。代价曲线的绘制,对于ROC中的每一个点,对应找到并连接两点(0, FPR)、(1, FNR),所有曲线所围成的区域即为代价曲线。
2.4 比较检验:
测试集上得到的性能评估,并不能代表泛化能力的评估。
2.4.1 假设检验(单个学习器)
泛化错误率为 ε 的学习器,被测得测试错误率为 ε' 的概率为:
P 在 ε'=ε 时最大,符合二项分布。利用统计假设检验的方法对学习器进行泛化错误率置信度计算,找到可信的泛化错误率。
对于多次重复留出法 或 交叉验证法,能得到多个测试错误率,可采用 t-检验。
2.4.2 交叉验证 t 检验
假设:两学习器泛化能力一致。则他们 k折交叉验证 的误差率都一致。
检验:用他们的 k对测试错误率的差进行 t-验证。计算方差 σ2 和均值 μ,将与临界值进行比较。若假设不能拒绝,怎两者性能在相应置信度下一致,否者选择平均误差率小的学习器。
5x2交叉检验
2.4.3 McNemar检验 二分类问题做两学习器列联表,定义变量并对比假设检验。
2.4.3 Friedman检验 与 Nemenyi后续检验
Friedman检验:多学习器多数据集上的检验方法,依据各学习器在各数据集上的测试性能赋予序值,计算各算法平均序值ri,并计算ri的均值和方差,进行假设检验。若‘个算法性能相同’这一假设被拒绝,则需要”后续检验 (post-hoc test)“来进一步区分。常用后续检验Nemenyi检验。
Nemenyi后续检验:
- 计算临界阈值CD(与置信度相关)
- 若算法平均序值差 大于 CD,则拒绝”两算法相同“的假设。
2.5 偏差与方差
尝试解释泛化性能好坏——”偏差-方差分解“
这里的偏差和方差指:同一个学习算法,在不同数据集上训练得的学习器对某一样本 预测值 的偏差和方差。
- 期望预测:
- 方差(数据骚扰的对算法的影响):
- 噪声(任何算法在当前任务下期望泛化误差的下界):,yD 为数据集标记,y 为真实标记。
- 偏差(期望与真实的差,算法本身拟合能力):
- 期望泛化误差分解:
偏差小,方差大,则一般出现了过拟合。