朴素贝叶斯算法及其在文本分类中的应用
在这里只要给出朴素贝叶斯算法原理,并给出其在文本分类中的应用,详细代码在我的github上,https://github.com/duguiming111/Text_Classification/blob/master/nb_main.py,是基于朴素贝叶斯算法的垃圾短信识别。
一、引言
朴素贝叶斯算法是基于贝叶斯定理与条件独立假设的分类方法。基本原理:对于给定的训练集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对于给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。对于文本分类,朴素贝叶斯往往能达到较好的效果。
二、垃圾短信识别
1、公式
贝叶斯公式:
P
(
Y
∣
X
)
=
P
(
X
∣
Y
)
P
(
Y
)
P
(
X
)
P(Y|X)=\frac{P(X|Y)P(Y)}{P(X)}
P(Y∣X)=P(X)P(X∣Y)P(Y)
它是由联合概率公式推导而来,联合概率推导公式为:
P
(
X
,
Y
)
=
P
(
Y
∣
X
)
P
(
X
)
=
P
(
X
∣
Y
)
P
(
Y
)
P(X,Y)=P(Y|X)P(X)=P(X|Y)P(Y)
P(X,Y)=P(Y∣X)P(X)=P(X∣Y)P(Y)
其中,P(Y)为先验概率,P(Y|X)为后验概率,P(X,Y)为联合概率。
2、应用
2.1 贝叶斯公式的理解
在分类任务中,贝叶斯公式可以理解为:
P
(
“
属
于
某
类
”
∣
“
具
有
某
特
征
”
)
=
P
(
“
具
有
某
特
征
”
∣
“
属
于
某
类
”
)
P
(
“
属
于
某
类
”
)
P
(
“
具
有
某
特
征
”
)
P(“属于某类”|“具有某特征”)=\frac{P(“具有某特征”|“属于某类”)P(“属于某类”)}{P(“具有某特征”)}
P(“属于某类”∣“具有某特征”)=P(“具有某特征”)P(“具有某特征”∣“属于某类”)P(“属于某类”)
2.2 在文本分类中的应用(垃圾短信识别)
举个例子:
“您关注的笔记本电脑限时抢购中!自营好购,品质保障。”
对于这条短信,我们要判断的是:
P
(
“
垃
圾
短
信
”
∣
“
您
关
注
的
笔
记
本
电
脑
限
时
抢
购
中
!
自
营
好
购
,
品
质
保
障
。
”
)
P(“垃圾短信”|“您关注的笔记本电脑限时抢购中!自营好购,品质保障。”)
P(“垃圾短信”∣“您关注的笔记本电脑限时抢购中!自营好购,品质保障。”)
是否大于1/2。
对于文本分类任务,首先要对文本进行分词和去停用词处理,分词去停用词后的短信为:(“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”)。
那么,贝叶斯公式可以变为:
P
(
“
垃
圾
短
信
”
∣
(
“
您
”
,
“
关
注
”
,
“
笔
记
本
”
,
“
电
脑
”
,
“
限
时
”
,
“
抢
购
”
,
“
自
营
”
,
“
好
购
”
,
“
品
质
”
,
“
保
障
”
)
)
=
P
(
(
“
您
”
,
“
关
注
”
,
“
笔
记
本
”
,
“
电
脑
”
,
“
限
时
”
,
“
抢
购
”
,
“
自
营
”
,
“
好
购
”
,
“
品
质
”
,
“
保
障
”
)
∣
P
(
“
垃
圾
短
信
”
)
)
P
(
(
“
您
”
,
“
关
注
”
,
“
笔
记
本
”
,
“
电
脑
”
,
“
限
时
”
,
“
抢
购
”
,
“
自
营
”
,
“
好
购
”
,
“
品
质
”
,
“
保
障
”
)
)
P(“垃圾短信”|(“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”))=\frac{P((“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”)|P(“垃圾短信”))}{P((“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”))}
P(“垃圾短信”∣(“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”))=P((“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”))P((“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”)∣P(“垃圾短信”))
P
(
“
正
常
短
信
”
∣
(
“
您
”
,
“
关
注
”
,
“
笔
记
本
”
,
“
电
脑
”
,
“
限
时
”
,
“
抢
购
”
,
“
自
营
”
,
“
好
购
”
,
“
品
质
”
,
“
保
障
”
)
)
=
P
(
(
“
您
”
,
“
关
注
”
,
“
笔
记
本
”
,
“
电
脑
”
,
“
限
时
”
,
“
抢
购
”
,
“
自
营
”
,
“
好
购
”
,
“
品
质
”
,
“
保
障
”
)
∣
P
(
“
正
常
短
信
”
)
)
P
(
(
“
您
”
,
“
关
注
”
,
“
笔
记
本
”
,
“
电
脑
”
,
“
限
时
”
,
“
抢
购
”
,
“
自
营
”
,
“
好
购
”
,
“
品
质
”
,
“
保
障
”
)
)
P(“正常短信”|(“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”))=\frac{P((“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”)|P(“正常短信”))}{P((“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”))}
P(“正常短信”∣(“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”))=P((“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”))P((“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”)∣P(“正常短信”))
根据条件独立假设:
P
(
(
“
您
”
,
“
关
注
”
,
“
笔
记
本
”
,
“
电
脑
”
,
“
限
时
”
,
“
抢
购
”
,
“
自
营
”
,
“
好
购
”
,
“
品
质
”
,
“
保
障
”
)
∣
P
(
“
垃
圾
短
信
”
)
)
=
P
(
“
您
”
∣
“
垃
圾
短
信
”
)
P
(
“
关
注
”
∣
“
垃
圾
短
信
”
)
P
(
“
笔
记
本
”
∣
“
垃
圾
短
信
”
)
P
(
“
电
脑
”
∣
“
垃
圾
短
信
”
)
P
(
“
限
时
”
∣
“
垃
圾
短
信
”
)
P
(
“
抢
购
”
∣
“
垃
圾
短
信
”
)
P
(
“
自
营
”
∣
“
垃
圾
短
信
”
)
P
(
“
好
购
”
∣
“
垃
圾
短
信
”
)
P
(
“
品
质
”
∣
“
垃
圾
短
信
”
)
P
(
“
保
障
”
∣
“
垃
圾
短
信
”
)
P((“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”)|P(“垃圾短信”))=P(“您”|“垃圾短信”)P(“关注”|“垃圾短信”)P(“笔记本”|“垃圾短信”)P(“电脑”|“垃圾短信”)P(“限时”|“垃圾短信”)P(“抢购”|“垃圾短信”)P(“自营”|“垃圾短信”)P(“好购”|“垃圾短信”)P(“品质”|“垃圾短信”)P(“保障”|“垃圾短信”)
P((“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”)∣P(“垃圾短信”))=P(“您”∣“垃圾短信”)P(“关注”∣“垃圾短信”)P(“笔记本”∣“垃圾短信”)P(“电脑”∣“垃圾短信”)P(“限时”∣“垃圾短信”)P(“抢购”∣“垃圾短信”)P(“自营”∣“垃圾短信”)P(“好购”∣“垃圾短信”)P(“品质”∣“垃圾短信”)P(“保障”∣“垃圾短信”)
P
(
(
“
您
”
,
“
关
注
”
,
“
笔
记
本
”
,
“
电
脑
”
,
“
限
时
”
,
“
抢
购
”
,
“
自
营
”
,
“
好
购
”
,
“
品
质
”
,
“
保
障
”
)
∣
P
(
“
正
常
短
信
”
)
)
=
P
(
“
您
”
∣
“
正
常
短
信
”
)
P
(
“
关
注
”
∣
“
正
常
短
信
”
)
P
(
“
笔
记
本
”
∣
“
正
常
短
信
”
)
P
(
“
电
脑
”
∣
“
正
常
短
信
”
)
P
(
“
限
时
”
∣
“
正
常
短
信
”
)
P
(
“
抢
购
”
∣
“
正
常
短
信
”
)
P
(
“
自
营
”
∣
“
正
常
短
信
”
)
P
(
“
好
购
”
∣
“
正
常
短
信
”
)
P
(
“
品
质
”
∣
“
正
常
短
信
”
)
P
(
“
保
障
”
∣
“
正
常
短
信
”
)
P((“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”)|P(“正常短信”))=P(“您”|“正常短信”)P(“关注”|“正常短信”)P(“笔记本”|“正常短信”)P(“电脑”|“正常短信”)P(“限时”|“正常短信”)P(“抢购”|“正常短信”)P(“自营”|“正常短信”)P(“好购”|“正常短信”)P(“品质”|“正常短信”)P(“保障”|“正常短信”)
P((“您”,“关注”,“笔记本”,“电脑”,“限时”,“抢购”,“自营”,“好购”,“品质”,“保障”)∣P(“正常短信”))=P(“您”∣“正常短信”)P(“关注”∣“正常短信”)P(“笔记本”∣“正常短信”)P(“电脑”∣“正常短信”)P(“限时”∣“正常短信”)P(“抢购”∣“正常短信”)P(“自营”∣“正常短信”)P(“好购”∣“正常短信”)P(“品质”∣“正常短信”)P(“保障”∣“正常短信”)
其中,
P
(
“
笔
记
本
”
∣
“
垃
圾
短
信
”
)
=
垃
圾
短
信
中
有
“
笔
记
本
”
的
次
数
垃
圾
短
信
中
所
有
词
的
次
数
P(“笔记本”|“垃圾短信”)=\frac{垃圾短信中有“笔记本”的次数}{垃圾短信中所有词的次数}
P(“笔记本”∣“垃圾短信”)=垃圾短信中所有词的次数垃圾短信中有“笔记本”的次数
比较这两个值的大小就能判断短信是否是垃圾短信。
最后说一下何为朴素贝叶斯算法,其实就是:
贝
叶
斯
公
式
+
条
件
独
立
假
设
=
朴
素
贝
叶
斯
算
法
贝叶斯公式+条件独立假设=朴素贝叶斯算法
贝叶斯公式+条件独立假设=朴素贝叶斯算法
在这里给出一个基于朴素贝叶斯的垃圾短信识别的代码。