朴素贝叶斯算法_简单示例描述

参考李航《统计学习方法》,列出一个自制的简单的数据集,描述朴素贝叶斯算法的原理。

一步步往下读,很好理解这个算法!


基本设定

  • 输入值 X :一个 n 维向量,即输入的数据包含 n 个特征值
  • 输出值 Y :{c1, c2, ……, ck} 中的一个(总共有 k 种 label)
  • 训练集 T :{(x1, y1), (x2, y2), ……, (xN, yN)}(总共 N 组)

以一个简易数据集为例:

脸-X(1) 胸-X(2) 腿-X(3) 追不追-Y
不追
不追
不追
不追

这里输入值 X 为一个 3 维向量,输出值 Y 包含两种 label,训练集有 8 组。

我们最终预测 X = [美,大,长] 时,计算要追和不要追的概率,求得最后的结果。


先验概率分布

很容易根据训练集得到先验概率  P(Y = ci), i = 1, 2, ……, k  

示例当中的数据进行统计得到的先验概率分布为:P("追不追" = "追") = 4 / 8,P("追不追" = "不追") = 4 / 8。


条件概率分布

P(B | A) : 表示 A 发生的前提下,B 发生的概率


后验概率分布

P(B | A) 中,A 为结果,B为原因,即为后验概率(关于先验概率、后验概率,有兴趣的可以查资料了解一下,不过在这里完全可以无视两者在概念上的区别)

这里后验条件概率分布定义为 P(X = x | Y = ci) = P(X(1) = x(1), X(2) = x(2), ……, X(n) = x(n) | Y = ci), i = 1, 2, ……, k

简单点说,例如当追/不追时,X = [美,大,长] 的概率分别表示为:

  • P(X = [美,大,长] | Y = "追") = P("脸" = "美", "胸" = "大", "腿" = "长" | Y = "追")
  • P(X = [美,大,长] | Y = "不追") = P("脸" = "美", "胸" = "大", "腿" = "长" | Y = "不追")

即当我追/不追一个女生,这个女生同时满足脸美、胸大、腿长的概率是多少。

那么这个概率怎么计算呢?


这里就涉及到这个算法的核心的假设:

条件独立假设

这里就不上公式了,直接用例子说明。

我们假设这个姑娘脸的美丑,胸的大小,腿的长短,三者是互不相关的,那么我们上面的条件概率分布就可以改写为:

  • P(X = [美,大,长] | Y = "追") = P("脸" = "美" | Y = "追" ) * P("胸" = "大" | Y = "追") * P("腿" = "长" | Y = "追")
  • P(X = [美,大,长] | Y = "不追") = P("脸" = "美" | Y = "不追" ) * P("胸" = "大" | Y = "不追") * P("腿" = "长" | Y = "不追")

这个假设可能与现实情况并不完全吻合,会带来一些误差,但是基于这个假设,这个算法具备了更强的可计算性,而且实际应用来看,这个误差的影响并没有大到影响朴素贝叶斯算法的应用。


贝叶斯定理

这里要引出贝叶斯公式:P(A | B) * P(B) = P(B | A) * P(A)

其实很好理解,等式两边表示的都是 A 、B 同时发生的概率。

翻转一下即得到了一个求条件概率的公式:P(A | B) = P(B | A) * P(A) / P(B)

回到我们的例子,当 X = [美,大,长] 时,追的概率为:

P(Y = "追" |X = [美,大,长] ) = P(X = [美,大,长] | Y = "追") * P(Y = "追") / P(X = [美,大,长])

根据前面叙述的条件独立假设,这个式子可以改写为:

P(Y = "追" |X = [美,大,长] ) = 【 P("脸" = "美" | Y = "追" ) * P("胸" = "大" | Y = "追") * P("腿" = "长" | Y = "追") * P(Y = "追") 】/ 【 P("脸" = "美") * P("胸" = "大") * P("腿" = "长") 】

同理,当 X = [美,大,长] 时,不追的概率为:

P(Y = "不追" |X = [美,大,长] ) = 【 P("脸" = "美" | Y = "不追" ) * P("胸" = "大" | Y = "不追") * P("腿" = "长" | Y = "不追") * P(Y = "不追") 】/ 【 P("脸" = "美") * P("胸" = "大") * P("腿" = "长") 】

这里注意到两个公式的分母是一样的,于是只需比较分子的结果即可判定:

P(Y = "追" |X = [美,大,长] ) 的分子为:

P("脸" = "美" | Y = "追" ) * P("胸" = "大" | Y = "追") * P("腿" = "长" | Y = "追") * P(Y = "追")

P(Y = "不追" |X = [美,大,长] ) 的分子为:

P("脸" = "美" | Y = "不追" ) * P("胸" = "大" | Y = "不追") * P("腿" = "长" | Y = "不追") * P(Y = "不追")

那么这些概率如何计算呢?


以一个简单易懂的方法为例:

极大似然估计

直接根据训练集数据,计算统计结果,作为对真实概率的近似:

"追"的分子计算得到 27/128 ,"不追"的分子为 1/128,根据后验概率最大化,取结果为"追"。

注意这里只是近似,不是真实的概率。

另一个更优的方法是贝叶斯估计,贴公式不太方便,原理也很简单,这里就不赘述了。

 

你可能感兴趣的:(机器学习实战)