模型上线之前可以利用测试数据集进行离线评估,主要指标可以根据具体的问题类型可以有以下的方案。
假定一个具体场景作为例子:
假如某个班级有男生80人,女生20人,共计100人.目标是找出所有女生. 现在某人挑选出50个人,其中20人是女生,另外还错误的把30个男生也当作女生挑选出来了.
| 是否被检测到 | 相关(Relevant),正类 | 无关(NonRelevant),负类 | | — | — | — | — | | 被检索到 Retrieved | true positives(TP 正类判定为正类,例子中就是正确的判定”这位是女生”) | false positives(FP 负类判定为正类,”存伪”,例子中就是分明是男生却判断为女生) | | 未被检索到 Not Retrieved | false negatives(FN 正类判定为负类,”去真”,例子中就是,分明是女生,却判断为男生) | true negatives(TN 负类判定为负类,也就是一个男生被判断为男生) |
对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。上述例子分类正确的人共 (20女+50男) 70人。所以准确率 70/100 = 70%。
公式:P = \frac{TP}{TP+FP}。正确被检索的 item(TP) 占所有实际被检索到的 item(TP+FP) 的比例。上述例子中是40%(20女生/(20女生+30误判为女生的男生))
公式:R = \frac{TP}{TP+FN}。正确被检索的 item(TP) 占所有应该检索到的 item(TP+FN) 的比例。上述例子中是100%(20女生/(20女生+ 0 误判为男生的女生))
值也会高。
混淆矩阵的每一列代表了预测类别,每一列的总数表示预测为该类别的数据的数目;每一行代表了数据的真实归属类别,每一行的数据总数表示该类别的数据实例的数目。
上述例子的混淆矩阵结果如下
[[20 0] # True Positives = 20, False Negatives = 0
[30 50]] # False Positives = 30, True Negatives = 50
In signal detection theory, a receiver operating characteristic (ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.
ROC 曲线是评估二值分类器最重要的指标之一,中文名为“受试者工作特征曲线”。逻辑回归里面,我们会设一个阈值,大于这个值的为正类,小于这个值为负类。如果我们减小这个阀值,那么更多的样本会被识别为正类。这会提高正类的识别率,但同时也会使得更多的负类被错误识别为正类。为了形象化这一变化,在此引入 ROC ,ROC 曲线可以用于评价一个分类器好坏。
ROC 关注的两个指标:
The AUC value is equivalent to the probability that a randomly chosen positive example is ranked higher than a randomly chosen negative example.
AUC(Area Under Curve)被定义为 ROC 曲线下的面积,显然这个面积的数值不会大于1。随机挑选一个正样本以及一个负样本,分类器判定正样本的值高于负样本的概率就是 AUC 值。
既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反)