zoukankan      html  css  js  c++  java
  • 02-27 朴素贝叶斯


    更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html

    朴素贝叶斯

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

    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()
    

    png

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

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

    如果使用条件概率来表示这个上述所说的分类,则可以表示为

    [egin{align} & p(red|x_1,x_2) > p(blue|x_1,x_2) quad ext{样本属于山鸢尾} \ & p(red|x_1,x_2) < p(blue|x_1,x_2) quad ext{样本属于杂色鸢尾} end{align} ]

    即如果出现一个新样本,假设数据集有(n)个特征、(m)个分类,只需要计算这个样本的

    [arg\,max\,(p(red|x_1,x_2),p(blue|x_1,x_2)) ]

    如果只有两个特征(x_1)(x_2),那么计算并不会很难,按照条件公式计算即可,但是你有没有想过如果有(n)特征,(K)个分类呢?即计算

    [underbrace{arg\,max}_{c_k}\,p(c_j|x_1,x_2,ldots,x_n) quad(k=1,2,cdots,K) ]

    上述的计算量是非常大的,那么我们有没有一种简单的方法能够改善该公式呢?有是有一定有的,即朴素贝叶斯法。

    三、朴素贝叶斯详解

    3.1 朴素贝叶斯构造

    假设现有一个训练集有(K)个类别(c_1,c_2,ldots,c_k)(m)个样例,每个样例有(n)个特征,训练集可以表示为

    [((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(c_k) quad (k=1,2,ldots,K)),

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

    利用条件概率公式得到(X)(Y)的联合分布(p(X,Y))

    [egin{align} p(X,Y) & = p((x_1,x_2,ldots,x_n),c_k) \ & = p(c_k)p(x_1,x_2,ldots,x_n|c_k) \ end{align} ]

    由于(p(x_1,x_2,ldots,x_n|c_k))是一个(n)个维度的条件分布,计算难度超级复杂,因此假设(X)(n)个维度之间相互独立(注:如果特征之间有大部分不是独立存在的,则应该尽量不要使用朴素贝叶斯模型,而应该考虑使用其他的分类方法),则可以把这个(n)维的条件分布改写成

    [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)} ]

    虽然改写后的联合分布计算更加简单,但是由于假设所有的特征都是独立的,因此会相应的降低预测的不准确性。

    3.2 朴素贝叶斯基本公式

    假设已经得到了训练集的(p(c_k))(p(x_j|c_k))值,假设现有一个测试样本((x_{1},x_{2},ldots,x_{n})),则可以根据贝叶斯公式求得(K)个分类(c_1,c_2,ldots,c_k)各自的概率。

    [egin{align} p(c_k|x_{1},x_{2},ldots,x_{n}) & = {frac{p(x_{1},x_{2},ldots,x_{n}|c_k)p(c_k)}{p(x_{1},x_{2},ldots,x_{n})}} \ & = {frac{p(x_{1}|c_k)p(x_{2}|c_k)cdots{p(x_{n}|c_k)p(c_k)}} {p(x_{1},x_{2},ldots,x_{n})}} \ end{align} ]

    求得所有分类各自的概率之后,哪一个分类的概率最大,则样本属于哪一个分类。

    [egin{align} 样本类别 & = max\,(p(c_1|x_{1},x_{2},ldots,x_{n}),p(c_2|x_{1},x_{2},ldots,x_{n}),cdots,p(c_k|x_{1},x_{2},ldots,x_{n})) \ & = underbrace{arg\,max}_{c_k}\,{frac{p(x_{1}|c_k)p(x_{2}|c_k)cdots{p(x_{n}|c_k)}} {p(x_{1},x_{2},ldots,x_{n})}} \ end{align} ]

    其中(y = max\,f(x))表示(y)(f(x))中所有的值中最大的输出;(y = arg\,max f(x))表示(y)(f(x))中,输出的那个参数(t)

    由于每一个类别的概率公式的分子都是相同的,把分子去掉后则可以把上述公式转化为朴素贝叶斯模型的基本公式

    [egin{align} 样本类别 & = underbrace{arg\,max}_{c_k} {p(x_{1}|c_k)p(x_{2}|c_k)cdots{p(x_{n}|c_k)p(c_k)}} \ & = underbrace{arg\,max}_{c_k}\,p(c_k) prod_{j=1}^{n} p(x_{j}|c_k) end{align} ]

    3.3 朴素贝叶斯参数估计

    朴素贝叶斯模型的基本公式为

    [样本类别 = underbrace{arg\,max}_{c_k}\,p(c_k) prod_{j=1}^{n} p(x_{j}|c_k) ]

    其中(p(c_k))通过极大似然估计很容易算出样本类别(c_k)的出现频率,假设(c_k)出现(m_k)次,则

    [p(c_k) = {frac{m_k}{m}} ]

    而对于(p(x_j|c_k)),则需要考虑特征值的取值与分布情况。

    3.3.1 特征值为离散值

    假设(x_j)是离散值,则可以假设(x_j)符合多项式分布,这种情况下的(p(x_j|c_k))是样本类别(c_k)中特征(x_j)出现的频率,假设(x_j)(c_k)中出现的次数为(m_{k_j}),则

    [p(x_j|c_k) = {frac {m_{k_j}} {m_k} } ]

    由于假设所有特征相互独立,如果某个特征没有出现在某个类别中,则(p(x_j|c_k) = 0)会使分类产生偏差,一般采用贝叶斯估计解决该问题,即引入拉普拉斯平滑(Laplace smoothing),即

    [p(x_j|c_k) = {frac {m_{k_j} + lambda} {m_k + S_jlambda} } ]

    其中(lambdaleq0),当(lambda=0)时为最大似然估计;(lambda=1)时称为拉普拉斯平滑,(S_j)为第j个特征可以能取值的个数(注:由于(x_j)是离散的值,(x_j)有可能出现多次,并且每次出现的值可能不同)。

    3.3.2 特征值为稀疏的离散值

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

    [p(x_j|c_k) = p(x_j|c_k)x_j + (1- p(x_j|c_k))(1-x_j) ]

    3.3.3 特征值为连续值

    假设(x_j)是连续值,则假设(x_j)符合高斯分布(正态分布),则可以把(x_j)直接带入正态分布公式,即可得

    [p(x_j|c_k) = {frac {1} {sqrt{2pisigma_k^2}} } exp (-{frac {(x_j - mu_{k})^2} {2sigma_k^2}}) ]

    其中(mu_k)是所有(x_j)的期望值,(sigma_k^2)是所有(x_j)的方差

    3.4 三种不同的朴素贝叶斯

    3.4.1 多项式朴素贝叶斯

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

    from sklearn.naive_bayes import MultinomialNB
    

    3.4.2 伯努利朴素贝叶斯

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

    from sklearn.naive_bayes import BernoulliNB
    

    3.4.3 高斯朴素贝叶斯

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

    from sklearn.naive_bayes import GaussianNB
    

    四、朴素贝叶斯流程

    4.1 输入

    (m)个实例(n)维特征的数据集

    [T={(x_1,y_1),(x_2,y_2),cdots,(x_m,y_m)} ]

    其中(x_i)是第(i)个实例的特征向量即(({x_i}^{(1)},{x_i}^{(2)},cdots,{x_i}^{(n)}))({x_i}^{(j)} quad(j=1,2,cdots,n))是第(i)个实例的第(j)个特征,({x_i}^{(j)}in{a_{j1},a_{j2},cdots,a_{jS_j}})(a_{jl} quad(l=1,2,cdots,S_j))是第(j)个特征可能的第(l)个值,(y_iin{c_1,c_2,cdots,c_K})(c_k quad (k=1,2,cdots,K))是第(k)个类;实例(x)

    4.2 输出

    实例(x)的类别。

    4.3 流程

    1. 计算先验概率和条件概率,即

    [egin{align} & p(Y=c_k) = {frac{sum_{i=1}^m I(y_i=c_k)}{m}} \ & p(X^{(j)} = a_{jl}| Y=c_k) = {frac{sum_{i=1}^m I({x_i}^{(j)}=a_{jl},y_i=c_k)}{sum_{i=1}^m I(y_i=c_k)}} end{align} ]

    1. 对于给定的实例(x=(x_{(1)},x_{(2)},cdots,x_{(n)})^T),计算

    [p(Y=c_k)prod_{j=1}^n p(X^{(j)} = x^{(j)}|Y=c_k) ]

    1. 确定实例(x)的类别

    [y = underbrace{arg\,max}_{c_k}\,p(Y=c_k) prod_{j=1}^n p(X^{(j)}=x^{(j)}|Y=c_k) ]

    五、朴素贝叶斯优缺点

    5.1 优点

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

    5.2 缺点

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

    六、小结

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

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

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

  • 相关阅读:
    Windows JScript 在 游览器 中运行 调试 Shell 文件系统
    autohotkey 符号链接 软连接 symbolink
    软链接 硬链接 测试
    SolidWorks 修改 基准面 标准坐标系
    手机 路径 WebDAV 映射 驱动器
    Win10上手机路径
    explorer 命令行
    单位公司 网络 封锁 屏蔽 深信 AC
    cobbler自动化部署原理篇
    Docker四种网络模式
  • 原文地址:https://www.cnblogs.com/nickchen121/p/11686774.html
Copyright © 2011-2022 走看看