02-27 朴素贝叶斯

柔情痞子 提交于 2020-02-28 07:06:37

朴素贝叶斯

在这里插入图片描述
  朴素贝叶斯是基于贝叶斯公式与特征条件独立假设的分类方法(注:贝叶斯公式是数学定义,朴素贝叶斯是机器学习算法)。朴素贝叶斯基于输入和输入的联合概率分布,对于给定的输入,利用贝叶斯公式求出后验概率最大的输出yy。即可以总结为以下三点

  1. 已知类条件概率密度函数表达式和先验概率
  2. 利用贝叶斯公式转换成后验概率
  3. 根据后验概率大小进行决策分类

朴素贝叶斯学习目标

  1. 朴素贝叶斯构造
  2. 朴素贝叶斯基本公式
  3. 朴素贝叶斯参数估计
  4. 多项式朴素贝叶斯、伯努利朴素贝叶斯、高斯朴素贝叶斯
  5. 朴素贝叶斯流程
  6. 朴素贝叶斯优缺点

朴素贝叶斯引入

  假设现在有一个有两个类别的鸢尾花数据集,并且已经知晓每个数据的分类情况,并且假设数据的分布如下图所示。

# 朴素贝叶斯引入图例
from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt
from sklearn import datasets
%matplotlib inline

font = FontProperties(fname='/Library/Fonts/Heiti.ttc')

iris_data = datasets.load_iris()
X = iris_data.data[0:100, [0, 1]]
y = iris_data.target[0:100]

plt.scatter(X[0:50, [0]], X[0:50, [1]], color='r',
            s=50, marker='o', label='山鸢尾')
plt.scatter(X[50:100, [0]], X[50:100, [1]],
            color='b', s=50, marker='x', label='杂色鸢尾')
plt.xlabel('花瓣长度(cm)', fontproperties=font)
plt.ylabel('花瓣宽度(cm)', fontproperties=font)
plt.legend(prop=font)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qH98JIAe-1582805693567)(02-27%20%E6%9C%B4%E7%B4%A0%E8%B4%9D%E5%8F%B6%E6%96%AF_files/02-27%20%E6%9C%B4%E7%B4%A0%E8%B4%9D%E5%8F%B6%E6%96%AF_6_0.png)]

在这里插入图片描述

  现在假设有一个未知分类的鸢尾花数据(x1(),x2())(x_1(花瓣长度),x_2(花瓣宽度)),用p1(x1,x2)p_1(x_1,x_2)表示样本属于山鸢尾(red)的概率,用p2(x1,x2)p_2(x_1,x_2)表示属于杂色鸢尾(blue)的概率,p1(x1,x2)+p2(x1,x2)=1p_1(x_1,x_2) + p_2(x_1,x_2) = 1

  假设如果p1(x1,x2)>p2(x1,x2)p_1(x_1,x_2) > p_2(x_1,x_2)(x1,x2)(x_1,x_2)为山鸢尾,否则为杂色鸢尾,即选择概率高的类别作为新样本的分类结果。这就是贝叶斯决策理论的核心思想,选择具有最高概率的决策。

  如果使用条件概率来表示这个上述所说的分类,则可以表示为
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ & p(red|x_1,x_…
  即如果出现一个新样本,假设数据集有nn个特征、mm个分类,只需要计算这个样本的
argmax(p(redx1,x2),p(bluex1,x2)) arg\,max\,(p(red|x_1,x_2),p(blue|x_1,x_2))
  如果只有两个特征x1x_1x2x_2,那么计算并不会很难,按照条件公式计算即可,但是你有没有想过如果有nn特征,KK个分类呢?即计算
argmaxckp(cjx1,x2,,xn)(k=1,2,,K) \underbrace{arg\,max}_{c_k}\,p(c_j|x_1,x_2,\ldots,x_n) \quad(k=1,2,\cdots,K)
  上述的计算量是非常大的,那么我们有没有一种简单的方法能够改善该公式呢?有是有一定有的,即朴素贝叶斯法。
在这里插入图片描述

朴素贝叶斯详解

朴素贝叶斯构造

  假设现有一个训练集有KK个类别c1,c2,,ckc_1,c_2,\ldots,c_kmm个样例,每个样例有nn个特征,训练集可以表示为
((x1(1),x2(1),,xn(1),y1)(x1(2),x2(2),,xn(2),y2),,(x1(m),x2(m),,xn(m),ym)) ((x_1^{(1)},x_2^{(1)},\cdots,x_n^{(1)},y_1)(x_1^{(2)},x_2^{(2)},\cdots,x_n^{(2)},y_2),\cdots,(x_1^{(m)},x_2^{(m)},\cdots,x_n^{(m)},y_m))
  从样本中可以得到

    朴素贝叶斯的先验分布为p(ck)(k=1,2,,K)p(c_k) \quad (k=1,2,\ldots,K),

    朴素贝叶斯的条件概率分布为p(x1,x2,,xnck)p(x_1,x_2,\ldots,x_n|c_k),

    利用条件概率公式得到XXYY的联合分布p(X,Y)p(X,Y)
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ p(X,Y) & = p((…

  由于p(x1,x2,,xnck)p(x_1,x_2,\ldots,x_n|c_k)是一个nn个维度的条件分布,计算难度超级复杂,因此假设XXnn个维度之间相互独立(注:如果特征之间有大部分不是独立存在的,则应该尽量不要使用朴素贝叶斯模型,而应该考虑使用其他的分类方法),则可以把这个nn维的条件分布改写成
p(x1,x2,,xnck)=p(x1ck)p(x2ck)p(xnck) p(x_1,x_2,\ldots,x_n|c_k) = p(x_1|c_k)p(x_2|c_k)\cdots{p(x_n|c_k)}
虽然改写后的联合分布计算更加简单,但是由于假设所有的特征都是独立的,因此会相应的降低预测的不准确性。

在这里插入图片描述

朴素贝叶斯基本公式

  假设已经得到了训练集的p(ck)p(c_k)p(xjck)p(x_j|c_k)值,假设现有一个测试样本(x1,x2,,xn)(x_{1},x_{2},\ldots,x_{n}),则可以根据贝叶斯公式求得KK个分类c1,c2,,ckc_1,c_2,\ldots,c_k各自的概率。
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ p(c_k|x_{1},x_…
  求得所有分类各自的概率之后,哪一个分类的概率最大,则样本属于哪一个分类。
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ 样本类别 & = max\,…
其中y=maxf(x)y = max\,f(x)表示yyf(x)f(x)中所有的值中最大的输出;y=argmaxf(x)y = arg\,max f(x)表示yyf(x)f(x)中,输出的那个参数tt

  由于每一个类别的概率公式的分子都是相同的,把分子去掉后则可以把上述公式转化为朴素贝叶斯模型的基本公式
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ 样本类别 & = \unde…

朴素贝叶斯参数估计

  朴素贝叶斯模型的基本公式为
=argmaxckp(ck)j=1np(xjck) 样本类别 = \underbrace{arg\,max}_{c_k}\,p(c_k) \prod_{j=1}^{n} p(x_{j}|c_k)
其中p(ck)p(c_k)通过极大似然估计很容易算出样本类别ckc_k的出现频率,假设ckc_k出现mkm_k次,则
p(ck)=mkm p(c_k) = {\frac{m_k}{m}}
而对于p(xjck)p(x_j|c_k),则需要考虑特征值的取值与分布情况。

特征值为离散值

  假设xjx_j是离散值,则可以假设xjx_j符合多项式分布,这种情况下的p(xjck)p(x_j|c_k)是样本类别ckc_k中特征xjx_j出现的频率,假设xjx_jckc_k中出现的次数为mkjm_{k_j},则
p(xjck)=mkjmk p(x_j|c_k) = {\frac {m_{k_j}} {m_k} }
  由于假设所有特征相互独立,如果某个特征没有出现在某个类别中,则p(xjck)=0p(x_j|c_k) = 0会使分类产生偏差,一般采用贝叶斯估计解决该问题,即引入拉普拉斯平滑(Laplace smoothing),即
p(xjck)=mkj+λmk+Sjλ p(x_j|c_k) = {\frac {m_{k_j} + \lambda} {m_k + S_j\lambda} }
其中λ0\lambda\leq0,当λ=0\lambda=0时为最大似然估计;λ=1\lambda=1时称为拉普拉斯平滑,SjS_j为第j个特征可以能取值的个数(注:由于xjx_j是离散的值,xjx_j有可能出现多次,并且每次出现的值可能不同)。

特征值为稀疏的离散值

  假设xjx_j是非常稀疏的离散值,即各个特征出现的概率很低,这个时候可以假设xjx_j符合伯努利分布,即特征xjx_j出现为11,不出现为00。则p(xjck)p(x_j|c_k)xjx_j在样本类别ckc_k中出现的频率,则
p(xjck)=p(xjck)xj+(1p(xjck))(1xj) p(x_j|c_k) = p(x_j|c_k)x_j + (1- p(x_j|c_k))(1-x_j)

特征值为连续值

  假设xjx_j是连续值,则假设xjx_j符合高斯分布(正态分布),则可以把xjx_j直接带入正态分布公式,即可得
p(xjck)=12πσk2exp((xjμk)22σk2) p(x_j|c_k) = {\frac {1} {\sqrt{2\pi\sigma_k^2}} } exp (-{\frac {(x_j - \mu_{k})^2} {2\sigma_k^2}})
其中μk\mu_k是所有xjx_j的期望值,σk2\sigma_k^2是所有xjx_j的方差

三种不同的朴素贝叶斯

多项式朴素贝叶斯

在这里插入图片描述

  多项式朴素贝叶斯(Multinomial Naive Bayes)特征值符合多项式分布,多用于高维度向量分类,即样本特征为多元离散值,因此最常用于文章分类。

from sklearn.naive_bayes import MultinomialNB

伯努利朴素贝叶斯

  伯努利朴素贝叶斯(Bernoulli Naive Bayes)特征值符合伯努利分布,针对布尔类型特征值的向量做分类,即样本特征为二元离散值,或者为稀疏的多元离散值。

from sklearn.naive_bayes import BernoulliNB

高斯朴素贝叶斯

  高斯朴素贝叶斯(Gaussian Naive Bayes)特征符合高斯分布,多用于特征值为连续值,可以利用高斯概率密度公式进行分类拟合。

from sklearn.naive_bayes import GaussianNB

朴素贝叶斯流程

输入

  有mm个实例nn维特征的数据集
T={(x1,y1),(x2,y2),,(xm,ym)} T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\}
其中xix_i是第ii个实例的特征向量即(xi(1),xi(2),,xi(n))({x_i}^{(1)},{x_i}^{(2)},\cdots,{x_i}^{(n)})xi(j)(j=1,2,,n){x_i}^{(j)} \quad(j=1,2,\cdots,n)是第ii个实例的第jj个特征,xi(j){aj1,aj2,,ajSj}{x_i}^{(j)}\in\{a_{j1},a_{j2},\cdots,a_{jS_j}\}ajl(l=1,2,,Sj)a_{jl} \quad(l=1,2,\cdots,S_j)是第jj个特征可能的第ll个值,yi{c1,c2,,cK}y_i\in\{c_1,c_2,\cdots,c_K\}ck(k=1,2,,K)c_k \quad (k=1,2,\cdots,K)是第kk个类;实例xx

输出

  实例xx的类别。

流程

  1. 计算先验概率和条件概率,即
    KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ & p(Y=c_k) = {…
  2. 对于给定的实例x=(x(1),x(2),,x(n))Tx=(x_{(1)},x_{(2)},\cdots,x_{(n)})^T,计算
    p(Y=ck)j=1np(X(j)=x(j)Y=ck) p(Y=c_k)\prod_{j=1}^n p(X^{(j)} = x^{(j)}|Y=c_k)
  3. 确定实例xx的类别
    y=argmaxckp(Y=ck)j=1np(X(j)=x(j)Y=ck) y = \underbrace{arg\,max}_{c_k}\,p(Y=c_k) \prod_{j=1}^n p(X^{(j)}=x^{(j)}|Y=c_k)

朴素贝叶斯优缺点

优点

  1. 朴素贝叶斯源自古典数学理论,其中用到了古典概率,有稳定的分类效果
  2. 对小规模数据表现很好,不需要使用(OvR)即可以处理多分类问题,并且可以把数据集拆分训练达到增量的目的
  3. 由于假设特征间相互独立,对缺失值不敏感,常用于文本分类

缺点

  1. 由于假设特征间相互独立,也导致了分类的准确性会有误差(注:针对这一点可以调节关联不独立的特征,即半朴素贝叶斯算法)
  2. 由于后验概率的计算往往都假设先验概率已知,对数据的分布也有假设,有可能会因为假设的不确定性导致分类的准确性有误差

小结

  朴素贝叶斯法是基于贝叶斯公式的一个理论,如果能记住贝叶斯公式并对概率论能提前有一个大概的了解,会更利于理解朴素贝叶斯法。

  朴素贝叶斯法在能够很好地解决多分类问题,但是由于它最大的缺点,即假设特征都是独立的,所以一般被用于文本分类,因为一般会认为单词与单词之间都是相互独立的。

  下一篇将会介绍一个在深度学习流行之前在工业上最常用的分类器,即支持向量机。

在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!