朴素贝叶斯
朴素贝叶斯算法是一种基于概率统计的分类方法,它主要利用贝叶斯公式对样本事件求概率,通过概率进行分类。以下先对贝叶斯公式做个了解。
贝叶斯公式
条件概率:
对于事件A、B,若P(B)>0,则事件A在事件B发生的条件下发生的概率为:
贝叶斯公式:
将条件概率稍作转化即可得到贝叶斯公式如下:
实例
先看看如何使用朴素贝叶斯进行预测吧。如下给出一个weather数据集,使用朴素贝叶斯算法预测样本 X={rainy,hot,normal,weak,?} 中属性play为yes还是no?
思路:我们可以求出在{rainy,hot,normal,weak}发生的条件下,事件play=yes和事件play=no的概率,谁的概率大,最终答案就选谁。
解:根据贝叶斯公式,有:
P(play=yes|X)=P(X|play=yes)×P(play=yes)P(X)
P(play=no|X)=P(X|play=no)×P(play=no)P(X)
我们要比较这两个概率的大小,由于分母相同且大于0,所以我们只需要比较分子的大小即可。P(X|play=yes)×P(play=yes)=P(x1|play=yes)×P(x2|play=yes)×P(x3|play=yes)×P(x4|play=yes)×P(play=yes)
其中,
P(x1|play=yes)=P(outlook=rainy|play=yes)=3/9
P(x2|play=yes)=P(temperature=hot|play=yes)=2/9
P(x3|play=yes)=P(humidity=normal|play=yes)=6/9
P(x4|play=yes)=P(wind=weak|play=yes)=6/9
P(play=yes)=9/14 ∴P(play=yes|X)≈3/9×2/9×6/9×6/9×9/14=0.0211
同理可得:
P(x1|play=no)=P(outlook=rainy|play=no)=2/5
P(x2|play=no)=P(temperature=hot|play=no)=2/5
P(x3|play=no)=P(humidity=normal|play=no)=1/5
P(x4|play=no)=P(wind=weak|play=no)=2/5
P(play=no)=9/14
∴P(play=no|X)≈2/5×2/5×1/5×2/5×9/14=0.0082
根据结果,P(play=yes|X)>P(play=no|X)
所以,样本 X={rainy,hot,normal,weak,?} 的play类标号值为yes。
朴素贝叶斯
相信大部分朋友都能看懂上面这个例子,也对朴素贝叶斯有了一定的认识。下面作一些补充介绍:
名词解释:
P(H) 表示假设H 的先验概率,即假设H 会发生的概率。P(H|X) 表示在条件X 下,假设H 的后验概率。即在事件X 发生的条件下,假设H 会发生的概率。- 在数据集D中,假设其属性集为:U={
A1,A2,…,An,C } ,其中A1,A2,…,An 叫属性变量,C 叫做类标号属性变量。
算法描述:
函数名:NaiveBayes
输入:类标号未知的样本X={x1,x2,…,xn}
输出:未知样本 X 所属类别号
(1)for j=1 to m
(2) 计算 X 属于每个类别 Cj 的概率 P(X|Cj) = P(x1|Cj) × P(x2|Cj) × … × P(xn|Cj);
(3) 计算训练集中每个类别 Cj 的概率 P(Cj);
(4) 计算概率值 μ = P(X|Cj) × P(Cj);
(5)end for
(6)选择概率值 μ 最大的 Ci(1≤i≤m) 作为类别输出。
优缺点
优点:
- 朴素贝叶斯的优点是容易实现,给出公式让计算机运算就行了,而且预测的结果还比较准确。
- 运行时间比较快,而且占用内存不会太大。
- 健壮性好。
缺点:
- 朴素贝叶斯比较适合于属性间相互独立的情况,如果属性间的独立性不高,准确性会下降。
- 当样本数据比较少的时候,可能无法进行正确分类。