【语言处理与Python】6.3评估

测试集

测试集要注意可用于测试和可用于训练的数据量之间的权衡。

选择测试集的另一个需要考虑的是测试集中实例与开发集中的实例的相似程度。这两个数据集越相似,我们对将评估结果推广到其他数据集的信心就越小。

准确度

用于评估一个分类的最简单的度量是准确度。

解释一个分类器的准确性得分,考虑测试集中单个类标签的频率是很重要的。

精确度和召回率

•真阳性是相关项目中我们正确识别为相关的。
•真阴性是不相关项目中我们正确识别为不相关的。
•假阳性(或I型错误)是不相关项目中我们错误识别为相关的。
•假阴性(或II型错误)是相关项目中我们错误识别为不相关的。

给定这四个数字,我们可以定义以下指标:
精确度(Precision),表示我们发现的项目中有多少是相关的,TP/(TP+FP)。
召回率(Recall),表示相关的项目中我们发现了多少,TP/(TP+FN)。
F-度量值(F-Measure)(或F-得分,F-Score),组合精确度和召回率为一个单独的得分,被定义为精确度和召回率的调和平均数(2 ×Precision×Recall)/(Precision+Recall)。

混淆矩阵

一个混淆矩阵表示了错误的信息量。

可以通过下面的代码来加深理解:

>>>def tag_list(tagged_sents):
... return [tag for sent in tagged_sents for (word, tag) in sent]
>>>def apply_tagger(tagger, corpus):
... return [tagger.tag(nltk.tag.untag(sent)) for sent in corpus]
>>>gold =tag_list(brown.tagged_sents(categories='editorial'))
>>>test = tag_list(apply_tagger(t2, brown.tagged_sents(categories='editorial')))
>>>cm = nltk.ConfusionMatrix(gold, test)

得到的结果是:(读者们自行调整一下列,显示的有些太紧凑)

| N |
| N I A J N V N|
| N N T J . S , B P |
------+--------------------------------------------------------------------------------------------------+
NN| <11.8%> 0.0% . 0.2% . 0.0% . 0.3% 0.0%|
IN | 0.0% <9.0%> . . . 0.0% . . . |
AT| . . <8.6%> . . . . . . |
JJ | 1.6% . . <4.0%> . . . 0.0% 0.0% |
. | . . . . <4.8%> . . . . |
NS| 1.5% . . . . <3.2%> . . 0.0%|
, | . . . . . . <4.4%> . . |
B| 0.9% . . 0.0% . . . <2.4%> . |
NP| 1.0% . . 0.0% . . . . <1.9%>|
-------+----------------------------------------------------------------------------------------------+

交叉验证

问题背景:

为了评估我们的模型,我们必须为测试集保留一部分已标注的数据。正如我们已经提到,如果测试集是太小了,我们的评价可能不准确。然而,测试集设置较大通常意味着训练集设置较小,如果已标注数据的数量有限,这样设置对性能会产生重大影响。

解决方案:

这个问题的解决方案之一是在不同的测试集上执行多个评估,然后组合这些评估的得分,这种技术被称为交叉验证。特别是,我们将原始语料细分为N个子集称为折叠(folds)。
对于每一个这些的折叠,我们使用除这个折叠中的数据外其他所有数据训练模型,然后在这个折叠上测试模型。即使个别的折叠可能是太小了而不能在其上给出准确的评价分数,综合评估得分是基于大量的数据,因此是相当可靠的。

优势:

它可以让我们研究不同的训练集上性能变化有多大。如果我们从所有N个训练集得到非常相似的分数,然后我们可以相当有信心,得分是准确的。另一方面,如果N个训练集上分数很大不同,那么,我们应该对评估得分的准确性持怀疑态度

原文地址:https://www.cnblogs.com/createMoMo/p/3100850.html