机器学习:基于朴素贝叶斯(Naive Bayes)的分类预测

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

目录

一、简介和环境准备

简介:

环境:

二、实战演练

2.1使用葡萄(Wine)数据集,进行贝叶斯分类

1.数据导入

2.模型训练

3.模型预测

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

1.数据导入、分析

2.模型训练、预测

 三、原理解析

朴素贝叶斯算法

优缺点:


一、简介和环境准备

简介:

朴素贝叶斯(Naive Bayes, NB) 是机器学习中一种基于贝叶斯定理的分类算法。它假设输入的特征之间相互独立且对分类结果的影响是等同的,因此称为朴素贝叶斯。

具体来说,它通过计算先验概率和条件概率来确定输入样本所属的分类,其中先验概率指的是每个分类在整个数据集中出现的概率,条件概率指的是给定某个分类的情况下,输入样本在各个特征上的概率分布。

在实际应用中,朴素贝叶斯常用于文本分类、垃圾邮件过滤等任务中,具有计算速度快、对数据量不敏感等优点。

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

机器学习:基于朴素贝叶斯(Naive Bayes)的分类预测

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的概率。

环境:

pycharm,建议:

1. python3.7
2. numpy >= '1.16.4'
3. sklearn >= '0.23.1'

二、实战演练

数据集都是能调用的,不用另下载。这里简单介绍一下sklearn的datasets。

scikit-learn(sklearn)中提供了多个现成的数据集,可以用于机器学习任务和演示。目前(2021年),sklearn中提供的数据集有以下20个:

  1. 波士顿房价数据集(Boston Housing)
  2. Iris数据集(Iris)
  3. 糖尿病数据集(Diabetes)
  4. 手写数字数据集(Digits)
  5. 乳腺癌数据集(Breast Cancer)
  6. 威斯康星州乳腺癌数据集(Wisconsin Breast Cancer)
  7. Linnerud体能训练数据集(Linnerud)
  8. 瑞士银行家数据集(Swiss Banknotes)
  9. 20类新闻文本数据集(20 newsgroups)
  10. Olivetti脸部图像数据集(Olivetti faces)
  11. 口袋妖怪数据集(Pokemon)
  12. 森林覆盖类型数据集(Forest Covertypes)
  13. 加州房价数据集(California Housing)
  14. 远红外线数据集(Infrared)
  15. 垃圾邮件数据集(Spam)
  16. 面部识别数据集(Faces)
  17. KDD Cup 1999网络入侵检测数据集(KDD Cup 1999)
  18. 索引指数数据集(Digits)
  19. 贷款违约数据集(Credit Default)
  20. 新冠病毒诊断数据集(Covid-19)

除了这些现成的数据集,sklearn还提供了一些工具可以生成人造数据集,如make_classification,make_regression和make_blobs等。

2.1使用葡萄(Wine)数据集,进行贝叶斯分类

1.数据导入

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

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

我们需要计算两个概率分别是:条件概率:P ( X ( i ) = x ( i ) ∣ Y = c k )和类目c k 的先验概率:P(Y=c k)。
通过分析发现训练数据是数值类型的数据,这里假设每个特征服从高斯分布,因此我们选择高斯朴素贝叶斯来进行分类计算。

2.模型训练

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

3.模型预测

# 评估
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)

机器学习:基于朴素贝叶斯(Naive Bayes)的分类预测

 高斯朴素贝叶斯假设每个特征都服从高斯分布,我们把一个随机变量X服从数学期望为μ,方差为σ2的数据分布称为高斯分布。对于每个特征我们一般使用平均值来估计μ和使用所有特征的方差估计σ2。

机器学习:基于朴素贝叶斯(Naive Bayes)的分类预测

 从上述例子中的预测结果中,我们可以看到类别0对应的后验概率值最大,所以我们认为类目0是最优的结果。

这个举一反三很容易,改变导入数据库即可,再看接下来离散数据集的分类。

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

1.数据导入、分析

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

随机生成数据进行训练 ,可以自己diy

# 模拟数据
rng = np.random.RandomState(1)
# 随机生成500个100维的数据,每一维的特征都是[0, 10]之前的整数
X = rng.randint(11, size=(500, 100))
y = np.array([1, 2, 3, 4, 5] * 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)

X和y代表一个特征矩阵和一个目标向量。

X是一个形状为(500,100)的二维数组,其中包含500个样本,每个样本包含100个特征。这个特征矩阵是使用numpy的randint函数从0到10(不包括11)的均匀分布中生成的随机整数。

y是一个形状为(500,)的一维数组,其中包含500个目标值。这些目标值分别为1,2,3,4,5,重复100次,与特征矩阵中的样本一一对应。在机器学习任务中,通常需要使用特征矩阵和目标向量来训练和测试模型,以便对新的未知数据进行预测。

2.模型训练、预测

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

clf = CategoricalNB(alpha=1)
clf.fit(X_train, y_train)
acc = clf.score(X_test, y_test)
print("Test Acc : %.3f" % acc)
# 随机数据测试,分析预测结果,贝叶斯会选择概率最大的预测结果
# 比如这里的预测结果是7,7对应的概率最大,由于我们是随机数据
# 读者运行的时候,可能会出现不一样的结果。
x = rng.randint(5, size=(1, 100))
print(clf.predict_proba(x))
print(clf.predict(x))

机器学习:基于朴素贝叶斯(Naive Bayes)的分类预测

可以看到测试的数据的结果,贝叶斯会选择概率最大的预测结果,比如这里的预测结果是7,7对应的概率最大,由于我们是随机数据,读者运行的时候,可能会出现不一样的结果。

同时注意第一行有个变量alpha,当alpha=0时,就是极大似然估计。通常取值alpha=1,这就是拉普拉斯平滑(Laplace smoothing),这有叫做贝叶斯估计,主要是因为如果使用极大似然估计,如果某个特征值在训练数据中没有出现,这时候会出现概率为0的情况,导致整个估计都为0,因为引入贝叶斯估计。

这里的测试数据的准确率没有任何意义,因为数据是随机生成的,不一定具有贝叶斯先验性,这里只是作为一个例子。

 三、原理解析

朴素贝叶斯算法

朴素贝叶斯法 = 贝叶斯定理 + 特征条件独立。

输入空间是n维向量集合,输出空间. 所有的X和y都是对应空间上的随机变量. P(X,Y)是X和Y的联合概率分别. 训练数据集(由P(X,Y)独立同分布产生):

原文说的比较详细,这里不再赘述,可以看文末链接。

总结一下就是 在分类时,它通过计算样本特征对于各个类别的条件概率,从而选择概率最大的类别作为预测结果。而且条件独立互不影响。

优缺点:

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

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


原文:A.机器学习入门算法(二): 基于朴素贝叶斯(Naive Bayes)的分类预测_汀、人工智能的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-418206.html

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

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

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

相关文章

  • 机器学习-基于朴素贝叶斯的垃圾邮件分类

    概率论是许多机器学习算法的基础,此篇博客会给出一些使用概率论进行分类的方法。 首先从一个最简单的概率分类器开始,然后给出一些假设来学习朴素贝叶斯分类器。我们称之为“朴素”,是因为整个形式化过程只做最原始、最简单的假设。 我们还将构建另一个分类器

    2024年02月02日
    浏览(48)
  • 【机器学习实战】-基于概率论的分类方法:朴素贝叶斯

    【机器学习实战】读书笔记 **朴素贝叶斯:**称为“ 朴素 ”的原因,整个形式化过程只做最原始、最简单的假设,特征之间没有关联,是统计意义上的独立。 **优点:**在数据较少的情况下仍然有效,可以处理多类别问题。 **缺点:**对于输入数据的准备方式较为敏感。 **适

    2024年03月25日
    浏览(53)
  • 基于机器学习算法:朴素贝叶斯和SVM 分类-垃圾邮件识别分类系统(含Python工程全源码)

    本项目采用朴素贝叶斯和支持向量机(SVM)分类模型作为基础,通过对垃圾邮件和正常邮件的数据进行训练,旨在实现垃圾邮件的自动识别功能。 通过训练这两个分类模型,我们的目标是建立一个高效准确的垃圾邮件识别系统。当接收到新的邮件时,系统将对邮件文本进行预

    2024年02月09日
    浏览(53)
  • Bayes-RF,基于贝叶斯Bayes优化算法优化随机森林RF分类预测(二分类及多分类皆可)-附代码

    Bayesian Optimization(贝叶斯优化)是一种用于超参数调优的技术,对于类似随机森林(Random Forest,简称RF)的机器学习算法非常重要。随机森林是一种集成学习方法,它在训练过程中构建多个决策树,并输出这些树的类别众数(分类问题)或平均预测值(回归问题)。 以下是贝

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

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

    2024年02月16日
    浏览(53)
  • 机器学习算法——贝叶斯分类器3(朴素贝叶斯分类器)

    基于贝叶斯公式来估计后验概率P(c|x)的主要困难在于:类条件概率P(x|c)是所有属性上的联合概率,难以从有限的训练样本直接估计而得。 为避开这个障碍,朴素贝叶斯分类器(Naive Bayes classfier)采用了“ 属性条件独立性假设 ”:对已知类别,假设所有属性相互独立。换句话

    2023年04月22日
    浏览(58)
  • 机器学习--朴素贝叶斯分类器

    第1关:条件概率 什么是条件概率 概率指的是某一事件 A 发生的可能性,表示为 P(A) 。而条件概率指的是某一事件 A 已经发生了条件下,另一事件 B 发生的可能性,表示为 P(B|A) ,举个例子: 今天有 25% 的可能性下雨,即 P(下雨)=0.25 ; 今天 75% 的可能性是晴天,即 P(晴天)=0.7

    2024年02月08日
    浏览(65)
  • 机器学习实验 - 朴素贝叶斯分类器

    报告内容仅供学习参考,请独立完成作业和实验喔~ 1.1 实验要求 (1)了解朴素贝叶斯与半朴素贝叶斯的区别与联系,掌握高斯分布、多项式分布和伯努利分布的朴素贝叶斯计算方法。 (2)编程实现朴素贝叶斯分类器,基于多分类数据集,使用朴素贝叶斯分类器实现多分类预

    2024年02月09日
    浏览(52)
  • 机器学习——朴素贝叶斯算法(垃圾邮件分类)

    先验概率 :指的是 事件发生前 的预判概率,可以根据历史数据/经验估算得到。例如,当我们需要判断西瓜是不是好瓜的时候,对纹理、根蒂等特征都不了解,只是平常我们买西瓜的时候买到好瓜的概率是70%,那么这个西瓜是好瓜的概率我们也可以认为是70%。这个概率70%就是

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

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

    2024年02月14日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包