对模型的评价是在test set上进行的,本文首先介绍测试集应该满足的特征,然后介绍四种评价方法。

一、测试集的选择

1、首先,测试集必须是严格独立于训练集的,否则评价结果一定很高,但是虚高,不适用于新案例。

2、如果分类的类别比较少,比如只有两个,而且每类的样本数大致相等,那100个样本大小的测试集也是够用的;但如果类别数比较多,且分布十分不均,那测试集的大小要保证最稀少的种类的样本数不少于50;此外,如果测试集的样本相互之间比较相似,就要适当的扩大测试集来弥补多样性的缺乏对评价的影响。当样本数比较大时,通常的做法是取整个数据集的10%作为测试集。

3、测试集和训练集样本之间的相似度问题。相似度越高,评价的可信度就越低。举一个错误的例子:随机地分配来自同一个题材多篇文章的句子来组建测试集和训练集。代码如下:

>>> import random

>>> from nltk.corpus import brown

>>> tagged_sents = list(brown.tagged_sents(categories='news'))

>>> random.shuffle(tagged_sents)

>>> size = int(len(tagged_sents) * 0.1)

>>> train_set, test_set = tagged_sents[size:], tagged_sents[:size]

这是非常愚蠢的做法,因为不同的文章,作者不同,句子的特征就会不同,来自不同文章的句子可以认为具有不同的特征,这对于模型测试是有利的。但是使用random.shuffle()将所用句子的顺序打乱,来自同一篇文章的句子就同时分布在测试集和训练集中,两者的相似度更高了,使原有的优势消失。一个改进的做法是保证测试集和训练集来自不同的文章,如下:

>>> file_ids = brown.fileids(categories='news')

>>> size = int(len(file_ids) * 0.1)

>>> train_set = brown.tagged_sents(file_ids[size:])

>>> test_set = brown.tagged_sents(file_ids[:size])

如果想进一步改进,则可以使测试集和训练集来自不同的题材:

>>> train_set = brown.tagged_sents(categories='news')

>>> test_set = brown.tagged_sents(categories='fiction')

二、评价方法/指标

1、accuracy

这是最常用的指标,就是用测试集中分类器正确分类的样本数除以测试集的总样本数。用nltk.classify.accuracy(classifier,test_set)方法可以得到,其中test_set是测试集,classifier是分类器。

使用这个指标时一定要考虑测试集中样本的频率分布。原因在percision&recall中会解释

2、precision&recall

在搜索任务中accuracy通常不适用。比如在文献检索(information retrieval)中不相关的文档远远多于相关的文档,这样如果分类器将所有文档都标记为不相关,那它的准确率也将近100%。

为了构建适用于搜索任务的指标,我们先来定义几个概念:

Ture positive:TP,相关的被标记为相关

Ture negative:TN,不相关的被标记为不相关

False positive:FP,不相关的错标记为相关(第一类错误)

False negative:FN,相关的被错标为不想关(第二类错误)

然后基于以上概念,就可以构建一下指标:

precision=TP/(TP+FP)

recall=TP/(TP+NF)

F-Measure=(2*precision*recall)/(precision+recall)

3、confusion matrices(混淆矩阵)

混淆矩阵的意思是,其中的元素[i,j]表示当正确的分类是i时,样本被分成j类的比例(相对于总样本数),即对角线上为正确分类的比例。代码如下:

>>> 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)

>>> print(cm.pretty_format(sort_by_count=True, show_percents=True, truncate=9))

| 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.7% . . <3.9%> . . . 0.0% 0.0% |

. | . . . . <4.8%> . . . . |

NNS | 1.5% . . . . <3.2%> . . 0.0% |

, | . . . . . . <4.4%> . . |

VB | 0.9% . . 0.0% . . . <2.4%> . |

NP | 1.0% . . 0.0% . . . . <1.8%>|

----+----------------------------------------------------------------+

(row = reference; col = test)

代码是从参考书上copy的,第六行的t2不明白是什么?在pythonwin上也无法正确运行,之后弄明白再修改。

4、cross-validation(交叉验证)

所谓交叉验证,就是讲整个数据集等分成N份,其中一份用作测试,N-1份用作训练,测试集不断的改变,总共进行N次,再取N次测试所得指标的平均值作为最后的评价结果。交叉验证的优点在于它使我们能够看到模型在不同的训练集上的稳定性,如果评价结果变化不大,则可以认为结果是准确的。

python自然语言处理学习笔记1

1.搭建环境 下载anaconda并安装,(其自带python2.7和一些常用包,NumPy,Matplotlib),第一次启动使用spyder 2.下载nltk import nltk nltk.d ...

Python自然语言处理学习笔记之性别识别

从今天起开始写自然语言处理的实践用法,今天学了文本分类,并没用什么创新的东西,只是把学到的知识点复习一下 性别识别(根据给定的名字确定性别) 第一步是创建一个特征提取函数(feature extrac ...

python自然语言处理——学习笔记:Chapter3纠错

2017-12-06更新:很多代码执行结果与书中不一致,是因为python的版本不一致.如果发现有问题,可以参考英文版: http://www.nltk.org/book/ 第三章,P87有一段处理h ...

python自然语言处理学习笔记2

基础语法 搜索文本----词语索引使我们看到词的上下 text1.concordance("monstrous") 词出现在相似的上下文中 text1.similar(" ...

Python自然语言处理学习笔记&lpar;69&rpar;

http://www.cnblogs.com/yuxc/archive/2012/02/09/2344474.html Chapter8    Analyzing Sentence Structure ...

Python自然语言处理学习笔记之信息提取步骤&amp&semi;分块(chunking)

一.信息提取模型 信息提取的步骤共分为五步,原始数据为未经处理的字符串, 第一步:分句,用nltk.sent_tokenize(text)实现,得到一个list of strings 第二步:分词,[ ...

Python自然语言处理学习笔记之选择正确的特征(错误分析 error analysis)

选择合适的特征(features)对机器学习的效率非常重要.特征的提取是一个不断摸索的过程(trial-and-error),一般靠直觉来发现哪些特征对研究的问题是相关的. 一种做法是把你能想到的所有 ...

Requests&colon;Python HTTP Module学习笔记(一)(转)

Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...

python网络爬虫学习笔记

python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

随机推荐

oracle 常用函数【转】

常用Oracle函数 SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii('A') A,ascii('a') a,ascii('0') z ...

HDU1102--最小生成树

Constructing Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

未能加载文件或程序集&OpenCurlyDoubleQuote;Oracle&period;DataAccess”或它的某一个依赖项&period;试图加载格式不正确的程序

.NET:Microsoft Visual Studio 2010 + .NET Framework 3.5 操作系统:windows2008 R2 64 位操作系统 oracle数据库:32位的OD ...

lightoj 1011 (状态压缩dp)

思路:状态压缩dp,设dp[i][j] 表示前i行,状态为j时的最大值,状态定义为:若前i行中取了第x列那么j的二进制位中第x位为1,否则为0,最后答案就是dp[n-1][(1 << n) ...

&lbrack;OpenGL&rsqb;配置GLFW

注:本文可转载,转载请著名出处:http://www.cnblogs.com/collectionne/p/6937644.html.本文还会修改,如果不在博客园(cnblogs)发现本文,建议访问上 ...

Windows上MongoDB的安装

下载 下载MongoDB,自然是在他的官网下载相应系统的版本了,我下载的是Windows的安装包. 安装 傻瓜式安装,不多说.(默认安装在C盘的.) 启动 mongodb的数据存在一个叫data 文件 ...

Symbol(第6种基本数据类型)

构造函数 不能使用构造函数,只能当成平常的方法使用 new Symbol()//VM372:1 Uncaught TypeError: Symbol is not a constructor 参数:不 ...

eclipse中tomcat的add and Remove找不到项目

在我们运行项目前,都需要将项目部署到tomcat上,但是有时我们会遇到这种情况:项目明明存在,但是eclipse中tomcat的add and remove找不到项目,无法部署,那么这个问题该如何解决 ...

mysql 查询优化 ~ 多表查询改写思路

一 简介:在之前我们从基础可知,现在咱们聊一下改写的几种思路二 分类:  1 left join  2 inner join  3 right join三 具体改写思路:思路1 本身不包含子查询,将多 ...

对python的评价语_Python自然语言处理学习笔记之评价(evaluationd)相关推荐

  1. python分块处理功能_Python自然语言处理学习笔记之信息提取步骤分块(chunking)...

    一.信息提取模型 信息提取的步骤共分为五步,原始数据为未经处理的字符串, 第一步:分句,用nltk.sent_tokenize(text)实现,得到一个list of strings 第二步:分词,[ ...

  2. python测试自动化封装_python接口自动化学习笔记(封装获取测试数据方法)

    本篇文章是接于python接口自动化学习笔记(封装方法用于读取excel) 后的拓展,讲解在封装完成excel的数据读取代码后,如何在data层进行使用 首先,我准备了这样一个excel表格用以存储测 ...

  3. python自然语言处理评论_python自然语言处理——学习笔记:Chapter3纠错

    2017-12-06更新:很多代码执行结果与书中不一致,是因为python的版本不一致.如果发现有问题,可以参考英文版: 第三章,P87有一段处理html的代码: >>>raw =n ...

  4. python单词词典_Python自然语言处理学习笔记(42):5.3 使用Python字典将单词映射到属性...

    5.3  Mapping Words to Properties Using Python Dictionaries 使用Python字典将单词映射到属性 As we have seen, a tag ...

  5. python quit函数作用_Python常用函数学习笔记

    Python函数很多,常用的函数不同的场景侧重不同,学而时习之,不亦乐乎? abs # 求绝对值 Capitilize函数: # 有列表 li = ['aB', 'egon', 'smith', 'p ...

  6. python网络编程库_python网络编程学习笔记(9):数据库客户端

    一.DB-API概述 python支持很多不同的数据库.由于不同的卖家服务器导致和数据库通信的网络协议各有不同.在python的早期版本中,每一种数据库都带有自己的python模块,所有这些模块以不同 ...

  7. python元组怎么使用_Python 2.7 学习笔记 元组的使用

    一.元组 python中的元组和列表非常类似,核心区别是元组的内容初始化后是不可以修改的,而队列可以. 关于列表的详细介绍,可查看上一篇列表使用文章. 大部分场景下,能用元组的地方,都可以用列表.但有 ...

  8. python modbus tk 库_python modbus_tk模块学习笔记(rtu slaver例程)

    GIT地址:https://github.com/ljean/modbus-tk 找到modbus rtu slaver 例程 用宝塔将例程复制到centos目录 #!/usr/bin/env pyt ...

  9. python locust提取参数_python+locust性能测试学习笔记

    前言 Locust(俗称 蝗虫)一个轻量级的开源压测工具,基本功能是用Python代码描述所有测试.不需要笨拙的UI或庞大的XML,只需简单的代码即可. 环境安装 Locust支持Python 2.7 ...

最新文章

  1. webstorm github怎么用_前端开发神器WebStorm发布最新版本2019.3,代码完成更加智能...
  2. java中的抽象类和抽象方法
  3. JZOJ 5177. 【NOIP2017提高组模拟6.28】TRAVEL
  4. POJ 1041 John's trip(欧拉回路)
  5. 开源项目管理软件禅道使用帮助下载
  6. 加投35000瓶原价茅台 天猫双11今晚8点开售
  7. python脚本批量登录crt_python批量修改SecureCRT会话密码-阿里云开发者社区
  8. linux 单网卡 双ip,Linux操作系统单网卡双IP的设置
  9. Java学习之Xpath报错 Exception in thread “main“ java.lang.NoClassDefFoundError: org/jaxen/Namespa
  10. 树莓派Pico开发版
  11. 获TÜV莱茵认可,美的冰箱在节能和静音方面已达全球领先水平
  12. vb计算机怎么制作,教你如何制作VB的PCode调试器 -电脑资料
  13. CTF解题思路:图片隐写
  14. python-pandas-读取与写入文件
  15. 国二c语言是人工改卷还是机器改卷,雅思机考作文是机器批卷吗,雅思机考,阅读和听力是机器判卷,还是人工判卷?...
  16. 苹果画画软件_Mac必装的10个软件,让你的Mac如虎添翼
  17. 读书笔记:《不抱怨的世界》
  18. 大轮明王鸠摩智教你找核心竞争力
  19. 多维度数据分析是什么?该怎么做?
  20. win7怎么显示后缀名

热门文章

  1. 石油大--Contest2022 - 2020年秋季组队训练赛第二场--17100 Problem D、Find String in a Grid (AC自动机)
  2. 计算机软件著作权侵权的认定标准,计算机软件著作权侵权的认定
  3. cocos2d-x + Lua + win10 + VS2017 环境搭建
  4. 目前最全的XMind乱码的解决方法,亲测可用
  5. 设计模式 with Python 10:状态模式
  6. DCDC Buck 应用
  7. transformer中的attention为什么scaled
  8. java毕业设计成品基于SpringBoot体育用品购物商城-协同过滤推荐算法[包运行成功]
  9. 最有效的外部链接标准:SEO外链专员操作规范
  10. 基于SSM旅游路线规划系统