【深度学习与大模型基础】第9章-条件概率以及条件概率的链式法则

news2025/7/14 15:50:54

简单理解条件概率

条件概率就是在已知某件事发生的情况下,另一件事发生的概率。用数学符号表示就是:
P(A|B) = 在B发生的前提下,A发生的概率。


计算机例子:垃圾邮件过滤

假设你写了一个程序来自动判断邮件是否是垃圾邮件(Spam)。已知:

  1. 所有邮件中,20%是垃圾邮件(P(Spam) = 0.2)。

  2. 垃圾邮件中,50%包含“免费”这个词(P(Free|Spam) = 0.5)。

  3. 正常邮件中,只有10%包含“免费”(P(Free|¬Spam) = 0.1)。

现在问题是:如果一封邮件包含“免费”,它是垃圾邮件的概率是多少?
也就是求 P(Spam|Free)


如何计算?

根据条件概率公式:P(A|B)=P(A\capB)/P(B)

即有:

  1. 分子:垃圾邮件中带“免费”的概率 × 垃圾邮件的概率
    = 0.5 × 0.2 = 0.1

  2. 分母:所有带“免费”的邮件的概率(包括垃圾和正常邮件)
    = P(Free|Spam)P(Spam) + P(Free|¬Spam)P(¬Spam)
    = 0.5×0.2 + 0.1×0.8 = 0.1 + 0.08 = 0.18

所以:


结论

即使“免费”在垃圾邮件中更常见,但因为正常邮件基数大,实际包含“免费”的邮件是垃圾邮件的概率只有约55.6%。这就是条件概率的直观体现——它结合了先验知识(垃圾邮件的比例)和新证据(“免费”这个词)。


应用场景

  1. 推荐系统:已知用户喜欢游戏(B),那么推荐显卡(A)的概率是多少?

  2. 故障诊断:如果电脑蓝屏(B),是内存故障(A)的概率有多大?

  3. 语音识别:在当前上下文(B)下,下一个词是“苹果”(A)的概率是多少?

条件概率帮助计算机在不确定性的世界中做出更聪明的决策!


 使用python实现在当前上下文(B)下,下一个词是“苹果”(A)的概率是多少的代码

1.安装NLTK
pip install nltk

下载附件分词模型文件tokenizers.zip解压到 D:\nltk_data
 

3..实现在当前上下文(B)下,下一个词是“苹果”(A)的概率是多少的代码



import nltk
nltk.download('punkt')  # 确保punkt已下载
nltk.download('punkt_tab')
from nltk import bigrams, FreqDist
from nltk.tokenize import word_tokenize

# 示例文本(中文需提前分词,英文可直接tokenize)
text = "吃 苹果 买 苹果 吃 香蕉 买 手机"  # 中文示例(已分词)
tokens = word_tokenize(text)  # 分词
bigram_pairs = list(bigrams(tokens))  # 生成连续词对

# 统计条件概率
context = "吃"
next_word = "苹果"
count_apple = sum(1 for (prev, curr) in bigram_pairs if prev == context and curr == next_word)
total_context = sum(1 for (prev, curr) in bigram_pairs if prev == context)
p_apple_given_context = count_apple / total_context if total_context > 0 else 0

print(f"P('{next_word}'|'{context}') = {p_apple_given_context:.2f}")


条件概率的链式法则基础概念

  • 条件概率:比如事件B发生的条件下,事件A发生的概率,记作 P(A∣B)。

    • 例子:明天降雨的概率是 P(雨),但如果今天乌云密布(B),那么明天降雨的概率会变,即 P(雨∣乌云)。

  • 链式法则:把多个条件的联合概率拆解成一步步的条件概率相乘。

    • 公式:

      P(A\capB\capC)=P(A)⋅P(B∣A)⋅P(C∣A\capB)
    • 意思是"A、B、C同时发生"的概率,等于:

      1. 先发生A的概率 P(A),

      2. 在A发生下B的概率 P(B∣A),

      3. 在A和B都发生下C的概率 P(C∣A\capB)。


应用场景

假设我们要预测一段文本是否是垃圾邮件(Spam),文本中有两个单词:"免费"和"赢"。

  • 联合概率
    计算 P(免费\cap\capSpam)(即“免费”和“赢”同时出现且是垃圾邮件的概率)。

  • 链式法则拆解

    P(免费\cap\capSpam)=P(Spam)⋅P(免费∣Spam)⋅P(赢∣免费\capSpam) 
    1. 先算垃圾邮件的概率 P(Spam),

    2. 在垃圾邮件中,“免费”出现的概率 P(免费∣Spam),

    3. 在垃圾邮件且已有“免费”时,“赢”出现的概率 P(赢∣免费\capSpam)。


3. 为什么有用?

  • 简化复杂问题:直接算联合概率很难,但拆成条件概率后,可以通过数据统计(比如数邮件中出现单词的次数)来估算。

  • 贝叶斯网络的基础:链式法则是图模型(如贝叶斯网络)的核心,用来描述变量间的依赖关系。


python实现

假设我们要预测一段文本是否是垃圾邮件(Spam),文本中有两个单词:"免费"和"赢"。
计算 P(免费,赢,Spam)(即“免费”和“赢”同时出现且是垃圾邮件的概率)

import pandas as pd

# 模拟数据:每封邮件的文本和标签(1=Spam, 0=Not Spam)
data = {
    "text": [
        "免费 赢 大奖",        # Spam
        "免费 参加 活动",      # Spam
        "赢 免费 门票",        # Spam
        "明天 开会",           # Not Spam
        "请 回复 邮件"         # Not Spam
    ],
    "label": [1, 1, 1, 0, 0]
}

df = pd.DataFrame(data)
print(df)

# 计算 P(Spam)
total_emails = len(df)
spam_emails = df[df["label"] == 1]
p_spam = len(spam_emails) / total_emails

# 计算 P(免费|Spam): 垃圾邮件中包含"免费"的概率
spam_with_free = spam_emails[spam_emails["text"].str.contains("免费")]
p_free_given_spam = len(spam_with_free) / len(spam_emails)

# 计算 P(赢|免费, Spam): 在垃圾邮件且含"免费"时,同时含"赢"的概率
spam_free_with_win = spam_with_free[spam_with_free["text"].str.contains("赢")]
p_win_given_free_spam = len(spam_free_with_win) / len(spam_with_free) if len(spam_with_free) > 0 else 0

# 联合概率: P(免费, 赢, Spam) = P(Spam) * P(免费|Spam) * P(赢|免费, Spam)
joint_probability = p_spam * p_free_given_spam * p_win_given_free_spam

print(f"P(Spam): {p_spam:.2f}")
print(f"P(免费|Spam): {p_free_given_spam:.2f}")
print(f"P(赢|免费, Spam): {p_win_given_free_spam:.2f}")
print(f"联合概率 P(免费, 赢, Spam): {joint_probability:.4f}")

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32-FreeRTOS的详细配置

配置FreeRTOS 原文链接:https://ydamooc.github.io/posts/c9defcd/ 1.1 下载FreeRTOS 打开FreeRTOS官网:https://www.freertos.org/ 点击下载,并且选择"FreeRTOS 202212.01"版本,再点击Download按钮下载官方的资源包…

视觉自回归图像生成:基于多模态大模型的万字深度梳理

目前利用多模态大模型进行图像生成主要有以下两种形式: LLM作为condtioner:利用MLLM依据用户输入的text prompt来生成条件信息,条件信息被注入到下游生成模型进行更精细化的生成控制。这种形式通常需要外接一个额外专门的多模态生成模型&…

openssh离线一键升级脚本分享(含安装包)

查看当前的版本 [rootmyoracle ~]#ssh -V相关安装包下载地址 openssh下载地址:http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssl下载地址:https://www.openssl.org/source/zlib下载地址:http://www.zlib.net/今天演示从7.4升级…

音视频之H.265/HEVC预测编码

H.265/HEVC系列文章: 1、音视频之H.265/HEVC编码框架及编码视频格式 2、音视频之H.265码流分析及解析 3、音视频之H.265/HEVC预测编码 预测编码是视频编码中的核心技术之一。对于视频信号来说,一幅图像内邻近像素之间有着较强的空间相关性,相邻图像之…

Python异步编程入门:Async/Await实战详解

引言 在当今高并发的应用场景下,传统的同步编程模式逐渐暴露出性能瓶颈。Python通过asyncio模块和async/await语法为开发者提供了原生的异步编程支持。本文将手把手带你理解异步编程的核心概念,并通过实际代码案例演示如何用异步爬虫提升10倍效率&#…

设计模式每日硬核训练 Day 13:桥接模式(Bridge Pattern)完整讲解与实战应用

🔄 回顾 Day 12:装饰器模式小结 在 Day 12 中,我们学习了装饰器模式(Decorator Pattern): 强调在不改变原类结构的前提下,动态为对象增强功能。通过“包装对象”实现运行时组合,支…

库洛游戏一面+二面

目录 一面 1. ArrayList和LinkedList的区别,就是我在插入和删除的时候他们在时间复杂度上有什么区别 2. hashmap在java的底层是怎么实现的 3. 红黑树的实现原理 4. 红黑树的特点 5. 为什么红黑树比链表查询速度快 6. 在java中字符串的操作方式有几种 7. Stri…

XSS攻击(反射型、存储型、dom型、PDF、SWF、SVG)

一、XSS攻击是什么 XSS是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。 二、XSS分类 反射型XSS 常见情况是…

C复习(主要复习)

指针和数组 指针数组是一个数组,数组的每个元素都是指针。它适用于需要存储多个指针的场景,如字符串数组。数组指针是一个指针,指向一个数组。它适用于需要传递整个数组给函数或处理多维数组的场景。 函数指针:函数指针的定义需要…

Ubuntu24.04搭建ESP8266_RTOS_SDK V3.4开发环境

【本文发布于https://blog.csdn.net/Stack_/article/details/147194686,未经允许不得转载,转载须注明出处】 需要有Linux使用基础,自行准备 1、VM17 Pro (自行搜索教程安装) 2、ubuntu-24.04-desktop-amd64 &#xff0…

matlab求和∑函数方程编程?

matlab求和∑函数方程编程? 一 题目:求下列函数方程式的和 二:代码如下: >> sum_result 0; % 初始化求和变量 for x 1:10 % 设…

基于Java+MySQL实现的(Web)科研资讯推送系统

科研资讯推送系统 技术选型 核心框架:SpringBoot 数据库层:springdatajpa 安全框架:Shiro 数据库连接池:Druid 缓存:Ehcache 部署 阿里云学生机:ecs.n4.small Tomcat:9.0 JDK:1.8 数据库:MySQL8.0 操作系统:CentOS…

PHP弱类型hash比较缺陷

目录 0x00 漏洞原因 0x01 利用方法 0x02 [BJDCTF2020]Easy MD5 1 利用md5($password,true)实现SQL注入 PHP md5弱类型比较 数组绕过 0x00 漏洞原因 1、在进行比较的时候,会先将两边的变量类型转化成相同的,再进行比较 2、0e在比较的时候会将其认…

​asm汇编源代码之-汉字点阵字库显示程序源代码下载​

汉字点阵字库显示程序 源代码下载 文本模式下显示16x16点阵汉字库内容的程序(标准16x16字库需要使用CHGHZK转换过后才能使用本程序正常显示) 本程序需要调用file.asm和string.asm中的子程序,所以连接时需要把它们连接进来,如下 C:\> tlink showhzk file string 调用参…

Excel 中让表格内容自适应列宽和行高

Excel 中让表格内容自适应列宽和行高 目录 Excel 中让表格内容自适应列宽和行高自适应列宽自适应行高在Excel中让表格内容自适应列宽和行高,可参考以下操作: 自适应列宽 方法一:手动调整 选中需要调整列宽的列(如果是整个表格,可点击表格左上角行号和列号交叉处的三角形全…

Java使用ANTLR4对Lua脚本语法校验

文章目录 什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Grammar文件maven配置生成Lexer Parser Listener Visitor代码新建实体类Lua语法遍历器语法错误监听器单元测试 参考 什么是ANTLR? https://www.antlr.org/ ANTLR (ANothe…

vue3.2 + element-plus 实现跟随input输入框的弹框,弹框里可以分组或tab形式显示选项

效果 基础用法&#xff08;分组选项&#xff09; 高级用法&#xff08;带Tab栏&#xff09; <!-- 弹窗跟随通用组件 SmartSelector.vue --> <!-- 弹窗跟随通用组件 --> <template><div class"smart-selector-container"><el-popove…

Windows VsCode Terminal窗口使用Linux命令

背景描述&#xff1a; 平时开发环境以Linux系统为主&#xff0c;有时又需要使用Windows系统下开发环境&#xff0c;为了能像Linux系统那样用Windows VsCode&#xff0c;Terminal命令行是必不可少内容。 注&#xff1a;Windows11 VsCode 1.99.2 下面介绍&#xff0c;如何在V…

负载均衡的实现方式有哪些?

负载均衡实现方式常见的有: 软件负载均衡、硬件负载均衡、DNS负载均衡 扩展 二层负载均衡&#xff1a;在数据链路层&#xff0c;基于MAC地址进行流量分发&#xff0c;较少见于实际应用中 三层负载均衡&#xff1a;在网络层&#xff0c;基于IP地址来分配流量&#xff0c;例如某…

LWIP学习笔记

TCP/ip协议结构分层 传输层简记 TCP&#xff1a;可靠性强&#xff0c;有重传机制 UDP&#xff1a;单传机制&#xff0c;不可靠 UDP在ip层分片 TCP在传输层分包 应用层传输层网络层&#xff0c;构成LWIP内核程序&#xff1a; 链路层&#xff1b;由mac内核STM芯片的片上外设…