Machine Learning机器学习之贝叶斯网络(BayesianNetwork)

news/2024/4/29 2:41:52/文章来源:https://blog.csdn.net/a910247/article/details/137118335

目录

前言

算法提出背景:

贝叶斯算法特点:

一、贝叶斯定理

二、朴素贝叶斯分类模型

1、朴素贝叶斯分类模型(Naive Bayes Classifier)

2、原理

2.1 朴素贝叶斯假设

2.2条件独立性假设

2.3后验概率计算

2.4类别预测

2.5小结

3、建模应用

4、贝叶斯垃圾邮件过滤应用 

三、贝叶斯网络推理 

四、贝叶斯网络学习

五、总结

优点:

缺点:

应用:


博主介绍:✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战,深受全网粉丝喜爱与支持✌有需要可以联系作者我哦!

🍅文末三连哦🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

前言

贝叶斯网络(Bayesian Network),也称为信念网络(Belief Network)或概率有向无环图(Probabilistic Directed Acyclic Graph,PDAG),是一种用图形表示概率模型的方法,它基于概率推断的贝叶斯定理。贝叶斯网络的背景可以追溯到 1980 年代初期,它是由一些著名的人工智能研究者如Judea Pearl、Peter Spirtes、Clark Glymour等提出和发展起来的。

算法提出背景:

贝叶斯网络的提出源于对概率图模型的研究,旨在解决不确定性推理问题。传统的概率图模型有两种主要类型:贝叶斯网络和马尔可夫网络。在贝叶斯网络中,变量之间的关系通过有向边连接来表示,而在马尔可夫网络中,变量之间的关系通过无向边连接来表示。

贝叶斯算法特点:

  1. 图形化表示: 贝叶斯网络使用有向无环图(DAG)来表示变量之间的依赖关系,图中的节点表示随机变量,有向边表示变量之间的因果关系或依赖关系

  2. 概率推断: 贝叶斯网络基于贝叶斯定理进行概率推断,可以用来计算给定观测数据情况下变量的概率分布,或者用来预测新数据的概率分布。

  3. 因果推理: 贝叶斯网络可以用来探索变量之间的因果关系,并进行因果推理,即根据已知的因果关系推断其他变量的状态。

  4. 不确定性建模: 贝叶斯网络可以有效地处理不确定性信息,允许将概率分布的不确定性纳入到推理过程中。

一、贝叶斯定理

贝叶斯定理(Bayes' theorem)是概率论中的一个基本定理,描述了在已知相关信息的情况下,如何更新对事件发生的概率估计。贝叶斯定理的数学表达如下:

P(A|B) = \frac{P(B|A) \times P(A)}{P(B)}

其中,P(A|B)表示在观测到事件 B 的条件下事件 A 发生的概率,P(B|A) 表示在事件 A 发生的条件下事件 B 发生的概率,P(A)P(B)分别表示事件 A 和事件 B 的先验概率。

贝叶斯定理可以解决以下类型的问题:

1. 后验概率计算:已知事件 B 发生的条件下,事件 A 发生的概率是多少?
2. 先验概率更新:当观测到事件 B 发生后,如何更新对事件 A 发生的先验概率?
3. 概率推断:已知事件 A 和 B 之间的关系,如何推断事件 A 和 B 的关联程度?

贝叶斯定理的应用非常广泛,涵盖了各个领域,如机器学习、统计学、医学、金融等。在机器学习中,贝叶斯定理常用于朴素贝叶斯分类器、贝叶斯优化等算法中,用于处理分类、回归、优化等问题。在实际应用中,贝叶斯定理为我们提供了一种有效的概率推断方法,能够更好地利用先验知识和观测数据,进行准确的推断和预测。

二、朴素贝叶斯分类模型

1、朴素贝叶斯分类模型(Naive Bayes Classifier)

基于贝叶斯定理和特征独立假设的一种简单而有效的分类算法。该模型假设给定类别的特征之间是相互独立的,并且通过计算给定类别下各个特征的条件概率来进行分类。尽管朴素贝叶斯分类器存在“朴素”的假设,即特征之间是相互独立的,但在许多实际情况下,该算法仍然表现出惊人的性能。

朴素贝叶斯分类模型(Naive Bayes Classifier)是基于贝叶斯定理和特征独立假设的一种简单而有效的分类算法。该模型假设给定类别的特征之间是相互独立的,并且通过计算给定类别下各个特征的条件概率来进行分类。尽管朴素贝叶斯分类器存在“朴素”的假设,即特征之间是相互独立的,但在许多实际情况下,该算法仍然表现出惊人的性能。

2、原理

朴素贝叶斯分类模型基于贝叶斯定理,利用特征之间的条件独立性,计算给定类别下各个特征的条件概率,然后根据贝叶斯定理计算后验概率,最终确定样本所属的类别。

具体而言,假设有一个包含特征 \left ( x_1, x_2, ..., x_n \right )和类别\left ( y \right )的数据集,朴素贝叶斯分类器的计算过程如下:

2.1 朴素贝叶斯假设

朴素贝叶斯分类器假设特征之间是相互独立的,即给定类别的情况下,特征之间的条件概率是相互独立的。这个假设简化了模型的计算,并且在实际应用中通常能够取得良好的效果。

2.2条件独立性假设

基于朴素贝叶斯假设,我们可以将后验概率P(y|x)展开为特征之间的条件概率的乘积:

P(y|x) = \frac{P(x|y) \times P(y)}{P(x)}

根据朴素贝叶斯假设,特征之间是相互独立的,因此可以将条件概率 P(x|y)展开为特征的乘积:

P(x|y) = P(x_1|y) \times P(x_2|y) \times ... \times P(x_n|y)

2.3后验概率计算

将条件独立性假设代入贝叶斯定理的表达式中,得到后验概率P(y|x) 的计算公式:

P(y|x) = \frac{P(y) \times P(x_1|y) \times P(x_2|y) \times ... \times P(x_n|y)}{P(x)}

其中,P(y)表示类别y 的先验概率,P(x_i|y) 表示在类别 y 的条件下特征x_i的条件概率,P(x)是样本 x出现的概率。

2.4类别预测

通过计算每个类别的后验概率P(y|x),选择具有最大后验概率的类别作为样本的预测类别。

2.5小结

朴素贝叶斯分类器的原理基于贝叶斯定理和朴素贝叶斯假设,通过计算类别的后验概率来进行分类。虽然朴素贝叶斯假设简化了模型的计算,但在实际应用中,朴素贝叶斯分类器仍然能够取得良好的分类效果,并且具有简单高效的特点。但也因此存在明显的缺点

  • 特征独立性假设:朴素贝叶斯分类器假设特征之间是相互独立的,这在某些情况下可能不成立,导致分类性能下降。
  • 处理连续特征困难:朴素贝叶斯分类器对于连续特征的处理比较困难,通常需要对连续特征进行离散化处理。
  • 样本不平衡问题:当数据集中不同类别的样本数量差异较大时,朴素贝叶斯分类器的分类性能可能受到影响。

3、建模应用

生成了80000个随机样本,然后将其划分为训练集和测试集。接着使用高斯朴素贝叶斯分类器对训练集进行训练,并在训练集和测试集上进行预测。最后,使用Matplotlib库可视化了训练数据和测试数据的分类结果

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score# 生成随机样本
X, y = make_classification(n_samples=80000, n_features=2, n_informative=2, n_redundant=0, random_state=42)# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=42)# 初始化高斯朴素贝叶斯分类器
nb_classifier = GaussianNB()# 训练模型
nb_classifier.fit(X_train, y_train)# 进行预测
y_pred_train = nb_classifier.predict(X_train)
y_pred_test = nb_classifier.predict(X_test)# 计算准确率
train_accuracy = accuracy_score(y_train, y_pred_train)
test_accuracy = accuracy_score(y_test, y_pred_test)
print("Training set accuracy:", train_accuracy)
print("Test set accuracy:", test_accuracy)# 可视化训练数据和分类结果
plt.figure(figsize=(12, 6))# 绘制训练数据
plt.subplot(1, 2, 1)
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=plt.cm.Paired, marker='o', edgecolors='k')
plt.title('Training Data')
plt.xlabel('Feature1')
plt.ylabel('Feature2')# 绘制测试数据及分类结果
plt.subplot(1, 2, 2)
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred_test, cmap=plt.cm.Paired, marker='o', edgecolors='k')
plt.title('Test Data and Classification Results')
plt.xlabel('Feature1')
plt.ylabel('Feature2')plt.show()

执行结果:随机生成样本80000份,划分2两个样本特征,40%测试集。

图1 可视化数据分类结果 

4、贝叶斯垃圾邮件过滤应用 

传统的垃圾邮件过滤方式是关键词过滤,但是这种方法过于绝对,容易出现误判的情况。贝叶斯过滤将会充分考虑关键词在正常邮件和垃圾邮件中出现的概率,可以极大降低失误率。下面我们通过一个案列来展示贝叶斯是如何过滤垃圾邮件的。

具体过程:

  1. 建立词汇表和训练集:首先,贝叶斯过滤器会建立一个词汇表,并将每个词语与其在垃圾邮件和正常邮件中出现的频率联系起来。为了完成这一步,需要一个已经分类好的训练集,其中包含了大量的垃圾邮件和正常邮件样本。
  2. 计算词语频率:通过对训练集的学习,贝叶斯过滤器可以计算出每个词语在垃圾邮件和正常邮件中出现的频率。这些频率用于后续计算每个词语在待分类邮件中出现的概率。
  3. 预处理待分类邮件:当有新的邮件需要分类时,贝叶斯过滤器会对该邮件进行预处理。这通常包括将邮件转化为一个特征向量,该向量包含了待分类邮件中出现的每个词语以及它们的频率。
  4. 计算概率:根据贝叶斯定理,贝叶斯过滤器可以计算出该邮件属于垃圾邮件和正常邮件的概率。具体来说,它会计算邮件中每个词语在垃圾邮件和正常邮件中的条件概率,并结合这些词语在邮件中的出现频率,来得出最终的分类概率。
  5. 自我学习功能:贝叶斯过滤器具有自我学习的功能。随着时间的推移,它收到的垃圾邮件越多,其分类的准确率通常会越高。这是因为更多的数据可以帮助过滤器更准确地计算词语的频率和概率。同时为了提高准确率,贝叶斯过滤器通常会考虑多个词语的联合概率,而不仅仅是单个词语的概率。这意味着它会考虑邮件中多个词语的组合,以更准确地判断邮件的类别。
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 随机生成5000的邮件数据
np.random.seed(42)
num_emails = 50000
emails = []
for _ in range(num_emails):if np.random.rand() < 0.3:  # 50% 的邮件是非垃圾邮件email = ("嘿,Mika!你今天好吗?", 0)else:email = ("现在免费获取抽奖获取小米手机!快来!", 1)emails.append(email)# 提取特征和标签
X, y = zip(*emails)# 将文本数据转换为数值特征
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(X)# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 初始化并训练分类器
classifier = MultinomialNB()
classifier.fit(X_train, y_train)# 进行预测
y_pred = classifier.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)

执行结果:精确率100%

三、贝叶斯网络推理 

在贝叶斯网络中,节点表示随机变量,边表示变量之间的依赖关系。推理过程是指在给定一些证据或观察值的情况下,通过贝叶斯网络计算出目标变量的后验概率分布的过程。

推理过程一般可以通过以下几种方法实现:

  1. 采样推理(Sampling Inference):通过随机抽样的方式,在贝叶斯网络中进行大量的随机采样,从而近似计算目标变量的后验概率分布。

  2. 变量消除推理(Variable Elimination Inference):通过变量消除的方式,逐步削减网络中的变量,最终计算出目标变量的后验概率分布。

  3. 精确推理(Exact Inference):对于小规模的贝叶斯网络,可以使用精确推理方法,如枚举法或动态规划,精确地计算出目标变量的后验概率分布。

  4. 近似推理(Approximate Inference):对于大规模的贝叶斯网络,精确推理可能变得困难,可以采用一些近似推理方法,如变分推断或马尔可夫链蒙特卡洛法(MCMC),来近似计算目标变量的后验概率分布。

总之,贝叶斯网络的推理过程是通过计算机算法在给定证据的情况下,利用概率论的知识来推断目标变量的概率分布。

四、贝叶斯网络学习

主要分为参数学习和结构学习两种方式。第一种参数学习(Parameter Learning),参数学习是指在已知贝叶斯网络结构的情况下,从数据中学习网络中节点的条件概率分布参数的过程。参数学习可以通过最大似然估计、贝叶斯估计等方法来实现。通过参数学习,可以利用数据来估计贝叶斯网络中每个节点的条件概率分布参数,从而使网络更符合实际数据。第二种是结构学习(Structure Learning),结构学习是指从数据中学习贝叶斯网络的结构的过程。结构学习的目标是发现最优的网络结构,使得网络能够最好地表示数据之间的依赖关系。结构学习可以通过搜索算法(如贪婪搜索、爬山算法)、约束优化方法(如评分函数、信息准则)等方法来实现。结构学习是一个复杂的问题,因为可能存在多个符合数据的网络结构,需要考虑结构的复杂性和有效性。

五、总结

优点:

  • 处理复杂关系:贝叶斯网络可以有效地描述大量变量之间的复杂依赖关系。
  • 引入先验知识:它允许通过引入先验知识来修正概率分布,从而提高模型的准确性。
  • 预测与推断:贝叶斯网络能够进行模型的推断和预测,对未来的情况做出估计。
  • 动态建模:它可以逐步加入新的变量,构建动态的模型,适应不断变化的环境。
  • 直观性:贝叶斯网络的结构直观,易于理解和解释,有助于揭示变量之间的关联。

缺点:

  • 计算复杂度:对于大规模数据或复杂模型,贝叶斯网络的计算复杂度较高,需要较长的计算时间。
  • 先验知识的依赖:构建贝叶斯网络需要依赖先验知识。如果先验知识不准确或不完备,可能导致模型预测结果的不准确。
  • 非线性关系建模困难:对于变量之间的非线性关系和交互作用,贝叶斯网络的建模可能较为困难。
  • 模型可解释性:虽然贝叶斯网络的结构直观,但不同的模型结构可能产生相同的预测结果,这可能导致在某些情况下模型难以解释。
  • 数据依赖性:贝叶斯网络对训练数据的依赖较强,如果数据质量不高或数量不足,可能导致模型的不准确。
  • 学习过程无法迭代更新:一旦先验概率和似然函数确定,后续的训练数据无法直接影响先验概率的更新,这在面对不断变化的数据时可能是一个问题。

应用:

  1. 医疗诊断:利用患者的临床数据、病史等构建贝叶斯网络模型,帮助医生进行更准确的疾病诊断和预测。
  2. 金融风险管理:用于分析客户的信用记录、财务状况等因素,评估信用风险,制定信贷政策。
  3. 工业控制:用于故障诊断和设备维护,提高设备的可靠性和效率。
  4. 贝叶斯网络还在决策支持系统、自然语言处理、专家系统等领域发挥重要作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1027249.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣热门算法题 135. 分发糖果,146. LRU 缓存,148. 排序链表

135. 分发糖果&#xff0c;146. LRU 缓存&#xff0c;148. 排序链表&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.28 可通过leetcode所有测试用例。 目录 135. 分发糖果 解题思路 完整代码 Python Java 146. LRU 缓存 …

北斗短报文+4G应急广播系统:实时监控 自动预警 保护校园安全的新力量

安全无小事&#xff0c;生命重如山。学生是祖国的未来&#xff0c;校园安全是全社会安全工作的一个重要的组成部分。它直接关系到青少年学生能否安健康地成长&#xff0c;关系到千千万万个家庭的幸福安宁和社会稳定。 灾害事故和突发事件频频发生&#xff0c;给学生、教职员工…

XSS学习(cookie远程登录演示)

1.HTTP特点&#xff1a; 1.请求应答模式。 2.灵活可扩展 3.可靠传输 4.无状态。 这里给大家举一个例子&#xff1a; HTTP是无状态的&#xff0c;所按理来说我每进行一次会话&#xff0c;比如我在CSDN发一个帖子&#xff0c;好像按理来以说我都要进行一次重新登陆&#xff0…

Vue 04 Vue 中的 Ajax、slot 插槽

Vue学习 Vue 0401 Vue中的Ajax服务器准备axios使用跨域问题解决Vue-CLI 配置代理1Vue-CLI 配置代理2案例: 用户搜索vue-resource 02 slot插槽默认插槽具名插槽作用域插槽slot总结 Vue 04 B站 Vue全家桶&#xff08;BV1Zy4y1K7SH&#xff09; 学习笔记 Vue 中的 ajax 01 Vue中的…

uniApp使用XR-Frame创建3D场景(8)粒子系统

上篇文章讲述了如何将XR-Frame作为子组件集成到uniApp中使用 本片我们详细讲解一下xr-frame的粒子系统 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"> <xr-node visible"{{sec8}}"><xr-asset-load t…

小程序利用WebService跟asp.net交互过程发现的问题并处理

最近在研究一个项目&#xff0c;用到asp.net跟小程序交互&#xff0c;简单的说就是小程序端利用wx.request发起请求。获取asp.net 响应回来的数据。但经常会报错。点击下图的测试按钮 出现如下错误&#xff1a; 百思不得其解&#xff0c;试了若干方法&#xff0c;都不行。 因为…

京东云搭建幻兽帕鲁Palworld多人游戏联机服务器教程,1分钟开服

使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程&#xff0c;非常简单&#xff0c;京东云推出幻兽帕鲁镜像系统&#xff0c;镜像直接选择幻兽帕鲁镜像即可一键自动部署&#xff0c;不需要手动操作&#xff0c;真正的新手0基础部署幻兽帕鲁&#xff0c;阿腾云atengyun.…

Machine Learning机器学习之统计分析

目录 前言 机器学习之统计分析 统计学的主要目标包括&#xff1a; 统计学核心概念&#xff1a; 统计基础&#xff1a; 训练误差&#xff1a; 常见的损失函数&#xff1a; 正则化和交叉验证 博主介绍&#xff1a;✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉…

网络工程师之路由交换技术篇

网络工程师之路由交换技术篇 路由交换之技术篇ARPICMPBPDUIPv6IP编址MAC其他技术点参考 以下均为个人笔记&#xff0c;摘录到csdn做备份 路由交换之技术篇 ARP Operation Code指定了ARP报文的类型&#xff0c; 包括ARP request 和ARP reply&#xff1b;取值为1或者2 &#x…

uniapp输入框事件(防抖)

一、描述 在输入框输入内容或者说输入关键词的时候&#xff0c;往往都要进行做防抖处理。如果不做防抖&#xff0c;你输入什么&#xff0c;动态绑定的数据就会保持一致。这样不好吗&#xff0c;同步获取。有个业务场景&#xff0c;如果是搜索框&#xff0c;你每次一个字符&…

Java中读取html文件转成String,展示在浏览器

这里写目录标题 第一章1.1&#xff09;pom中引入依赖和html文件示例1.2&#xff09;使用hutool工具包读取html文件转为string1.3&#xff09;页面显示 第一章 1.1&#xff09;pom中引入依赖和html文件示例 引入hutool工具包依赖 <dependency><groupId>cn.hutool&…

【Linux】 gcc(linux下的编译器)程序的编译和链接详解

目录 前言&#xff1a;快速认识gcc 1. 程序的翻译环境和执行环境 2.编译和链接 2.1翻译环境 2.2编译环境 1. 预处理 gcc -E指令 test.c&#xff08;源文件&#xff09; -o test.i&#xff08;生成在一个文件中&#xff0c;可以自己指定&#xff09; 预处理完成之后就停下来&am…

贪心算法--最大数

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 本题链接https://leetcode.cn/problems/largest-number/description/ class Solution { public:bool static compare(int a, int b){return (to_string(a) to_string(b)) > (to_string(b) to_string(a));}bool operato…

MySQL创建表:练习题

练习题&#xff1a; 创建一个名为"students"的数据库&#xff0c;并切换到该数据库。 在"students"数据库中创建一个名为"grades"的表&#xff0c;包含以下字段&#xff1a; id: 整数类型 name: 字符串类型&#xff0c;学生姓名 subject: 字符串…

最小可行产品需要最小可行架构——可持续架构(三)

前言 最小可行产品&#xff08;MVP&#xff09;的概念可以帮助团队专注于尽快交付他们认为对客户最有价值的东西&#xff0c;以便在投入大量时间和资源之前迅速、廉价地评估产品的市场规模。MVP不仅需要考虑产品的市场可行性&#xff0c;还需要考虑其技术可行性&#xff0c;以…

计算机专业学习单片机有什么意义吗?

玩单片机跟玩计算机区别还是很大的, 单片机有众多的种类,每一种又可能有很多个系列.可以说单片机就是为了专款专用而生的.这样来达到产品成本的降低,这就是现在身边的很多的电子产品价格一降再降的原因之一.在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一…

安装paddle detection心得

一、安装PaddlePaddle conda create -n mypaddle python3.8 conda activate mypaddle python -m pip install paddlepaddle-gpu2.6.0 -i https://mirror.baidu.com/pypi/simple 请确保您的PaddlePaddle安装成功并且版本不低于需求版本。使用以下命令进行验证。 这是CUDA1…

SpringBoot项目启动成功,但是调用接口直接报NOT FOUND 404

问题描述 SpringBoot项目启动成功&#xff0c;但是调用接口直接报NOT FOUND 404 解决办法 启动类中ComponentScan(basePackages {“com.afclab”})中的扫包路径和项目路径不一样&#xff0c;导致扫不到Controller等组件&#xff0c;修改成和项目路径一样就可以解决&#xf…

8、鸿蒙学习-HAR

HAR&#xff08;Harmony Archive&#xff09;是静态共享包&#xff0c;可以包含代码、C库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP&#xff0c;不能独立安装运行在设备上。只能作为应用模块的依赖项被引用。 一、创建…

206基于matlab的无人机航迹规划(UAV track plannin)

基于matlab的无人机航迹规划(UAV track plannin&#xff09;。输入输出参数包括 横滚、俯仰、航向角&#xff08;单位&#xff1a;度&#xff09;&#xff1b;横滚速率、俯仰速率、航向角速率&#xff08;单位&#xff1a;度/秒&#xff09;&#xff1b;飞机运动速度——X右翼、…