3.4 混淆矩阵

当处理有 3 个或更多的标签的分类任务时,基于模型错误类型细分模型的错误是有信息量的。一个混淆矩阵是一个表,其中每个 cells [i,j]表示正确的标签 i 被预测为标签 j 的次数。因此,对角线项目(即 cells |ii|)表示正确预测的标签,非对角线项目表示错误。在下面的例子中,我们为4中开发的一元标注器生成一个混淆矩阵:

  1. >>> def tag_list(tagged_sents):
  2. ... return [tag for sent in tagged_sents for (word, tag) in sent]
  3. >>> def apply_tagger(tagger, corpus):
  4. ... return [tagger.tag(nltk.tag.untag(sent)) for sent in corpus]
  5. >>> gold = tag_list(brown.tagged_sents(categories='editorial'))
  6. >>> test = tag_list(apply_tagger(t2, brown.tagged_sents(categories='editorial')))
  7. >>> cm = nltk.ConfusionMatrix(gold, test)
  8. >>> print(cm.pretty_format(sort_by_count=True, show_percents=True, truncate=9))
  9. | N |
  10. | N I A J N V N |
  11. | N N T J . S , B P |
  12. ----+----------------------------------------------------------------+
  13. NN | <11.8%> 0.0% . 0.2% . 0.0% . 0.3% 0.0% |
  14. IN | 0.0% <9.0%> . . . 0.0% . . . |
  15. AT | . . <8.6%> . . . . . . |
  16. JJ | 1.7% . . <3.9%> . . . 0.0% 0.0% |
  17. . | . . . . <4.8%> . . . . |
  18. NNS | 1.5% . . . . <3.2%> . . 0.0% |
  19. , | . . . . . . <4.4%> . . |
  20. VB | 0.9% . . 0.0% . . . <2.4%> . |
  21. NP | 1.0% . . 0.0% . . . . <1.8%>|
  22. ----+----------------------------------------------------------------+
  23. (row = reference; col = test)

这个混淆矩阵显示常见的错误,包括NN替换为了JJ(1.6%的词),NN替换为了NNS(1.5%的词)。注意点(.)表示值为 0 的单元格,对角线项目——对应正确的分类——用尖括号标记。.. XXX explain use of “reference” in the legend above.