700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > sklearn朴素贝叶斯分类器_朴素贝叶斯原理

sklearn朴素贝叶斯分类器_朴素贝叶斯原理

时间:2020-09-30 17:25:39

相关推荐

sklearn朴素贝叶斯分类器_朴素贝叶斯原理

贝叶斯分类算法是统计学是一种概率分类方法,朴素贝叶斯分类时贝叶斯分类中最简单的一种。利用贝叶斯公式根据某特征的先验概率计算出其后延概率,然后选择具有最大后延概率的类作为该特征所属的类。朴素贝叶斯,称之为“朴素”,是因为整个形式化过程只做了最原始、最简单的假设,具体假设如下:

特征之间相互独立每个特征同等重要

1. 概率相关

先验概率: 比如向女生表白成功的概率是20%,记为P(A)=20%

条件概率:在事件B发生的情况下,事件A发生的概率,用P(A|B)表示,具体计算公式如下。如帅的前提下,向女生表白成功的概率为50%,记为P(A|B)=50%。

同理可得:在事件A发生的情况下,事件B发生的概率,用P(B|A)表示,具体计算公式如下:

联合概率:事件A和B同时发生的概率 。比如,长得帅且向女生表白成功的概率为1%,记为P(A∩B)=1%

条件概率和联合概率之间的关系,可用下式表示:

所以就会有:

全概率: 如果事件A不是一个条件,而是一堆条件,这些条件互斥且能穷尽所有可能 。则对任意一个事件B则有

2. 贝叶斯准则

如果已知P(B|A_i),要求P(A_i|B),应用贝叶斯准则得到:

要求解

,只需要知道 和 。因为对于同一个数据集,P(B)是一个常量,可以不参与计算。

先验概率

的计算公式如下:

其中,

表示数据集D中 类样本组成的样本数,|D|表示数据集D的样本数。

如果B是多维属性,那么可以假设

对应的事件是彼此独立的,这些值连乘在一起得到,具体计算公式如下:

3. 使用条件概率来分类

如果给定某个由

属性表示的数据点,那么该数据点来自类别 的概率是多少?数据点来自类别 的概率有事多少?可以应用贝叶斯准则得到:

使用这些定义,可以定义贝叶斯分类准则:

如果 , 则属于类别 如果 , 则属于类别

使用贝叶斯准测,可以通过已知的三个概率值来计算未知的概率值。

4. 嫁还是不嫁?

通过嫁还是不嫁这个二分类问题,来更加了解朴素贝叶斯。假设由颜值,性格,是否上进这三个属性来决定最终嫁还是不嫁。如果现在有一个男生是:帅 & 性格不好 & 不上进,预测女生嫁还是不嫁该男生呢?

​ 数据集如下:

由于朴素贝叶斯公式如下:

换种更清楚的表达如下:

在这个例子中,就是要求

和 这两个概率,选取概率大的来做决策。

通过朴素贝叶斯公式:

在这两个公式里,因为 P(帅,性格不好,不上进)都是一样的,所以,想要获取 P(嫁|帅,性格不好,不上进) 和 P(不嫁|帅,性格不好,不上进) 这两个概率中的最大值,就等价于求P(帅,性格不好,不上进|嫁)P(嫁)和P(帅,性格不好,不上进|不嫁)P(不嫁)中的最大值。只需计算出P(帅,性格不好,不上进|嫁)、P(帅,性格不好,不上进|不嫁)、P(嫁)、P(不嫁)这四个概率,即可求出P(嫁|帅,性格不好,不上进)和P(不嫁|帅,性格不好,不上进)这个两个概率中最大概率对应的类别。

由于

则有

由于

所以,根据朴素贝叶斯算法可以给这个女生答案,是不嫁

5. 朴素贝叶斯种类

在sklearn中,朴素贝叶斯种类有三种,分别是GaussianNB、MultinomialNB和BernoulliNB。

5.1 高斯朴素贝叶斯(GaussianNB)

GaussianNB是先验为高斯分布(正态分布)的朴素贝叶斯,假设每个标签的数据都服从高斯分布(正态分布)。正态分布的概率密度函数计算公式如下:

其中,

为Y的第k类类别。 和 为第k类样本在第i个属性上的取值的均值和方差。

sklearn中的GaussianNB实现

下面采用sklearn中的鸾尾花数据集,由于数据集都是连续属性,所以采用GaussianNB来进行实现,看下预测情况。

# 导入包

运行结果如下

测试集准确率为: 0.9736842105263158

可以看到,测试集准确率97%,准确率挺高。

5.2 多项式朴素贝叶斯(MultinomialNB)

多项式朴素贝叶斯是先验为多项式分布的朴素贝叶斯。 它假设特征是由一个简单多项式分布生成的。多项分布可以描述各种类型样本出现次数的概率,因此多项式朴素贝叶斯非常适合用于描述出现次数的特征。该模型常用于文本分类,特征表示的是次数,例如某个词语的出现次数。

多项式分布

多项式分布来源于统计学中的多项式实验,这种实验可以解释为:实验包括n次重复试验,每次试验都有不同的可能结果。在任何给定的试验中,特定结果发生的概率是不变的。

多项式分布公式:

其中,

表示c类别下第i个属性上取值为 的条件概率。 是c类别下第i个属性上取值为 的样本数, 是c类的样本数。 表示第i个属性可能的取值数。λ被称为平滑系数,令λ>0来防止训练数据中出现过的一些词汇没有出现在测试集中导致的0概率。如果λ=1,则这个平滑叫做拉普拉斯平滑,λ<1,叫做利德斯通平滑。

sklearn中的MultinomialNB实现

多项式所涉及的特征往往是次数,频率,计数这样的概念,这些概念都是离散的正整数,因此,sklearn中的MultinomialNB不接受负值的输入。

MultinomialNB包含如下的参数和属性:

class

其中

alpha : 浮点数, 可不填 【默认为1.0】

平滑系数λ,如果为0,则表示完全没有平滑选项。需注意,平滑相当于人为给概率加上一些噪音,因此λ设置得越大,精确性会越低(虽然影响不是非常大)

fit_prior : 布尔值, 可不填【默认为True】

是否学习先验概率P(Y=c)。如果为False,则所有的样本类别输出都有相同的类别先验概率。即认为每个标签类出现的概率是1/总类别数

class_prior:形似数组的结构,结构为(n_classes,),可不填【默认为None】 表示类的先验概率P(Y=c)。如果没有给出具体的先验概率则自动根据数据来进行计算。

总结如下:

其中,k为总类别数,m为训练集样本总数量,

为输出为第k个类别的训练集样本数。

实例

建一个简单多项式朴素贝叶斯(让所有的参数保持默认)的例子。

# 导⼊入需要的模块和库

运行结果如下:

5.3 伯努利朴素贝叶斯(BernoulliNB)

BernoulliNB就是先验为伯努利分布的朴素贝叶斯。假设特征的先验概率为二元伯努利分布,在文本分类中 ,就是一个特征有没有在一个文档中出现。

伯努利分布公式如下:

此时,

只能取0和1。

由于

,所以上式可变为是c类别下第i个属性上取值为1的样本数, 是c类的样本数。2表示第i个属性可能的取值数,这里只有0和1两种取值,所以是2。

sklearn中的BernoulliNB实现

类BernoulliNB包含如下的参数和属性:

class

其中

binarize:将数据特征二值化的阈值,大于binarize的值处理为1 ,小于等于binarize的值处理为0;

其他参数说明见5.2中多项式的参数说明;

实例

先来建一个简单伯努利朴素贝叶斯的例子。

import

打印相关属性语句如下:

# class_log_prior_:类先验概率对数值

运行结果如下

小结

如果样本特征的分布大部分是连续值(如人的身高,体重等),建议使用GaussianNB会比较好; 如果样本特征的分布大部分是多元离散值(如在文档分类中特征是单词出现次数),建议使用MultinomialNB比较好; 如果样本特征是二元离散值(如在文档分类中特征是单词是否出现) ,建议使用BernoulliNB比较好。

朴素贝叶斯算法优缺点

优点: 在属性相关性较小时效果较好,可以处理多类别问题;算法逻辑简单,易于实现 ;

缺点: 在属性个数比较多或者属性之间相关性较大时,分类效果不好;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。