前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >个推漫话数据智能 | 《天才基本法》中的贝叶斯网络及原理解读

个推漫话数据智能 | 《天才基本法》中的贝叶斯网络及原理解读

原创
作者头像
个推
发布于 2022-08-16 12:25:39
发布于 2022-08-16 12:25:39
7670
举报
文章被收录于专栏:个推技术实践个推技术实践

最近的热播剧《天才基本法》中,提到了很多有趣的数学知识点,比如“亲和数”“巴什博奕”“孔明棋”“七桥问题”等等,让很多观众直呼不明觉厉。其中,最让Mr.Tech感兴趣的是剧中男女主参加数学建模大赛时用到的贝叶斯网络。

▲女主使用贝叶斯网络进行算法建模,来预测嫌犯行动轨迹和抓捕时间方位。图片截图自电视剧《天才基本法》

贝叶斯网络是一种分类算法,被广泛地应用于医疗诊断、风控等业务场景中,并发挥着重要作用。关于“贝叶斯网络”,你了解多少?今天个推就和大家一起走进机器学习领域,共同学习这个神奇的算法模型。

一、走进贝叶斯网络

生活中,人们往往会从最终的结果反向推测其原因,从而更好地做风险规避,或提前创造充分条件以达成预期目标。不过事物之间的联系往往错综复杂,我们如何抽丝剥茧,清晰分析出事件和事件之间的相互依赖关系?是否有可能通过数学的方式来计算和衡量其中的因果作用,帮助我们追溯甚至预测事物的走向?

贝叶斯网络就是当下数据科学家和算法工程师用来解决此类问题的一种有效方式。

贝叶斯网络(bayesian network)是描述随机变量(事件)之间关系的模型。例如,贝叶斯网络可以表示疾病和症状之间的概率关系。根据症状,该网络可以计算各种疾病存在的概率。

贝叶斯网络用有向无环图(Directed Acyclic Graph,DAG)表示,其中每个节点代表一个随机变量,节点间的联系用有向箭头表示,箭头从“因节点”指向“被影响节点”,用条件概率表达关系强度。

现实中,医生的诊断过程和贝叶斯网络的推理机制高度一致。如上图,如果患者咳嗽非常严重,甚至出现气急、呼吸不畅等症状,医生结合雾霾天气、患者的吸烟史等情况,初步判断患者可能得了肺炎。接下来医生会要求患者拍肺部的X光片,根据患者的X光片表现,做出更加科学的诊断结论。

目前,很多医疗辅助系统正是基于贝叶斯网络,将过往的医学诊断经验很好地沉淀下来,实现智能诊断,帮助医生大幅提升诊断效率。

接下来,我们再深入了解更深层次的问题:贝叶斯网络如何量化和计算事件之间的因果/条件依赖关系?

在上述案例中,雾霾、吸烟、过敏、病菌感染等都是导致患者得肺炎的风险因子。那么哪一个风险因子的影响作用最大?这就需要我们理解贝叶斯网络的底层数学思想——贝叶斯定理

二、贝叶斯网络与贝叶斯定理

贝叶斯定理由英国著名数学家托马斯·贝叶斯提出,它是关于条件概率的定理,公式如下:

根据高中的概率论知识来理解贝叶斯公式:

  • P(A), P(B) 表示事件 A 和事件 B 的独立发生概率。
  • P(A|B) 是个条件概率,表示当事件 B 发生的情况下,事件A发生的概率。
  • P(B|A) 也是个条件概率,表示当事件 A 发生的情况下,事件B发生的概率。

贝叶斯定理中有先验概率和后验概率之分。

先验概率:指根据以往经验和统计分析得到的概率。是在“结果”发生之前的概率,比如公式中的P(A)就是先验概率。先验概率一般作为“由因求果”问题中的“因”出现。

后验概率:是根据观察到的样本修正之后的概率值。指在结果发生之后,我们根据“结果”来计算和分析最有可能导致该结果的原因,即“执果寻因”中的“因”。公式中的P(A|B)就是后验概率。

接下来,我们将刚才提到的医疗诊断实例简化,来进一步理解贝叶斯定理。

假设(先验概率均为假设数据):

患者病菌感染的概率P(V ) = 5%

患者感冒的概率P(C ) = 30%

患者因为病菌感染而感冒的概率P(C|V) = 40%

那么

根据贝叶斯定理,感冒患者被病菌感染的后验概率P(V|C) = P(C|V)*P(V) / P(C) = 40%*5% / 30% ≈66.67%

再复杂一些。

假设(先验概率均为假设数据):

患者发热的概率P(F) = 6%

患者因为感冒而发热的概率P(F|C) = 60%

那么:

患者因为病菌感染而发热的概率P(F|V) = P(C|V) * P(F|C) = 24%

那么:

根据贝叶斯定理,发热患者被病菌感染的后验概率P(V|F) = P(F|V)*P(V) / P(F) = 24%*5% / 6% =20%

如上,贝叶斯网络其实就是基于贝叶斯定理对事物之间因果关系以及依赖关系进行量化,并使得因果或依赖关系的强弱可以被推理和计算

在解决实际业务问题时,算法工程师们往往会通过对历史数据进行统计得到先验概率,然后使用贝叶斯网络进行推理,实现对机器故障原因、患者病因等的智能分析,以及对机器设备故障概率、患者患病风险等的预测。

只不过,在实际的机器学习过程中,算法工程师们需要计算的数据量非常庞大,所构建的贝叶斯网络更为复杂。

贝叶斯定理与人类大脑的推理过程非常相似,作为人工智能领域学习和推理的重要分支,贝叶斯定理一直备受关注。而以贝叶斯定理为基础的贝叶斯网络由Judea Pearl于1986年提出,是近年来机器学习领域的研究热点。2011年,Judea Pearl还凭借在人工智能以及贝叶斯网络方面的贡献,获得了“计算机界的诺贝尔奖”——图灵奖。

当前,算法工程师们对贝叶斯网络的研究侧重在结构学习方面,希望能够构建起更加客观、可靠的网络模型,更好地发挥出贝叶斯网络在不确定性推理方面的优势。

结语:

《天才基本法》中,女主成功应用贝叶斯网络和贝叶斯定理解决了疑犯轨迹预测和追踪的问题。而在现实世界,人们对大数据和AI技术的应用更加深入,不断探索使用数据智能技术解决各种不确定问题,比如基于丰富、实时的数据构建动态贝叶斯网络,帮助相关部门预测公共突发事件的影响,支撑应急管理等等。

作为一家数据智能企业,个推也一直走在技术创新的前沿。通过对海量数据进行深度治理和挖掘,个推将数据加工为信息和知识,解读出数据的人文涵义,从而更好地服务行业客户和政府相关部门,助力科学决策。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
fastjson的JSONArray和JSONObject[通俗易懂]
java和js中JSONObject,JSONArray,Map,String之间转换——持续更新中
全栈程序员站长
2022/06/26
2.3K0
fastjson的JSONArray和JSONObject[通俗易懂]
什么是Json,如何使用?
JavaScript Object Notation:javascript的对象表示法。
Twcat_tree
2022/12/05
1.4K0
Json交互处理_stata交互项检验
在 JavaScript 语言中,一切都是对象。因此,任何JavaScript 支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。看看他的要求和语法格式:
全栈程序员站长
2022/11/19
1.4K0
Json交互处理_stata交互项检验
SpringMVC-05 Json交互处理
在 JavaScript 语言中,一切都是对象。因此,任何JavaScript 支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。看看他的要求和语法格式:
张小驰出没
2021/04/15
1.5K0
SpringMVC-05  Json交互处理
Json的常用方法[通俗易懂]
在java中要想方便的操作json首先要引入json的jar包,如json-lib-2.4-jdk15.jar
全栈程序员站长
2022/08/04
7060
json字符串数组转json数组
当需要把一串字符串转成一个json 数组 ,并遍历其中的内容时。 首先要导入 net.sf.json.JSONArray和net.sf.json.JSONObject 两个jar 包
全栈程序员站长
2022/06/24
6.1K0
jsonobject转string数组_json字符串转jsonobject对象
格式:JSONObject parseObject(String text) 其中:text为JSONObject格式的字符串,如:{“k1″:”v1″,”k2″:”v2”}
全栈程序员站长
2022/09/25
2.6K0
Json详解以及fastjson使用教程[通俗易懂]
Json是一种轻量级的数据交换格式,采用一种“键:值”对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言。在使用Java做Web开发时,不可避免的会遇到Json的使用。下面我们就简单讲一下Json的使用以及fastjson.jar包的使用。
全栈程序员站长
2022/07/25
2.7K0
Json详解以及fastjson使用教程[通俗易懂]
Java中String转换为JSONArray发生错误[通俗易懂]
第一种解析的字符串结构 keywords:[{keyword=关键字,matchType=1},{keyword=关键字,matchType=1}]
全栈程序员站长
2022/08/31
5.9K0
只通过com.alibaba.fastjson.JSONArray实现okHttp下String转换JSONArray
我的Android不能导入常见的那六个包,会严重报错。我改了很久很久还是不能解决错误,也就不能使用net.sf包中的JSONArray 直接使用new JSONArray(str)。
全栈程序员站长
2022/08/31
7290
string转成jsonarray_数值转换
String jsonStr = “{“lng”:120.413354,“lat”:31.298914}”
全栈程序员站长
2022/09/22
1K0
string转成jsonarray_数值转换
第168天:json对象和字符串的相互转换
在Firefox,chrome,opera,safari,ie9,ie8等高级浏览器直接可以用JSON对象的stringify()和parse()方法。 JSON.stringify(obj)       将JSON对象转为字符串。 JSON.parse(string)       将字符串转为JSON对象格式。
半指温柔乐
2018/09/11
1.5K0
JSON與ajax使用方法
是存储和交换文本信息的语法。类似 XML。 比 XML 更小、更快,更易解析。 JSON 是一种数据格式。它本身是一串字符串,只是它有固定格式的字符串,符合这个数据格式要求的字符串,我们称之为JSON。 JSON 常用来数据传输,因为它易于程序之前读写操作。 JSON 它其实是来自JavaScript对对象(Object)的定义。但是它作为数据格式来使用的时候,和JavaScript没有任何关系,它只是参照了JavaScript对对象定义的数据格式。 JSON 它可以服务任何语言,C、C++、Java、Objective-C、Python、Go、等,在各个语言中的字典、Map和JSON是类似的结构,所以它们之间可以相互转换。 JSON键值对数据结构如上图,以 “{” 开始,以 “}” 结束。中间包裹的为Key : Value的数据结构。
用户9857551
2022/06/28
9190
按层级/条件解析Json,获取相应的key或value中的相关数据
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.zhaogang.model.condition.UserCouponCondition; import org.junit.Test; import org.slf4j.Lo
wuweixiang
2018/08/14
4.1K0
JSON 基本使用
JSON常被拿来与XML做比较,因为JSON 的诞生本来就多多少少要有取代XNL的意思。相比 XML,JSON的优势如下:
兮动人
2021/06/11
1.4K0
JSON 基本使用
JSON 基本使用
JSON常被拿来与XML做比较,因为JSON 的诞生本来就多多少少要有取代XNL的意思。相比 XML,JSON的优势如下:
兮动人
2021/05/31
1.7K0
JSON 基本使用
Json对象与Json字符串互转(4种转换方式)
  $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象
李才哥
2019/07/10
15.4K0
Json对象与Json字符串互转(4种转换方式)
fastjson如何判断JSONObject和JSONArray
1、fastjson如何判断JSONObject和JSONArray,百度一下,教程还真不少,但是是阿里的fastjson的我是没有找到合适的方法。这里用一个还算可以的方法,算是实现了这个效果。
别先生
2018/10/09
2.9K1
JSON格式及FastJson使用详解
在进行数据处理或前后端交互的时候,会不可避免的碰到json格式的数据。Json是一种轻量级的数据交换格式,采用一种“键:值”对的文本格式来存储和表示数据,是一种理想的数据交换语言。本文对son的使用以及fastjson包的使用进行阐述,通过本文的学习,可以解决部分常见的JSON数据问题。
三分恶
2020/07/17
1.6K0
JSON格式及FastJson使用详解
Java中用fastjson对String、JSONObject、JSONArray相互转换
fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean
全栈程序员站长
2022/08/31
6280
推荐阅读
相关推荐
fastjson的JSONArray和JSONObject[通俗易懂]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档