朴素贝叶斯算法

朴素贝叶斯算法是一种生成算法,主要用于分类,可以处理非线性的数据。它会计算样本属于每一个类的后验概率,然后判定样本属于后验概率最大的那一个类。朴素贝叶斯有两个假设条件:

  1. 条件独立假设:用于分类的特征在类确定的条件下都是条件独立的;
  2. 连续型特征服从正太分布假设:如果特征是连续型的变量,就假设该特征服从正太分布。

这些假设使朴素贝叶斯算法变得简单(这个我们可以在后面看到),但有时也会牺牲一定的分类准确率。
朴素贝叶斯算法是基于贝叶斯公式的,所以我们先简单讲一下贝叶斯公式。

贝叶斯公式(贝叶斯定理)

通常情况下,事件A在事件B的条件下发生的概率P(A|B)和事件B在事件A的条件下发生的概率P(B|A)是不一样的。但是两者之间存在一定的关系,而这个关系就是贝叶斯公式。个人认为也可以理解为下面的联合概率,让P(A|B)和P(B|A)之间存在一个关系

                                                                        P(A|B)P(B)=P(B|A)P(A)

根据上面的公式,只要知道其中三个参数的值,就可以求解剩下一个参数的值。

下面我们将贝叶斯公式运用到朴素贝叶斯算法里面。

我们先对后面要用到的表示做一下描述:用x的上标 i 表示第几个样本,x的下标 j (j=1,2,3,...,m)表示x^i 样本的第几个特征,v 表示的是样本在某个特征下的具体取值;y 表示样本的标签,c_i (i=1,2,3,...,k)表示样本具体是哪一类。

因为我们想要知道的是在已知样本特征向量x的情况下样本的类别c, 而这个就是后验概率P(c|x),根据上面的公式我们可以的到后验概率的计算公式。

                                                                              P(c|x)=\frac{P(x|c)P(c)}{P(x)}

所以对于每一个类别的后验概率为:

                                                                           P(c_i|x)=\frac{P(c_i)\prod_{j}^{n}P(x_j=v|c_i)}{P(x)},i=1,2,3,...,k

因为朴素贝叶斯的第一个假设,条件概率就为样本的所有特征在某个类型下的连乘形式,这个就简化了求解条件概率的过程。

然后我们选取后验概率最大的类别作为预测样本的类别:

                                                     arg\underset{c_i}maxP(y=c_i|x)=\frac{P(y=c_i)\prod_{j}^{n}P(x_j=v|y=c_i)}{P(x)},i = 1,2,...,k

因为对于每一个类别P(x)都是一样的,可以省略掉。同时我们并不需要知道特别准确的概率值,因为我们比较的是大小。所以我们要求的是

                                                      arg\underset{c_i}maxP(y=c_i|x)=P(y=c_i)\prod_{j}^{n}P(x_j=v|y=c_i),i=1,2,...,k

 

个人认为朴素贝叶斯算法没有训练过程,而是从训练数据中得到预测样本条件概率和先验概率,来计算后验概率。

对于不同类型的变量,有不同的方法计算条件概率

  • 离散型变量

计算类的概率(先验概率):P(y=c)=\frac{N_{y=c}}{N}

计算样本单个特征在具体取值条件下的条件概率:P(x^i_{j}=v|y=c)=\frac{N_{x^i_{j}=v,y=c}}{N_{y=c}}

用上面的方法计算条件概率是有可能出现条件概率值为0的情况,因为样本在某一个特征下的取值在训练集中没有,此时N_{x^i_j=v,y=c}=0,条件概率就等于0。这个显然是不合理的。因为训练集是采样的结果,并不是总体样本。这时可以采用拉普拉斯平滑,k为类别的种类。

                                                                         P(x^i_{j}=v|y=c)=\frac{N_{x^i_{j}=v,y=c}+1}{N_{y=c}+k}

  • 连续型变量

连续型变量和离散型变量计算类的概率是一样的,不同的是条件概率分布。根据前面的假设,此时的连续型变量的条件概率服从一维的正态分布。

                                                                         

当预测一个样本的类别时,我们知道样本在各个特征上的具体取值,此时我们根据取值在训练集中计算出条件概率,再结合先验概率,我们就能算出每个类别后验概率,然后概率最大的就是样本的类别。

朴素贝叶斯算法整个的工作流程就是:

根据训练集,计算每个类别的先验概率,然后计算每个特征每个具体取值下针对不同类别的条件概率。对于给定的一个实例x = {x_1,x_2,...,x_n},也就是需要我们预测类别的样本。计算该实例在每一个类别下的后验概率,然后将实例x分为概率最大的那一类。

下面借鉴一下李航书上的一个例子,可以帮助大家理解

朴素贝叶斯算法的优点:

  1. 计算效率高。从推导过程我们就可以看见,没有复杂的求导和矩阵运算。
  2. 朴素贝叶斯能够给出每个类别具体的概率值,也方便我们直观的理解。
  3. 可以处理多分类问题
  4. 对异常值不敏感

朴素贝叶斯算法的缺点:

  1. 分类性能不一定很高;
  2. 条件假设独立会使朴素贝叶斯变得简单,但有时会牺牲一定的分类准确率

朴素贝叶斯算法适用的场景:不同维度之间相关性较小,需要模型容易解释的场景。

应用:文本分类,垃圾邮件分类

后面会举出一个关于朴素贝叶斯算法的具体应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值