朴素贝叶斯算法

朴素贝叶斯

朴素贝叶斯概述

贝叶斯算法是统计学分类方法,它是一类利用概率统计知识进行分类的算法

常见应用场景
  • 文本分类/垃圾文本过滤/情感判别

  • 多分类实时预测

  • 推荐系统



朴素贝叶斯算法原理

朴素贝叶斯-概率公式
  • 条件概率:就是事件A在另外一个事件B已经发生条件下的发生概率。条件概率表示为P(A|B),读作“在B条件下A的概率”

  • 全概率:设试验E的样本空间为S(样本),A为E的事件,𝐵1,𝐵2,…,𝐵n为S的一个划分,且P(𝐵𝑖 )>0(I =

    1,2,…,n),则P(A)=P(𝐴Τ𝐵1)P(𝐵1) + P(𝐴Τ𝐵2)P(𝐵2) +…+ P(𝐴Τ𝐵n)P(𝐵𝑛)

  • 贝叶斯:设试验E的样本空间为S。A为E的事件,𝐵1,𝐵2,…,𝐵n为S的一个划分,且P(𝐵𝑖 )>0(I = 1,2,…,n),则

    image-20220717161019859

朴素贝叶斯-条件概率示例

双胞胎家庭的小孩性别样本:{男男,男女,女男,女女},求家中至少有一个男孩,家中有一个女孩的概率

image-20220717161110739

为什么用P(AB)/P(B)?

因为实际求的内容是在有一个男孩的情况下,有一个女孩的概率是多少,所以是求 家中为一男一女的概率 在 家中至少有一个男孩的概率中的占比.

P(A/B) 读作: 在b条件下a的概率


全概率案例

某保险公司认为投保人可以分为两类:容易出事故人群和谨慎人群。

第一类容易出事故,一年内出事故的概率是0.4,占总人口的20%;

另一类人谨慎,出事故的概率为0.1,占人口的80%。

**现有一个新的投保人,投保此类险种,问:该投保人在购买保单后一年内将出事故的概率**有多大?

image-20220717161513268 image-20220717161529205
贝叶斯案例

对以往数据分析结果表明,当机器调整得良好时,产品的合格率为98%,而当机器发生某种故障时,其合

格率为55%。每当早上机器开动时,机器调 整良好的概率为95%。试求已知某日早上第一件产品是合格

品时,机器调整良好的概率是多少?

image-20220719230347211
朴素贝叶斯分类器

朴素贝叶斯分类器原理:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。

**公式化定义:**设定输入空间为𝓍 ⊆ 𝑅𝑛为𝑛维向量的集合,输出空间为𝒴 = {𝑐1, 𝑐2, ⋯ , 𝑐𝑘}一共𝑘个类别。训练数据集为:𝑇{ 𝑥1, 𝑦1 , 𝑥2, 𝑦2 , ⋯ , 𝑥𝑁, 𝑦𝑁 },并根据先验分贝和条件分布可得联合概率分布。


朴素贝叶斯分类器-流程
  1. 计算先验概率及条件概率
  2. 对于给定的实例 进行计算
  3. 确定实例x的类

朴素贝叶斯-“朴素”
  • 贝叶斯和朴素贝叶斯有啥区别?
  • 朴素贝叶斯为啥“朴素”?

因为它假定所有的特征在数据集中的作用是同样重要和独立的,正如我们所知,这个假设在现实世界中是很不真实的,因此,说是很“朴素的”


朴素贝叶斯算法是基于贝叶斯定理和“特征条件独立”假设的分类算法

  • 首先基于特征条件独立假设学习输入/输出的联合概率分布

  • 然后基于此模型,对给定的x,利用贝叶斯定理求出后验概率最大的y

    image-20220717162013099

朴素贝叶斯算法原理总结

朴素贝叶斯算法数学公式:

image-20220717162046522

由联合概率公式推导而来:

  • P(Y,X)=P(Y|X)P(X)=P(X|Y)P(Y)
  • P(Y)叫做先验概率,P(Y|X)叫做后验概率, P(Y,X)叫做联合概率

在机器学习的视角下,我们把X理解成“具 有某特征”,把Y理解成“类别标签"

image-20220717162124390

贝叶斯方法把计算“具有某特征的条件下属 于某类”的概率转换成需要计算“属于某类 的条件下具有某特征”

的概率,属于有监督学习


朴素贝叶斯-贝叶斯示例

问题: 男生想对自己的女友求婚,他身上的四个特点分别是 不帅,性格不好,身高矮,不上进,女生是嫁还是不嫁?

嫁不嫁的练习题数据


朴素贝叶斯算法的三种模型
  1. 多项式(高斯)模型:
    1. 重复的词语我们视为其出现多次
    2. 统计与判断时,都关注重复次数
  2. 伯努利模型:
    1. 将重复的词语都视为其只出现1次
    2. 这种方式更简化与方便,但丢失了词频的信息,效果可能会差一点
  3. 混合模型:
    1. 在计算句子概率时,不考虑重复词语出现的次数,但在统计计算词语的概率时,却考虑重复词语的出现次数
    2. 这种方式更简化与方便,当丢失了词频的信息,因此效果可能会差一点
image-20220717162728101
朴素贝叶斯算法的三种模型-总结
  • **高斯朴素贝叶斯:**适用于连续型数值,比如身高在160cm以下为一类,160-170cm为一个类,则划分不

    够细腻。

  • **多项式朴素贝叶斯:**常用于文本分类,特征是单词,值是单词出现的次数

  • **伯努利朴素贝叶斯:**所用特征为全局特征,只是它计算的不是单词的数量,而是出现则为1,否则为0。

    也就是特征等权重


朴素贝叶斯算法-平滑技术
image-20220717162859224

扫描一下训练集,发现“正规发票”这个词从未出现过,于是P(“正规发票”|S)=0,于是**整个概率都变成0**了

哪怕训练集再大,也可能有覆盖不到的词语,平滑技术就是为了处理这样的问题。朴实/土,但是直接而有效。

  • 对于伯努利模型,P(“正规发票”|S)的一种 平滑算法是:
image-20220717162948611
  • 对于多项式模型,P(“正规发票”| S)的一 种平滑算法是:
image-20220717163005699
贝叶斯方法与最大似然的关系
  • 教派争论
  • 最大似然法:不考虑贝叶斯公式的先验概率
  • 贝叶斯学派的适用范围更广,关键要先验概率靠谱
  • 而频率学派有效的前提也是他们的先验概率同样是经验统计的结果


朴素贝叶斯优缺点

优点:
  • 贝叶斯决策能对信息的价值是否需要采集的信息做出科学的判断。

  • 对调查结果的可能性加以数量化的评价,而不像一般的决策方法那样,对结果或是完全相信,抑或是完全不信。

  • 可以在决策过程中根据具体情况下不断使用,决策逐步完善和更加科学。

  • 对小规模的数据表现很好,适合多分类任务,适合增量式训练。

  • 对待预测样本进行预测,过程简单速度快(想想邮件分类的问题,预测就是分词后进行概率乘积,在log域直接做加法更快)。

  • 对于多分类问题也同样很有效,复杂度也不会有大程度上升。

  • 在分布独立这个假设成立的情况下,贝叶斯分类器效果奇好,会略胜于逻辑回归,同时我们需要的样本量也更少一点。

  • 对于类别类的输入特征变量,效果非常好。对于数值型变量特征,我们是默认它符合正态分布的

缺点:
  • 它需要的数据更多,分析计算十分复杂

  • 对输入数据的表达形式很敏感

  • 对于测试集中的一个类别变量特征,如果在训练集里没见过,直接算的话概率就是0了,预测功能就失

    效了。当然,我们前面的文章提过我们有一种技术叫做『平滑』操作,可以缓解这个问题,最常见的

    平滑技术是拉普拉斯估测。

  • 朴素贝叶斯算出的概率结果,比较大小还凑合,实际物理含义…恩,别太当真。

  • 朴素贝叶斯有分布独立的假设前提,而现实生活中这些predictor很难是完全独立的。



朴素贝叶斯代码实现

朴素贝叶斯-高斯模型

导入模块(参数不用管,可以当做无参数)

from sklearn.naive_bayes import GaussianNB
朴素贝叶斯-伯努利模型

导入模块

from sklearn.naive_bayes import BernoulliNB

模型参数说明

  • alpha:浮点型,可选项,默认1.0,添加拉普拉修/Lidstone平滑参数。(某些特征未出现在测试集中,)

  • binarize:将数据特征二值化的阈值

  • fit_prior:布尔型,可选项,默认True,表示是否学习先验概率,参数为False表示所有类标记具有相同的

    先验概率

  • class_prior:类似array,数组大小为(n_classes,),默认None,类先验概率

朴素贝叶斯-混合模型(多项式朴素贝叶斯)

导入模块

from sklearn.naive_bayes import MultinomialNB

模型参数说明

  • alpha:浮点型可选参数,默认为1.0,其实就是添加拉普拉斯平滑,即为上述公式中的λ ,如果这个参数设置为0,就是不添加平滑

  • fit_prior:布尔型可选参数,默认为True。布尔参数fit_prior表示是否要考虑先验概率,如果是false,则所有的样本类别输出都有相同的类别先验概率。否则可以自己用第三个参数class_prior输入先验概率,或者不输入第三个参数class_prior让MultinomialNB自己从训练集样本来计算先验概率,此时的先验概率为P(Y=Ck)=mk/m。其中m为训练集样本总数量,mk为输出为第k类别的训练集样本数。

image-20220717163550327
  • class_prior:类似array,数组大小为(n_classes,),可选参数,默认None,类先验概率.
朴素贝叶斯-参数总结
  • 朴素贝叶斯分类器一般可调参数比较少

  • 集中精力进行数据的预处理,以及特征选择


from sklearn import datasets
from sklearn.model_selection import train_test_split

# 高斯朴素贝叶斯
from sklearn.naive_bayes import GaussianNB
# 多项式朴素贝叶斯
from sklearn.naive_bayes import MultinomialNB
# 伯努利朴素贝叶斯
from sklearn.naive_bayes import BernoulliNB

data = datasets.load_iris()
x = data['data']
y = data['target']

x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)

x_train.shape
y_train.shape

g_nb = GaussianNB().fit(x_train,y_train)
g_nb.score(x_test,y_test)

m_nb = MultinomialNB().fit(x_train,y_train)
m_nb.score(x_test,y_test)

b_nb = BernoulliNB().fit(x_train,y_train)
b_nb.score(x_test,y_test)
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值