设为首页 收藏本站
查看: 1260|回复: 0

[经验分享] 朴素贝叶斯算法资料整理和PHP 实现版本

[复制链接]

尚未签到

发表于 2018-12-13 11:23:15 | 显示全部楼层 |阅读模式
  朴素贝叶斯算法简洁
  http://blog.csdn.net/xlinsist/article/details/51236454
  引言
  

  先前曾经看了一篇文章,一个老外程序员写了一些很牛的Shell脚本,包括晚下班自动给老婆发短信啊,自动冲Coffee啊,自动扫描一个DBA发来的邮件啊, 等等。于是我也想用自己所学来做一点有趣的事情。我的想法如下:
  

  首先我写个scrapy脚本来抓取某个网站上的笑话
  之后写个Shell脚本每天早上6点自动抓取最新的笑话
  然后用朴素贝叶斯模型来判断当前的笑话是否属于成人笑话
  如果是成人笑话,用脚本把它自动发给好兄弟的邮箱
  如果不是成人笑话,用脚本把它自动发给女朋友的邮箱
  在这个系列的文章中,你会学到:
  

  朴素贝叶斯背后的数学原理
  算法具体的工作过程(结合实例)
  scikit-learn快速实现算法
  这个系列的文章还会涉及到scrapy,pandas,numpy的一些知识,遇到这些知识的时候我会具体解释的。这个系列的文章我会主要详细的介绍上面的第3步实现过程,其余的我会将源码放在github上供大家参考。下面,就让我们享受这个奇妙之旅吧。
  

  朴素贝叶斯概述
  

  众所周知,朴素贝叶斯是一种简单但是非常强大的线性分类器。它在垃圾邮件分类,疾病诊断中都取得了很大的成功。它只所以称为朴素,是因为它假设特征之间是相互独立的,但是在现实生活中,这种假设基本上是不成立的。那么即使是在假设不成立的条件下,它依然表现的很好,尤其是在小规模样本的情况下。但是,如果每个特征之间有很强的关联性和非线性的分类问题会导致朴素贝叶斯模型有很差的分类效果。
  

  朴素贝叶斯背后的数学原理
  

  后验概率(Posterior Probabilities)
  

  为了更好地了解朴素贝叶斯分类器是怎么工作的,了解贝叶斯法则是很必要的。它可以被简单地描述成下面的公式:
  

  

  后验概率=条件概率先验概率现象概率
  我们可以用一个关于老天是否下雨的例子来解释上面的公式。
  

  

  P(给定天上有乌云,下雨的概率)=P(给定天上下雨,有乌云的概率)P(下雨的概率)P(有乌云的概率)
  我们可以看到,如果我们想要在给定现象下,预测某种结果的概率,我们必须知道:1、在给定这种结果下,出现这种现象的概率。2、出现这种结果的概率。3、出现这种现象的概率。
  

  在实际应用中,我们的现象不可能只有一个,比如,在垃圾邮件分类中,甚至可能有几千个词的特征向量。下面,我将引入一些数学上的记号来统一后面的表达:
  

  ωj表示属于哪个类别,j∈{1,2,3,…,m}
  xi表示特征向量中的第i个特征,i∈{1,2,3,…,n}
  朴素贝叶斯的目标就是分别求得P(ωj|给定现象)j∈{1,2,3,…,m},选出最大的概率。
  

  下面我将分别解释上面的三个概率。
  

  条件概率(Conditional Probabilities)
  

  随机变量的独立性意味着我告诉你一个变量的出现,并不影响你相信另一个出现的可能。最简单的一个例子就是抛硬币,也就是第一次的反正面并不会影响你再一次抛出现反正面的概率(也就是0.5)。
  

  朴素贝叶斯模型中,特征之间不仅仅是独立的,而且是加条件的独立的。比如说:我的特征向量x中,有n个特征,那么我可以把概率写成下面的形式:
  

  

  P(x|ωj)=P(x1|ωj)P(x2|ωj)P(x3|ωj)P(xn|ωj)=∏k=1nP(xk|ωj)
  P(x|ωj)的概率我们可以理解成:在给定属于某个类别的条件下,观察到出现现象x的概率。在特征向量中的每个特点的概率我们都可以通过极大似然估计(maximum-likelihood estimate)来求得,也就是简单地求某个特征在某个类别中的频率,公式如下:
  

  

  P(xi|ωj)=Nxi|ωjNωj(i=(1,…,n))
  Nxi|ωj:在所有属于类别ωj的训练样本中,特征xi出现的次数
  Nωj:在所有属于类别ωj的训练样本中,所有特征出现的次数
  现在,我要用一个简单的分类垃圾邮件的例子来阐明上面的概念。比如我有4封邮件,其中2封为垃圾邮件,特征向量中有4个特征。具体如下表:
  

  样本序号lovebuydealcat是否为垃圾邮件
  11001不是
  20110是
  30101是
  41011不是
  现在我要求P(buy,deal|spam)这个概率,通过条件的独立性和极大似然估计,我们可以求出这个概率:
  

  

  P(buy,deal|spam)=P(buy|spam)P(deal|spam)=1+11+1+1+111+1+1+1=18
  先验概率(Prior Probabilities)
  

  先验概率道理其实很简单,在上面的那个垃圾邮件的例子中,我们可以用极大似然估计来求得:24,通式如下:
  

  

  p(ωj)=NωjNc
  Nωj:属于类ωj的样本数
  Nc:所有的样本数
  通过上面后验概率的公式,我们可知:如果先验概率服从均匀分布,那么后验概率将完全取决于条件概率和现象概率,然而现象概率是常量,所以后验概率就完全取决于条件概率了。
  

  注意:我认为在某些分类应用中,先验概率应该去咨询应用领域的专家,你不能单凭样本中出现的概率来求得先验概率。比如:如果我的训练集中,下雨天的样本要比晴天的样本多,你不能说现实生活中下雨天的概率要比晴天的时候大。因此,对于某些应用,先验概率应该去咨询应用领域的专家。
  

  现象概率(Evidence Probabilities)
  

  现象概率是独立于类别的。比如上面那个垃圾邮件的例子,我想知道P(deal)这个现象发生的概率,我只需要找出我所有的样本中出现deal这个特征的概率,与属于哪个类别没有任何关系。
  

  其实我们完全没有必要算出这个概率,因为我们要求属于哪个类别的概率最大,而在这个过程中,它对于每次计算类别的概率中(也就是P(ωj|xi))都是常量,所以它不会影响到最终的决策。
  

  加上平滑(Additive Smoothing)
  

  还是上面那个邮件的例子,假设我们要求P(love|spam),我们会发现,在垃圾邮件中并没有出现love这个词,因此概率为0,如果这个条件概率为0,那么整个后验概率就为0。为了避免0概率的发生,我们可以加上平滑项。把上面条件概率的公式改为下面的形式:
  

  

  P(xi|ωj)=Nxi|ωj+αNωj+αn(i=(1,…,n))
  Nxi|ωj:在所有属于类别ωj的训练样本中,特征xi出现的次数
  Nωj:在所有属于类别ωj的训练样本中,所有特征出现的次数
  α:附加的平滑项参数。α

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-650899-1-1.html 上篇帖子: nginx+keepalived+php+memcached+repcached 下篇帖子: 翻身的废鱼——论PHP从入门到放弃需要多久?14
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表