专栏首页码匠的流水账朴素贝叶斯算法文本分类原理

朴素贝叶斯算法文本分类原理

本文主要简单研究一下朴素贝叶斯算法是如何对文本进行分类的。

贝叶斯算法

贝叶斯方法把计算“具有某特征的条件下属于某类”的概率转换成需要计算“属于某类的条件下具有某特征”的概率,属于有监督学习。

后验概率 = 先验概率 x 调整因子

这就是贝叶斯推断的含义。我们先预估一个”先验概率”,然后加入实验结果,看这个实验到底是增强还是削弱了”先验概率”,由此得到更接近事实的”后验概率”。

公式

p(yi|x) = p(yi) * p(x|yi) / p(x)

p(所属类别yi|某种特征x) = p(所属类别yi) * p(某种特征x|所属类别yi) /p(某种特征x)

根据公式就可以把计算“具有某种特征的条件下属于某个类别”的概率转换为:“属于某种类别的条件下,具有某种特征”的概率。

  • 先验概率 其中p(yi)称为先验概率,即在x事件发生之前,发生yi事件的概率
  • 后验概率 p(yi|x)称为后验概率,即在x事件发生之后,发生yi事件的概率,属于可观测的值
  • 调整因子 p(x|yi)/p(x)为调整因子,也成为可能性函数(Likelyhood),使得预估概率更接近真实概率

朴素贝叶斯算法

朴素贝叶斯理论源于随机变量的独立性:就文本分类而言,从朴素贝叶斯的角度来看,句子中的两两词之间的关系是相互独立的,即一个对象的特征向量中每个维度都是相互独立的。这是朴素贝叶斯理论的思想基础。其流程如下

- 第一阶段,训练数据生成训练样本集:TF-IDF。
- 第二阶段,对每个类别计算P(yi)。
- 第三阶段,对每个特征属性计算所有类别下的条件概率p(ai|yi)。
- 第四阶段,对每个类别计算p(x|yi)p(yi)。
- 第五阶段,以p(x|yi)p(yi)的最大项作为x的所属类别。

问题

假设x是一个待分类文本,其特征为{a1,a2,…,am};已知类别集合{y1,y2,…yn};求x所属的类别

基本思路

如果p(yi|x) = max{p(y1|x),p(y2|x),p(y3|x),...,p(yn|x)},则x属于yi类别

如何计算p(yi|x)

利用贝叶斯公式

p(yi|x) = p(x|yi)*p(yi) / p(x)

问题转换为对每个类别计算p(x|yi)p(yi),以p(x|yi)p(yi)的最大项作为x的所属类别

计算p(x|yi)

由于朴素贝叶斯假定各个特征是相互独立的,因此

p(x|yi) = p(a1|yi)*p(a2|yi)...*p(am|yi)

p(x|yi)/p(x)为调整因子

计算p(ai|yi)

而p(ai|yi)则可以通过训练集(已经分好类),统计各个类别下面各种特征的条件概率p(ai|yi)得到。

自此求x所属的类别p(yi|x)被一步步化解,可以通过计算训练集中每个类别下各种特征的条件概率p(ai|yi)来求解得到。

而训练的过程则是根据训练集去计算调整因子的影响因素p(x|yi)=p(a1|yi)p(a2|yi)…p(am|yi),因此训练集的好坏直接影响预测结果的准确性。

TF-IDF

TF-IDF( term frequency–inverse document frequency )是一种用于信息检索与数据挖掘的常用加权方法。

TF-IDF = TF * IDF

TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的频率 TF 高,并且在其他文章中很少出现(IDF值大),则认为此词或者短语具有很好的类别区分能力,适合用来分类。

TF

意思是词频( Term Frequency ),即某个词在文件中出现的频率

TFi = Ndti / Ndt1..n

即该词在文档中出现的次数/该文档所有词出现的次数之和

IDF

意思是逆向文件频率( Inverse Document Frequency ),它是一个词语重要性的调整系数,衡量一个词是不是常见词。如果某个词比较少见,但是它在这篇文章中多次出现,那么它很可能就反映了这篇文章的特性,正是我们所需要的关键词。

某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到

IDF = log(Nd/Ndt)

Nd为总文件数,Ndt为包含该词语的文件数目

如果一个词非常常用则Ndt变大,则IDF值会变小,因而TF-IDF值也会变小,这样就很好地削弱了常用词的特征性。

小结

朴素贝叶斯算法将问题一步步化解,最后通过训练集求解,值得好好学习推敲。

doc

  • NLP汉语自然语言处理原理与实践
  • 请用简单易懂的语言描述朴素贝叶斯分类器?
  • 数学之美番外篇:平凡而又神奇的贝叶斯方法
  • 贝叶斯推断及其互联网应用(一):定理简介
  • 贝叶斯推断及其互联网应用(二):过滤垃圾邮件
  • 从决策树学习谈到贝叶斯分类算法、EM、HMM
  • 机器学习|TF-IDF提取文本特征词

本文分享自微信公众号 - 码匠的流水账(geek_luandun)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java12的新特性

    对于需要返回值的switch expression要么正常返回值要么抛出异常,以下这两种写法都是错误的

    codecraft
  • OpenMessaging概览

    OpenMessaging是阿里牵头发起的分布式消息模型标准,其api规范首先在rocketmq中落地实现。通过这个标准可以简化各种消息中间件的高复杂性和不兼容...

    codecraft
  • spring-cloud-stream-binder-kafka属性配置

    本文简单介绍下spring-cloud-stream-binder-kafka的一些属性配置。

    codecraft
  • FreeBSD下的工具(sysctl、netstat等)如何移植到F-Stack

    F-Stack基于DPDK,绕过内核的协议栈,移植了FreeBSD协议栈到用户态,在大幅提高性能的同时,常规网络设置分析工具(如sysctl、netstat、i...

    F-Stack
  • Excel实战技巧80: 添加可视化的指示标志

    视觉效果比枯燥的数字更有表现力。我们常常将数据图表化,我们也可以对图表中的一些细节可视化以作为补充。本文将展示如何在解释文本中添加可视化的指示标志,使读者在看文...

    fanjy
  • WordPress 提示”存在不一致的文件权限”的解决办法

    魏艾斯博客www.vpsss.net
  • 使用Python操作机器人聊天

    萌新偶然发现一个好玩的东西 使用Python和机器人聊天 效果 ? 工具 图灵机器人API itchat(提前安装) 准备 自己需要去图灵机器人注册账号,拿到A...

    小歪
  • python实现微信接口

    比如在我的微信中有一个备注为autolife的人,我可以使用这个方法搜索出详细的信息

    爱撒谎的男孩
  • 【学习】教你用R的Inkscape制作数据图表

    从我使用R开始,就一直用R来制作图表,只有一个理由:R在过滤和数据可视化方面是一个相当了不起的工具。特别是如果我们使用优秀的ggplot2库,我们可以将原始数据...

    小莹莹
  • RTOS内功修炼记(六)—— 任务间通信为什么不用全局变量?

    第一篇文章讲述了任务的三大元素:任务控制块、任务栈、任务入口函数,并讲述了编写RTOS任务入口函数时三个重要的注意点。

    Mculover666

扫码关注云+社区

领取腾讯云代金券