文本分类算法之–贝叶斯文本分类算法[通俗易懂]

文本分类算法之–贝叶斯文本分类算法[通俗易懂]文本分类过程例如文档:GoodgoodstudyDaydayup可以用一个文本特征向量来表示,x=(Good,good,study,Day,day,up)。在文本分类中,假设我们有一个文档d∈X,类别c又称为标签。我们把一堆打了标签的文档集合作为训练样本,∈X×C。例如:={BeijingjoinstheWorldTradeOrganization,C

大家好,又见面了,我是你们的朋友全栈君。

文本分类过程

例如文档:Good good study Day day up可以用一个文本特征向量来表示,x=(Good, good, study, Day, day , up)。在文本分类中,假设我们有一个文档dX,类别c又称为标签。我们把一堆打了标签的文档集合<d,c>作为训练样本,<d,c>X×C。例如:<d,c>={Beijing joins the World Trade Organization, China}对于这个只有一句话的文档,我们把它归类到 China,即打上china标签。

朴素贝叶斯分类器是一种有监督学习,常见有两种模型,多项式模型(multinomial model)即为词频型和伯努利模型(Bernoulli model)即文档型。二者的计算粒度不一样,多项式模型以单词为粒度,伯努利模型以文件为粒度,因此二者的先验概率和类条件概率的计算方法都不同。计算后验概率时,对于一个文档d,多项式模型中,只有在d中出现过的单词,才会参与后验概率计算,伯努利模型中,没有在d中出现,但是在全局单词表中出现的单词,也会参与计算,不过是作为反方参与的。这里暂不考虑特征抽取、为避免消除测试文档时类条件概率中有为0现象而做的取对数等问题。

2.1多项式模型

1)基本原理

在多项式模型中, 设某文档d=(t1,t2,…,tk)tk是该文档中出现过的单词,允许重复,则

先验概率P(c)= c下单词总数/整个训练样本的单词总数

类条件概率P(tk|c)=(c下单词tk在各个文档中出现过的次数之和+1)/(c下单词总数+|V|)

V是训练样本的单词表(即抽取单词,单词出现多次,只算一个),|V|则表示训练样本包含多少种单词。 P(tk|c)可以看作是单词tk在证明d属于类c上提供了多大的证据,而P(c)则可以认为是类别c在整体上占多大比例(有多大可能性)

2)举例

给定一组分好类的文本训练数据,如下:

docId

doc

类别

In c=China?

1

Chinese Beijing Chinese

yes

2

Chinese Chinese Shanghai

yes

3

Chinese Macao

yes

4

Tokyo Japan Chinese

no

给定一个新样本Chinese Chinese Chinese Tokyo Japan,对其进行分类。该文本用属性向量表示为d=(Chinese, Chinese, Chinese, Tokyo, Japan),类别集合为Y={yes, no}

yes下总共有8个单词,类no下总共有3个单词,训练样本单词总数为11,因此P(yes)=8/11, P(no)=3/11。类条件概率计算如下:

P(Chinese | yes)=(5+1)/(8+6)=6/14=3/7

P(Japan | yes)=P(Tokyo | yes)= (0+1)/(8+6)=1/14

P(Chinese|no)=(1+1)/(3+6)=2/9

P(Japan|no)=P(Tokyo| no) =(1+1)/(3+6)=2/9

分母中的8,是指yes类别下textc的长度,也即训练样本的单词总数,6是指训练样本有Chinese,Beijing,Shanghai, Macao, Tokyo, Japan 6个单词,3是指no类下共有3个单词。

有了以上类条件概率,开始计算后验概率:

P(yes | d)=(3/7)3×1/14×1/14×8/11=108/184877≈0.00058417

P(no | d)= (2/9)3×2/9×2/9×3/11=32/216513≈0.00014780

比较大小,即可知道这个文档属于类别china

2.2伯努利模型

1)基本原理

P(c)= c下文件总数/整个训练样本的文件总数

P(tk|c)=(c下包含单词tk的文件数+1)/(c下样本总数+2)

2)举例

使用前面例子中的数据,模型换成伯努利模型。

yes下总共有3个文件,类no下有1个文件,训练样本文件总数为11,因此P(yes)=3/4, P(Chinese | yes)=(3+1)/(3+2)=4/5,条件概率如下:

P(Japan | yes)=P(Tokyo | yes)=(0+1)/(3+2)=1/5

P(Beijing | yes)= P(Macao|yes)= P(Shanghai |yes)=(1+1)/(3+2)=2/5

P(Chinese|no)=(1+1)/(1+2)=2/3

P(Japan|no)=P(Tokyo| no) =(1+1)/(1+2)=2/3

P(Beijing| no)= P(Macao| no)= P(Shanghai | no)=(0+1)/(1+2)=1/3

有了以上类条件概率,开始计算后验概率,

P(yes|d)=P(yes)×P(Chinese|yes)×P(Japan|yes)×P(Tokyo|yes)×(1-P(Beijing|yes))×(1-P(Shanghai|yes))×(1-P(Macao|yes))=3/4×4/5×1/5×1/5×(1-2/5) ×(1-2/5)×(1-2/5)=81/15625≈0.005

P(no|d)= 1/4×2/3×2/3×2/3×(1-1/3)×(1-1/3)×(1-1/3)=16/729≈0.022

因此,这个文档不属于类别china

后记:文本分类是作为离散型数据的,以前糊涂是把连续型与离散型弄混一块了,朴素贝叶斯用于很多方面,数据就会有连续和离散的,连续型时可用正态分布,还可用区间,将数据的各属性分成几个区间段进行概率计算,测试时看其属性的值在哪个区间就用哪个条件概率。再有TF、TDIDF,这些只是描述事物属性时的不同计算方法,例如文本分类时,可以用单词在本文档中出现的次数描述一个文档,可以用出现还是没出现即0和1来描述,还可以用单词在本类文档中出现的次数与这个单词在剩余类出现的次数(降低此属性对某类的重要性)相结合来表述。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137748.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 阿里云部署SSL证书「建议收藏」

    阿里云部署SSL证书「建议收藏」查找中间证书为了确保兼容到所有浏览器,我们必须在阿里云上部署中间证书,如果不部署证书,虽然安装过程可以完全也不会报错,但可能导致Android系统,Chrome和Firefox等浏览器无法识别。

    2022年7月3日
    151
  • SDN、NFV学习与理解「建议收藏」

    SDN、NFV学习与理解「建议收藏」这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Ma…

    2025年10月15日
    3
  • 华为私有云的搭建方案_如何搭建私有云

    华为私有云的搭建方案_如何搭建私有云最近有个Team共享文档的需求。包括大文件,有个access文件超过500m。开始用百度网盘,发现只能分享,不能共享。试了几个其它网盘,广告超级多,但是都没有共享这个功能。基于此,找了几个私有云程序。最后选择了可道云。完美解决云共享。分享一下自己采坑经验:1.NextCloud支持Windows,Mac,Linux,iOS,Android平台,是OwnCloud的衍生版本,很不错的产…

    2022年6月16日
    63
  • qt创建线程的几种方式_创建一个新线程的方法

    qt创建线程的几种方式_创建一个新线程的方法Java中创建线程主要有三种方式:一、继承Thread类创建线程类(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。(2)创建Thread子类的实例,即创建了线程对象。(3)调用线程对象的start()方法来启动该线程。publicclassFirstThreadTestextendsThread{inti=0;//重写run方法,run方法的方法体就是现场执行体

    2022年8月30日
    4
  • python爬虫常用库

    python爬虫常用库python爬虫常用库请求库:1.requests这个库是爬虫最常用的一个库2.SeleniumSelenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下

    2022年7月3日
    21
  • PAD图主要特点「建议收藏」

    PAD图主要特点「建议收藏」PAD图主要特点1.PAD图表示的程序结构的执行顺序是自最左边的竖线的上端开始,自上而下,自左向右。2.用PAD图表示的程序片段结构清晰,层次分明3.支持自顶向下、逐步求精的设计方法4.只能用于结构化的程序设计5.PAD图不仅可以表示程序逻辑,还能表示数据结构…

    2022年8月13日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号