机器学习之朴素贝叶斯(四)

本文深入探讨了朴素贝叶斯分类器,包括基于贝叶斯决策理论的分类方法、条件概率和使用条件概率进行分类。通过实例解释了如何计算概率和条件概率,并介绍了在文档分类和邮件过滤中的应用,展示了朴素贝叶斯在处理文本数据时的有效性。
摘要由CSDN通过智能技术生成

主要内容:

·使用概率分布进行分类
·学习朴素贝叶斯分类器
·解析RSS源数据
·使用朴素贝叶斯来分析不同地区的态度

概率论是机器学习算法的基础,所以深刻理解概率论这个主题就十分重要。


4.1 基于贝叶斯决策理论的分类方法

朴素贝叶斯

  • 优点:在数据较少的情况下仍然有效,可以处理多类问题。

  • 缺点:对于输入的数据的准备方式较为敏感。

  • 适用数据类型:标称型数据。

我们先来了解一下贝叶斯决策理论。

假设我们现在有一个数据集,它由两类数据组成,数据分布如下图所示。
这里写图片描述

假设我们图中有两类数据统计参数。

用p1(x,y)表示数据点(x,y)属于类别1(图中圆点表示的类别)的概率,

用p2(x,y)表示数据点(x,y)属于类别2(图中三角形表示类别的)的概率。

  • 如果p1(x,y) > p2(x,y),那么类别为1;
  • 如果p2(x,y) > p1(x,y),那么类别为2.。

以上也说明了贝叶斯决策理论的核心思想,我们选择具有最高概率的决策。

如果上面这个图中,使用6个参数来表示,你会更加想使用哪种方法类进行分类呢?

如果是kNN算法,计算量就比较大;如果是使用决策树,不会非常成功。

那么最佳的方法其实是使用贝叶斯决策理论。

4.2 条件概率

我们来复习一下本科时候学习的概率论中的条件概率。


假设现在有一个装了7块石头的的罐子,其中3块是白的,4块是黑色的。如果我们从罐子中随机取出一块石头,那么白色石头的可能性是多少?黑色的又是多少?
这里写图片描述

显然,取得黑色是概率是4/7 ; 取得白色的概率是 3/7 ;

这里写图片描述

如果我们的石头放在两个桶中,那么上述的概率又该如何计算呢?

我们先设,取得黑色的概率为P(black) , 取得白色的概率为P(white) 。

那么如何计算黑色或者白色取得的概率问题,就是条件概率。

假设计算的是从B桶取到白色石头的概率,此概率可以记为P(white | bucketsB) , 并称之为“在已知石头出自B桶的条件下,取出白色石头的概率”。

此时

P(white | bucketsA) = 2/4 ; P(white | bucketsB) = 1/3 ;

那么条件概率的计算公式就如下:

P(white | bucketsB) = P(white and bucketsB) / P bucketsB)

我们是需要验证折合后公式的合理性,

P(white and bucketsB) = 1/7 这个就是B桶的白色石头除以两个桶的石头数量总和。再次,B桶有3个石头,总石头数是7,那么 公式就是

P(white | bucketsB) = P(white and bucketsB) / P bucketsB) = (1/7)
/(3/7) = 1/3

另外一种计算条件概率的方法称之为贝叶斯准则。公式如下:

P (c|x ) = P (x|c) * p(c) / p(x)

4.3 使用条件概率来分类

假设我们图中有两类数据统计参数。

用p1(x,y)表示数据点(x,y)属于类别1(图中圆点表示的类别)的概率,

用p2(x,y)表示数据点(x,y)属于类别2(图中三角形表示类别的)的概率。

如果p1(x,y) > p2(x,y),那么类别为C1;
如果p2(x,y) > p1(x,y),那么类别为C2.。

上面只是为了简化问题。

使用贝叶斯准则来交换概率中条件与结果:

应用贝叶斯准则得到,如下:
这里写图片描述

使用这些定义,可以定义贝叶斯分类:

如果 P(c1,x|y)>P(c2|x,y),那么属于类别c1 。
如果 P(c1,x|y)

def loanDataSet():
   postingList = [['my','dog','has','flea','problems','help','please'],
                  ['maybe','not','take','him','to','dog','park','stupid'],
                  ['my','dalmation','is','so','cute','I','love','him'],
                  ['stop','posting','stupid','worthless','garbage'],
                  ['mr','licks','ate','my','steak','how','to','stop','him'],
                  ['quit','buying','worthless','dog','food','stupid']]
   classVec = [0,1,0,1,0,1]  #1代表侮辱性文字,0代表正常言论
   return postingList,classVec

def createVocabList(dataSet):
   #创建一个空集
   vocabSet = set ([])
   for document in dataSet:
       #创建两个集合的并集
       vocabSet = vocabSet | set (document)
   return list(vocabSet)

def setOfWords2Vec(VocabList,inputSet):
   #创建一个其中所含元素都为0的向量并与词汇表等长
   returnVec = [0]*len(VocabList)
   for word in inputSet:
       if word in VocabList:
           returnVec[VocabList.index(word)] = 1
       else:
           print "the word:%s is not in my Vocabulary!" % word
   return returnVec

分析:

1.第一个函数创建了一些实验样本。其中第一个变量是进行词条切分后的文档集合,第二个变量是一个类别标签的集合。

2.第二个函数会创建一个包含在所有文档中出现的不重复词的列表。set也会返回一个不重复词表。

3.第三个函数的输入参数为词汇表以及某个文档。创建一个其中所含元素都为0的向量并与词汇表等长,

然后函数会创建一个遍历文档中所有单词,如果出现了词汇中的表中的单词,输出向量为1.

来测试代码:

In [6]: import bayes

In [7]: reload(bayes)
Out[7]: <module 'bayes' from 'bayes.py'>

In [8]: listOposts,listClasses = bayes.loadDataSet()

In [10]: myVocabList = bayes.createVocabList(listOposts)

In [11]: myVocabList 
Out[11]: 
['cute', 'love', 'help',
'garbage', 'quit', 'I', 'problems', 'is', 'park
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值