Stanford机器学习[第六讲]-朴素贝叶斯算法

引文:由于之前讲过了朴素贝叶斯的理论Stanford机器学习[第五讲]-生成学习算法第四部分,同时朴素贝叶斯的算法实现也讲过了,见机器学习算法-朴素贝叶斯Python实现。那么这节课打算讲解一下朴素贝叶斯算法的具体计算流程,通过一个具体的实例来讲解。

PS:为了专注于某一个细节,本章节只抽取了视频的一部分来讲解,只讲解一个贝叶斯算法的计算流程,关于视频里面的具体内容请参考下面的视频链接。

讲解的实例是一个文本分类的例子,区分一句话是粗鲁的还是文明的,类别标签只有Yes或No,表示是粗鲁的和不是粗鲁的语句。

1.给定一个训练集

Words Label
my name is Devin. No
you are stupid. Yes
my boyfriend is SB. Yes
you looks very smart,I like you very much. No

上面这个数据集是我随机取的,label表示的是是否粗鲁。

2.处理数据

首先根据上面给出的数据构建出一个词库出来,如下:

【”my”,“name”,“is”,“Devin”,“you”,“are”,“stupid”,“boyfriend”,“SB”,“looks”,

“very”,“smart”,”like”,”much”】

这个词库总单词个数只有14个,相对而言比较少,这里只做个例子,单词多的情况下同样处理。

然后将每个样本映射到词库中,得到一个大的矩阵

my name is Devin you are stupid boyfriend SB looks very smart like much classLabel
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 0 0 0 0 0 0 0 1
1 0 1 0 0 0 0 1 1 0 0 0 0 0 1
1 0 0 0 2 0 0 0 0 1 2 1 1 1 0

上面是得到的一个词频矩阵,最后一栏表示的是类标号,下面通过这个词频举证来计算不同类标号下每个词发生的概率,即条件概率p(xi|y=1) 和p(xi|y=0)。

实际的处理中为了防止0概率的发生,通常是将词频矩阵初始化为1,这里就不这么做了,简单化计算吧。

3.计算

设几个变量:

  • numWords:表示单词的总数
  • p1Mat:表示正样本中各单词出现的次数矩阵
  • p0Num:表示负样本中各单词出现的次数矩阵
  • p1Vec:表示正负样本条件下的各单词的出现的概率,即条件概率p(xi|y=0)
  • p0Vec:表示在负样本条件下的各单词的出现的概率,即条件概率p(xi|y=0)
  • pPos:表示正样本概率
  • pNeg:表示负样本概率

可以根据上面的词频表计算得到:

numWords=14

p1Num=[1,0,1,0,1,1,1,1,1,0,0,0,0,0]

p0Num=[2,1,1,1,2,0,0,0,0,1,2,1,1,1]

样本中在类标签为1的单词出现的总次数p1Count=7

样本中在类标签为0的单词出现的总次数p0Count=12

让举证p1Num和p0Num分别除以p1Count和p0Count,即可以得到各自的条件概率:

p1Vec=[1/7,0,1/7,0,1/7,1/7,1/7,1/7,1/7,0,0,0,0,0]

p0Vec=[2/12,1/12,1/12,1/12,2/12,0,0,0,0,1/12,2/12,1/12,1/12,1/12]

条件概率求出来了,那么怎么来计算区分类别呢?

根据贝叶斯公式

p(y|x)=p(y)p(x|y)p(x)

因为预测一句话所属的类别,我们的p(x)是一样的所以比较p(y=1|x)和p(y=0|x)时,我们实际上只需要比较分子就可以了。

由于x有多个特征,上面分子子中的p(x|y)事实上是这样的

p(x|y)=p(x1|y)p(x2|y)...p(xn|y)

所以在处理时,通常是对分子取对数后再进行比较,转变为

p1=log2p(y=1)+log2{p(x1|y=1)p(x2|y=1)...p(xn|y=1)}

p1=log2p(y=0)+log2{p(x1|y=0)p(x2|y=0)...p(xn|y=0)}

的大小比较。对于分子p(y)p(x|y),p(y)可以直接求出来,而p(x|y)是上面的条件概率p1Vec和p0Vec。

最后比较两个大小,如果p1>p0,表示这句话是脏话,如果p1<p0表示该句话属于文明语句。

4.测试

假设我现在要测试下面一句话:“I like you.”

则通过预测比较

p1=log2p(y=1)+log2{p(x1=I|y=1)p(x2=like|y=1)p(x3=you|y=1)}

p0=log2p(y=0)+log2{p(x1=I|y=0)p(x2=like|y=0)p(x3=you|y=0)}

可以得到结果是p1<p0,即”I like you “是文明语句。

Reference

[1] 机器学习实战

[2]视频链接http://open.163.com/movie/2008/1/7/H/M6SGF6VB4_M6SGJVV7H.html



本栏目Machine Learning 算法实现持续更新中,欢迎关注:Dream_Angel_Z博客

时间: 2024-08-06 15:59:00

Stanford机器学习[第六讲]-朴素贝叶斯算法的相关文章

(笔记)斯坦福机器学习第六讲--朴素贝叶斯

本讲内容 1. Naive Bayes(朴素贝叶斯) 2.Event models(朴素贝叶斯的事件模型) 3.Neural network (神经网络) 4.Support vector machines(支持向量机) 1.朴素贝叶斯 上讲中的垃圾邮件问题有几个需要注意的地方: (1)  一个单词只有出现和不出现两种可能,因此每个特征x只有两个取值 (2) 特征向量x的个数应该等于词典的长度,比如  将该算法一般化: (1) 让 可以取更多的值 此时  服从多项式分布,而不再是伯努利分布.一种

机器学习之实战朴素贝叶斯算法

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类,而朴素贝叶斯分类可谓是里面最简单.入门的一种. 首先关于贝叶斯定理,感觉简单而伟大,前些天一直在看吴军的数学之美(没看过的极力推荐)系列文章,看到自然语言处理从规则模型到统计模型转变的时候,语言的识别准确率上升好几个等级,以至于今天的语言识别到达很强大的地步,同时对于搜索引擎,网页搜索的准确率,也上升好多.这其中的最最重要的就是使用了贝叶斯准则,运用一种统计学的概念,将识别搜索的结果可能性最大化.由此我联想到当今的

通俗易懂机器学习——朴素贝叶斯算法

本文将叙述朴素贝叶斯算法的来龙去脉,从数学推导到计算演练到编程实战 文章内容有借鉴网络资料.李航<统计学习方法>.吴军<数学之美>加以整理及补充 基础知识补充: 1.贝叶斯理论–吴军数学之美 http://mindhacks.cn/2008/09/21/the-magical-bayesian-method/ 2.条件概率 3.联合分布 朴素贝叶斯算法 朴素贝叶斯法是基于贝叶斯定理和特征条件独立假设的 分类方法.给定训练数据集,首先基于特征条件独立假设学习 输入/输出的联合概率分布

机器学习之朴素贝叶斯算法

1 贝叶斯定理的引入 概率论中的经典条件概率公式: 公式的理解为,P(X ,Y)= P(Y,X)<=> P(X | Y)P(Y)= P(Y | X)P (X),即 X 和 Y 同时发生的概率与 Y 和 X 同时发生的概率一样. 2 朴素贝叶斯定理 朴素贝叶斯的经典应用是对垃圾邮件的过滤,是对文本格式的数据进行处理,因此这里以此为背景讲解朴素贝叶斯定理.设D 是训练样本和相关联的类标号的集合,其中训练样本的属性集为          X { X1,X2, ... , Xn }, 共有n 个属性:

机器学习回顾篇(5):朴素贝叶斯算法

1 引言 说到朴素贝叶斯算法,很自然地就会想到贝叶斯概率公式,这是我们在高中的时候就学过的只是,没错,这也真是朴素贝叶斯算法的核心,今天我们也从贝叶斯概率公式开始,全面撸一撸朴素贝叶斯算法. 2 贝叶斯概率公式 2.1 联合概率与全概率公式 定义1:完备事件组 ${A_1} \cup {A_2} \cup \cdots \cup {A_n} = \Omega $,且${A_i} \cap {A_j} = \emptyset ,1 \le i \ne j \le n$,则称${A_1},{A_2}

斯坦福《机器学习》Lesson5感想———2、朴素贝叶斯算法

朴素贝叶斯算法与上篇中写到到生成学习算法的思想是一致的.它不需要像线性回归等算法一样去拟合各种假设的可能,只需要计算各种假设的概率,然后选择概率最高的那种假设分类类别.其中还添入了一个贝叶斯假定:在给定目标值y时属性值x之间相互独立.这样的分类算法被称为朴素贝叶斯分类器(Naive Bayes classifier)  . 1.朴素贝叶斯算法 在朴素贝叶斯算法的模型里,给定的训练集为, 可计算,.因为贝叶斯假定,可以计算出联合似然概率函数: 最大化联合似然概率函数可得到: 然后我们就可以对新的数

朴素贝叶斯算法及实现

1.朴素贝叶斯算法介绍 一个待分类项x=(a,b,c...),判断x属于y1,y2,y3...类别中的哪一类. 贝叶斯公式: 算法定义如下: (1).设x={a1, a2, a3, ...}为一个待分类项,而a1, a2, a3...分别为x的特征 (2).有类别集合C={y1, y2,  y3,  ..} (3).计算p(y1|x), p(y2|x), p(y3|x), .... (4).如果p(y(k)|x)=max{p(y1|x), p(y2|x), p(y3|x), ....},则x属于

C#编程实现朴素贝叶斯算法下的情感分析

C#编程实现 这篇文章做了什么 朴素贝叶斯算法是机器学习中非常重要的分类算法,用途十分广泛,如垃圾邮件处理等.而情感分析(Sentiment Analysis)是自然语言处理(Natural Language Progressing)中的重要问题,用以对文本进行正负面的判断,以及情感度评分和意见挖掘.本文借助朴素贝叶斯算法,针对文本正负面进行判别,并且利用C#进行编程实现. 不先介绍点基础? 朴素贝叶斯,真的很朴素 朴素贝叶斯分类算法,是一种有监督学习算法,通过对训练集的学习,基于先验概率与贝叶

朴素贝叶斯算法(Naive Bayes)

朴素贝叶斯算法(Naive Bayes) 阅读目录 一.病人分类的例子 二.朴素贝叶斯分类器的公式 三.账号分类的例子 四.性别分类的例子 生活中很多场合需要用到分类,比如新闻分类.病人分类等等. 本文介绍朴素贝叶斯分类器(Naive Bayes classifier),它是一种简单有效的常用分类算法. 回到顶部 一.病人分类的例子 让我从一个例子开始讲起,你会看到贝叶斯分类器很好懂,一点都不难. 某个医院早上收了六个门诊病人,如下表. 症状 职业 疾病 打喷嚏 护士 感冒  打喷嚏 农夫 过敏