一些 evaluation 的技巧

读 PhD 的时候似乎重视得不够,这里列举一些与 evaluation 相关的技巧。

stratification 与 post-stratification

统计领域里一个重要的 sampling 方法是所谓的 stratified sampling,它做的事情无非是把 population 分成互斥的几个部分,然后在每个部分里面分别做 sampling。一个显而易见的好处是在于,对于 skewed case,它能为那些所占比例较少的部分提供到足够的样本,好比如果整个 population 里面男女比例为 99:1,如果直接取样 50 个,很可能看不到女性样本,或者看到了却非常的不稳定(相对 variance 较大),那么如果我们单独对男性和女性进行采样,事后消除分别采样的先验差别,我们就可以获得更加稳定的估计。

这个 idea 可以用到训练模型之上。我们知道通常的机器学习模型,有如下的 loss

\displaystyle \prod_{i = 1}^N \Pr(y_i \mid x_i, \theta ) 或者等价的 \displaystyle \sum_{i = 1}^N \log\Pr(y_i \mid x_i, \theta )

如果考虑使用 stratified sampling,我们一般需要为 y_i 的不同取值来做一些 sampling,然后将其与先验结合起来获得实际的 model。实际操作中,往往有一定的局限,比如带有 label 能参与 training 的数据与我们的先验信息 \Pr(y) 可能并不一致,但是通过 sampling 去掉 label 数据显然与 big data 背道而驰。一个常用的手段又称为 post-stratification,它为每个样本类型 y = j 分配一个 weight,这个 weight 可以认为是将这个样本“等效”的多次出现在训练数据中。比如先验的男女比例为 2:1,而我们获得的 labeled data 中为 3:1,我们就可以将男性样本当做 \frac{2}{3} : \frac{3}{4} = \frac{8}{9} 个有效样本,而女性样本为 \frac{1}{3} : \frac{1}{4} = \frac{4}{3} 个样本,这样篡改过的目标函数为

\displaystyle \prod_{i = 1}^N \Pr(y_i \mid x_i, \theta )^{w_{y_i}} 或者等价的 \displaystyle \sum_{i = 1}^N w_{y_i} \log\Pr(y_i \mid x_i, \theta )

对于优化问题而言,这往往只是在 gradient 的计算上变成了加权和,让 minority 部分的影响变得大一些。

Calibration

即便我们在 training 的过程中通过 post-stratification 融入了正确的先验信息,我们在做 evaluation 的时候仍然应该足够的小心,因为未经 calibration 得到的结论往往是有问题的。一个简单的例子,两个不同的 inference 实现,可能包含了不同的预处理过程,这导致用来做 evaluation 的数据存在着潜在的不同,比如一个上面男女比例明显更加 skew 而另一个更为均匀,那么简单的统计正确率将会得到不公平的比较结论。与学术界常见的统一 testing set 不同,工业界的 testing set 都是不固定的,因此为了正确的评估一个 model improvement,往往涉及了很多的方面,为此需要一个机制能消除这种区别(尤其是在做精细的比较的时候)。calibration 的目标就是将一个 model 的 output distribution 匹配到一个先验的分布上,这个问题在两类分类上非常简单,基本上就是将 inference score 取某个分界点,而多类问题是一个 open question:给定一个 benchmark distribution 和 inference score(如 softmax 的 posterior),将后者转换为 label 且 label 的 distribution 接近 benchmark distribution。很显然这个里面常见的 label 选择是 MAP,但是获得的 label distribution 可能并不会非常 match benchmark。形式上,这个问题为

\displaystyle\arg\min_f \frac{1}{N} \sum_{j = 1}^c p_j \log \sum_{i = 1}^N \delta(f(q_i), j)

其中 p_j 是 benchmark distribution,q_i 是样本 i 对应的 softmax score,而 f: S_c \to {1, \ldots, c},将一个 c 维 simplex 映射到整数。

calibration 的效果是使得一个分类器的输出接近预先设定的分布。

Accuracy

有了 post-stratification 训练的 model,结果进行了 calibration,最终计算一个模型的 accuracy 往往是通过所谓的 confusion matrix 来评估的,说穿了就是把 truth 和 prediction 获得的所有情况 count 一下得到 C_{j, k} = \sum_{i = 1}^N \delta(y_i, j) \delta(\hat{y}_i = k)。常见的评估方式是

\displaystyle\mathrm{Accuracy} = \frac{\sum_{j = 1}^c C_{j, j}}{\sum_{j, k = 1}^{c} C_{j, k}}

直接使用 confusion matrix 的对角线来评估结果就会造成一定的偏差,这是因为获得 confusion matrix 需要将带 label 的数据与 inference 的结果进行 inner join,在这个 population 上类型的分布可能已经偏离了 benchmark distribution。为此,我们应该使用 weighted accuracy。通常

\displaystyle w_j = \frac{p_j}{t_j / C}, \qquad t_j = \sum_{k = 1}^c C_{j, k}, C = \sum_{j = 1}^c t_j

这样一来我们用 w_jC_{j, k} 每行加权后获得的 accuracy 称为 weighted accuracy。

PR、ROC 与 AUC

对于两类分类问题,我们还有一些更加常见的手段。Precision and Recall 算是一个最常见的 measure 方式,所谓的 precision 是 true positive 占 inferred positive 的比例,而 recall 是 true positive 占 positive 的比例。很显然 PR curve 一般在 precision 高的时候 recall 较低,而 recall 较高的时候 precision 较低,naive 的策略就是全部分为 positive(recall 高)和全部分为 negative(precision 高)。比较两个 binary classifier,我们可以收集真实的 label 和对应的 inference score,这样对应不同的 score 划分,我们可以获得高于这个 score(inferred positive)数目,这个数目中确实是 true positive 的数目以及 positive 数目。改变这个 score 的划分我们就获得了这条所谓的 PR curve。如果在 labeled 数据和 inferred 数据交集中,正例和负例的百分比为 p1 - p,则 precision/recall 的下界为 p。在搜索问题中正例(relevant doc)的比例是很低的,而对于猜男猜女的问题假如男为正例,这个比例还是很高的。

Recall 另有别名为 sensitivity 或者 hit rate、TPR。在 ROC(receiver operating characteristic)里面它通常是 Y 轴,另一边称为 FPR、也是 1 – specificity(FP / N),即正例中错误部分占负例的比例。

制作这类 curve 往往通过 ranking function 进行数据的划分,将每部分的 TP、FP 统计出来,然后通过 cumulative sum 就能获得整个曲线了。

所谓的 AUC(area under precision-recall curve)是 ROC curve 下面的面积(wikipedia 上面的描述有问题)。

——————
And it came to pass, when his master heard the words of his wife, which she spake unto him, saying, After this manner did thy servant to me; that his wrath was kindled

Advertisements
一些 evaluation 的技巧

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s