机器学习实战之贝叶斯(一)

1 算法概括
贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法。
贝叶斯公式:
这里写图片描述
这种形式可能对于分类问题不太明显,那么我们换种形式:这里写图片描述,这样就一目了然了,我们的任务就是求出P(类别|特征)。如果对于一个有多个特征的数据集,那么贝叶斯的形式就要写成这里写图片描述,在朴素贝叶斯中,我们假设各特征相互独立,所以,最终写成:这里写图片描述
贝叶斯的核心思想是选择具有最高概率的决策,比如有一个数据a,p(a,1)表示属于类别1的概率,p(a,2)属于类别2的概率,当p(a,1)>p(a,2),我们就推测,数据a属于类别1,这就是根据贝叶斯理论来决策的,一言以蔽之,即对于每个数据集,我们将其划分到最大密度所在的分类。就是可以用先验概率和后验概率来计算未知的概率,进一步,就是在统计资料的基础上,依据某些特征,计算各个类别的概率,从而实现分类。
贝叶斯是一种概率论的方法,所以用来预测的结果一般较为准确,一般在使用贝叶斯时,假设的前提是:①需要足够的样本数据 ;②特征之间相互独立;③每个特征同等重要
2 贝叶斯进行文档分类实现
(1)实验数据准备,创建一个实验样本
(2)将上述创建的文本转换成没有重复词出现的词向量
(3)构建贝叶斯分类器


#朴素贝叶斯分类器训练函数   从词向量计算概率
def trainNB0(trainMatrix,trainCategory):
    numTrainDocs = len(trainMatrix) #词向量中文档的大小 6
    numWords = len(trainMatrix[0])  #词向量文档中词的数量 32
    pAbusive = sum(trainCategory)/float(numTrainDocs)  # 计算文档中属于侮辱性文档的概率(先验概率)0.5
    p0Num = ones(numWords); p1Num = ones(numWords)      #change to ones() 
    p0Denom = 2.0; p1Denom = 2.0                        #change to 2.0
    for i in range(numTrainDocs): #遍历词向量中的每篇文档
        if trainCategory[i] == 1:  #遍历每篇文档中词类别,是1还是0
            p1Num += trainMatrix[i]
            p1Denom += sum(trainMatrix[i])  #计算p(w0|ci),...,p(wn|ci)
        else:
            p0Num += trainMatrix[i]
            p0Denom += sum(trainMatrix[i])
    p1Vect = log(p1Num/p1Denom)          #类别1的条件概率
    p0Vect = log(p0Num/p0Denom)          #类别0的条件概率
    return p0Vect,p1Vect,pAbusive

通过比较得到的p1Vect与p0Vect相应位置词概率的大小,决定该词是属于1类还是0类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值