标签(空格分隔): 王小草机器学习笔记
通过模型评估的方法与性能的度量我们知道了学习器的性能指标,但是如何知道这个学习器的性能是否真的达到要求,或者如何在统计学上比较学习器A优于学习器B,以及这个把握有多大呢?在统计学上,我们使用“统计假设检验”(hypothesis test)。
做了多次留出法或者交叉验证法之后,会有多个测试误差率,此时使用“t检验”(t-test)来检验单个学习器产生的多个测试误差率是否满足预先期望的泛化误差率。
假设k次留出法得到k个测试误差率,平均测试误差为μ,方差为σ^2。
因为k个测试误差率可看做泛化误差率的随机采样,则变量Tt服从自由度为k-1的t分布:
原假设H0:μ = 泛化误差率
根据预先设定的显著度α,以及自由度k-1,查表可得临界值b。
如果Tt小于临界值b则“不能拒绝原假设”,可认为泛化误差率为;否则拒绝原假设,在该显著度下认为泛化误差与有显著不同。
对两个学习器A,B在同一组数据集i上的性能指标进行比较。如果性能相同,则他们得到的测试错误率应该也相同,即
具体的做法是:
(1)对一组样本D,进行k折交叉验证,会产生k个测试误差率,将两个学习器都分别在每对数据子集上进行训练与测试,会分别产生两组测试误差率:
(2)对每对结果求差值:
若两个学习器的性能相同,则相对应的两个误差率的差值应该为0,因此可以根据差值来对“学习器A,B性能相同”这个原假设做t检验
(3)假设检验:先计算出差值的均值μ与方差σ^2,在显著度α下,若变量
小于自由度为k-1的临界值,则原假设不能被拒绝,认为两个学习器的性能没有显著差别;反之则认为两个学习器的性能有显著差别,并且选择平均错误率较小的那个学习器。
为了避免有点时候因为样本有限,不同轮次的训练集会有重复,使得测试错误率不独立而导致过高估计假设成立的概率,可以采用“5*2交叉验证法”。即5次2折交叉验证。
具体做法:
(1)在,每次2折交叉验证之前将随机将数据打乱,使得五次交叉验证中的数据不重复、
(2)对A,B两个学习器,将第i次二折交叉验证产生的两对测试错误率求差。第一折上的差值为,第二折上的差值为
,i表示第i次二折交叉验证。
(3)为了缓解测试错误的非独立性。仅计算第一次2折交叉验证上的两个差值的平均值
对每次2折实验的结果都计算方差(得到5个方差)
(4)假设检验:计算变量
服从自由度为5的t分布,若设置置信度为α为0.05, 查表可得临界值为2.5706,。若果Tt小于这个临界值,则表示在该置信度下不拒绝原假设,两个学习器性能无差异。
在二分类问题中,使用留出法还可以分别得到两个学习器的分类结果,用“列联表”表示如下:
若两个学习器性能相同,则应用e01=e10,那么变量|e01-e10|应是服从正态分布。
计算变量:
服从自由度为1的χ2分布。给定显著度α,当以上变量小于临界值χ2时,不拒绝原假设,认为两个学习器没有显著差别。
假设我们用D1,D2,D3,D4四个数据集对算法A,B,C进行比较。
具体做法:
(1)首先使用留出法或者交叉验证法得到每个算法再每个数据集上的测试结果。
(2)然后再每个数据集上根据算法的性能进行由好到坏的排序,并赋予序值1,2,3…;若算法的测试性能相同则平分序值。
(3)计算出每个算法在所有数据集上的平均序值。如下:
(4)使用Friedman检验判断算法是否性能相同,如果相同,则他们的平均序值应当相同。假定有N个数据集,K个算法,ri表示第i个算法的平均序值。
当k和N都比较大的时候,以下变量服从自由度为k-1的χ2分布。
以上是“原始的-Friedman检验”,过于保守,现在通常使用以下变量:
该变量服从自由度k-1和(k-1)(N-1)d F分布。
如果“所有算法性能相同”这个假设被拒绝,则说明算法的性能显著不同。于是需要进行“后续检验”来区分算法,常用的是Nemenyi后续检验。
具体做法:
(1)计算以下变量:
其中平qa可查表得
(2)计算每个算法两两之间的平均序值的差值,如果差值大于CD则说明两个算法有显著差异,如果小于CD则说明两个算法的性能没有显著差别。
偏差-方差分解:解释学习算法泛化能力。对学习算法的期望泛化错误了进行拆解。
泛化误差可以分解为偏差,方差,噪声之和。
偏差:算法的期望预测与真实结果的偏离程度;
方差:同样大小的训练集的变动所导致的学习性能的变化;
噪声:刻画学习问题本身的难度。
泛化性能是由算法的能力,数据的充分性,以及学习任务本身的难度所共同决定的。