机器学习-第二章 模型评估与选择

2.1 经验误差与过拟合

  1. 错误率E:分类错误的样本数 / 样本总数 , 即a个样本分类错误,一共有m个样本,则错误率 E = a/m。
  2. 精度acc:1 - E,即 1 - 错误率。
  3. 误差预测输出实际输出 之间的差异。
    1)训练误差:在训练数据集上的误差
    2)泛化误差:在新样本数据上的误差

在实际上,我们需要的是在新样本上,泛化误差小的学习器。
为了达到此目的,要在从训练样本中尽可能学出适用于所有新样本的"普遍规律",这样才能在遇到新样本时做出正确的判别。
但对训练样本有以下两个问题:

  1. 欠拟合:对样本的一般性质没有学好。
    如对树叶的性质进行学习,树叶是绿的,见到绿的就认为是树叶,说明对树叶的性质还学不完整。

  2. 过拟合:对样本的特殊性质学得太好。
    如对树叶的性质进行学习,一些树叶边缘有锯齿,若有新树叶出现,该树叶边缘无锯齿,则认为不是树叶,但本身还是树叶,说明对树叶的性质学习得太过。

    通俗来讲,可以比喻为:
    欠拟合就是学渣,学的东西不够,需要多学;过拟合就是学神,学得东西过多,平常的东西会想得过于复杂

    欠拟合容易克服,而过拟合造成的结果不可逆

    过拟合与欠拟合.png

  1. 模型选择问题
    在现实中,有很多学习算法,解决相应的问题需要相应的算法建立模型。
    即 给定一堆数据,选择一个模型,该模型的参数要使得泛化误差最小。

    如线性拟合: h(x) = θ1 + θ2 * x; 泛化误差:h(x) - y;代价函数J(θ1,θ2);参数θ1、θ2要使得minJ(θ1,θ2)

2.2 评估方法

评估原则:通过对泛化误差进行评估从而做出选择。
因此,需要保留一个测试集,来测试学习器的判别能力,且测试集尽可能与训练集不同。
假设我们有一个数据集D,包含n个样本,分成训练集S和测试集T。

  1. 方法1:留出法
    直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T

    在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。

    注意1:S和T 要保持数据分布一致性,因此采用分层抽样
    如100例,S = 70,T = 30,S中有35例是正例,35例是反例;T中有15例是正例,有15例是反例。

    注意2:保持数据排序一致性,如S中前35例是正例或后35例是反例。

    注意3:单次使用留出法的结果是不可靠的,需要多次重复留出法。
    一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果.

    注意4:将大约 2/3 到 4/5 的样本用于训练,剩余样本用于测试.

  2. 方法2:交叉验证法
    将数据集D划分为n个大小相同的互斥子集,每个子集尽可能通过分层抽样保持数据一致性。
    每次用n-1个子集作为训练集,剩余作为测试集,可以进行n次训练和测试,最终返回n个结果的均值。
    n一般取10。由于有多种划分方式,因此要随机进行不同的划分,重复p次n折交叉验证法。

    交叉验证法.png

    特殊的交叉验证法:留一法
    就是一个样本就是一个子集,即n = m(n个子集就是m个样本)
    优点:留一法的评估结果往往被认为比较准确。
    缺点:当数据集较大时,训练m个模型的计算开销可能是难以忍受的。

  3. 方法3:自助法
    在数据集D中,选取一个样本,将该样本复制,然后将复制的样本放入到D'中,
    再将原始数据放回D,使得样本可能重复抽到,执行m次,得到有m个样本的D'。
    通过自助采样,初始数据集D中约有36.8%的样本未出现在采样数据集 D'中。
    将D'作为训练集,(D减D')作为测试集。

    自助法在数据集小难以有效划分训练/测试集时比较有效
    自助法能从初始数据集中产生不同的多个训练集,这对集成学习等方法有好处。

    以上三种方法中,更常用的是留出法和交叉验证法。

  4. 调参与最终模型
    1)调参:学习算法的参数需要设置、调节,参数配置不同,得到的模型完全不同。
    参数调得好不好往往对最终模型性能有关键性影响.

    2) 最终模型:利用训练集S得到的参数和算法已定的模型不是最终模型,而用包括测试集T的数据集D来重新训练的模型,才是最终模型。

2.3 性能度量

衡量模型泛化能力的评价标准。

在比较模型的好坏时,不同的性能度量会导致不同的结果,而模型的好坏不仅仅取决于算法和数据,更取决于任务需求。

常用的性能度量
1. 回归中是——均方误差,即

均方误差.png

  1. 分类
    1) 错误率与精度
    错误率E:分类错误的样本数 / 样本总数 , 即a个样本分类错误,一共有n个,错误率 E = a/n

    精度acc:1 - E,即 1 - 错误率。

    2) 查准率、查全率和F1
    二分类中,根据学习器的 预测类别真实情况类别 可以组合划分为
    真正例(true positive)、假正例(false positive)
    真反例(true negative)、假反例(false negative)
    四种情形 TP FP TN FN
    样例总数n = TP + FP + TN + FN;
    分类结果为混淆矩阵:

    分类结果混淆矩阵.png

  • 查准率P:检索出的信息中有多少比例是用户感兴趣的
    查准率.png
  • 查全率R:用户感兴趣的信息中有多少被检索出来了
    查全率.png

查准率越高,查全率越低;查准率越低,查全率越高。

P-R图:查准率为轴,查全率为
平衡点:45°线与PR曲线相交的那一个点,即 P = R

P-R图.png

在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全包住,则可断言后者的性能优于前者,如A比C好;若两个曲线相交,那么平衡点大的那个比较好,如A比B好。

  • F1
    用平衡点来衡量过于简单,因此使用F1.png

当对查全率,查准率有不同偏好时用

  • Fβ:
    Fβ.png

β>0,度量了查全率对查准率的相对重要性
β<1,查准率有更大影响
β=1,为标准的F1
β>1,查全率有更大影响

当有多次训练/测试多个训练集上训练测试或者多分类任务等情况时,有n个二分类混淆矩阵
此时要综合考察查准率和查全率

在每个混淆矩阵算出P、R、F1然后进行平均值计算
得到 宏-P宏-R宏-F1

宏-P.png

宏-R.png
宏F1.png

还可先将各混淆矩阵的对应元素进行平均,
得到 TP FP TN FN平均值,再基于这些平均值计算出
"微查准"(micro-P)、 "徽查全率" (micro-R) 、"微F1" (micro-F1)

微P.png

微R.png

微F1.png

3)ROC、AUC
阈值:一个将样本分为正例和反例的"截断点"。
不同的任务需求,阈值不同。

ROC曲线:根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值(TPR、FPR),分别以它们为横、纵坐标作图就得到了"ROC 曲线"。
纵轴:真正例率(TPR) 横轴:假正例率(FPR)

TPR.png
FPR.png
ROC和AUC的理想和有限状态.png

若一个学习器的ROC曲线被另一个学习器的曲线完全"包住",则可断言后者的性能优于前者;
若两个学习ROC曲线发生交叉,则难以一般性地断言两者孰优孰 此时如果一定要进行比较。
较为合理的判断依据是比较ROC线下的面积,即AUC。

AUC.png

4) 代价敏感错误率、代价曲线
在前面的性能度量中,都忽视了判断错误带来的后果,而下面的性能度量就考虑了判断错误的后果。
代价敏感错误率:简单来说就是衡量预测错误带来的结果代价。
代价矩阵:

二分类代价矩阵.png

costij 表示第i类样本预测成第j类样本造成的代价,一般costii=0;
若cost01 > cost10,说明将第0类判断为第1类带来的损失更大

代价敏感错误率 = (1/m) * (Σ将正类样本预测错误 * cost01 + ∑将反类样本预判错误 * cost10)


代价敏感错误率.png

代价曲线
设p为样本为正例的概率
横轴:正例概率代价,取值[0,1]

正例代价概率.png

纵轴:归一化代价,取值[0,1]

归一化代价.png
FPR就是假正例率,FNR就是1-FPR即假反例率。

绘制:

  • ROC曲线上每一点对应了代价平面上的一条线段,设ROC线上点的坐标为(TPR,FPR)
  • 则可相应计算出FNR,然后在代价平面上绘制一条从(O,FPR)到(l,FNR)的线段,
  • 线段下的面积即表示了该条件下的期望总体代价;
  • 如此将 ROC 曲线上的每个点转化为代价平面上的一条线段,
  • 然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价。
    代价曲线.png

2.4 比较检验

本节默认以错误率为性能度量,用E表示.

  1. 假设检验

泛化错误率E:学习器在一个新样本上犯错的概率为E
测试错误率E':测试样本中有E' * m个分类错误

泛化错误率为E的学习器将m'个样本分错、其余正确的概率为
其余样本分类正确的概率.png

由此可估算出其恰将E' * m个样本误分类的概率如下式所示,这也表达了在包含m个样本的测试集上,泛化错误率为E的学习器被测得 测试错误率为E'的概率:
泛化错误率为E的学习器被测时,测试错误率为E'的概率.png

给定错误测试率E',当E = E'时P最大。

1)二项检验
假设E < E0,在1-a的概率内所能观测到的最大错误率:
有E(临界值) = max E,使得下式成立

有临界值.png

此时若测试错误率E'小于临界值E*,则根据二项检验可得出结论:
在a的显著度下,假设"E<=E0"不能被拒绝,即能以1-a的置信度认为,学习器的泛化错误率不大于E0;否则该假设可被拒绝,即在a的显著度下可认为学习器的泛化错误率大于E0。

2)t检验
假设有k个测试错误率E1,E2,E3,……,Ek,则
平均错误率μ:

平均错误率.png

方差σ²:
方差.png

k个测试错误率可看作泛化错误率E的独立采样,则变量
服从t分布的变量.png

服从自由度为k-1的t分布。
t分布.png

当|μ - E0|在临界值范围[t-a/2,ta/2]之内,则不能拒绝假设"μ=E0",即认可泛化错误率为E0。

  1. 交叉验证t检验(两个算法的比较)
    基本思想:比较EAi和EBi

学习器A和B,使用k折交叉验证法得到的测试错误率分别为:
EA1、EA2、……、EAk 和 EB1、EB2、……、EBk;
EAi和EBi是第i折训练测试下的结果,可以比较每折的错误率来衡量学习器的性能。

对k对测试错误率求差,即▲i = EAi - EBi;再将k个差值进行求均值和方差。 若变量
变量Tt.png

小于临界值,则假设不能拒绝,认为两个学习器的性能没有大差别;
否则可认为两个学习器的性能有显著差别,且平均错误率较小的那个学习器性能较优.

一般采用 5次2折交叉验证法:
变量Tt服从自由度为5的t分布,当a=0.05,双边临界值t(a/2,5)=2.5706;当a=0.1时,为2.0150。

  1. McNemer检验(两个算法的比较)
    对于二分类问题,学习器A和B分类结果的差别可以用列联表表示,
    列联表.png

    若e01 = e10,则 | e01 - e10 | 服从正态分布,均值为1,方差为e01 + e10,变量Tχ2服从自由度为1的卡方χ2分布。
    变量T服从自由度为1的卡方分布.png

给定显著度a,当Tχ2小于临界值时,不能拒绝假设,即认为两学习器的性能没有显著差别;
否则拒绝假设,即认为两者性能有显著差别,且平均错误率较小的那个学习器性能较优。
自由度为1的χ2检验的临界值当α=0.05时为3.8415,α= 0.1时为2.7055。

https://www.bilibili.com/video/av85871033?from=search&seid=12016918488552627931
对McNemer检验的视频讲解

  1. Friedman检验 与 Nemenyi后续检验(多个算法的比较)
    Friedman检验:
    https://www.bilibili.com/video/av25213582?from=search&seid=5390506455816594469

2.5 偏差与方差

偏差与方差.png

偏差度量了算法的预测与真实结果的偏离程度,刻画了算法的拟合能力。
方差度量了同样大小训练集的变动所导致性能的变化,即数据变化对性能的影响程度。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容