• 3.4 混淆矩阵

    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.