机器学习-朴素贝叶斯实例分析- 文本分析

转载地址:http://blog.csdn.net/dream_angel_z/article/details/46312319


本节主要给出一个朴素贝叶斯的实例。


引文:由于之前讲过了朴素贝叶斯的理论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 

本节主要给出一个朴素贝叶斯的实例。


引文:由于之前讲过了朴素贝叶斯的理论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 

本节主要给出一个朴素贝叶斯的实例。

引文:由于之前讲过了朴素贝叶斯的理论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 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值