在机器学习/深度学习中通常运用测试集评价模型性能时, 我们不光采取点估计, 往往附带置信区间, 用来描述模型表现的波动性, 以及正确率真实值落入区间的可能性.
我看了两天左右的资料, 将大致流程梳理通了, 但是最终行业内统一做法依然没有落实, 我会尽快和一些论文作者联系, 向他们请教置信度计算方法, 用以完善本文.
什么是置信区间?
我看来就是一个描述随机变量的评估值的波动性的值, 它完全可以当作方差来看, 表现出来的是所给评估值波动程度的描述. (统计学出身可能想打死我>_<)
想要把文章写的说人话, 我觉得重要的是紧紧依靠需求和实际场景出发. 因此后续我学习总结的相关结果将围绕实际需求出发.
当我们想描述一个随机变量的信息的时候, 如果我们对其分布一无所知, 就只能从抽样中获取相关信息.
比如我昨天训练了一个CNN网络, 想在ImageNet上测试一下它图像识别分类任务的正确率, 那么这个网络模型在ImageNet测试集的每个样本上预测正确的概率或者在测试集上的预测正确次数之和就是一个未知的随机变量, 记作X(后面仅指代正确率).
模型的正确率是衡量模型好坏的最重要的参数之一, 作为设计者的我为了了解这个模型性能, 必定需要知道正确率的均值方差之类的统计信息. 均值高说明效果好, 方差低说明模型稳定. 那么实际上利用均值+/-标准差就可以比较好地描述我们模型的性能和表现了, 但是业界不用标准差而用置信区间来描述, 因为置信区间暗含sqrt(n), 一定程度上说明随着测试集样本增加而评估值的可信度也上升. 但是不管怎么说, 在机器学习模型评估这里比较不同模型的时候, 当测试集相同且置信度都设置成95%时置信区间当标准差/方差看绝对没有问题, 越大说明越不稳定.
回到置信区间的本意, 其本意为对未知分布随机变量建立一种区间估计, 让这种估计满足一定概率/也就是可信度.
一般的随机变量所遵循的分布是不得而知, 无法做出假设的, 你都不知道它怎么分布的, 根本没办法建立概率和取值的联系, 所以没办法做, 但是根据中心极限定理, 遵循独立同分布(iid)的n个随机变量的均值是符合正态分布N(μ,σ/sqrt(n)), 前提是n趋向无穷, 也就是n够大时可以用正态分布来拟合或者当作n个随机变量均值的近似分布, 后面称该均值为M. 有了已知正态分布, 我们才能推导出和概率相关的结论, 这也才有了可信度.
上文中遵循独立同分布的随机变量X的均值为μ, 标准差为σ. 是我们想知道但是只能估计的值. 常规操作直接进行抽样, 对采取的n个样本做平均, 得到μ的无偏估计, 再算样本方差得到标准差无偏估计, 这些都简单. 但是随机变量M也就是多个和X独立同分布的随机变量的均值的均值和标准差是什么呢? 上文提到了是μ和σ/sqrt(n), 因为中心极限定理条件下我们得到了它的分布, 那这里我们得到最重要的公式.
Z就是个常数, 这个公式的意思是 随机变量取值在μ周围某个范围内的概率是1-α. 这玩意是个通用的公式, 你看看σ/sqrt(n)这不就是M的标准差, 所以上面公式实际上是
对一个已知分布的随机变量, 你把它概率密度函数画出来, 上面公式就可以理解为, 以均值μ为中心, 左右扩展多少倍σ时概率密度函数覆盖的面积是1-α. 这里不同的对称分布(如t分布, 正态分布, 二项分布)因为概率密度函数不一样, 所以拥有不同的Z值, 而明确分布后, Z仅仅是一个让上式成立的常量而已(也就是刚刚说的多少倍). 同时当我把这里1-α赋值为0.95, 那这-Z到Z不就是一个描述可信度为95%的X可能会落入的区间吗?
但是这里和我们说的置信区间还有一点区别.
把上面公式稍作变换, 得到
现在公式的意思为: 对于随机变量X的均值μ, 我们相信它落入M-Z*σ/sqrt(n)到M+Z*σ/sqrt(n)的概率为1-α. 但是从严谨的角度来看, μ是一个真值, 也就是不随M取值而变化的值, 所以从主动性上说它不会落入某个区间, 而是M会取值覆盖到μ.
这里我们得到了对X的均值μ的一个满足可信度的区间, 这个区间就是置信区间, 但是它是关于M对称的, 所以一般用Z*σ/sqrt(n)表示其大小. 这里公式里有两个地方要注意, 一个是M是一个随机变量, 而σ是一个不得而知的真值, 这个区间不能直接得到, 那么我们该怎么办呢? 简单的操作就是做估值嘛, 用某一次采样的n个样本计算样本标准差(σ)和均值(M)放入上式, 那么我们就得到了随机变量X的均值置信区间.
回到模型上来, 我们对一个包含n个样本的测试集做测试, 最后有的人会结合具体场景考虑二项分布用二项分布来计算上式的标准差, 但是这样的分析局限于正确率错误率这样的可以用二项分布来建模的问题, 面对MSE等指标还是要老实地算sigma的样本标准差.
对于模型正确率, 我们用测试集的n个样本计算得到均值和方差的估计后, 放入上式也就计算出了正确率的置信区间, 而置信区间和置信度α的联系就是通过Z实现的.
机器学习和深度学习中应该不少地方都用到了置信区间来描述模型正确率, 大体上都是上面的思路, 有的是采样n个样本, 有的是采样n个任务(元学习MAML), 但是原理都不变.
网友评论