目录

1. 准备数据:从文本中构建词向量

1.1 词表到向量的转换函数

2. 训练算法:从词向量计算概率

3. 测试算法:根据现实情况修改分类器

3.1 朴素贝叶斯分类函数

4. 准备数据: 文档词袋模型


1. 准备数据:从文本中构建词向量

1.1 词表到向量的转换函数

def loaddataset():  # 创建一些实验样本postinglist = [['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'],['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'],['my', 'dalmation', 'is', 'so', 'cute', 'I', 'love', 'him'],['stop', 'posting', 'stupid', 'worthless', 'garbage'],['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'],['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']]classvec = [0, 1, 0, 1, 0, 1]  # 1代表侮辱性文字,0代表正常言论return postinglist, classvec# postinglist:进行词条切分后的文档集合#  classvec:类别标签的集合def createvocablist(dataset):  # 会创建一个包含在所有文档中出现的不重复词的列表vocabset = set([])  # 创建一个空集for document in dataset:vocabset = vocabset | set(document)  # 创建两个集合的并集return list(vocabset)def setofwords2vec(vocablist, inputset):# 输入参数为词汇表及某个文档returnvec = [0] * len(vocablist)  # 创建一个和词汇表等长的向量,并将其元素都设为0for word in inputset:  # 遍历文档中的所有单词if word in vocablist:returnvec[vocablist.index(word)] = 1# 如果出现了词汇表中的单词,则将输出的文档向量中的对应值设为1else:print("the word: %s is not in my Vocabulary!" % word)return returnvec# 输出的是文档向量,向量的每一元素为1或0# 分别表示词汇表中的单词在输入文档中是否出现

查看函数执行效果:

listOposts, listclasses = loaddataset()
myvocablist = createvocablist(listOposts)
print(myvocablist)

输出结果:

查看setofwords2vec()的运行结果:

print(setofwords2vec(myvocablist, listOposts[0]))
print(setofwords2vec(myvocablist, listOposts[3]))

输出结果:

2. 训练算法:从词向量计算概率

import numpy as np
def trainnb0(trainmatrix,traincategory):# trainmatrix: 文档矩阵;# traincategory:由每篇文档类别标签所构成的向量numtraindocs = len(trainmatrix)numwords = len(trainmatrix[0])pabusive = sum(traincategory)/float(numtraindocs)"下两行初始化分子变量和分母变量"p0num = np.zeros(numwords); p1num = np.zeros(numwords)p0denom = 0.0; p1denom = 0.0for i in range(numtraindocs):if traincategory[i] == 1:p1num += trainmatrix[i]p1denom += sum(trainmatrix[i])else:p0num += trainmatrix[i]p0denom += sum(trainmatrix[i])p1vect = p1num/p1denomp0vect = p0num/p0denomreturn p0vect,p1vect,pabusive

从预先加载值中调入数据:

listOposts, listclasses = loaddataset()

构建一个包含所有词的列表myvocablist:

myvocablist = createvocablist(listOposts)

for循环使用词向量来填充trainmat列表:

trainmat = []
for postindoc in listOposts:trainmat.append(setofwords2vec(myvocablist, postindoc))

下面给出属于侮辱性文档的概率以及两个类别的概率向量:

p0v, p1v, pab = trainnb0(trainmat, listclasses)
print("pab:", pab)
print("属于侮辱性文档的概率:\n", p0v)
print("属于侮辱性文档的概率:\n", p1v)

输出结果:

3. 测试算法:根据现实情况修改分类器

修改后的trainb0()函数:

def trainnb0(trainmatrix, traincategory):# trainmatrix: 文档矩阵;# traincategory:由每篇文档类别标签所构成的向量numtraindocs = len(trainmatrix)numwords = len(trainmatrix[0])pabusive = sum(traincategory)/float(numtraindocs)"下两行初始化分子变量和分母变量"p0num = np.ones(numwords); p1num = np.ones(numwords)p0denom = 2.0; p1denom = 2.0for i in range(numtraindocs):if traincategory[i] == 1:p1num += trainmatrix[i]p1denom += sum(trainmatrix[i])else:p0num += trainmatrix[i]p0denom += sum(trainmatrix[i])p1vect = np.log(p1num/p1denom)p0vect = np.log(p0num/p0denom)return p0vect,p1vect,pabusive

3.1 朴素贝叶斯分类函数

def classifynb(vec2classify, p0vec, p1vec, pclass1):p1 = sum(vec2classify * p1vec) + np.log(pclass1)  # element-wise multp0 = sum(vec2classify * p0vec) + np.log(1.0 - pclass1)if p1 > p0:return 1else:return 0def testingnb():listOposts, listclasses = loaddataset()myvocablist = createvocablist(listOposts)trainmat = []for postindoc in listOposts:trainmat.append(setofwords2vec(myvocablist, postindoc))p0v, p1v, pab = trainnb0(np.array(trainmat), np.array(listclasses))testentry = ['love', 'my', 'dalmation']thisdoc = np.array(setofwords2vec(myvocablist, testentry))print(testentry, 'classified as: ', classifynb(thisdoc, p0v, p1v, pab))testentry = ['stupid', 'garbage']thisdoc = np.array(setofwords2vec(myvocablist, testentry))print(testentry, 'classified as: ', classifynb(thisdoc, p0v, p1v, pab))

查看分类器输出结果:

testingnb()

输出结果:

4. 准备数据: 文档词袋模型

def bagofwords2Vecmn(vocablist, inputset):returnVec = [0] * len(vocablist)for word in inputset:if word in vocablist:returnVec[vocablist.index(word)] += 1return returnVec

机器学习实战——4.5 使用Python进行文本分类相关推荐

  1. 《机器学习实战》chapter04 使用Python进行文本分类

    一.使用朴素贝叶斯过滤垃圾邮件 使用朴素贝叶斯计算每一封邮件是垃圾邮件的概率p1和非垃圾邮件的概率p0,如果p1 > p0,则是垃圾邮件,否则不是. 首先,我们先介绍一个例子: 对于任意一条评论 ...

  2. 【阿旭机器学习实战】【33】中文文本分类之情感分析--朴素贝叶斯、KNN、逻辑回归

    [阿旭机器学习实战]系列文章主要介绍机器学习的各种算法模型及其实战案例,欢迎点赞,关注共同学习交流. 目录 1.查看原始数据结构 2.导入数据并进行数据处理 2.1 提取数据与标签 2.2 过滤停用词 ...

  3. 《机器学习实战》读书笔记(第一部分:分类)

    参考<机器学习实战> 一.KNN 原理: 步骤: 数据处理归一化(x-min)/(max-min) 计算已知类别数据集中的点与当前点之间的距离 选取与当前点距离最小的k个点 确定k个点所在 ...

  4. python文本分类_教你用python做文本分类

    什么是文本分类 一个文本分类问题就是将一篇文档归入预先定义的几个类别中的一个或几个.通俗点说,就是拿一篇文章,问计算机这文章要说的究竟是体育,经济还是教育.文本分类是一个监督学习的过程,常见的应用就是 ...

  5. 【TensorFlow】Keras机器学习基础知识-使用TF.Hub进行文本分类

    此笔记本(notebook)使用评论文本将影评分为积极(positive)或消极(nagetive)两类.这是一个二元(binary)或者二分类问题,一种重要且应用广泛的机器学习问题. 本教程演示了使 ...

  6. NLP入门实践总结:教你用Python实现文本分类(附代码)

    分类问题是NLP(Natural Language Processing,自然语言处理)领域的经典常见任务,而随着预训练模型的发展,预训练时代下的文本分类算法逐步成为了我们从事NLP相关工作的必备技能 ...

  7. 【代码实战】基于pytorch实现中文文本分类任务

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 来自 | 知乎 地址 | https://zhuanlan.zhihu.com/p/73176 ...

  8. TensorFlow 2官方教程 . Keras机器学习基础知识 . 使用TF Hub进行文本分类

    写在前面 此篇博客转载自tensorflow官方教程中文翻译版: https://www.tensorflow.org/tutorials/keras/text_classification_with ...

  9. python 中文文本分类

    写这篇博文用了很多时间和精力,如果这篇博文对你有帮助,希望您可以打赏给博主相国大人.哪怕只捐1毛钱,也是一种心意.通过这样的方式,也可以培养整个行业的知识产权意识.我可以和您建立更多的联系,并且在相关 ...

最新文章

  1. 2021年大数据常用语言Scala(四):基础语法学习 声明变量
  2. 如何使用myFocus插件制作焦点图效果
  3. 超声相控阵合成孔径成像FPGA设计介绍
  4. boost::describe模块实现==重载的测试程序
  5. python excel 模块 性能_【xlwings1】Python-Excel 模块哪家强
  6. linux下常用的关机命令有:shutdown、halt、poweroff、init;重启命令有:reboot。下面本文就主要介绍一些常用的关机命令以及各种关机命令之间的区别和具体用法。
  7. why I need register Apache CXF as servlet
  8. Oracle取最大/最小值函数
  9. 查看scala变量数据类型_Scala文字,变量和数据类型| Scala编程教程
  10. 【蓝桥杯每日一练】 三色旗
  11. 模块开发者使用 ES Modules 的正确姿势
  12. 火狐浏览器插件(XPI 文件)签名指南
  13. 由href return false 来看阻止默认事件
  14. 无法在 DLL SqlServerSpatial110.dll 中找到名为 SetClrFeatureSwitchMap 解决方法
  15. oracle11gr2克隆安装,克隆安装Oracle 11G HOME
  16. 什么叫大数据 大数据的概念
  17. 【学术技巧】论文答辩,老师会仔细看论文内容吗?
  18. sas 结果导出到excel 打不开解决办法
  19. 流水灯电路设计实验--VHDL
  20. IOS------网易新闻滚动标题

热门文章

  1. 三菱m80润滑参数_三菱M70/M80高精度调整介绍
  2. C++程序调试法之输出中间变量
  3. 网易明日之后服务器瘫痪修复,明日之后:服务器“瘫痪”的原因找到了,原来是北方帝国故意的!...
  4. 利用信号量实现进程互斥(操作系统)
  5. PS证件照换背景颜色
  6. 设计模式解析---------迪米特原则
  7. 深度学习导论与应用实践(机器学习篇)
  8. skywalking自定义增强插件apm-customize-enhance-plugin
  9. CCS5.5 仿真配置文件操作说明
  10. 矢量图标的管理和应用