朴素贝叶斯分类

来源:互联网 发布:淘宝店铺考试 编辑:程序博客网 时间:2024/06/05 02:18

贝叶斯公式推导

基本的贝叶斯公式由来



损失函数



以上目标函数最大根据公式即求P(ck)和P(x|c)最大,根据最大似然估计用采样的值作为其概率分布参数
对于多项式贝叶斯 即求fi*P(xi|ck) 和 该类别的概率的值之和,fi为要分类的文档中单词的出现的次数(下面多项式贝叶斯有推导)
对于伯努利贝叶斯 fi变为1即可
(spark mllib 的多项式贝叶斯分类源码中有体现http://spark.apache.org/docs/latest/api/python/_modules/pyspark/mllib/classification.html#NaiveBayesModel.predict
中的这段代码returnself.labels[numpy.argmax(self.pi+x.dot(self.theta.transpose()))])

贝叶斯公式的应用


以下都是基于多项式贝叶斯分类器(伯努利方式每个文档中出现多次按照一次来计算)

分本分类中的应用

样本:10000封邮件,每个邮件已经标记为垃圾邮件或者非垃圾邮件
分类目标:再来了一些其他的邮件,确定是垃圾邮件还是非垃圾邮件

实现分析:
目标类别:垃圾邮件c1,非垃圾邮件c2
建立词汇表:将所有邮件中出现的单词统计为一个词典作为词汇表,记下单词的总数目N
目标公式分析:
P(c|x) = P(x|c)*P(c)/P(x)
P(c1|x) = P(x|c1)*P(c1)/P(x)
P(c2|x) = P(x|c2)*P(c2)/P(x)
c是类别x是文档中的单词组成的向量,分别计算各个类别的条件概率选概率大的作为最终的分类类别。

计算细节:
P(x)=P(x1,x2,..xN)=P(x1)*P(x2)*...P(xN)
P(x|c) = P(x1,x2,..xN|c)=P(x1|c)*P(x2|c)..P(xN|c)
P(xi) : 在所有样本中,单词xi出现的概率
P(ci) : 在所有样本中,邮件类别ci出现的概率
P(xi|cj): 在cj类别的前提下单词xi出现的概率
代入贝叶斯公式即可:

拉普拉斯平滑

问题:
1.某个单词不出现则P(xi|cj)为0 则P(x|c)的式子为0
平滑方法:
p(x1|c1) = (n1+1)/n+N
N是特征x的个数(也有加的是类别个数)

另外还可能出现下溢出问题,比如多个小的数相乘。解决方法可以取自然对数,即a*b -- ln(a*b) = ln(a) + ln(b)。

TFIDF

“的”、‘所以’、‘于是’等高频词在所有文档中都大量出现
tf-idf的步骤:
1.计算词频tf = 某个词在文章中出现的总次数/文章的总词数
2.计算逆文档频率idf = log(词料库的文档总数/包含该词的文档数目+1)   
加一是为了避免分母为0
3.计算tfidf值
tf-idf = tf * idf
4.求关键字:
按照tf-idf 值来大小排序,选取值最高的几个作为关键字
5.把计算来的tf-idf值来代替单词在文章中的出现次数

多项式贝叶斯分类



基于加权补集的贝叶斯分类算法





0 0
原创粉丝点击