分类模型(2)——朴素贝叶斯

        朴素贝叶斯(Naive Bayes)是经典的机器学习算法之一,是基于概率论的分类算法。

        在机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数,要么是条件分布。但是朴素贝叶斯却是生成方法。


一、概率论

回忆一波亘古的知识……

先验概率:即基于统计的概率,是基于以往历史经验和分析得到的结果,不需要依赖当前发生的条件。

后验概率:则是从条件概率而来,由因推果,是基于当下发生了事件之后计算的概率,依赖于当前发生的条件。

条件概率

记事件A发生的概率为P(A),事件B发生的概率为P(B),则在B事件发生的前提下,A事件发生的概率即为条件概率,记为P(A|B)。

                                                        P(A|B) = \frac{​{P(AB)}}{​{P(B)}}

乘法公式:

P_{(AB)}=P_{(B)}P_{(A|B)}

P_{(AB)}=P_{(A)}P_{(B|A)}

 乘法公式eg1:

共有产品100件,次品率为10%(合格率为90%),随机抽,不放回,第三次才取到合格品的概率:

假设设取第一,二,三次为合格品的事件为A_1A_2A_3

全概率公式

表示若事件{A_1},{A_2}, \cdots ,{A_n}构成一个完备事件组(互不相容),则对任意一个事件B都有公式成立:                             

                                                         P(B) = \sum\limits_{i = 1}^n {P(B|{A_i}) \times P({A_i})}

 全概率eg1:

10台机器,3台次品(7台正品)已售2台,再取一台是正品的概率

假设:事件B是第三次为正品,事件A_0为前两台都是次品,事件A_1:一次品一正品,事件A_2:都是正品

 全概率eg2:

10件产品,次品可能数量为0,1,2件,正品被检验成正品的概率为0.98,被检验成次品的概率为0.02。

次品被检验成正品的概率为0.05,被检验成次品的概率为0.95

求产品通过检验的可能性:

假设B:通过验证

事件A_1A_2A_3为次品数量为0,1,2件

事件B_1抽的是正品

则可以得到P_{(A_{0})}=P_{(A_{1})}=P_{(A_{2})}=\frac{1}{3}   , 

次品数量为0的情况下抽中正品的概率为 P_{(B_{1}|A_{0})}=1

次品数量为1的情况下抽中正品的概率为 P_{(B_{1}|A_{1})}=\frac{9}{10}(抽了9件正品)

次品数量为2的情况下抽中正品的概率为 P_{(B_{1}|A_{1})}=\frac{8}{10}(抽了8件正品)

抽中正品的概率为:

 

 那么通过检验的概率就可以为抽中正品过了和抽中次品过了的全概率

贝叶斯公式

贝叶斯公式便是基于条件概率,通过P(B|A)来求P(A|B),如下:

                                                        P(A|B) = \frac{​{P(B|A) \times P(A)}}{​{P(B)}}
 

将全概率公式带入贝叶斯公式中,得到:

                                                        P(A|B) = \frac{​{P(B|A) \times P(A)}}{​{\sum\limits_{i = 1}^n {P(B|{A_i}) \times P({A_i})} }}          

这就是一个由结果推原因的过程

                               

 贝叶斯eg1:

四条生产线进行抽查,其中第一生产线抽中的概率为15%,不合格率为0.05,第二生产线抽中的概率为20%,不合格率为0.04,第三生产线抽中的概率为30%,不合格率为0.03,第四生产线抽中的概率为35%,不合格率为0.02。

现在抽一批最终产品,结果抽到了个次品,求整出这个次品概率最大的生产线:

假设事件A_1A_2A_3A_4为抽中第一,二,三,四生产线,B事件为产品不合格

可以写成全概率:

这时候就可以利用乘法公式:

 贝叶斯eg2:

某个地区有一种病,发病率为0.0004  ,患者去医院被判确诊的概率为99%,误判的概率为1%

健康人去医院检测无病的概率为99.9%,误判确诊的概率为0.1%

 求该医院检测确诊且正确的概率:

假设事件A为患者,\overline{A}为健康者 ,事件B为确诊的

患者P_{(A)}=0.0004,健康P_{(\overline{A})}=0.9996

患者去医院被确诊P_{(B|A)}=0.99

健康者去医院被确诊的P_{(B|\overline{A})}=0.001

计算出确诊的全概率:

 则确诊且正确的概率为:

二、机器学习朴素贝叶斯

1,算法的原理

特征条件假设:假设每个特征之间没有联系,给定训练数据集,其中每个样本x都包括n维特征,即x = ({x_1},{x_2}, \cdots ,{x_n}),类标记集合含有k种类别,即y = ({y_1},{y_2}, \cdots ,{y_k})

对于给定的新样本x,判断其属于哪个标记的类别,根据贝叶斯定理,可以得到x属于{y_k}类别的概率P({y_k}|x)

                                            P\left(y_{k} \mid x\right)=\frac{P\left(x \mid y_{k}\right) \times P\left(y_{k}\right)}{\sum_{k} P\left(x \mid y_{k}\right) \times P\left(y_{k}\right)}            

后验概率最大的类别记为预测类别:\underset{y_{k}}{\arg \max } P\left(y_{k} \mid x\right)

朴素贝叶斯算法对条件概率分布作出了独立性的假设,通俗地讲就是说假设各个维度的特征{x_1},{x_2}, \cdots ,{x_n}互相独立,在这个假设的前提上,条件概率可以转化为:

                                        P(x|{y_k}) = P({x_1},{x_2}, \cdots ,{x_n}|{y_k}) = \prod\limits_{i = 1}^n {P({x_i}|{y_k})}

代入贝叶斯公式:

                                ​​​​​​​        ​​​​​​​        P({y_k}|x) = \frac{​{P({y_k}) \times \prod\limits_{i = 1}^n {P({x_i}|{y_k})} }}{​{\sum\limits_k {P({y_k}) \times \prod\limits_{i = 1}^n {P({x_i}|{y_k})} } }}

于是,朴素贝叶斯分类器可表示为:

                                  f(x) = \mathop {\arg \max }\limits_{​{y_k}} P({y_k}|x) = \mathop {\arg \max }\limits_{​{y_k}} \frac{​{P({y_k}) \times \prod\limits_{i = 1}^n {P({x_i}|{y_k})} }}{​{\sum\limits_k {P({y_k}) \times \prod\limits_{i = 1}^n {P({x_i}|{y_k})} } }}

因为对所有的y_k,上式中的分母的值都是一样的,所以可以忽略分母部分,朴素贝叶斯分类器最终表示为:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​·        f(x) = \mathop {\arg \max }\limits_{​{y_k}} P({y_k}) \times \prod\limits_{i = 1}^n {P({x_i}|{y_k})}

 2,好瓜坏瓜数据集实验

 1,贝叶斯计算

统计:好瓜和坏瓜中,敲声为0/1/2(沉闷/浊响/清脆)的频次,以及纹理为0/1/2(模糊/清晰/稍糊)的频次。

假设对某个瓜进行了测量,测得"敲声为1,纹理为2",视此为事件B。

可得: P(A_1)=\frac{8}{17}P(A_2)=\frac{9}{17}

1)求:在好瓜A1的前提下,敲声为1的概率是多少?纹理为2的概率是多少?敲声为1且纹理为2的概率P_{(B|A_{2})}是多少?

假设:事件C1为敲声为1,事件C2为纹理为2

P_{(C_1|A_1)}=\frac{6}{8}    ,     P_{(C_2|A_1)}=\frac{1}{8}

P_{(B|A_{1})}=P_{(C_1|A_1)}\times P_{(C_2|A_1)}=\frac{6}{8}\times \frac{1}{8}

2)求:在坏瓜A_2的前提下,敲声为1的概率是多少?纹理为2的概率是多少?敲声为1且纹理为2的概率P_{(B|A_2)}是多少?

假设:事件C1为敲声为1,事件C2为纹理为2

P_{(C_1|A_2)}=\frac{4}{9}    ,     P_{(C_2|A_2)}=\frac{4}{9}

P_{(B|A_{2})}=P_{(C_1|A_2)}\times P_{(C_2|A_2)}=\frac{4}{9}\times \frac{4}{9}

3)求测得“敲声为1,纹理为2”的前提下,它是好瓜的概率P_{(A1|B)}是多少?

P_{(A_1|B)}=\frac{P_{(A_1)}P_{(A_B|A_1)}}{P_{A_1}P_{(B|A_1)}+P_{A_2}P_{(B|A_2)}}=0.296703

2,sklearn代码训练

import pandas as pd
filename = '/data/bigfiles/watermelon.csv'
watermelon = pd.read_csv(filename)
watermelon
X, y = watermelon[['敲声','纹理']], watermelon['好瓜']
from sklearn.naive_bayes import BernoulliNB
model = BernoulliNB()
model.fit(X,y)
s = model.score(X, y)
s

利用 GaussianNB进行分类可以提高准确性

from sklearn.naive_bayes import GaussianNB
model_Gas = GaussianNB()
model_Gas.fit(X,y)
s = model_Gas.score(X, y)
s

 

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值