在这个问题陈述中,将通过提供名字来训练分类器以找到性别(男性或女性)。 我们需要使用启发式构造特征向量并训练分类器。这里使用scikit-learn软件包中的标签数据。 以下是构建性别查找器的Python代码 -

导入必要的软件包 -

import random

from nltk import NaiveBayesClassifier
from nltk.classify import accuracy as nltk_accuracy
from nltk.corpus import names
现在需要从输入字中提取最后的N个字母。 这些字母将作为功能 -
def extract_features(word, N = 2):
last_n_letters = word[-N:]
return {'feature': last_n_letters.lower()} if __name__=='__main__':
 

使用NLTK中提供的标签名称(男性和女性)创建培训数据 -

male_list = [(name, 'male') for name in names.words('male.txt')]
female_list = [(name, 'female') for name in names.words('female.txt')]
data = (male_list + female_list) random.seed(5)
random.shuffle(data)
 

现在,测试数据将被创建如下 -

namesInput = ['Rajesh', 'Gaurav', 'Swati', 'Shubha']
 

使用以下代码定义用于列车和测试的样本数 -

train_sample = int(0.8 * len(data))
 

现在,需要迭代不同的长度,以便可以比较精度 -

for i in range(1, 6):
print('\nNumber of end letters:', i)
features = [(extract_features(n, i), gender) for (n, gender) in data]
train_data, test_data = features[:train_sample],
features[train_sample:]
classifier = NaiveBayesClassifier.train(train_data)
 

分类器的准确度可以计算如下 -

accuracy_classifier = round(100 * nltk_accuracy(classifier, test_data), 2)
print('Accuracy = ' + str(accuracy_classifier) + '%')
 

现在,可以预测输出结果 -

for name in namesInput:
print(name, '==>', classifier.classify(extract_features(name, i))
 

上述程序将生成以下输出 -

Number of end letters: 1
Accuracy = 74.7%
Rajesh -> female
Gaurav -> male
Swati -> female
Shubha -> female Number of end letters: 2
Accuracy = 78.79%
Rajesh -> male
Gaurav -> male
Swati -> female
Shubha -> female Number of end letters: 3
Accuracy = 77.22%
Rajesh -> male
Gaurav -> female
Swati -> female
Shubha -> female Number of end letters: 4
Accuracy = 69.98%
Rajesh -> female
Gaurav -> female
Swati -> female
Shubha -> female Number of end letters: 5
Accuracy = 64.63%
Rajesh -> female
Gaurav -> female
Swati -> female
Shubha -> female
在上面的输出中可以看到,结束字母的最大数量的准确性是两个,并且随着结束字母数量的增加而减少。

完整代码

import random

from nltk import NaiveBayesClassifier
from nltk.classify import accuracy as nltk_accuracy
from nltk.corpus import names def extract_features(word, N=2):
last_n_letters = word[-N:]
return {'feature': last_n_letters.lower()} if __name__ == '__main__': male_list = [(name, 'male') for name in names.words('male.txt')]
female_list = [(name, 'female') for name in names.words('female.txt')]
data = (male_list + female_list) random.seed(5)
random.shuffle(data)
namesInput = ['Rajesh', 'Gaurav', 'Swati', 'Shubha']
train_sample = int(0.8 * len(data)) for i in range(1, 6):
print('\nNumber of end letters:', i)
features = [(extract_features(n, i), gender) for (n, gender) in data]
train_data, test_data = features[:train_sample], features[train_sample:] classifier = NaiveBayesClassifier.train(train_data) accuracy_classifier = round(100 * nltk_accuracy(classifier, test_data), 2)
print('Accuracy = ' + str(accuracy_classifier) + '%') for name in namesInput:
print(name, '==>', classifier.classify(extract_features(name, i)))

易百教程人工智能python修正-人工智能NLTK性别发现器的更多相关文章

  1. 易百教程人工智能python修正-人工智能无监督学习(聚类)

    无监督机器学习算法没有任何监督者提供任何指导. 这就是为什么它们与真正的人工智能紧密结合的原因. 在无人监督的学习中,没有正确的答案,也没有监督者指导. 算法需要发现用于学习的有趣数据模式. 什么是聚 ...

  2. 易百教程人工智能python修正-人工智能监督学习(回归)

    回归是最重要的统计和机器学习工具之一. 我们认为机器学习的旅程从回归开始并不是错的. 它可以被定义为使我们能够根据数据做出决定的参数化技术,或者换言之,允许通过学习输入和输出变量之间的关系来基于数据做 ...

  3. 易百教程人工智能python修正-人工智能监督学习(分类)

    分类技术或模型试图从观测值中得出一些结论. 在分类问题中,我们有分类输出,如“黑色”或“白色”或“教学”和“非教学”. 在构建分类模型时,需要有包含数据点和相应标签的训练数据集. 例如,如果想检查图像 ...

  4. 易百教程人工智能python修正-人工智能数据准备-标记数据

    我们已经知道,某种格式的数据对于机器学习算法是必需的. 另一个重要的要求是,在将数据作为机器学习算法的输入发送之前,必须正确标记数据. 例如,如果所说的分类,那么数据上会有很多标记. 这些标记以文字, ...

  5. 易百教程人工智能python修正-人工智能数据准备-预处理数据

    预处理数据 在我们的日常生活中,需要处理大量数据,但这些数据是原始数据. 为了提供数据作为机器学习算法的输入,需要将其转换为有意义的数据. 这就是数据预处理进入图像的地方. 换言之,可以说在将数据提供 ...

  6. 易百教程人工智能python补充-NLTK包

    自然语言处理(NLP)是指使用诸如英语之类的自然语言与智能系统进行通信的AI方法. 如果您希望智能系统(如机器人)按照您的指示执行操作,希望听取基于对话的临床专家系统的决策时,则需要处理自然语言. N ...

  7. MyBatis整合Spring MVC(易百教程)

    MyBatis是ibatis的升级版,作为hibernate的老对手,它是一个可以自定义SQL.存储过程和高级映射的持久层框架.与Hibernate 的主要区别就是 Mybatis 是半自动化的,而 ...

  8. Mybatis与Spring集成(易百教程)

    整个Mybatis与Spring集成示例要完成的步骤如下: 1.示例功能描述 2.创建工程 3.数据库表结构及数据记录 4.实例对象 5.配置文件 6.测试执行,输出结果 1.示例功能描述 在本示例中 ...

  9. Mybatis 多对多(易百教程)

    mybatis3.0 添加了association和collection标签专门用于对多个相关实体类数据进行级联查询,但仍不支持多个相关实体类数据的级联保存和级联删除操作.因此在进行实体类多对多映射表 ...

随机推荐

  1. [Beta阶段]第十一次Scrum Meeting

    Scrum Meeting博客目录 [Beta阶段]第十一次Scrum Meeting 基本信息 名称 时间 地点 时长 第十一次Scrum Meeting 19/05/20 大运村寝室6楼 15mi ...

  2. Netty通信网络参数配置

    Netty服务端/客户端网络通信过程中常用的参数: Name Associated setter method "writeBufferHighWaterMark" 默认64 * ...

  3. 【转】Android Fastboot 与 Recovery 和刷机

    1. 首先来看下Android系统的分区:   Android系统的分区.jpg   Android分区解释.png 安卓系统一般把rom芯片分成7个区,如果再加上内置sd卡这个分区,就是8个: hb ...

  4. SpringMVC(十四):SpringMVC 与表单提交(post/put/delete的用法);form属性设置encrypt='mutilpart/form-data'时,如何正确配置web.xml才能以put方式提交表单

    SpringMVC 与表单提交(post/put/delete的用法) 为了迎合Restful风格,提供的接口可能会包含:put.delete提交方式.在springmvc中实现表单以put.dele ...

  5. ethtool 强制设置网卡运行模式为100M

    ethtool -s eth0 autoneg off speed 100 duplex full

  6. OpenCV2 与opencv3 问题解决

    本文链接:https://blog.csdn.net/ling_xiobai/article/details/79691785今天使用opencv运行一个脚本,但是出现cv2.cv.BoxPoints ...

  7. Hive学习笔记——parse

    Hive是如何解析SQL的呢,首先拿hive的建表语句来举例,比如下面的建表语句 create table test(id int,name string)row format delimited f ...

  8. LeetCode_463. Island Perimeter

    463. Island Perimeter Easy You are given a map in form of a two-dimensional integer grid where 1 rep ...

  9. 推荐一款好用的免费FTP客户端Filezilla

    官网地址:https://filezilla-project.org/

  10. Spring-boot2X基于sharding-jdbc3.x分表分库

    ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC.Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的 ...