朴素贝叶斯模型"/>
机器学习之朴素贝叶斯模型
朴素贝叶斯
1、什么是朴素贝叶斯算法
(1)字面理解:朴素贝叶斯 = “朴素”+贝叶斯
朴素:假定特征之间都是条件独立的(这里理解起来比较抽象,后续使用具体实例说明)
贝叶斯:贝叶斯定理
p ( y ∣ x ) = p ( x ∣ y ) ∗ p ( y ) p ( x ) 证 明 : p ( x , y ) = p ( x ∣ y ) ∗ p ( y ) = p ( y ∣ x ) ∗ p ( x ) 移 项 得 : p ( y ∣ x ) = p ( x ∣ y ) ∗ p ( y ) p ( x ) p(y|x) = \frac{p(x|y)*p(y)}{p(x)} \\证明:p(x,y) = p(x|y)*p(y) = p(y|x)*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(x∣y)∗p(y)=p(y∣x)∗p(x)移项得:p(y∣x)=p(x)p(x∣y)∗p(y)
说明:
1)p(y|x):后验概率
2)p(x|y):似然概率
3)p(y):先验概率
4)p(x):样本数据的所有特征
(2)官方解释:朴素贝叶斯分类(NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入X求出使得后验概率最大的输出Y。(来自于百度百科)
2、朴素贝叶斯的应用
1)各类文本分析的任务,比如垃圾邮件的分类,文本主题分类,情感分析
2)文字识别
3)图像识别
3、使用朴素贝叶斯对垃圾邮件进行分类
这里用一个具体的实例来分享朴素贝叶斯模型,能够更直观的理解朴素贝叶斯模型
3.1、朴素贝叶斯对垃圾邮件分类的两个步骤
1)统计出每一个单词对一个邮件成为垃圾邮件或正常邮件的概率
2)用这些统计的结果对一个新的邮件做预测
3.2、实现
1)例:现若干邮件,其中有正常邮件,有垃圾邮件,邮件中出现了”购买“,”物品“,”不是“,”广告“,”这“等词…我们分别统计这些词出现在正常邮件中的个数,出现在垃圾邮件中的个数
则正常邮件含有”购买“,”物品“,”不是“,”广告“,”这“词的概率为
p ( 购 买 ∣ 正 常 邮 件 ) = 1 80 p ( 物 品 ∣ 正 常 邮 件 ) = 1 60 p ( 不 是 ∣ 正 常 邮 件 ) = 1 60 p ( 广 告 ∣ 正 常 邮 件 ) = 1 48 p ( 这 ∣ 正 常 邮 件 ) = 1 80 p ( 正 常 ) = 2 3 ( 分 子 : 所 有 邮 件 中 正 常 邮 件 的 个 数 ; 分 母 : 邮 件 的 总 数 ) \begin{aligned} p(购买|正常邮件)&=\frac{1}{80}\\p(物品|正常邮件)&=\frac{1}{60}\\p(不是|正常邮件)&=\frac{1}{60}\\p(广告|正常邮件)&=\frac{1}{48}\\p(这|正常邮件)&=\frac{1}{80}\\p(正常)&=\frac{2}{3}\quad (分子:所有邮件中正常邮件的个数;分母:邮件的总数) \end{aligned} p(购买∣正常邮件)p(物品∣正常邮件)p(不是∣正常邮件)p(广告∣正常邮件)p(这∣正常邮件)p(正常)=801=601=601=481=801=32(分子:所有邮件中正常邮件的个数;分母:邮件的总数)
垃圾邮件含有”购买“,”物品“,”不是“,”广告“,”这“词的概率为
p ( 购 买 ∣ 垃 圾 邮 件 ) = 7 120 p ( 物 品 ∣ 垃 圾 邮 件 ) = 1 30 p ( 不 是 ∣ 垃 圾 邮 件 ) = 1 40 p ( 广 告 ∣ 垃 圾 邮 件 ) = 1 30 p ( 这 ∣ 垃 圾 邮 件 ) = 0 p ( 正 常 ) = 2 3 ( 分 子 : 所 有 邮 件 中 垃 圾 邮 件 的 个 数 ; 分 母 : 邮 件 的 总 数 ) \begin{aligned} p(购买|垃圾邮件)&=\frac{7}{120}\\p(物品|垃圾邮件)&=\frac{1}{30}\\p(不是|垃圾邮件)&=\frac{1}{40}\\p(广告|垃圾邮件)&=\frac{1}{30}\\p(这|垃圾邮件)&=0\\p(正常)&=\frac{2}{3}\quad (分子:所有邮件中垃圾邮件的个数;分母:邮件的总数) \end{aligned} p(购买∣垃圾邮件)p(物品∣垃圾邮件)p(不是∣垃圾邮件)p(广告∣垃圾邮件)p(这∣垃圾邮件)p(正常)=1207=301=401=301=0=32(分子:所有邮件中垃圾邮件的个数;分母:邮件的总数)
收到了新的一份邮件E(购买物品这不是广告),属于垃圾邮件还是正常邮件?
p ( E ∣ 正 常 邮 件 ) = p ( 购 买 , 物 品 , 这 , 不 是 , 广 告 ∣ 正 常 邮 件 ) ∗ p ( 正 常 邮 件 ) p ( 邮 件 内 容 ) = p ( 购 买 ∣ 正 常 邮 件 ) ∗ p ( 物 品 ∣ 正 常 邮 件 ) ∗ p ( 这 ∣ 正 常 邮 件 ) ∗ p ( 不 是 ∣ 正 常 邮 件 ) ∗ p ( 广 告 ∣ 正 常 邮 件 ) ∗ p ( 正 常 邮 件 ) p ( 邮 件 内 容 ) ( 在 这 里 我 们 把 联 合 概 率 转 换 成 了 条 件 概 率 , 前 提 就 是 一 开 始 我 提 到 的 “ 朴 素 ” , 如 果 没 有 这 个 条 件 , 两 式 是 不 能 划 等 号 的 ) = 1 80 ∗ 1 60 ∗ 1 80 ∗ 1 60 ∗ 1 48 ∗ 2 3 p ( 邮 件 内 容 ) p ( E ∣ 垃 圾 邮 件 ) = p ( 购 买 , 物 品 , 这 , 不 是 , 广 告 ∣ 垃 圾 邮 件 ) ∗ p ( 垃 圾 邮 件 ) p ( 邮 件 内 容 ) = p ( 购 买 ∣ 垃 圾 邮 件 ) ∗ p ( 物 品 ∣ 垃 圾 邮 件 ) ∗ p ( 这 ∣ 垃 圾 邮 件 ) ∗ p ( 不 是 ∣ 垃 圾 邮 件 ) ∗ p ( 广 告 ∣ 垃 圾 邮 件 ) ∗ p ( 垃 圾 邮 件 ) p ( 邮 件 内 容 ) = 7 120 ∗ 1 30 ∗ 0 ∗ 1 40 ∗ 1 30 ∗ 1 3 p ( 邮 件 内 容 ) \begin{aligned} p(E|正常邮件) &= \frac{p(购买,物品,这,不是,广告|正常邮件)*p(正常邮件)}{p(邮件内容)}\\ &=\frac{p(购买|正常邮件)*p(物品|正常邮件)*p(这|正常邮件)*p(不是|正常邮件)*p(广告|正常邮件)*p(正常邮件)}{p(邮件内容)} {\quad(在这里我们把联合概率转换成了条件概率,前提就是一开始我提到的“朴素”,如果没有这个条件,两式是不能划等号的)}\\ &=\frac{\frac{1}{80}*\frac{1}{60}*\frac{1}{80}*\frac{1}{60}*\frac{1}{48}*\frac{2}{3}}{p(邮件内容)}\\ p(E|垃圾邮件) &= \frac{p(购买,物品,这,不是,广告|垃圾邮件)*p(垃圾邮件)}{p(邮件内容)}\\ &=\frac{p(购买|垃圾邮件)*p(物品|垃圾邮件)*p(这|垃圾邮件)*p(不是|垃圾邮件)*p(广告|垃圾邮件)*p(垃圾邮件)}{p(邮件内容)} \\ &=\frac{\frac{7}{120}*\frac{1}{30}*0*\frac{1}{40}*\frac{1}{30}*\frac{1}{3}}{p(邮件内容)} \end{aligned} p(E∣正常邮件)p(E∣垃圾邮件)=p(邮件内容)p(购买,物品,这,不是,广告∣正常邮件)∗p(正常邮件)=p(邮件内容)p(购买∣正常邮件)∗p(物品∣正常邮件)∗p(这∣正常邮件)∗p(不是∣正常邮件)∗p(广告∣正常邮件)∗p(正常邮件)(在这里我们把联合概率转换成了条件概率,前提就是一开始我提到的“朴素”,如果没有这个条件,两式是不能划等号的)=p(邮件内容)801∗601∗801∗601∗481∗32=p(邮件内容)p(购买,物品,这,不是,广告∣垃圾邮件)∗p(垃圾邮件)=p(邮件内容)p(购买∣垃圾邮件)∗p(物品∣垃圾邮件)∗p(这∣垃圾邮件)∗p(不是∣垃圾邮件)∗p(广告∣垃圾邮件)∗p(垃圾邮件)=p(邮件内容)1207∗301∗0∗401∗301∗31
通过上面的计算,我们可以看到分母相同的情况下P(E|正常邮件)明显大于P(E|垃圾邮件)=0,大家认为这个结论合理嘛?明显是不合理的,原因是或许邮件包含某个垃圾邮件的关键词,但这封邮件并不一定是垃圾邮件,同理正常邮件也是如此,导致这个问题的罪魁祸首就是某个关键词的条件概率为0,如何解决这个问题呢?答案就是采用平滑
2)什么是平滑?不说废话直接上公式
p ( w ∣ y = c ) = 语 料 库 中 的 单 词 w 出 现 的 次 数 + 1 类 别 为 c 的 语 料 库 中 包 含 所 有 的 单 词 个 数 + v v : 词 典 的 大 小 p(w|y=c)=\frac{语料库中的单词w出现的次数+1}{类别为c的语料库中包含所有的单词个数+v}\\v:词典的大小 p(w∣y=c)=类别为c的语料库中包含所有的单词个数+v语料库中的单词w出现的次数+1v:词典的大小
这里分母为什么要加v(词典的大小)?
答:为了让每一个词的条件概率最终相加为1,假设有一个词库v=[a,b,c,d,…]T(T:转置),
则p(a|y=c)+p(b|y=c)+p(c|y=c)+p(d|y=c)+… = 1
3)现在有一个新的需求:
①垃圾邮件,包含8个词
(1)点击 更多 信息
(2)最新 产品
(3)信息 点击 链接
②正常邮件,包含 6个词
(1)开会
(2)信息 详见 邮件
(3)最新 信息
新邮件:S = 最新 产品 点击 链接 产品
新邮件S是垃圾邮件还是正常邮件?
建立词库v={点击,更多,信息,最新,产品,链接,开会,详见,邮件}
单词数量n=9
p ( 点 击 ∣ 正 常 邮 件 ) = 0 + 1 6 + 9 p ( 更 多 ∣ 正 常 邮 件 ) = 0 + 1 6 + 9 p ( 信 息 ∣ 正 常 邮 件 ) = 2 + 1 6 + 9 p ( 最 新 ∣ 正 常 邮 件 ) = 1 + 1 6 + 9 p ( 产 品 ∣ 正 常 邮 件 ) = 0 + 1 6 + 9 p ( 链 接 ∣ 正 常 邮 件 ) = 0 + 1 6 + 9 p ( 开 会 ∣ 正 常 邮 件 ) = 1 + 1 6 + 9 p ( 详 见 ∣ 正 常 邮 件 ) = 1 + 1 6 + 9 p ( 邮 件 ∣ 正 常 邮 件 ) = 1 + 1 6 + 9 p ( 正 常 邮 件 ) = 1 2 \begin{aligned} p(点击|正常邮件)&=\frac{0+1}{6+9}\\p(更多|正常邮件)&=\frac{0+1}{6+9}\\p(信息|正常邮件)&=\frac{2+1}{6+9}\\p(最新|正常邮件)&=\frac{1+1}{6+9}\\p(产品|正常邮件)&=\frac{0+1}{6+9}\\p(链接|正常邮件)&=\frac{0+1}{6+9}\\p(开会|正常邮件)&=\frac{1+1}{6+9}\\p(详见|正常邮件)&=\frac{1+1}{6+9}\\p(邮件|正常邮件)&=\frac{1+1}{6+9}\\p(正常邮件)=\frac{1}{2} \end{aligned} p(点击∣正常邮件)p(更多∣正常邮件)p(信息∣正常邮件)p(最新∣正常邮件)p(产品∣正常邮件)p(链接∣正常邮件)p(开会∣正常邮件)p(详见∣正常邮件)p(邮件∣正常邮件)p(正常邮件)=21=6+90+1=6+90+1=6+92+1=6+91+1=6+90+1=6+90+1=6+91+1=6+91+1=6+91+1
p ( 点 击 ∣ 垃 圾 邮 件 ) = 2 + 1 8 + 9 p ( 更 多 ∣ 垃 圾 邮 件 ) = 1 + 1 8 + 9 p ( 信 息 ∣ 垃 圾 邮 件 ) = 2 + 1 8 + 9 p ( 最 新 ∣ 垃 圾 邮 件 ) = 1 + 1 8 + 9 p ( 产 品 ∣ 垃 圾 邮 件 ) = 1 + 1 8 + 9 p ( 链 接 ∣ 垃 圾 邮 件 ) = 1 + 1 8 + 9 p ( 开 会 ∣ 垃 圾 邮 件 ) = 0 + 1 8 + 9 p ( 详 见 ∣ 垃 圾 邮 件 ) = 0 + 1 8 + 9 p ( 邮 件 ∣ 垃 圾 邮 件 ) = 0 + 1 8 + 9 p ( 垃 圾 邮 件 ) = 1 2 \begin{aligned} p(点击|垃圾邮件)&=\frac{2+1}{8+9}\\p(更多|垃圾邮件)&=\frac{1+1}{8+9}\\p(信息|垃圾邮件)&=\frac{2+1}{8+9}\\p(最新|垃圾邮件)&=\frac{1+1}{8+9}\\p(产品|垃圾邮件)&=\frac{1+1}{8+9}\\p(链接|垃圾邮件)&=\frac{1+1}{8+9}\\p(开会|垃圾邮件)&=\frac{0+1}{8+9}\\p(详见|垃圾邮件)&=\frac{0+1}{8+9}\\p(邮件|垃圾邮件)&=\frac{0+1}{8+9}\\p(垃圾邮件)=\frac{1}{2} \end{aligned} p(点击∣垃圾邮件)p(更多∣垃圾邮件)p(信息∣垃圾邮件)p(最新∣垃圾邮件)p(产品∣垃圾邮件)p(链接∣垃圾邮件)p(开会∣垃圾邮件)p(详见∣垃圾邮件)p(邮件∣垃圾邮件)p(垃圾邮件)=21=8+92+1=8+91+1=8+92+1=8+91+1=8+91+1=8+91+1=8+90+1=8+90+1=8+90+1
在上述计算词库中每个词的条件概率,使用加1平滑后,分母加词库的大小n=9,使P(v|正常邮件)=1;P(v|垃圾邮件)=1,可以加加看!
p ( S ∣ 正 常 邮 件 ) = p ( 最 新 , 产 品 , 点 击 , 链 接 , 产 品 ∣ 正 常 邮 件 ) ∗ p ( 正 常 邮 件 ) p ( 邮 件 内 容 ) = p ( 最 新 ∣ 正 常 邮 件 ) ∗ p ( 产 品 ∣ 正 常 邮 件 ) ∗ p ( 点 击 ∣ 正 常 邮 件 ) ∗ p ( 链 接 ∣ 正 常 邮 件 ) ∗ p ( 产 品 ∣ 正 常 邮 件 ) ∗ p ( 正 常 邮 件 ) p ( 邮 件 内 容 ) = 2 15 ∗ 1 15 ∗ 1 15 ∗ 1 15 ∗ 1 15 ∗ 1 2 p ( 邮 件 内 容 ) p ( S ∣ 垃 圾 邮 件 ) = p ( 最 新 , 产 品 , 点 击 , 链 接 , 产 品 ∣ 垃 圾 邮 件 ) ∗ p ( 正 常 邮 件 ) p ( 邮 件 内 容 ) = p ( 最 新 ∣ 垃 圾 邮 件 ) ∗ p ( 产 品 ∣ 垃 圾 邮 件 ) ∗ p ( 点 击 ∣ 垃 圾 邮 件 ) ∗ p ( 链 接 ∣ 垃 圾 邮 件 ) ∗ p ( 产 品 ∣ 垃 圾 邮 件 ) ∗ p ( 垃 圾 邮 件 ) p ( 邮 件 内 容 ) = 2 17 ∗ 2 17 ∗ 3 17 ∗ 2 17 ∗ 2 17 ∗ 1 2 p ( 邮 件 内 容 ) \begin{aligned} p(S|正常邮件)&=\frac{p(最新,产品,点击,链接,产品|正常邮件)*p(正常邮件)}{p(邮件内容)}\\ &=\frac{p(最新|正常邮件)*p(产品|正常邮件)*p(点击|正常邮件)*p(链接|正常邮件)*p(产品|正常邮件)*p(正常邮件)}{p(邮件内容)}\\ &=\frac{\frac{2}{15}*\frac{1}{15}*\frac{1}{15}*\frac{1}{15}*\frac{1}{15}*\frac{1}{2}}{p(邮件内容)}\\ p(S|垃圾邮件)&=\frac{p(最新,产品,点击,链接,产品|垃圾邮件)*p(正常邮件)}{p(邮件内容)}\\ &=\frac{p(最新|垃圾邮件)*p(产品|垃圾邮件)*p(点击|垃圾邮件)*p(链接|垃圾邮件)*p(产品|垃圾邮件)*p(垃圾邮件)}{p(邮件内容)}\\ &=\frac{\frac{2}{17}*\frac{2}{17}*\frac{3}{17}*\frac{2}{17}*\frac{2}{17}*\frac{1}{2}}{p(邮件内容)} \end{aligned} p(S∣正常邮件)p(S∣垃圾邮件)=p(邮件内容)p(最新,产品,点击,链接,产品∣正常邮件)∗p(正常邮件)=p(邮件内容)p(最新∣正常邮件)∗p(产品∣正常邮件)∗p(点击∣正常邮件)∗p(链接∣正常邮件)∗p(产品∣正常邮件)∗p(正常邮件)=p(邮件内容)152∗151∗151∗151∗151∗21=p(邮件内容)p(最新,产品,点击,链接,产品∣垃圾邮件)∗p(正常邮件)=p(邮件内容)p(最新∣垃圾邮件)∗p(产品∣垃圾邮件)∗p(点击∣垃圾邮件)∗p(链接∣垃圾邮件)∗p(产品∣垃圾邮件)∗p(垃圾邮件)=p(邮件内容)172∗172∗173∗172∗172∗21
最后我们得出:
因为p(S|正常邮件)<p(S|垃圾邮件),所以S为垃圾邮件的可能性会更大
**Tips:我们可以看到上述计算出的条件概率非常小,在计算机中容易出现”溢出的现象“,为了避免该问题我们加入log,这样log(p1 p2 p3) = logp1+logp2+log3,我就不在这里过多的赘述了!
4、朴素贝叶斯的最大似然估计
4.1、预备知识
1)最大似然估计:
最大似然的核心:假设未知参数为θ,已知的样本为D,最大似然估计通过最大化P(D|θ)来求解未知参数θ
最大似然估计的详细解释我在逻辑回归一文中做了详细阐述,就不过多赘述
2)带限制条件的优化
①无约束条件的优化:
例 1. 求 f ( x ) = x 2 − 2 x − 3 的 最 小 值 解 : f ′ ( x ) = 2 x − 2 令 f ′ ( x ) = 0 得 x = 1 \begin{aligned} 例1.求f(x) = x^2 - 2x - 3的最小值\\ 解:f^{'}(x) = 2x - 2 \\ 令f^{'}(x)=0\\得x=1 \end{aligned} 例1.求f(x)=x2−2x−3的最小值解:f′(x)=2x−2令f′(x)=0得x=1
②带约束条件的优化-拉格朗日惩罚项
求 f ( x , y ) = x + y 的 最 大 值 , 但 有 个 条 件 是 x 2 + y 2 = 1 解 : 由 x 2 + y 2 = 1 得 x 2 + y 2 − 1 = 0 设 f ( x , y , λ ) = x + y + λ ( x 2 + y 2 − 1 ) { f x ′ ( x , y , λ ) = 1 + 2 λ x = 0 f y ′ ( x , y , λ ) = 1 + 2 λ y = 0 f λ ′ ( x , y , λ ) = x 2 + y 2 − 1 = 0 得 : { λ 1 = 2 2 x 1 = − 2 2 y 1 = − 2 2 { λ 2 = − 2 2 x 2 = 2 2 y 2 = 2 2 综 上 : 得 令 f ( x , y ) = x + y 最 大 的 值 为 { λ 2 = − 2 2 x 2 = 2 2 y 2 = 2 2 求f(x,y)=x+y的最大值,但有个条件是x^{2}+y^2 = 1\\解:由x^2+y^2 = 1 \\得x^2+y^2 - 1 =0 \\ 设f(x,y,\lambda) = x + y + \lambda{(x^2+y^2 - 1)}\\ \begin{cases} f^{'}_x(x,y,\lambda) = 1+2\lambda{x}=0 \\ f^{'}_y(x,y,\lambda) = 1+2\lambda{y}=0 \\ f^{'}_{\lambda}(x,y,\lambda) = x^2+y^2-1=0 \end{cases}\\ 得: \begin{cases} \lambda_{1} = \frac{\sqrt{2}}{2} \\ x_1 = -\frac{\sqrt{2}}{2} \\ y_1 = -\frac{\sqrt{2}}{2}\\ \end{cases}\quad \begin{cases} \lambda_{2} = -\frac{\sqrt{2}}{2} \\ x_2 = \frac{\sqrt{2}}{2} \\ y_2 = \frac{\sqrt{2}}{2}\\ \end{cases}\\ 综上:得令f(x,y)=x+y最大的值为\\ \begin{cases} \lambda_{2} = -\frac{\sqrt{2}}{2} \\ x_2 = \frac{\sqrt{2}}{2} \\ y_2 = \frac{\sqrt{2}}{2}\\ \end{cases} 求f(x,y)=x+y的最大值,但有个条件是x2+y2=1解:由x2+y2=1得x2+y2−1=0设f(x,y,λ)=x+y+λ(x2+y2−1)⎩⎪⎨⎪⎧fx′(x,y,λ)=1+2λx=0fy′(x,y,λ)=1+2λy=0fλ′(x,y,λ)=x2+y2−1=0得:⎩⎪⎨⎪⎧λ1=22 x1=−22 y1=−22 ⎩⎪⎨⎪⎧λ2=−22 x2=22 y2=22 综上:得令f(x,y)=x+y最大的值为⎩⎪⎨⎪⎧λ2=−22 x2=22 y2=22
4.2、得到朴素贝叶斯的目标函数
4.3、对目标函数的求解
更多推荐
机器学习之朴素贝叶斯模型
发布评论