本篇只做最简单的定性科普,因为定量的各种公式推导我也没搞懂,在应用层面的模型开发工作中,也很少用到。
0. 什么是泛化能力?如何评估
泛化能力是模型对未知数据的预测能力。大白话来说就是,模型训好了,放到实际场景中去使用,会不会掉链子,还是能达到跟训练时一样的效果。泛化能力的本质就是反映模型有没有对客观世界做真实的刻画,还是发生了过拟合。
泛化能力的评估,说简单很简单,搞个测试集测一下就可以了。
1. 那到底有什么坑?
举个栗子:
k折交叉训练开发了5个模型,它们在测试集上的AUC、准确率等指标必然不是一毛一样的,那这个模型的整体指标到底是多少?是否求个均值就可以了,五个0.8均值是0.8,(0.7,0.7,0.8,0.8,0.9,0.9)的均值也是0.8,这两组模型的表现能说是一样吗?
再用大白话来说就是,在测试集上测了下指标是0.8,难道模型的真实性能就一定是0.8吗?说不定是巧了~毕竟测试集样本量也就那么些对不对?这个问题的本质就是,模型在测试集上测得的指标,我们有多大把握(置信度)说它反映了模型的真实性能?
概率论中的各种假设检验都快玩出花来了,我在这里用大白话说一说,说白了,模型的泛化能力那也是以概率态存在的,我们每次拿个测试集测一下,无非是在这个“泛化能力的分布空间”中采了个样。在一个概率分布中采到了一个0.8的样,撑破天我们能说取0.8的概率比较大,但不能说一定是0.8。
继续举栗子:
如果用同样的方法(比如k折交叉训练),开发出了五个模型,在相应的测试集上测得其性能指标分别是0.7,0.7,0.8,0.9,0.9,我们会认为,模型的性能指标有较大可能是0.8左右,比如说性能指标落在0.75~0.85之间的概率是60%,落在0.65~0.95之间的概率是90%,而落在0.65以下或0.95以上的概率是剩下的10%(这些结果是通过采样(测试集测试)+各种奇奇怪怪的假设检验公式算出来的)。那么假设最后的结果是,模型有5%的可能性,性能指标在0.65之下。也就是,尽管测了好多次,拿到了一堆0.7/0.8/0.9的数,但这些仍然有可能是巧合哟,尽管可能性不大,但仍然有5%的可能这个模型其实非常差。能不能接受这个风险呢?能接受就用,不能接受那就继续优化模型去吧~
上面这段话中所说的60%、90%之类的,就算是置信度的概念的概念了。
说得再详细一点,假设另一组用k折开发出的模型,测试出的指标是0.79,0.8,0.8,0.8,0.81这样,这个表现就稳定多了,这个“稳定”,可以描述为:模型有95%的可能性,性能在0.75~0.85之间,有99.9%的可能性,性能指标在0.65~0.95之间,另外还有0.05%的可能性,性能指标低于0.65,跟前面的5%相比,这个风险就小多了。
以上所说的,是从概率论的假设检验角度出发,去说明模型泛化能力的考察中置信度的问题。在具体的机器学习领域,泛化能力的考察和比较有一些更具体的方法,比如交叉验证t检验、Freidman检验、Nemenyi后续检验等等,此处就不表了,懒得看。
网友评论