有监督分类过程

![enter image description here][1]
例子:涉及一个特征器,给定一个姓名分析出是男性名字还是女性名字


分析:男性和女性的名字有一些鲜明的特点。以a,e 和i 结尾的很可能是女性,而
以k,o,r,s 结尾的很可能是男性。让我们建立一个分类器更精确地模拟这些差异。

特征提取器:名字最后一个字母

![enter image description here][2]

数据准备:

![enter image description here][3]

特征抽取,训练集测试集划分

![enter image description here][4]

模型生成

>>classifier=nltk.NaiveBayesClassifier.train(train_set)

准确率统计

>> print nltk.classify.accuracy(classifier, test_set)
0.758

似然比

>> classifier.show_most_informative_features(5)
我们可以看出最有区分度的5个特征
Most Informative Features
last_letter = ‘a’ female : male = 38.3 : 1.0
last_letter = 'k‘ male : female = 31.4 : 1.0
last_letter = ‘f’ male : female = 15.3 : 1.0
last_letter = 'p‘ male : female = 10.6 : 1.0
last_letter = ‘w’ male : female = 10.6 : 1.0

  • 如何选择正确的特征 选择相关的特征,并决定如何为一个学习方法编码它们,这对学习方法提取一个好的模 型可以产生巨大的影响。建立一个分类器的很多有趣的工作之一是找出哪些特征可能是相关 的,以及我们如何能够表示它们。虽然使用相当简单而明显的特征集往往可以得到像样的性 能,但是使用精心构建的基于对当前任务的透彻理解的特征,通常会显著提高收益。 典型地,特征提取通过反复试验和错误的过程建立的,由哪些信息是与问题相关的直觉 指引的。它通常以“厨房水槽”的方法开始,包括你能想到的所有特征,然后检查哪些特征 是实际有用

>>def gender_features2(name):

features = {}
features["firstletter"] = name[0].lower()
features["lastletter"] = name[–1].lower()
for letter in 'abcdefghijklmnopqrstuvwxyz':
features["count(%s)" % letter] = name.lower().count(letter)
features["has(%s)" % letter] = (letter in name.lower())
return features

我们看一下John这个名字的特征

>> gender_features2('John')
{'count(j)': 1, 'has(d)': False, 'count(b)': 0, ...}

我们来看一下精度:

>>> print nltk.classify.accuracy(classifier, test_set)
0.748
结果精度下降了一个百分点,事实告诉我们不是特征越多越好给定的学习算法的特征的数目是有限的,如果你提供太多的特征,那么该算法将高度依赖训练数据的特性而一般化到新的例子的效果不会很好。这个问题被称为过拟合一旦初始特征集被选定,完善特征集的一个非常有成效的方法是错误分析。首先,我们选择一个开发集,包含用于创建模型的语料数据。然后将这种开发集分为训练集和开发测试集。
>>> train_names = names[1500:]
>>> devtest_names = names[500:1500]
>>> test_names = names[:500]

训练集用于训练模型,开发测试集用于进行错误分析,测试集用于系统的最终评估

![enter image description here][5]
我们用这个思路看下第一个特征抽取器能不能给我们带来什么启发
>>> train_set = [(gender_features(n), g) for (n,g) in train_names]
>>> devtest_set = [(gender_features(n), g) for (n,g) in devtest_names]
>>> test_set = [(gender_features(n), g) for (n,g) in test_names]
>>> classifier = nltk.NaiveBayesClassifier.train(train_set)

Python自然语言处理 - 系列三的更多相关文章

  1. Python基础笔记系列三:list列表

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! python中的list列表是一种序列型数据类型,一有序数据集合用逗号间隔 ...

  2. Python自然语言处理-系列一

    一:python基础,自然语言概念 from nltk.book import * 1,text1.concordance("monstrous")      用语索引 2,tex ...

  3. python 10 min系列三之小爬虫(一)

    python10min系列之小爬虫 前一篇可视化大家表示有点难,写点简单的把,比如命令行里看论坛的十大,大家也可以扩展为抓博客园的首页文章 本文原创,同步发布在我的github上 据说去github右 ...

  4. Python自然语言处理系列之模拟退火算法

    1.基本概念 模拟退火算法(Simulated Annealing,SA)是一种模拟固体降温过程的最优化算法.其模拟的过程是首先将固体加温至某一温度,固体内部的粒子随温度上升慢慢变为无序的状态,内能增 ...

  5. Python自然语言处理 - 系列四

    一 如何使用形式化语法来描述无限的句子集合的结构?    --上下位无关文法       1.1 一个例子:      grammar1 = nltk.parse_cfg(""&q ...

  6. python 自然语言处理(三)____条件频率分布

    条件频率分布就是频率分布的集合,每个频率分布有一个不同的“条件”,这个条件通常是文本的类别.当语料文本分为几类(文体,主题,作者等)时,可以计算每个类别独立的频率分布,这样,就可以通过条件频率分布研究 ...

  7. 机器学习算法与Python实践之(三)支持向量机(SVM)进阶

    机器学习算法与Python实践之(三)支持向量机(SVM)进阶 机器学习算法与Python实践之(三)支持向量机(SVM)进阶 zouxy09@qq.com http://blog.csdn.net/ ...

  8. 《Python爬虫学习系列教程》学习笔记

    http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己 ...

  9. Python操作redis系列之 列表(list) (四)

    # -*- coding: utf- -*- import redis r =redis.Redis(host=,password="ZBHRwlb1608") 1. Lpush ...

随机推荐

  1. HDU 5073 Galaxy 2014 Asia AnShan Regional Contest 规律题

    推公式 #include <cstdio> #include <cmath> #include <iomanip> #include <iostream> ...

  2. Easyui 基于kindeditor的扩展

    源码 /** * Author : ____′↘夏悸 * Easyui KindEditor的简单扩展. * 有了这个之后,你就可以像使用Easyui组件的方式使用KindEditor了 * 前提是你 ...

  3. Web Services 概要

    WSDL WSDL 是基于 XML 的用来描述 Web services 以及如何访问它们的一种语言. WSDL 可描述 web service,连同用于 web service 的消息格式和协议的细 ...

  4. eclipse 遇关键字enum编译问题解决

    今天公司系统升级 JDK1.4 到 JDK1.5, 结果工程在eclipse中编译不能通过: Enumeration enum = ………… 但是eclipse报错: Multiple markers ...

  5. win10输入法设置

    控制面板中: ok.

  6. 获取当前AppDelegate 正在显示的UIViewController

    UIWindow+PazLabs.h (header file) #import <UIKit/UIKit.h> @interface UIWindow (PazLabs) - (UIVi ...

  7. Spring JDBC-混合框架的事务管理

    ​ Spring 抽象的 DAO 体系兼容多种数据访问技术,它们各有特色,各有千秋. Hibernate 是非常优秀的 ORM 实现方案,但对底层 SQL 的控制不太方便 MyBatis 则通过模板化 ...

  8. javascript之冒泡排序

    Array.prototype.bubble = function () { var temp; //第1轮比较求第一,第二轮求第二,以此类推(i<=数组成员的个数); for (var i = ...

  9. 前端框架之jQuery

    一 iQuery是什么 jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team jQuery是继prototype之后又一个优秀的Java ...

  10. Android系统移植与调试之------->如何修改Android手机显示的4G信号强度的格子数

    在修改显示的信号强度之前,先了解一下什么是dB,什么是dBm? 1.dB dB是一个表征相对值的值,纯粹的比值,只表示两个量的相对大小关系,没有单位,当考虑甲的功率相比于乙功率大或小多少个dB时, 按 ...