贝叶斯-概率

embedded/2025/2/5 15:34:43/

起点:玩猜硬币游戏中发现贝叶斯定理貌似有很强的预测功能,细看还真有那么回事,因此研究研究。当然,看起来学精后不止可用来猜硬币,也可猜其它玩艺。

贝叶斯统计的基础是贝叶斯定理,贝叶斯定理的基础是条件概率

例子1:综合社会调查的数据展示:

import pandas as pdgss = pd.read_csv('gss_bayes.csv')
gss.head()

展示结果:

列说明:

  • caseid:受访者标识符。

  • year:受访者接受调查的年份。

  • age:受访者接受调查时的年龄。

  • sex: 男女不限。

  • polviews:政治观点范围从自由主义到保守主义。

  • partyid:政治党派,民主党、独立党或共和党。

  • indus10:受访者所在行业代码

假设indus10列银行家的代码为6870,则

True表达的为银行家

该数据集中有728位银行家

银行家的比例可以banker.mean() = 0.014769730168391155

大约 1.5% 的受访者在银行工作,因此如果我们从数据集中随机选择一个人,他们是银行家的概率约为 1.5%。至此,以数据集引出概率

概率函数

def prob(A):"""Computes the probability of a proposition, A."""    return A.mean()

计算银行家的比例:

prob(banker)=0.014769730168391155

计算受访者为女姓的比例为:

female = (gss['sex'] == 2)
prob(female)=0.5378575776019476

政治观点和政党

polviews字段表示政治观点,分七级,从1至7分别从极度自由派到极度保守派

partyid字段表示党派,分八级,从0至7分别表示不同党派

我将把它定义liberalTrue针对任何回答为“极端自由”、“自由”或“略微自由”的人。

liberal = (gss['polviews'] <= 3)

根据这一定义,以下是自由派受访者的比例。

prob(liberal)=0.27374721038750255

表达的意思是如果我们在这个数据集中随机选择一个人,他们是自由主义者的概率约为27%

democrat = (gss['partyid'] <= 1)定义为强势民主党的受访者

按照这一定义,以下是受访者中民主党人的比例

prob(democrat)=0.3662609048488537

连词

“合取”是逻辑and运算的另一个名称,如果有两个命题,A和B,则合取就是如果两者都为True,则合取值为True,否则合取值为False

如果我们有两个布尔系列,我们可以使用&运算符来计算它们的合取。例如,我们已经计算了受访者是银行家的概率。

受访者是银行家的概率:prob(banker)=0.014769730168391155
受访者是民主党人的可能性为:prob(democrat)=0.3662609048488537

现在我们可以计算受访者是银行家且是民主党人的概率:

prob(banker & democrat)=0.004686548995739501

正如我们所预料的,小于任意一个,因为并非所有银行家都是民主党人,且很明显,合取是可交换的:prob(banker & democrat)=prob(democrat & banker )=0.004686548995739501

条件概率

条件概率是取决于条件的概率,但这可能不是最有用的定义。以下是一些示例:

  • 假设受访者是自由派,那么他们是民主党人的可能性有多大?

  • 假设受访者是银行家,那么其为女性的概率是多少?

  • 假设受访者是女性,那么其为自由派的可能性有多大?

让我们从第一个问题开始,我们可以这样解释:“在所有自由派受访者中,民主党人占比是多少?”

我们可以分两步计算这个概率:

  1. 选择所有自由派的受访者。

  2. 计算选定受访者中民主党人的比例。

为了选出自由派受访者,我们可以使用括号运算符,[]如下所示:

selected = democrat[liberal] # 此表达的意思是所有自由派为真先取出来,例如我们假设总记录有20条(实际记录有49290,这里为了理解容易,先用前20条记录计算),符合自由派的有3条,这3个自由派中有1条是民主党派,如下图所示:

在此数据中算出来的为:

prob(selected)=0.3333333333333333

封装成函数:

def conditional(proposition, given):"""Probability of A conditioned on given."""return prob(proposition[given])

我们可以用它conditional来计算受访者为女性时,其为自由派的概率。

conditional(liberal, given=female)=0.27581004111500884

约28%的女性受访者持自由派立场

条件概率不具有交换性

我们已经看到,合取是可交换的;也就是说,总是等于。prob(A & B)prob(B & A)

但条件概率具有交换性;也就是说,与 不同。conditional(A, B)conditional(B, A)

如果我们看一个例子,这一点就应该很清楚了。之前,我们计算了受访者是女性的概率,假设她们是银行家。

conditional(female, given=banker) 
0.7706043956043956 

结果显示,大多数银行家都是女性。这与受访者是女性的情况下是银行家的概率不同:

conditional(banker, given=female) 
0.02116102749801969 

只有约2%的女性受访者是银行家。

概率定律

在接下来的几节中,我们将推导合取概率和条件概率之间的三种关系:

  • 定理 1:使用合取函数计算条件概率。

  • 定理 2:使用条件概率计算合取。

  • 定理3:利用计算。conditional(A, B)conditional(B, A)

定理 3 也称为贝叶斯定理。

我将使用概率的数学符号来写出这些定理:

  • P(A)是命题的概率A。

  • P(A and B)是A和B,即两者都为真的概率。

  • P(A|B)是条件概率A鉴于B是真的。垂直线之间的A和B发音为“given”。

这样,我们就可以为定理 1 做好准备了。

定理1:

女性银行家占比是多少?我们已经知道了计算答案的一种方法:

  1. 使用括号运算符选择银行家,然后

  2. 用于mean计算女性银行家的比例。

    female[banker].mean() = 0.7706043956043956或是
    conditional(female, given=banker)= 0.7706043956043956

另一种方法来计算这个条件概率,即计算两个概率的比率:

  1. 受访者中女性银行家的比例,以及

  2. 受访者中银行家所占比例。

换句话说:在所有银行家中,女性银行家占比是多少?我们是这样计算这个比例的。

prob(female & banker) / prob(banker) = 0.7706043956043956

公式如下:

P(A|B) = \frac{P(A \, and \, B)}{P(B)}, 这就是定理1

定理2:

将定理1的两国都乘以P(B),我们得到定理2.

P(A \, and \, B) = P(B) \,P(A|B)

这个公式提出了计算合取的第二种方法: 我们可以计算两个概率的乘积,而不是使用运算符&

例如:prob(liberal& democrat) = prob(democrat) * conditional(liberal, democrat)=

0.1425238385067965

定理3:

由于

P(A \, and \, B) = P(B \, and \, A)

将定理2代入,则有:

P(B) \,P(A|B) = P(A) \,P(B|A)

两边同时除以P(B),得到定理3:

P(A|B) = \frac{P(A)P(B|A)}{P(B)},这就是贝叶斯定理

示例:

conditional(liberal, given=banker)=0.2239010989010989
prob(liberal) * conditional(banker, liberal) / prob(banker)=0.2239010989010989

全概率定律:

P(A) = P(B1\, and \,A) + P(B2\, and \,A)

练习

  • 假设受访者是民主党人,那么他是自由派的可能性有多大?

方法1,取民主党人,判断其自由派的可能性

democrat是民主党序列, liberal是自由派,可用条件判断:

P(A|B)=conditional(A, given=B)

conditional(liberal, given=democrat)=0.1111111111111111

方法2P(A|B) = \frac{P(A \, and \,B)}{P(B)} 定理1

即prob(liberal & democrat)/prob(democrat)=0.1111111111111111

方法3,P(A|B) = \frac{P(A)P(B|A)}{P(B)} 定理3 贝叶斯定理

prob(liberal) * conditional(democrat, given=liberal)/prob(democrat)=0.1111111111111111

  • 假设受访者是自由派,那么他们是民主党人的可能性有多大?

同样也是三种方法,1 直接条件取值,2 通过转换为合取取值/P(B)的形式,3使用叶贝斯定理

方法1:conditional(democrat, given=liberal)=0.3333333333333333

方法2:prob(democrat & liberal)/prob(liberal)=0.33333333333333337

方法3:prob(democrat) *conditional(liberal, given=democrat)/prob(liberal)=0.3333333333333333


http://www.ppmy.cn/embedded/159786.html

相关文章

【玩转 Postman 接口测试与开发2_012】第十章:用 Postman 监控 API 接口

《API Testing and Development with Postman》最新第二版封面 文章目录 第十章 用 Postman 监控 API 接口1 为何要使用监控工具2 搭建一个简易的接口监视器3 设置推送邮箱4 监控失败后的重试次数设置5 超时设置6 重定向设置7 启用 SSL 验证8 监视器测试用例的添加9 监视器运行…

【含文档+PPT+源码】基于微信小程序连锁药店商城

项目介绍 本课程演示的是一款基于微信小程序连锁药店商城&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该项目附带的…

Baklib引领内容中台与人工智能技术的创新融合之路

内容概要 在数字化转型的浪潮中&#xff0c;各行业正在面临前所未有的挑战与机遇。内容中台作为一种新的概念&#xff0c;逐渐进入了企业的视野&#xff0c;它不仅是一个技术平台&#xff0c;更是提供了整合和管理内容的新思路。从根本上&#xff0c;内容中台旨在提升企业对信…

毕业设计:基于深度学习的高压线周边障碍物自动识别与监测系统

目录 前言 课题背景和意义 实现技术思路 一、算法理论基础 1.1 卷积神经网络 1.2 目标检测算法 1.3 注意力机制 二、 数据集 2.1 数据采集 2.2 数据标注 三、实验及结果分析 3.1 实验环境搭建 3.2 模型训练 3.2 结果分析 最后 前言 &#x1f4c5;大四是整个大学…

编译报错:bin/ld: static-reloc.c:(.text+0x24): undefined reference to `main‘ 的解决方案

背景 交叉编译代码&#xff0c;很多链接库都是手动指定的&#xff0c;编译的代码中存在部分测试代码&#xff0c;需要gtest和gmock的支持。 问题 交叉编译test代码的时候&#xff0c;出现了报错 bin/ld: static-reloc.c:(.text0x24): undefined reference to main解决方案 …

RRT_STAR路径规划代码

这是一段使用MATLAB编写的代码&#xff0c;实现了一个基于RRT*&#xff08;Rapidly-exploring Random Trees Star&#xff09;算法的路径规划。RRT*是一种用于在配置空间中搜索路径的采样算法&#xff0c;常用于机器人路径规划等领域。以下是代码的主要功能和结构&#xff1a; …

大模型安全漏洞报告——真实漏洞视角下的全面探讨

近年来&#xff0c; 人工智能&#xff08;AI&#xff09;正以前所未有的速度发展&#xff0c;在各行业中扮演着越来越重要的角色。大模型作为AI中的重要一环&#xff0c;其能力随着平台算的重要一环&#xff0c;其能力随着平台算提升、 训练数据量的积累、深度学习算法积累、深…

基础笔记|splice()的用法

一、三种用法 splice(index, 0, element) 插入 元素&#xff0c;不删除任何元素。splice(index, deleteCount) 删除 deleteCount 个元素。splice(index, deleteCount, element1, element2, ...) 替换 元素&#xff0c;即删除 deleteCount 个元素&#xff0c;同时插入新的元素。…