朴素贝叶斯 订阅
朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法 [1]  。最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBM)。和决策树模型相比,朴素贝叶斯分类器(Naive Bayes Classifier 或 NBC)发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。 展开全文
朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法 [1]  。最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBM)。和决策树模型相比,朴素贝叶斯分类器(Naive Bayes Classifier 或 NBC)发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。
信息
属    于
广泛的分类模型之一
简    称
NBM
中文名
朴素贝叶斯
外文名
Naive Bayes model
朴素贝叶斯定义
贝叶斯方法是以贝叶斯原理为基础,使用概率统计的知识对样本数据集进行分类。由于其有着坚实的数学基础,贝叶斯分类算法的误判率是很低的。贝叶斯方法的特点是结合先验概率和后验概率,即避免了只使用先验概率的主观偏见,也避免了单独使用样本信息的过拟合现象。贝叶斯分类算法在数据集较大的情况下表现出较高的准确率,同时算法本身也比较简单。 [2]  朴素贝叶斯算法(Naive Bayesian algorithm) 是应用最为广泛的分类算法之一。朴素贝叶斯方法是在贝叶斯算法的基础上进行了相应的简化,即假定给定目标值时属性之间相互条件独立。也就是说没有哪个属性变量对于决策结果来说占有着较大的比重,也没有哪个属性变量对于决策结果占有着较小的比重。虽然这个简化方式在一定程度上降低了贝叶斯分类算法的分类效果,但是在实际的应用场景中,极大地简化了贝叶斯方法的复杂性。 [3] 
收起全文
精华内容
下载资源
问答
  • 朴素贝叶斯(Naive Bayes)原理+编程实现拉普拉斯修正的朴素贝叶斯分类器,以西瓜数据集3.0为训练集,对“测1”样本进行判别。

    1.生成模型与判别模型

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

    • 判别式模型:要确定一个样本是属于C1还是C2,用判别模型的方法是从历史数据中学习到模型,然后通过提取该样本的特征来预测出该样本属于C1的概率以及C2的概率。
    • 生成式模型:根据C1的特征首先学习出一个C1的模型,然后根据C2的特征学习出一个C2的模型,然后从该样本中提取特征,放到C1模型中看概率是多少,然后再放到C2模型中看概率是多少,哪个大就是哪个。
    • 判别模型之所以称为判别模型,就是因为它只是简单地判别就好了。根据样本X来判别它所属的类别,直接就求出了 p ( y ∣ x ) p(y|x) p(yx)的大小
    • 而生成模型,在概率生成模型(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)
        
    

    结果:好瓜,分类正确。
    在这里插入图片描述
      欢迎大家关注我的微信公众号:KI的算法杂记,有什么问题可以直接发私信。

    在这里插入图片描述

    展开全文
  • 朴素贝叶斯朴素贝叶斯定义、朴素贝叶斯公式分解、朴素贝叶斯分类流程、高斯型朴素贝叶斯、多项式朴素贝叶斯、伯努利型朴素贝叶斯朴素贝叶斯预测概率校准、朴素贝叶斯优缺点 目录 朴素贝叶斯朴素贝叶斯定义、...

    朴素贝叶斯:朴素贝叶斯定义、朴素贝叶斯公式分解、朴素贝叶斯分类流程、高斯型朴素贝叶斯、多项式朴素贝叶斯、伯努利型朴素贝叶斯、朴素贝叶斯预测概率校准、朴素贝叶斯优缺点

    目录

    展开全文
  • 朴素贝叶斯

    2019-12-11 09:16:05
    朴素贝叶斯朴素贝叶斯 朴素贝叶斯

    朴素贝叶斯

    朴素贝叶斯

    展开全文
  • 在sklearn中,提供了若干种朴素贝叶斯的实现算法,不同的朴素贝叶斯算法,主要是对P(xi|y)的分布假设不同,进而采用不同的参数估计方式。我们能够发现,朴素贝叶斯算法,主要就是计算P(xi|y),一旦P(xi|y)确定,最终...

    在sklearn中,提供了若干种朴素贝叶斯的实现算法,不同的朴素贝叶斯算法,主要是对P(xi|y)的分布假设不同,进而采用不同的参数估计方式。我们能够发现,朴素贝叶斯算法,主要就是计算P(xi|y),一旦P(xi|y)确定,最终属于每个类别的概率,自然也就迎刃而解了。
    常用的三种朴素贝叶斯为:

    • 高斯朴素贝叶斯
    • 伯努利朴素贝叶斯
    • 多项式朴素贝叶斯

    高斯朴素贝叶斯

    适用于连续变量,其假定各个特征xi在各个类别y下是服从正态分布的,算法内部使用正态分布的概率密度函数来计算概率如下:
    在这里插入图片描述
    在这里插入图片描述

    import numpy as np
    import pandas as pd
    from sklearn.naive_bayes import GaussianNB
    
    np.random.seed(0)
    x = np.random.randint(0,10,size=(6,2))
    y = np.array([0,0,0,1,1,1])
    data = pd.DataFrame(np.concatenate([x, y.reshape(-1,1)], axis=1), columns=['x1','x2','y'])
    display(data)
    
    gnb = GaussianNB()
    gnb.fit(x,y)
    #每个类别的先验概率
    print('概率:', gnb.class_prior_)
    #每个类别样本的数量
    print('样本数量:', gnb.class_count_)
    #每个类别的标签
    print('标签:', gnb.classes_)
    #每个特征在每个类别下的均值
    print('均值:',gnb.theta_)
    #每个特征在每个类别下的方差
    print('方差:',gnb.sigma_)
    
    #测试集
    x_test = np.array([[6,3]])
    print('预测结果:', gnb.predict(x_test))
    print('预测结果概率:', gnb.predict_proba(x_test))
    

    在这里插入图片描述

    伯努利朴素贝叶斯

    设试验E只有两个可能的结果:A与A¯,则称为E为伯努利试验
    伯努利朴素贝叶斯,适用于离散变量,其假设各个特征xi在各个类别y下是服从n重伯努利分布(二项分布)的,因为伯努利试验仅有两个结果,因此,算法会首先对特征值进行二值化处理(假设二值化的结果为1与0)。
    计算方式如下:
    在这里插入图片描述
    在训练集中,会进行如下的估计:
    在这里插入图片描述
    在这里插入图片描述

    from sklearn.naive_bayes import BernoulliNB
    
    np.random.seed(0)
    x = np.random.randint(-5,5,size=(6,2))
    y = np.array([0,0,0,1,1,1])
    data = pd.DataFrame(np.concatenate([x,y.reshape(-1,1)], axis=1), columns=['x1','x2','y'])
    display(data)
    
    bnb = BernoulliNB()
    bnb.fit(x,y)
    #每个特征在每个类别下发生(出现)的次数。因为伯努利分布只有两个值。
    #我们只需要计算出现的概率P(x=1|y),不出现的概率P(x=0|y)使用1减去P(x=1|y)即可。
    print('数值1出现次数:', bnb.feature_count_)
    #每个类别样本所占的比重,即P(y)。注意该值为概率取对数之后的结果,
    #如果需要查看原有的概率,需要使用指数还原。
    print('类别占比p(y):',np.exp(bnb.class_log_prior_))
    #每个类别下,每个特征(值为1)所占的比例(概率),即p(x|y)
    #该值为概率取对数之后的结果,如果需要查看原有的概率,需要使用指数还原
    print('特征概率:',np.exp(bnb.feature_log_prob_))
    

    在这里插入图片描述

    多项式朴素贝叶斯

    多项式朴素贝叶斯,适用于离散变量,其假设各个特征xi在各个类别y下是服从多项式分布的,故每个特征值不能是负数。
    计算如下:
    在这里插入图片描述

    from sklearn.naive_bayes import MultinomialNB
    
    np.random.seed(0)
    x = np.random.randint(0,4,size=(6,2))
    y = np.array([0,0,0,1,1,1])
    data = pd.DataFrame(np.concatenate([x,y.reshape(-1,1)], axis=1), columns=['x1','x2','y'])
    display(data)
    
    mnb = MultinomialNB()
    mnb.fit(x,y)
    #每个类别的样本数量
    print(mnb.class_count_)
    #每个特征在每个类别下发生(出现)的次数
    print(mnb.feature_count_)
    #每个类别下,每个特征所占的比例(概率),即P(x|y)
    #该值为概率取对数之后的结果,如果需要查看原有的概率,需要使用指数还原
    print(np.exp(mnb.feature_log_prob_))
    

    在这里插入图片描述

    展开全文
  • 高斯朴素贝叶斯 GaussianNB 实现了运用于分类的高斯朴素贝叶斯算法。特征的可能性(即概率)假设为高斯分布: 参数使用最大似然法估计。 高斯朴素贝叶斯实现方法代码: '''高斯朴素贝叶斯''' def MyGaussianNB...
  • 经典机器学习算法:朴素贝叶斯的python的实现

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,323
精华内容 18,529
关键字:

朴素贝叶斯