机器学习(暴啃西瓜书-2.模型评估与选择)

写在前面

这里我们考虑模型评估的目的是挑选出泛化能力最好的模型,实际应用中可能有各种各样的评估标准和场景。笔者曾处理过半导体、半金属材料输运数据,其模型的评估标准更多偏好于得出一个优美自洽的结果,对于输运而言,尤其是电输运,其关联因素过多,很难找到一个干净系统提供研究,而研究的目标往往单纯单一,能通过多几个实验对比,抓住主要矛盾才是最重要的。泛化能力,Loss的高低次之。

2.1 经验误差与过拟合:

数据分为:训练集S(训练模型获得学习器)、验证集(评估挑选学习器,算法超参数等)、测试集T(评估学习器,实际遇到的数据)。

  • 训练误差 (经验误差):学习器在训练集上的误差。
  • 泛化误差:学习器在新样本上的误差。
  • 测试误差:学习器在验证集(书中为方便叙述这里也叫做’测试集‘)上的误差,用于近似泛化误差

我们希望通过训练集上的训练,抽象出一个描述数据一般性规律的学习器。一般做法是努力降低训练误差,以期获得低的泛化误差。过拟合是指学习器学习过头了,把只属于训练集的偶然性规律也学到了,导致泛化误差较大(泛化误差大也存在测试集中偶然性过多的可能性)。

2.2 评估方法:

要点:即划分训练集与验证集的方法,测试集与验证集应当尽量互斥。以下 D 为数据集,S 训练集,T 验证集。

2.2.1 留出法:D 划分为互斥的两部分 S

  • ST 应当保持数据分布一致性, e.g.:保留类别比例的分层采样法 。
  • 单次结果不可靠,一般采用多次留出法重复实验对误差取平均。
  • ST 一般比例为 2:1 ~ 4:1。

2.2.2 交叉验证法:D 划分为 k 个互斥子集,k 次训练每次一个子集当 T,其余 S。

  • 通常取 10, 也称 10-折交叉验证。
  • 多次随机划分实验,避免划分带来的误差,e.g.: 10次10-折交叉验证。
  • k = |D|, 留一法 (LOO)。(不会因样本划分导致误差,但计算开销大,不适用于大样本)。

2.2.3 自助法:有放回的随机采样 |D| 次产生 D' 作为 , D\D' 作为

在 留出法 和 交叉验证法 中,|S| < |D|,难以避免样本规模不同导致的估计偏差。自助法保证了样本规模的一致性,多次重复实验可靠性更高。单个样本不出现在 D' 中的概率极限为1/e~0.368。

  • 在数据集较小、难以有效划分训练/测试集时很有用。也常用于 集成学习方法。
  • 改变了初始数据集的分布,会引入估计偏差,在数据量大时,前两种方法更好。

2.2.4 调参与最终模型:利用验证集来调参(算法超参数,如 k-NN 中的 k)

超参数的设定一般等间隔取点,利用自定义的评估标准去选取。

至此,模型的训练已经完成,下面就是在实际运行中如何度量学习器的泛化能力(不参与训练过程)。

2.3 性能度量:

回归任务:均方误差(离散):

E(f;D)=\frac{1}{|D|}\sum_{i=1}^{|D|}(f(x_i)-y_i)^2

对于数据分布 D 和概率密度函数 p(x) :

E(f;D)=\int_{D}(f(x)-y)^2p(x)dx

分类任务:

  • 错误率:分类错误的样本数 / 总样本数
  • 精度:分类正确的样本数 / 总样本数
  • 混淆矩阵:真正例 (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β 度量:F_\beta=\frac{(1+\beta^2)\times P\times R }{(\beta^2\times P)+R},  β>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-表示正、反例的集合,怎排序误差可定义:

l_{rank}=\frac{1}{|D^+||D^-|}\sum_{x^+\in D^+}\sum_{x^-\in D^-}\left\[ I\left(f(x^+)<f(x^-)\right)+\frac{1}{2}I\left(f(x^+)=f(x^-)\right)\right\]

理解:若正例预测值小于负例,记 1 个罚分,若等于则记0.5个罚分。有 AUC = 1-l_{rank}

  • 代价敏感错误率:之前的讨论都基于均等代价,实际情况中我们可能希望 真正例 尽可能不要 预测错误,可以给予更多的惩罚。此为代价敏感错误率。实际中我们可以基于分布定义代价敏感错误率。
  • 代价曲线:在非均等代价下,ROC曲线不能直接反映学习器的期望总体代价,考虑代价曲线,横轴——正例概率代价 P(+)cost,纵轴——归一化代价cost{norm}。

P(+)cost = \frac{p\times cost_{01}}{p\times cost_{01}+(1-p)\times cost_{10}}

cost_{norm}=\frac{FNR\times p \times cost_{01}+FPR\times (1-p)\times cost_{10}}{p\times cost_{01} + (1-p) \times cost_{10}}

其中,cost 01实际为 0 预测为 1 的代价。FNR = 1-TPR。代价曲线的绘制,对于ROC中的每一个点,对应找到并连接两点(0, FPR)、(1, FNR),所有曲线所围成的区域即为代价曲线。

2.4 比较检验:

测试集上得到的性能评估,并不能代表泛化能力的评估。

2.4.1 假设检验(单个学习器)

泛化错误率为 ε 的学习器,被测得测试错误率为 ε' 的概率为:

P(\epsilon';\epsilon)=C_m^{m'}\epsilon^{m'}(1-\epsilon)^{m-m'},\ m'=\epsilon'm

在 ε'=ε 时最大,符合二项分布。利用统计假设检验的方法对学习器进行泛化错误率置信度计算,找到可信的泛化错误率。

对于多次重复留出法 或 交叉验证法,能得到多个测试错误率,可采用 t-检验

2.4.2 交叉验证 t 检验

假设:两学习器泛化能力一致。则他们 k折交叉验证 的误差率都一致。

检验:用他们的 k对测试错误率的差进行 t-验证。计算方差 σ2 和均值 μ,将\tau_t=\left| \frac{\sqrt{k} \mu }{\sigma}\right|与临界值进行比较。若假设不能拒绝,怎两者性能在相应置信度下一致,否者选择平均误差率小的学习器。

5x2交叉检验

2.4.3 McNemar检验 二分类问题做两学习器列联表,定义变量并对比假设检验。

2.4.3 Friedman检验 与 Nemenyi后续检验

Friedman检验:多学习器多数据集上的检验方法,依据各学习器在各数据集上的测试性能赋予序值,计算各算法平均序值ri,并计算ri的均值和方差,进行假设检验。若‘个算法性能相同’这一假设被拒绝,则需要”后续检验 (post-hoc test)“来进一步区分。常用后续检验Nemenyi检验。

Nemenyi后续检验:

  • 计算临界阈值CD(与置信度相关)
  • 若算法平均序值差 大于 CD,则拒绝”两算法相同“的假设。

2.5 偏差与方差

尝试解释泛化性能好坏——”偏差-方差分解“

这里的偏差和方差指:同一个学习算法,在不同数据集上训练得的学习器对某一样本 x 预测值 f(x;D) 的偏差和方差。

  • 期望预测:\bar{f}(x) = E_D[f(x;D)]
  • 方差(数据骚扰的对算法的影响)var(x)=E_D\left[\left(f(x;D)-\bar{f}(x)\right)^2\right]
  • 噪声(任何算法在当前任务下期望泛化误差的下界)\varepsilon ^2=E_D\left[(y_D-y)^2 \right ],yD 为数据集标记,y 为真实标记。
  • 偏差(期望与真实的差,算法本身拟合能力):bias^2(x)=(\bar{f}(x)-y)^2
  • 期望泛化误差分解:E(f;D)=E_D\left[\left(f(x;D)-y_D \right )^2 \right ]=bias^2(x)+var(x)+\varepsilon^2 

偏差小,方差大,则一般出现了过拟合。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值