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

导入必要的软件包 -

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

完整代码

import randomfrom nltk import NaiveBayesClassifier
from nltk.classify import accuracy as nltk_accuracy
from nltk.corpus import namesdef 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)))

转载于:https://www.cnblogs.com/duoba/p/9535701.html

易百教程人工智能python修正-人工智能NLTK性别发现器相关推荐

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

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

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

    分类技术或模型试图从观测值中得出一些结论. 在分类问题中,我们有分类输出,如"黑色"或"白色"或"教学"和"非教学". ...

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

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

  4. 人工智能NLTK性别发现器

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

  5. 易百教程wxpython_WxPython教程

    wxPython是一个Python包装wxWidgets(这是用 C++ 编写),一个流行的跨平台GUI工具包.由Robin Dunn以及Harri Pasanen开发,wxPython是作为一个Py ...

  6. android教程 易百教程,Android RadioGroup

    RadioGroup中使用类组单选按钮.如果我们选中一个单选按钮属于一个单选按钮组,它会自动取消选中同一组内的任何先前检查的单选按钮. RadioGroup 属性 以下是RadioGroup中控件有关 ...

  7. mysql 易百教程

    mysql 易百教程  https://www.yiibai.com/mysql/text.html 转载于:https://www.cnblogs.com/dengmeinan/p/9767915. ...

  8. 比较好的学习网站:易百教程网

    比较好的学习网站:易百教程网 例如网站上关于pg和es的教程: postgrepSQL https://www.yiibai.com/html/postgresql/2013/080567.html ...

  9. 易百教程——JavaFX教程

    转载自  易百教程--JavaFX教程 JavaFX是Java的下一代图形用户界面工具包.JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序. JavaFX允许开发人员快速 ...

最新文章

  1. 怎么计算一组数据的波动_数据分析(一):数据描述统计
  2. Android编程: MVC模式、应用的生命周期
  3. android 重绘如何能不闪一下屏幕_浏览器渲染机制——重绘重排
  4. quartz获取开始结束时间_王者荣耀s21什么时候开始是9月24日吗?王者荣耀s20赛季结束时间...
  5. 认识计算机系统反思,《计算机系统组成》教学反思
  6. macOS自带Python2.7删除之后的悲剧
  7. 从渲染页面的角度来聊一聊浏览器的工作原理
  8. Linxu:磁盘分区
  9. HDU 1568 Fibonacci【求斐波那契数的前4位/递推式】
  10. iOS- 快速实现展示布局
  11. java常用的空对象 null
  12. wrk -- 小巧轻盈的 http 性能测试工具.
  13. jad反编译成java,Jad java反编译指令
  14. 马斯克喊话库克:昨天你对我爱答不理,今天我让你高攀不起
  15. 数据库原理及应用教程(第4版|微课版)陈志泊-第三章习题
  16. linux下Intel无线网卡驱动安装
  17. CentOS7 安装Mldonkey(电驴)步骤
  18. kindle看pdf的文档字体调小了
  19. 两个有序链表合并成一个有序的单链表
  20. 2021支付宝扫福玩法攻略

热门文章

  1. AndroidStudio中提示:Failed to resolve: com.github.CymChad:BaseRecyclerViewAdapterHelper:
  2. SpringBoot+MyBatisPlus整合时提示:Invalid bound statement(not found):**.dao.UserDao.queryById
  3. springboot-自动配置原理
  4. 【转载】word2vec 中的数学原理详解
  5. 有关windows 10自动更新 永久关闭
  6. 企业联合体的形式_母公司是否可以用子公司资质进行投标,且不以联合体的形式?...
  7. 1 折限时团购!王牌讲师团年度精品课劲爆来袭​!
  8. 【干货下载】聚美优品、中商惠民、倍全,如何让数据驱动“新零售”落地?...
  9. 埋点套路深,千万别掉“坑”
  10. vim 的 grep 插件`Leaderf rg`:grep 和模糊匹配的完美结合