精华内容
下载资源
问答
  • 朴素贝叶斯(Naive Bayes)原理+编程实现拉普拉斯修正的朴素贝叶斯分类器,以西瓜数据集3.0为训练集,对“测1”样本进行判别。

    1.生成模型与判别模型

      在概率生成模型(Probabilistic Generative Model)与朴素贝叶斯(Naive Bayes)中大概学习了一下概率生成模型以及朴素贝叶斯,今天在这里再总结一下生成模型与判别模型。
    在这里插入图片描述
      上面这张图可以清楚的解释二者的差别。前面我们讲到, 所谓的机器学习模型,本质上是一个函数,其作用是实现从一个样本 xx 到样本的标记值 yy 的映射,即 f(x;θ)yf(x;\theta ^{*})\rightarrow y,或者求得标签的条件概率:
    在这里插入图片描述
      例如有C1以及C2两种类别,我们需要判断样本属于哪一个class:

    • 判别式模型:要确定一个样本是属于C1还是C2,用判别模型的方法是从历史数据中学习到模型,然后通过提取该样本的特征来预测出该样本属于C1的概率以及C2的概率。
    • 生成式模型:根据C1的特征首先学习出一个C1的模型,然后根据C2的特征学习出一个C2的模型,然后从该样本中提取特征,放到C1模型中看概率是多少,然后再放到C2模型中看概率是多少,哪个大就是哪个。
    • 判别模型之所以称为判别模型,就是因为它只是简单地判别就好了。根据样本X来判别它所属的类别,直接就求出了p(yx)p(y|x)的大小
    • 而生成模型,在概率生成模型(Probabilistic Generative Model)与朴素贝叶斯(Naive Bayes)中我们可以看到,我们要求:
      在这里插入图片描述
      P(C1)与P(C2)很好求,我们要求的是P(x|C1)以及P(x|C2),也就是说我们要先求得C1与C2的具体分布,也就是上面说的,分别根据C1与C2的特征学得两个模型,得到模型之后代入,若P(C1|x)>0.5那x就属于C1,否则属于C2。

    2.贝叶斯

    2.1贝叶斯公式

    在这里插入图片描述
      学过概率论的都应该对上面这个公式很熟悉,这里就不再细讲了。这里需要注意的点是注意区分先验概率、后验概率、联合概率三个概念。

    2.2贝叶斯方法

      机器学习的最终目的就是回归 or 分类,这里二者都可以理解为预测,回归很好理解,分类也可以理解为预测属于某一类的概率是多少。 我们把上述贝叶斯公式中的X理解为“具有某特征”,把Y理解成“类别标签”,那么贝叶斯公式就可以表示为:
    P(“属于某类”|“具有某特征”)=P(“具有某特征”|“属于某类”)P(“属于某类”)/P(“具有某特征”)

      贝叶斯方法把计算“具有某特征条件下属于某类(就是分类)”的概率转化为需要计算“属于某类条件下具有某特征(分别训练模型)”的概率,属于有监督学习。

    3朴素贝叶斯

      我们以垃圾邮件识别来引出朴素贝叶斯。
    在这里插入图片描述
      我们要做的是判断上面那个邮件:“我司可办理正规发票(保真)17%增值税发票点数优惠”是否属于垃圾邮件。我们不能直接判断一整个邮件是否属于垃圾邮件,我们首先想到的应该是“分词”,所谓分词就是把邮件拆成一个个的词语,通过该词语是否属于训练样本中的垃圾邮件来做出进一步判断:
    在这里插入图片描述
    前面我们提到:
      贝叶斯方法把计算“具有某特征条件下属于某类(就是分类)”的概率转化为需要计算“属于某类条件下具有某特征(分别训练模型)”的概率,属于有监督学习。 也就是说,我们现在要计算的是:正常邮件 or 垃圾邮件中具有上述那些词语的概率。

    3.1条件独立性假设

      引入条件独立假设:
    在这里插入图片描述
      我们把求某一类邮件中包含上述那些词语的概率等同于某一类邮件中包含每一种词语概率的乘积!!这其实就是朴素贝叶斯的实质,也是条件独立假设的实质。
      既然如此,那每一项都变得特别好求解了:
    在这里插入图片描述
    要算P(x1|C),那就直接在训练集中统计一下,看看x1在类别c1中出现的概率是多少即可。

    3.2朴素贝叶斯Naive在何处?

    1. 加上条件独立假设的贝叶斯方法就是朴素贝叶斯方法(Naive Bayes)
    2. 由于乘法交换律,朴素贝叶斯中算出来交换词语顺序的条件概率完全一样

      上述2的意思是:对于朴素贝叶斯模型来讲,“我司可办理正规发票”与“正规发票可办理我司”是一样的,会给出相同的判别结果,这点应该很好理解,因为你有了条件独立假设,abc与cba肯定大小是一样的,自然概率也是一样的,判别结果也就一样了。

    3.3朴素贝叶斯的三种模型

    1. 多项式模型
      在这里插入图片描述
      多项式模型跟我们思维是一样的,例如在上述条件概率中,“发票”一词语出现了三次,那利用条件独立假设条件之后,自然应该出现三次方,这就是多项式模型。

    2. 伯努利模型
      在这里插入图片描述
      在伯努利模型中我们可以看到,即使“发票”一词出现三次,但是我们在最终计算时只算一次。

    3. 混合模型
      在这里插入图片描述
      在混合模型中,我们计算句子概率时不考虑重复词语出现的次数,但在统计计算词语概率时考虑重复次数。
      一张图概括三种模型:
      在这里插入图片描述

    3.4平滑技术

      我们先来看这样一种可能:我们在求P(“正规发票”|S)时,通常的做法就是在训练集中遍历,看看“正规发票”一词出现了多少次,但是好巧不巧,该词在训练集中一次都没有出现过,那概率不就是0了么,然后条件独立假设相乘。。。于是整个概率都变成了0,这显然是极不合理的,但是这种情况却不少见。
      于是我们引入了平滑技术这一概念来解决这个问题:
    在这里插入图片描述
    这样,上述概率就不为0了,方便后续判断。

    3.5朴素贝叶斯优缺点

    优点:

    1. 对待预测样本进行预测,过程简单速度快
    2. 对于多分类问题也同样有效,复杂度也不会有大程度地上升。
    3. 在分布独立这个假设成立的情况下,贝叶斯的分类效果很好,会略胜于逻辑回归,我们需要的样本量也更少一点。
    4. 对于类别类的输入特征变量,效果非常好。对于数值型变量特征,我们默认它符合正态分布。

    缺点:

    1. 如果测试集中的一个类别变量特征在训练集里面没有出现过,那么概率就是0,预测功能就将失效,平滑技术可以解决这个问题
    2. 朴素贝叶斯中有分布独立的假设前提,但是在现实生活中,这个条件很难满足。

    3.6朴素贝叶斯的应用与代码实现

      作业:编程实现拉普拉斯修正的朴素贝叶斯分类器,并以西瓜数据集3.0为训练集,对“测1”样本进行判别。
    数据集长这样:
    在这里插入图片描述
    代码实现:

    import pandas as pd
    
    def readfile():
        datasets = pd.read_csv(r'E:\Program Files\PyCharm 2019.2\machinelearning\homework\西瓜3.0.csv', encoding="gbk")
        del datasets['编号']
        del datasets['好瓜']
        return datasets
    
    def NaiveBayes(test):
        data = readfile()
        data = data.values.tolist()
        goodMelon = [];badMelon = []
        for i in range(len(data)):
            if data[i][8] == 1:
                goodMelon.append(data[i])
            else:
                badMelon.append(data[i])
        # 计算p(x|C1)=p1与p(x|C2)=p2
        p1 = 1.0;p2 = 1.0
        for j in range(len(test)):
            x=0.0
            for k in range(len(goodMelon)):
                if goodMelon[k][j] == test[j]:
                    x = x + 1.0
            p1 = p1 * ((x + 1.0) / (len(goodMelon) + 2.0))  # 拉普拉斯平滑
        for j in range(len(test)):
            x=0.0
            for k in range(len(badMelon)):
                if badMelon[k][j] == test[j]:
                    x = x + 1.0
            p2 = p2 * ((x + 1.0) / (len(badMelon) + 2.0))  # 拉普拉斯平滑
        pc1 = len(goodMelon) / len(data)
        pc2 = 1 - pc1
        #贝叶斯公式
        p_good = p1*pc1;p_bad=p2*pc2
        if p_good > p_bad:
            print('好瓜')
        else:
            print('坏瓜')
    
    if __name__ == '__main__':
        test=['青绿','蜷缩','浊响','清晰','凹陷','硬滑',0.697,0.460]
        NaiveBayes(test)
        
    

    结果:好瓜,分类正确。
    在这里插入图片描述

    展开全文
  • 朴素贝叶斯分类器

    千次阅读 多人点赞 2021-05-13 14:28:05
    朴素贝叶斯分类器朴素贝叶斯算法原理联合概率边缘概率全概率公式贝叶斯公式贝叶斯分类器朴素贝叶斯分类器朴素贝叶斯参数估计极大似然估计贝叶斯估计朴素贝叶斯算法流程计算先验概率和条件概率计算条件独立的联合概率...

    经过前面几章的学习,我相信你对机器学习算法的认知和理解能力都应该上升一个层次了。本章你将会学习朴素贝叶斯算法和相关的实战内容,下面请和我一起进入正式的课程吧!

    朴素贝叶斯算法原理

    联合概率

    P(X)表示事件X发生的概率;P(Y|X)表示事件X发生的条件下,事件Y发生的概率(简称条件概率);P(X,Y)表示事件X和事件Y同时发生的概率(简称联合概率),则三者有如下的关系:

    联合概率

    同理,上述公式还可以写成如下形式:

    联合概率

    边缘概率

    通过联合概率P(X,Y)可以得到随机变量X和Y的边缘概率P(X)和P(Y),如下图所示:

    边缘概率
    图中随机变量X的取值为{1,2},随机变量Y的取值为{0,1}中心区域是X和Y的联合概率,边缘部分是X和Y的边缘概率,都满足概率之和为1。

    中心区域第一行和第二行对应位置相加得到的是X的边缘概率;中心区域第一列和第二列对应位置相加得到的是Y的边缘概率。

    全概率公式

    假设先发生了随机事件Y,后发生了随机事件X,两者存在因果关系:原因Y ==》结果X,则随机事件X发生的概率P(X)可以表示成如下形式:

    全概率公式
    这个公式叫做全概率公式,它表达的意义是:随机事件X的发生可能与多个原因有关,考虑全部原因引起事件X发生的概率总和即为随机事件X发生的概率。

    另一方面,全概率公式也可以通过下面的变换过程得到:

    全概率公式

    贝叶斯公式

    由联合概率的表达式可以得到贝叶斯公式

    贝叶斯公式

    将公式中的分母写成联合概率的形式,得到贝叶斯公式的第二种写法:

    贝叶斯公式

    将联合概率展开,得到贝叶斯公式的第三种写法:

    贝叶斯公式

    贝叶斯分类器

    若随机变量X的取值为样本特征向量,随机变量Y的取值为样本类别标记,则P(Y|X)就变成了一个分类模型:贝叶斯分类器。类比逻辑回归的分类算法,只需将概率分布P(Y|X)中概率最大值对应的类别作为预测分类就可以了。相应地,贝叶斯公式可以写成如下形式:

    贝叶斯分类器

    公式中的分母部分是全概率表达式,分子中的P(Y)称为类别Y的先验概率,P(X|Y)称为类别Y确定后的条件概率,贝叶斯公式计算的P(Y|X)称为后验概率

    朴素贝叶斯分类器

    若事件X和事件Y相互独立,则随机变量X和Y的联合概率变为:

    朴素贝叶斯分类器
    由于P(X|Y)中X的取值为样本特征向量,故P(X|Y)实际上是类别确定条件下的多维随机变量的联合概率分布。假设样本的各个特征在类别确定的条件下是相互独立的,则贝叶斯公式变为朴素贝叶斯公式

    朴素贝叶斯公式

    前面我们做过一个假设:原因Y ==》结果X,在这里依然成立,即:假设样本类别决定了样本的属性特征。举个例子:猫有四条腿,狗有四条腿,人有两条腿。由此可知,朴素贝叶斯是在已知结果X的条件下,探求原因Y发生的概率,如图所示:

    朴素贝叶斯

    朴素贝叶斯是概率图模型的一种,图中各个特征之间没有边相连表示特征是条件独立的。同时,特征是可以观测到的,如特征X5表示腿的数量;而样本类别是未知的,是我们(准确来说是计算机)需要去识别和探求的隐藏状态,如:猫,狗,人

    特征的条件独立性假设是朴素二字的由来,给定样本特征向量之后,朴素贝叶斯分类器取后验概率最大值对应的样本类别作为预测分类,如下所示:

    分类器
    其中,arg是参数arguments的缩写。因为分母对于所有的样本类别是相同的,不影响函数最大值点的确定,所以朴素贝叶斯分类器的表达式可以简化为:

    分类器表达式

    朴素贝叶斯分类器将后验概率最大的样本类别作为预测分类,在计算上等价于将联合概率最大的样本类别作为预测结果。

    朴素贝叶斯参数估计

    由上面的朴素贝叶斯分类器表达式可知,模型的参数估计实际上是从训练数据中学习1+Kn个概率分布:

    朴素贝叶斯分类

    第一行公式是样本类别取值的先验概率分布,比如:P(Y=0)=0.3,P(Y=1)=0.7;第二行公式是样本类别确定的条件下样本各个特征取值的概率分布,比如类别取值为0时,特征x_1取值的概率分布:P(X_1=2|Y=0)=0.4,P(X_1=6|Y=0)=0.6。

    上述公式中,样本类别有K个取值,样本特征有n个,每个特征有S_j个取值,故需要估计的参数量为:

    也就是说,我们需要利用训练数据计算出如上数量的概率值作为朴素贝叶斯分类器的模型参数,下面介绍两种参数估计方法:极大似然估计贝叶斯估计

    极大似然估计

    先验概率的极大似然估计为:

    先验概率

    其中,y_i是样本类别标记,N是样本数量,分母是指示函数(条件成立时为1,否则为0)的累加,统计各类样本在训练数据中的占比即为等式左边待求的概率值,如图所示:

    先验概率极大似然

    图中的每一行作为一条样本数据,X1和X2是样本特征,Y是样本类别标记。

    在样本类别确定的条件下,每个特征取值概率的极大似然估计为各类样本中该特征取值的占比,计算公式如下:

    分类占比
    由上面的公式和图示很容易得到如下计算结果:
    计算矢量

    贝叶斯估计

    极大似然估计的一个缺点是:当训练数据较少时,无论是先验概率还是条件概率的计算,分子部分的统计量都有可能为零,只要有一个为零,代入朴素贝叶斯计算公式中结果就为零,这将给分类结果带来很大的偏差。

    采用贝叶斯估计可以解决上面的问题,先验概率和条件概率的贝叶斯估计如下:

    贝叶斯估计

    相比于极大似然估计,贝叶斯估计在分子和分母上各加了一个大于零的lambda项,当lambda=0时就是极大似然估计,经常取lambda=1,这时称为拉普拉斯平滑

    使用贝叶斯估计得到的先验概率分布满足:

    先验概率

    使用贝叶斯估计得到的条件概率分布满足:
    贝叶斯估计

    朴素贝叶斯算法流程

    给定样本特征向量x = [x1,x2,...,xn],使用朴素贝叶斯算法分类的流程如下:

    计算先验概率和条件概率

    先验和条件

    既可以使用上文提到的极大似然估计,也可以使用贝叶斯估计(推荐)。

    计算条件独立的联合概率

    条件独立
    对于给定的样本特征向量,各个特征的取值是确定的。而在算法的第一步中,我们计算了所有特征所有取值的概率值,所以在这一步中,我们只需要查找相关参数代入计算即可。

    输出联合概率最大的类别

    联合概率
    联合概率最大等价于后验概率最大,朴素贝叶斯将后验概率最大的类别作为输出。下面请你来做一道题,看下自己是否真正理解了朴素贝叶斯的分类流程。

    还是前面的例子,假设有下图所示的训练数据集:

    训练数据集

    使用极大似然估计得到的朴素贝叶斯分类器相关参数如下:

    极大似然估计

    问:若使用上述朴素贝叶斯分类器进行分类,则样本X=[a,2]的类别标记是什么?(10分)
    答:1
    解:由上述联合概率的计算结果可知,Y=1的后验概率大于Y=0的后验概率,故样本X=[a,2]的类别标记是1。

    展开全文
  • 贝叶斯分类器理论知识。包括贝叶斯决策论,朴素贝叶斯分类器,半朴素贝叶斯分类器
    学习贝叶斯分类器,理论。


    展开全文
  • 我使用不支持朴素贝叶斯分类器的 Matlab 2008a。 脚本支持正常和内核发行版。 脚本中使用了 2008a 版本的统计工具箱。 还包括混淆垫的功能提供的示例数据来自 Mathworks 网络研讨会:计算统计:使用 MATLAB 进行分类...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,693
精华内容 1,477
关键字:

朴素贝叶斯分类器