【机器学习基础】分类算法之贝叶斯网络
机器学习算法与Python实战
共 3853字,需浏览 8分钟
· 2021-09-23
↑↑↑点击上方蓝字,回复资料,10个G的惊喜
贝叶斯网络
马尔科夫链描述的是状态序列,很多时候事物之间的相互关系并不能用一条链串起来,比如研究心血管疾病和成因之间的关系便是如此错综复杂的。这个时候就要用到贝叶斯网络:每个状态只跟与之直接相连的状态有关,而跟与它间接相连的状态没直接关系。但是只要在这个有向图上,有通路连接两个状态,就说明这两个状态是有关的,可能是间接相关。状态之间弧用转移概率来表示,构成了信念网络(Belief Network)。 贝叶斯网络的拓扑结构比马尔可夫链灵活,不受马尔科夫链的链状结构的约束,更准确的描述事件之间的相关性。马尔科夫链是贝叶斯网络的一个特例,而贝叶斯网络是马尔科夫链的推广。 拓扑结构和状态之间的相关概率,对应结构训练和参数训练。贝叶斯网络的训练比较复杂,从理论上讲是一个NP完备问题,对于现在计算机是不可计算的,但对于某些具体应用可以进行简化并在计算机上实现。
对于贝叶斯学派,首先想到的就是后验概率公式和先验分布,认为所有的变量都是随机的,有各自的先验分布。我想贝叶斯网络是可以帮助医生进行诊断决策的,前段时间研究过的compressive tracking就是采用的朴素贝叶斯分类器,我对与贝叶斯相关内容的应用就是从此开始有所了解的。朴素贝叶斯分类有一个限制条件,就是特征属性必须有条件独立或基本独立(实际上在现实应用中几乎不可能做到完全独立)。当这个条件成立时,朴素贝叶斯分类法的准确率是最高的,但不幸的是,现实中各个特征属性间往往并不条件独立,而是具有较强的相关性,这样就限制了朴素贝叶斯分类的能力。这里讨论的就是贝叶斯分类中更高级、应用范围更广的一种算法——贝叶斯网络(又称贝叶斯信念网络或信念网络)。
而在贝叶斯网络中,由于存在前述性质,任意随机变量组合的联合条件概率分布被化简成
其中Parents表示xi的直接前驱节点的联合,概率值可以从相应条件概率表中查到。
如果没有前驱结点,就用先验概率带入。就这样能够计算出所有的相关或者间接相关的变量的联合概率密度,知道了联合概率密度,对于边缘概率密度的计算就非常简单了,通过这个能够形成一些有意义的推理,等效于生成了知识。
贝叶斯网络在词分类中的应用
2002年google工程师们利用贝叶斯网络建立了文章、关键词和概念之间的联系,将上百万关键词聚合成若干概念的聚类,称之为phil cluster。最早的应用是广告的拓展匹配。
实际上我觉得这个应用他讲的并不清楚,我是理解不好。
SNS社区中不真实账号的检测
在那个朴素贝叶斯分类器的解决方案中,我做了如下假设: i、真实账号比非真实账号平均具有更大的日志密度、更大的好友密度以及更多的使用真实头像。
ii、日志密度、好友密度和是否使用真实头像在账号真实性给定的条件下是独立的。但是,上述第二条假设很可能并不成立。一般来说,好友密度除了与账号是否真实有关,还与是否有真实头像有关,因为真实的头像会吸引更多人加其为好友。因此,我们为了获取更准确的分类,可以将假设修改如下: i、真实账号比非真实账号平均具有更大的日志密度、更大的好友密度以及更多的使用真实头像。
ii、日志密度与好友密度、日志密度与是否使用真实头像在账号真实性给定的条件下是独立的。
iii、使用真实头像的用户比使用非真实头像的用户平均有更大的好友密度。上述假设更接近实际情况,但问题随之也来了,由于特征属性间存在依赖关系,使得朴素贝叶斯分类不适用了。既然这样,我去寻找另外的解决方案。 下图表示特征属性之间的关联:
上图是一个有向无环图,其中每个节点代表一个随机变量,而弧则表示两个随机变量之间的联系,表示指向结点影响被指向结点。不过仅有这个图的话,只能定性给出随机变量间的关系,如果要定量,还需要一些数据,这些数据就是每个节点对其直接前驱节点的条件概率,而没有前驱节点的节点则使用先验概率表示。
例如,通过对训练数据集的统计,得到下表(R表示账号真实性,H表示头像真实性):
纵向表头表示条件变量,横向表头表示随机变量。上表为真实账号和非真实账号的概率,而下表为头像真实性对于账号真实性的概率。这两张表分别为“账号是否真实”和“头像是否真实”的条件概率表。有了这些数据,不但能顺向推断,还能通过贝叶斯定理进行逆向推断。例如,现随机抽取一个账户,已知其头像为假,求其账号也为假的概率:也就是说,在仅知道头像为假的情况下,有大约35.7%的概率此账户也为假。如果觉得阅读上述推导有困难,请复习概率论中的条件概率、贝叶斯定理及全概率公式。如果给出所有节点的条件概率表,则可以在观察值不完备的情况下对任意随机变量进行统计推断。上述方法就是使用了贝叶斯网络。
使用观察值实例化H,L和F,把随机值赋给R。 计算 P(R|H,L,F)=P(H|R)P(L|R)P(F|R,H)。其中相应概率值可以查条件概率表。
对所有可观察随机变量节点用观察值实例化;对不可观察节点实例化为随机值。 P(y|wi)=αP(y|Parents(y))∏jP(sj|Parents(sj)) 对DAG进行遍历,对每一个不可观察节点y,计算,其中 wi表示除 y以外的其它所有节点, α为正规化因子, sj表示 y的第 j个子节点。 使用第三步计算出的各个y作为未知节点的新值进行实例化,重复第二步,直到结果充分收敛。 将收敛结果作为推断值。
以上只是贝叶斯网络推理的算法之一,另外还有其它算法,这里不再详述。
贝叶斯网络的构造、学习训练
1、确定随机变量间的拓扑关系,形成DAG。这一步通常需要领域专家完成,而想要建立一个好的拓扑结构,通常需要不断迭代和改进才可以,需要用到机器学习得到。
2、训练贝叶斯网络。这一步也就是要完成条件概率表的构造,如果每个随机变量的值都是可以直接观察的,像我们上面的例子,那么这一步的训练是直观的,方法类似于朴素贝叶斯分类。但是通常贝叶斯网络的中存在隐藏变量节点,那么训练方法就是比较复杂,例如使用梯度下降法。
参考文献:
张洋 《算法杂货铺——分类算法之贝叶斯网络(Bayesian networks)》
推荐阅读
(点击标题可跳转阅读)
老铁,三连支持一下,好吗?↓↓↓
评论
周四002 瑞超:同样落寞的境遇——北雪平vs埃尔夫斯堡
上赛季最终排名联赛第9的北雪平本赛季伊始表现不佳,4轮战罢他们仅以1胜1平2负的战绩排在倒数第三,这支历史上曾夺得13次联赛冠军、6次杯赛冠军老牌劲旅,正如英格兰赛场上的一众百年俱乐部,在低谷中不断探索着出路。球队主教练安德烈亚斯·阿尔姆曾是AIK索尔纳及赫根队的主教练,他于今年年初刚刚拿起球队教鞭
产品与体验
0
面试官:限流的常见算法有哪些?
限流的实现算法有很多,但常见的限流算法有三种:计数器算法、漏桶算法和令牌桶算法。1.计数器算法计数器算法是在一定的时间间隔里,记录请求次数,当请求次数超过该时间限制时,就把计数器清零,然后重新计算。当请求次数超过间隔内的最大次数时,拒绝访问。计数器算法的实现比较简单,但存在“突刺现象”。突刺现象是指
Stephen
0
985 本硕,秋招上岸阿里算法岗!
↓推荐关注↓节前,我们星球举办了技术&面试交流会,邀请了一些互联网大厂好友以及今年参加社招和校招面试的同学。会上探讨了一系列热门话题,包括大模型发展趋势、算法落地实践、面经总结,以及如何做好面试准备和应对常见考点。基于经验交流与实战经验,我们总结如下:《机器学习算法面试宝典》1.0 发布!今
Python学习与数据挖掘
0
文末送书 | 大模型时代下如何学习云原生
《containerd 原理剖析与实战》新书内购中,点击阅读原文,限时 69.9 元购买。文末免费赠书大模型与云原生近年来,大语言模型的热度可谓是愈发高涨,尤其是今年年初 Sora 的出现,更是让全球再次看到了AIGC 的巨大威力。Sora 生成实例视频---几头巨大的长毛猛犸踏着积雪的草地而来在当
云原生实验室
10
6大类最新AI工具,共计39个分类梳理!
你好,我是郭震俗话说,工欲善其事必先利其器,用好AI工具一定事半功倍!这也是AI技术革命带给我们最能感知到的地方之一。这篇文章总结了6大类AI工具,分别包括:问答,图像,视频,AI编程,AI提示词和AI大模型,一共梳理挑选了共计39个AI工具,其中很多都是开源!文末还包括完整思维导图,大家记得收藏这
Python与算法社区
10
轻松学习C#:百度行驶证C++离线SDK接入详解
效果 先看最终效果SDK 拿到完整包如图,687M解压后看看内容发现有个readme.txt,那就先看看内容1:用vs2015打开sln工程,最好用vs2015 comunity版本,可微软官网下载。2:sdk的doc目录有pdf接口文档。3:工程总入口main.cpp、请参考示例实现您的功能。4:
DotNet NB
9
日语五十音图学习难吗?
学习日语的初学者们都知道,我们学习日语最初就必须要接触日语五十音图,虽然相对其他语言来说,五十音图挺不是很难学,但是很多初学者可能会记不住,别担心,老师为大家带来了学习经验分享,一起来看看吧!五十音图就是日语最基础的基础,也就是地基。由于日语的元音比较单调,只有a/i/u/e/o这五种,再和各种辅音
python教程
0
Java版【数据结构与算法】的天花板,收藏好,慢慢看
Java 版数据结构与算法来了,堪称 java 版数据结构与算法的天花板,需要学数据结构与算法的,刷这套就可以了,目录如下,文末附教程地址。基础数据结构-001-二分查找-算法描述基础数据结构-002-二分查找-算法实现基础数据结构-003-二分查找-问题1-循环条件基础数据结构-004-二分查找-
路人甲Java
0