机器学习算法--朴素贝叶斯(Naive Bayes)

这篇具有很好参考价值的文章主要介绍了机器学习算法--朴素贝叶斯(Naive Bayes)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 朴素贝叶斯(Naive Bayes)

朴素贝叶斯的介绍

朴素贝叶斯算法(Naive Bayes, NB) 是应用最为广泛的分类算法之一。它是基于贝叶斯定义和特征条件独立假设的分类器方法。由于朴素贝叶斯法基于贝叶斯公式计算得到,有着坚实的数学基础,以及稳定的分类效率。NB模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。当年的垃圾邮件分类都是基于朴素贝叶斯分类器识别的。

什么是条件概率,我们从一个摸球的例子来理解。我们有两个桶:灰色桶和绿色桶,一共有7个小球,4个蓝色3个紫色,分布如下图:
朴素贝叶斯算法,机器学习,算法,概率论
从这7个球中,随机选择1个球是紫色的概率p是多少?选择过程如下:

  1. 先选择桶
  2. 再从选择的桶中选择一个球
    朴素贝叶斯算法,机器学习,算法,概率论
    上述我们选择小球的过程就是条件概率的过程,在选择桶的颜色的情况下是紫色的概率,另一种计算条件概率的方法是贝叶斯准则。

贝叶斯公式是英国数学家提出的一个数据公式:

朴素贝叶斯算法,机器学习,算法,概率论
p(A,B):表示事件A和事件B同时发生的概率。

p(B):表示事件B发生的概率,叫做先验概率;p(A):表示事件A发生的概率。

p(A|B):表示当事件B发生的条件下,事件A发生的概率叫做后验概率。

p(B|A):表示当事件A发生的条件下,事件B发生的概率。

我们用一句话理解贝叶斯:世间很多事都存在某种联系,假设事件A和事件B。人们常常使用已经发生的某个事件去推断我们想要知道的之间的概率。 例如,医生在确诊的时候,会根据病人的舌苔、心跳等来判断病人得了什么病。对病人来说,只会关注得了什么病,医生会通道已经发生的事件来 确诊具体的情况。这里就用到了贝叶斯思想,A是已经发生的病人症状,在A发生的条件下是B_i的概率。

朴素贝叶斯的应用

朴素贝叶斯算法假设所有特征的出现相互独立互不影响,每一特征同等重要,又因为其简单,而且具有很好的可解释性一般。相对于其他精心设计的更复杂的分类算法,朴素贝叶斯分类算法是学习效率和分类效果较好的分类器之一。朴素贝叶斯算法一般应用在文本分类,垃圾邮件的分类,信用评估,钓鱼网站检测等。

2. 学习案例

目标
  • 掌握贝叶斯公式
  • 结合两个实例了解贝朴素叶斯的参数估计
  • 掌握贝叶斯估计
代码流程
  • Part 1. 莺尾花数据集–贝叶斯分类

    • Step1: 库函数导入
    • Step2: 数据导入&分析
    • Step3: 模型训练
    • Step4: 模型预测
    • Step5: 原理简析
  • Part 2. 模拟离散数据集–贝叶斯分类

    • Step1: 库函数导入
    • Step2: 数据导入&分析
    • Step3: 模型训练&可视化
    • Step4: 原理简析
算法实战

莺尾花数据集–贝叶斯分类
Step1: 库函数导入

import warnings
warnings.filterwarnings('ignore')
import numpy as np
# 加载莺尾花数据集
from sklearn import datasets
# 导入高斯朴素贝叶斯分类器
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split

Step2: 数据导入&分析

X, y = datasets.load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

我们需要计算两个概率分别是:条件概率:朴素贝叶斯算法,机器学习,算法,概率论
类目ck的先验概率:朴素贝叶斯算法,机器学习,算法,概率论
通过分析发现训练数据是数值类型的数据,这里假设每个特征服从高斯分布,因此我们选择高斯朴素贝叶斯来进行分类计算。

Step3: 模型训练

# 使用高斯朴素贝叶斯进行计算
clf = GaussianNB(var_smoothing=1e-8)
clf.fit(X_train, y_train)

Step4: 模型预测

# 评估
y_pred = clf.predict(X_test)
acc = np.sum(y_test == y_pred) / X_test.shape[0]
print("Test Acc : %.3f" % acc)

# 预测
y_proba = clf.predict_proba(X_test[:1])
print(clf.predict(X_test[:1]))
print("预计的概率值:", y_proba)

'''
Test Acc : 0.967

[2]

预计的概率值: [[1.63542393e-232 2.18880483e-006 9.99997811e-001]]
'''

Step5: 原理简析

高斯朴素贝叶斯假设每个特征都服从高斯分布,我们把一个随机变量X服从数学期望为μ,方差为σ2
的数据分布称为高斯分布。对于每个特征我们一般使用平均值来估计μ和使用所有特征的方差估计σ2
朴素贝叶斯算法,机器学习,算法,概率论
从上述例子中的预测结果中,我们可以看到类别2对应的后验概率值最大,所以我们认为类目2是最优的结果。

模拟离散数据集–贝叶斯分类

Step1: 库函数导入

import random
import numpy as np
# 使用基于类目特征的朴素贝叶斯
from sklearn.naive_bayes import CategoricalNB
from sklearn.model_selection import train_test_split

Step2: 数据导入&分析

# 模拟数据
rng = np.random.RandomState(1)
# 随机生成600个100维的数据,每一维的特征都是[0, 4]之前的整数
X = rng.randint(5, size=(600, 100))
y = np.array([1, 2, 3, 4, 5, 6] * 100)
data = np.c_[X, y]
# X和y进行整体打散
random.shuffle(data)
X = data[:,:-1]
y = data[:, -1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

所有的数据特征都是离散特征,我们引入基于离散特征的朴素贝叶斯分类器。

Step3: 模型训练&预测

clf = CategoricalNB(alpha=1)
clf.fit(X_train, y_train)
acc = clf.score(X_test, y_test)
print("Test Acc : %.3f" % acc)

'''
Test Acc : 0.683
'''
# 随机数据测试,分析预测结果,贝叶斯会选择概率最大的预测结果
# 比如这里的预测结果是6,6对应的概率最大,由于我们是随机数据
# 读者运行的时候,可能会出现不一样的结果。
x = rng.randint(5, size=(1, 100))
print(clf.predict_proba(x))
print(clf.predict(x))

'''
[[3.48859652e-04 4.34747491e-04 2.23077189e-03 9.90226387e-01

  5.98248900e-03 7.76745425e-04]]

[6]
'''

Step4: 原理简析
可以看到测试的数据的结果,贝叶斯会选择概率最大的预测结果,比如这里的预测结果是6,6对应的概率最大,由于我们是随机数据,读者运行的时候,可能会出现不一样的结果。
这里的测试数据的准确率没有任何意义,因为数据是随机生成的,不一定具有贝叶斯先验性,这里只是作为一个列子引导大家如何使用。

alpha=1这个参数表示什么?

我们知道贝叶斯法一定要计算两个概率:条件概率:
朴素贝叶斯算法,机器学习,算法,概率论
和类目 ck 的先验概率:朴素贝叶斯算法,机器学习,算法,概率论
对于离散特征:

朴素贝叶斯算法,机器学习,算法,概率论
我们可以看出就是对每一个变量的多加了一个频数alpha。当alphaλ=0时,就是极大似然估计。通常取值alpha=1,这就是拉普拉斯平滑(Laplace smoothing),这有叫做贝叶斯估计,主要是因为如果使用极大似然估计,如果某个特征值在训练数据中没有出现,这时候会出现概率为0的情况,导致整个估计都为0,因为引入贝叶斯估计。
朴素贝叶斯算法,机器学习,算法,概率论

朴素贝叶斯算法

朴素贝叶斯法 = 贝叶斯定理 + 特征条件独立。
我们来看一个实例,更好的理解贝叶斯的计算过程,根据天气和是否是周末预测一个人是否会出门。

朴素贝叶斯算法,机器学习,算法,概率论
根据上述数据,为了更好的理解计算过程,我们给出几个计算公式:

a. 当出门的条件下,X1是天气不好的概率:
朴素贝叶斯算法,机器学习,算法,概率论
b. 出门的概率
朴素贝叶斯算法,机器学习,算法,概率论
c. X1天气不好的概率
朴素贝叶斯算法,机器学习,算法,概率论
d. 在X1天气不好的情况下,出门的概率:
朴素贝叶斯算法,机器学习,算法,概率论
e. 在X1天气不好的情况下,不出门的概率:
朴素贝叶斯算法,机器学习,算法,概率论

朴素贝叶斯的优缺点

优点: 朴素贝叶斯算法主要基于经典的贝叶斯公式进行推倒,具有很好的数学原理。而且在数据量很小的时候表现良好,数据量很大的时候也可以进行增量计算。由于朴素贝叶斯使用先验概率估计后验概率具有很好的模型的可解释性。

缺点: 朴素贝叶斯模型与其他分类方法相比具有最小的理论误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进,例如为了计算量不至于太大,我们假定每个属性只依赖另外的一个。解决特征之间的相关性,我们还可以使用数据降维(PCA)的方法,去除特征相关性,再进行朴素贝叶斯计算。文章来源地址https://www.toymoban.com/news/detail-717247.html

到了这里,关于机器学习算法--朴素贝叶斯(Naive Bayes)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 朴素贝叶斯(Naive Bayes)

            朴素贝叶斯是一个基于概率统计的机器学习算法,作用是用于多分类。         训练集包含已知分类类别的大量样本,每个样本具有n维特征,例如:已知一个人分类为胖或者瘦,有5个特征用于分类,这5个特征分别是体重、身高、年龄、鞋码、每天吃几碗饭。每

    2024年02月04日
    浏览(28)
  • 【机器学习 | 朴素贝叶斯】朴素贝叶斯算法:概率统计方法之王,简单有效的数据分类利器

    🤵‍♂️ 个人主页: @AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍 🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能硬件(虽然硬件还没开始玩,但一直

    2024年02月15日
    浏览(38)
  • [学习笔记] [机器学习] 9. 朴素贝叶斯(概率基础、联合概率、条件概率、贝叶斯公式、情感分析)

    视频链接 数据集下载地址:无需下载 学习目标: 4. 说明条件概率与联合概率 5. 说明贝叶斯公式、以及特征独立的关系 6. 记忆贝叶斯公式 7. 知道拉普拉斯平滑系数 8. 应用贝叶斯公式实现概率的计算 9. 会使用朴素贝叶斯对商品评论进行情感分析 朴素贝叶斯算法主要还是用来

    2024年02月09日
    浏览(36)
  • 第四章 基于概率论的分类方法:朴素贝叶斯

    朴素贝叶斯 优点:在数据较少的情况下仍然有效,可以处理多类别问题。 缺点:对于输⼊数据的准备⽅式较为敏感。 适⽤数据类型:标称型数据。 假设类别为 c 1 , c 2 c_1,c_2 c 1 ​ , c 2 ​ : 如果 p 1 ( x , y ) p 2 ( x , y ) p1(x,y) p2(x,y) p 1 ( x , y ) p 2 ( x , y ) ,那么类别为 c 1 c_1 c

    2024年02月13日
    浏览(29)
  • 机器学习之概率学习朴素贝叶斯(NB)

    依据概率原则进行分类。如天气预测概率。 朴素贝叶斯(Naive Bayes, NB)适合场景:为估计一个结果的概率,从众多属性中提取的信息应该被同时考虑。 很多算法忽略了弱影响的特征(若有大量弱影响的特征,它们组合在一起的影响可能会很大),但NB算法利用了所有可以获得

    2024年02月20日
    浏览(28)
  • 数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病...

    这个数据集( 查看文末了解数据免费获取方式 )可以追溯到1988年,由四个数据库组成。克利夫兰、匈牙利、瑞士和长滩。\\\"目标 \\\"字段是指病人是否有心脏病。它的数值为整数,0=无病,1=有病 ( 点击文末“阅读原文”获取完整 代码数据 ) 。 目标: 主要目的是预测给定的人

    2024年02月16日
    浏览(35)
  • 机器学习算法(7)—— 朴素贝叶斯算法

    朴素贝叶斯是一种分类算法,经常被用于文本分类,它的输出结果是某个样本属于某个类别的概率。 概率基础复习 联合概率:包含多个条件,且所有条件同时成立的概率 记作: P(A,B) 条件概率:就是事件A在另外一个事件B已经发生条件下的发生概率 记作: P(A|B) 相互独立:如

    2024年02月10日
    浏览(25)
  • 机器学习算法系列(六)-- 朴素贝叶斯

    朴素贝叶斯法是基于概率统计,特征条件独立假设的分类方法,是一种非常常用的机器学习算法;通常用于处理文本分类和情感分析等自然语言处理任务中。相对于其他复杂的模型,朴素贝叶斯算法具有简单、易于实现、高效和良好的准确性等特点。 概率论基础 条件概率 事

    2024年02月07日
    浏览(33)
  • 【机器学习】十大算法之一 “朴素贝叶斯”

      作者主页: 爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主 爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域. https://blog.csdn.net/Code_and516?type=blog 个人简介:打工人。 持续分

    2024年02月09日
    浏览(30)
  • 【机器学习】分类算法 - 朴素贝叶斯 MultinomialNB

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 md5() 可以计算字符串的 「MD5散列值」 。 语法 参数 $str :需要计算的字符串

    2024年02月14日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包