朴素贝叶斯

2022-07-23  本文已影响0人  字字经心

朴素贝叶斯

朴素贝叶斯是分类算法,一个新数据x出现,是类a的概率为p(a/x),属于类b概率p(b/x)

要直接比较 p(a/x)p(b/x) 的大小是很难的,我们可借助条件概率进行转化。先理解什么是条件概率,
p(a/x) = {p(a,x) \over p(x)}

这样就可以得乘法公式,
p(a,x) = p(a/x)p(x)

再把p(a/x)进行转换可得,
p(a/x) = {p(a,x) \over p(x)} = {p(x,a) \over p(x)} = {p(x/a)p(a) \over p(x)}

因此比较就变成了
p(a/x) = {p(x/a)p(a) \over p(x)}
p(b/x) = {p(x/b)p(b) \over p(x)}

要比较他们的大小,就是计算出

应用

接下来用朴素贝叶斯在文本分类,屏蔽社区留言板的侮辱性言论的应用作为例子,解释上面四个概率的求法。假设数据集如下

# 言论集
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']
]

# 1代表侮辱性言论,0 非侮辱性
classVec = [0, 1, 0, 1, 0, 1]

要判断一个样本数据是否侮辱性言论,先统计全部言论去重之后的词汇,再得出每条言论基于全部词汇的词频矩阵

词汇集= ['word1','word2',‘word3’..,'wordn']

# 第一列的2代表word1在言论1中出现2次
言论1:  [2, 0, 1, ....,4]
言论2:  [3, 2, 0, ....,2]   
......
言论n:  [0, 2, 2, ....,0]   

总侮辱言论:[45, 122, 232, 0,.....,90]
总非侮辱言论:[123, 23, 23, 2,.....,23]

假设a类别为侮辱性言论,b类别为非侮辱性言论,言论总数为N,a总数量n1,b总数量n2。此时可以求得,

至于p(x/a),要求a类别出现时x样本出现的概率,x是由很多词汇构成的。朴素贝叶斯算法的朴素二字正是假设各个特征之间是相互独立的,即每个词汇的出现是不会相互影响的;并且认为每个特征同等重要。因此求得侮辱性言论出现时每个词汇出现的概率为

# n0=sum([45, 122, 232, 0,.....,90]),即侮辱性言论集中总词数
[45, 122, 232, 0,.....,90]/n0

假设x样本包含词汇为 xword1,xword2,....xwordi...xwordn,侮辱性言论出现时对应词汇出现的概率为p(xword1),p(xword2),p(xwordi).......p(xwordn)
p(x/a) = p(xword1)p(xword2)...p(xwordi)...p(xwordn)

同理可得p(x/b),至以上四个概率都是已知量。这样就可以用朴素贝叶斯模型进行分类。要注意的是,防止有词汇概率为 0, 词汇计数初始值1,总词汇初始值2,即

[45, 122, 232, 0,.....,90]+1 / (n0+2)

防止p(xword1)p(xword2)...p(xwordi)...p(xwordn)=0,采用自然对数

参考文献

基于概率论的分类方法:朴素贝叶斯

欢迎大家给我留言,提建议,指出错误,一起讨论学习技术的感受!

上一篇 下一篇

猜你喜欢

热点阅读