性能比较,比较检验

关注

机器学习中性能比较这件事要比大家想象的复杂得多,它涉及几个重要因素:首先,算法泛化能力与测试集上的性能未必相同;第二、测试集上的性能与测试集本身的选择有关;第三、算法本身具有随机性。那么,有没有适当的方法对学习器的性能进行比较呢?

统计假设检验为我们进行学习器性能比较提供了重要依据。基于假设检验结果我们可以推断出,若在测试集观察到学习器A比B好,则A的泛化性能是否在统计意义上优于B,以及这个结论的把握有多大。

为什么统计假设检验可以比较学习器的性能?因为我们假定样本是独立分布的,而样本分布反映的是观察值(实验值)与真实值之间的关系,所以只要能找到与实验值的符合分布,就可以利用该分布的数学特征(置信度、临界值)比较学习器的优劣,以及得出对这个结论有多大把握

下面以错误率为例,讨论学习器性能的比较。二项检验学习器在包含n个样本的测试集上预测,由于样本是独立采样,相当于在测试集上重复进行了n次独立的伯努利实验(要么预测正确,要么预测错误),符合二项分布。(由二项分布公式:P(ξ=K)= C(n,k) * p^k * (1-p)^(n-k),其中C(n, k) =n!/(k!(n-k)!),k是成功的次数,p是成功的真实概率),然后就可以用二项分布的特性来判断测试错误率是否能以给定置信度认为,学习器的泛化错误率不大于假定错误率。

t检验二项分布适合于检验一个学习算法在同一个独立分布样本集上一次实验的泛化能力,如果检验算法在同一个独立分布样本集上的多次实验,则会用到平均测试错误率和方差。考虑到这k个测试错误率可看作泛化错误率的独立采样,则根据k,平均测试错误率、假定错误率以及方差可构造出服从自由度为k-1的t分布,从而利用t分布的特性检验算法在同一个独立分布样本集上多次实验的泛化能力

交叉验证t检验适用于在同一个独立分布的样本集上比较检验学习器A和B的泛化性能。这里的基本思想是若两个学习器的性能相同,则它们使用相同的训练集/测试集得到的测试误差率应相同。具体说来,对k折交叉验证产生的k对测试误差率,先对每对结果求差,然后求出k对的均值和方差,然后根据k,平均测试错误率、以及方差可构造出服从自由度为k-1的t分布,从而利用t分布的特性检验算法在同一个独立分布的样本集上比较检验学习器A和B泛化能力。

McNemar检验适用于在同一个独立分布的样本集上比较检验学习器A和B的泛化性能。通过比较检验学习器A和B一个分类正确一个错误的分类结果,来比较两个学习器之间的性能。这里的基本思想是两个学习器性能相同,则应有A和B各自一个分类正确一个错误的分类结果数量相等。A和B各自一个分类正确一个错误的分类结果数量之差的绝对值服从正态分布。McNemar检验则根据这两个数量构造了一个自由度为1的卡方分布,即标准正态分布变量的平方,从而利用卡方分布的特性检验算法在同一个独立分布的样本集上比较检验学习器A和B泛化能力。(为什么要用卡方分布而不用正态分布?)

Friedman检验和Nemenyi后续检验先确定泛化能力是否相同,再根据具体情况决定是否进一步区分优劣)以上检验都是再同一数据集上检验或比较学习器的性能。如果在一组数据集上对多个算法进行比较,我们可以用前面的方法在每个数据集上对算法进行两两比较,但更直接的是使用算法排序的Friedman检验(比较依据是排序号,而不是算法具体的性能指标)。

有k种算法,N个数据集,每种算法在每个数据集上都有一个性能排序,每个算法一个排序号。如果两个算法性能相同,则它们俩平分序值。然后,分别计算出k个算法在N个数据集上排序号的平均值。如果不考虑平分序值的情况,则k个算法在N个数据集上的平均值的均值和方差分别为(k+1)/2和(k*k - 1)/12,两者在k和N都较大时,服从自由度为k-1的卡方分布。现在通常用它们自由度为k-1和(k-1)(N-1)的F分布,然后利用卡方分布的特性检验算法在一组样本集上比较检验多个学习器的泛化能力。

若“所有算法的性能相同”这个假设被拒绝,则说明算法的性能显著不同。这时需进行“后续检验”来进一步区分各算法。Nemenyi检验计算出平均序值差别的临界值域。

要想做好比较检验,必须同时熟悉样本分布特征,性能度量指标及不同指标间的关系与常用分布的使用条件与相关变量及不同变量间的相互关系,这样才能由样本及度量指标构造出合理的分布,从而做出方便合理的泛化能力比较检验

注:参考周志华《机器学习》西瓜书