朴素贝叶斯
2022-07-23 本文已影响0人
字字经心
朴素贝叶斯
朴素贝叶斯是分类算法,一个新数据x出现,是类a的概率为,属于类b概率
- 若
,则x归为类a
- 若
,则为类b
要直接比较 ,
的大小是很难的,我们可借助条件概率进行转化。先理解什么是条件概率,
这样就可以得乘法公式,
再把进行转换可得,
因此比较就变成了
要比较他们的大小,就是计算出
-
,类别a出现的概率
-
,类别b出现的概率
-
,类别a出现时样本x出现的概率
-
,类别b出现时样本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。此时可以求得,
至于,要求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)
同理可得,至以上四个概率都是已知量。这样就可以用朴素贝叶斯模型进行分类。要注意的是,防止有词汇概率为 0, 词汇计数初始值1,总词汇初始值2,即
[45, 122, 232, 0,.....,90]+1 / (n0+2)
防止,采用自然对数
参考文献
欢迎大家给我留言,提建议,指出错误,一起讨论学习技术的感受!