ITPub博客

首页 > > > 2.2 朴素贝叶斯算法

2.2 朴素贝叶斯算法

作者:RayChou 时间:2019-12-27 10:25:14 0 删除 编辑

2.2 使用朴素贝斯进行文本分类

上一节我们讨论了朴素贝叶斯的原理,其实算法本身的原理很简单,相信耐心阅读过上一节的同学已经能很好的理解算法的原理了。那么这一节,我们就来学习一下如何使用朴素贝叶斯算法来进行简单的文档分类。

  朴素贝叶斯算法关注的是文档属于某类别的概率。文档属于某个类别的概率等于文档中每个词属于该类别的概率的综合表达式。而每个词属于该类别的概率又在一定程度上可以用这个词在该类别训练文档的出现次数(词频信息)来粗略估计,因而使得整个计算过程可行。使用朴素贝叶斯算法时,在训练阶段的主要任务就是估计这些值。

贝叶斯概率公式如下:

上式是完整的贝叶斯概率公式,简写的朴素贝斯概率公式如下:

上式指的是全样本空间里,独立事件B发生的概率乘以在B发生的情况下A发生的概率,等于独立事件A的概率乘以在A发生的情况下B发生的概率。

  如果研究两件事的条件概率关系用这个简化版的公式肯定一目了然的,那么在文本分类里怎么使用呢?

  首先,统计每个词在每一个类别中出现的概率,用P(Dj|x)来表示,如x是“体育类”(y是“娱乐类”,z是“财经类”等等),Dj表示某一个词的词频,如果D1表示“NBA”这个词的词频,那么P(Dj|x)就表示“体育类”中出现“NBA”的概率。如此类推,P(Dj|y)表示“娱乐类”中出现“NBA”的概率,如此类推.....

文本分类的步骤

  • 对训练文章进行分词和向量化
  • 对所有文章类别计算P(Dj|x)、P(Dj|y)、P(Dj|z)等
  • 对待分类的文章进行分词和向量化。
  • 用待分类文章的词向量中的每个词计算P(x|Dj),P(y|Dj),P(z|Dj)   这里需要注意的是,P(x|Dj)不是计算一个值,而是计算整个词向量中每个词的值。假如,词向量中有1000个词,那么,1000个词都要进行计算。
  • 计算概率,看看待分类文章属于哪个类型的文章概率最大。

这个部分计算需要注意一点,如计算一个完整的词向量D1到D1000,属于x类的概率,公式如下:

解释一下,这里P(Dj|x)相当于一个完整词向量中所有词在X类文章中的概率,其计算方法就是将出现的每一个词的概率相乘。

那么,我们来回顾一下贝叶斯公式:

P(x|Dj)就是要求的,完整的词向量Dj最终属于x分类的概率;

P(Dj)可以设为1,因为对于已经拿到的待分类样本,所有的词频发生的概率就已经是1了;

P(Dj|x)的含义刚刚解释过;

P(x)是所有训练文章中x类文章出现的概率。

在前面介绍朴素贝叶斯分类的时候提过,在Python Scikit-learn库中支持高斯朴素贝叶斯、多项式朴素贝叶斯和伯努利朴素贝叶斯三种分类方法。在这里使用多项式朴素贝叶斯来做文章分类,完整的例子如下:

#在Scikit-learn里提供了几种贝叶斯分类,其中多项式贝叶斯最适合做文本分类
from sklearn.naive_bayes import MultinomialNB

#现在把TF-IDF转换后的结果和每条结果对应的主题编号twenty_train.target放入分类器中进行训练
clf = MultinomialNB().fit(X_train_tfidf,twenty_train.target)

#创建测试集合,这里有2条数据,每条数据一行内容,然后进行向量化和TF-IDF转换
doc = ['God is love','OpenGL on the GPU is fast']
x_new_counts = count_vect.transform(docs_new)
x_new_tfidf = tfidf_transformer.transform(X_new_counts)

#预测
predicted = clf.predict(X_new_tfidf)

#打印结果
for doc,category in zip(docs_new,predicted):
     print('%r => %s' %(doc,twenty_train.target_names[category]))


小结

通过一个简单新闻分类的例子,我们了解过朴素贝叶斯进行文本分类的过程。在这里我留下一个思考题:朴素贝叶斯能否进行多分类呢?如果可以的话,应该怎样做?欢迎在留言区留下你的想法。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69954080/viewspace-3158467/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 2.3 逻辑回归算法
请登录后发表评论 登录
全部评论
现任金山办公软件人工智能组高级AI研发工程师。多年从事机器学习,特别是NLP自然语言处理算法的研究及开发工作。拥有丰富的软件开发经验,以及丰富的人工智能算法训练平台开发经验。

注册时间:2019-11-14

  • 博文量
    71
  • 访问量
    60604