当前位置: 首页 > article >正文

别再傻傻分不清了!用Python和R语言代码实例,5分钟搞懂PDF和CDF的区别

别再傻傻分不清了用Python和R语言代码实例5分钟搞懂PDF和CDF的区别第一次接触概率密度函数PDF和累积分布函数CDF时很多人都会被这两个看似相似实则完全不同的概念搞得晕头转向。作为一名经常需要处理数据分布问题的分析师我完全理解这种困惑——毕竟教科书上那些晦涩的数学定义和积分符号确实不如几行代码和直观的图表来得直接有效。今天我们就用Python和R这两种最流行的数据分析语言通过实际代码和可视化图形帮你彻底理清PDF和CDF的区别与联系。无论你是机器学习初学者还是需要快速回顾的数据分析师这篇文章提供的代码片段都能直接复制使用让你在实践中真正掌握这两个核心概念。1. 基础概念速览从生活实例理解PDF与CDF在深入代码之前我们先花一分钟建立直观理解。想象你正在测量一群人的身高PDF回答的问题是身高正好是170cm的概率有多大对于连续变量这个概率实际上是0因为可能是170.0001cm或169.9999cm所以PDF值表示的是概率密度而非具体概率CDF回答的问题是身高不超过170cm的概率有多大这个概率是有实际意义的比如可能是0.3即30%的人不超过170cm关键区别记忆法PDF是点的概率密度像显微镜看一个点CDF是累积到某点的概率像从最矮累计到某个高度小技巧在离散分布如骰子中PDF可以直接表示具体值的概率而连续分布中PDF需要积分才能得到概率。2. Python实战用Matplotlib可视化正态分布的PDF与CDF让我们用Python中最常用的数据可视化库Matplotlib绘制标准正态分布均值为0标准差为1的PDF和CDF曲线。2.1 环境准备与数据生成首先安装必要的库如果尚未安装pip install numpy matplotlib scipy然后生成标准正态分布的数据点import numpy as np from scipy.stats import norm import matplotlib.pyplot as plt # 生成-4到4之间等间距的1000个点 x np.linspace(-4, 4, 1000) # 计算每个点的PDF和CDF值 pdf norm.pdf(x) # 标准正态分布的PDF cdf norm.cdf(x) # 标准正态分布的CDF2.2 绘制对比图形现在让我们把PDF和CDF画在同一坐标系中方便对比plt.figure(figsize(12, 5)) # 绘制PDF曲线 plt.subplot(1, 2, 1) plt.plot(x, pdf, b-, lw2, labelPDF) plt.fill_between(x, pdf, alpha0.2) plt.title(标准正态分布的概率密度函数(PDF)) plt.xlabel(值) plt.ylabel(概率密度) plt.legend() # 绘制CDF曲线 plt.subplot(1, 2, 2) plt.plot(x, cdf, r-, lw2, labelCDF) plt.title(标准正态分布的累积分布函数(CDF)) plt.xlabel(值) plt.ylabel(累积概率) plt.legend() plt.tight_layout() plt.show()运行结果解读左图PDF呈钟形曲线最高点在均值0处右图CDF是单调递增的S型曲线从0增长到1PDF曲线下的总面积等于1对应CDF最终达到12.3 关键关系演示PDF是CDF的导数数学上PDF是CDF的导数。让我们用数值计算验证这一点# 计算CDF的数值导数 cdf_derivative np.gradient(cdf, x) # 对比PDF和CDF的导数 plt.figure(figsize(8, 5)) plt.plot(x, pdf, b-, lw2, labelPDF) plt.plot(x, cdf_derivative, r--, lw2, labelCDF的数值导数) plt.title(PDF与CDF导数的关系验证) plt.legend() plt.show()你会看到两条曲线几乎完全重合直观验证了PDF是CDF的导数这一重要关系。3. R语言实现用ggplot2绘制指数分布的PDF与CDF对于习惯使用R语言的分析师我们再用ggplot2展示指数分布的PDF和CDF。指数分布常用于建模等待时间其PDF和CDF有更明显的不对称特性。3.1 准备数据首先安装并加载必要的包install.packages(ggplot2) # 如果尚未安装 library(ggplot2)生成指数分布的数据# 设置参数λ0.5 lambda - 0.5 x - seq(0, 10, length.out1000) # 计算PDF和CDF pdf - dexp(x, ratelambda) cdf - pexp(x, ratelambda) # 创建数据框 df - data.frame(x, pdf, cdf)3.2 绘制精美对比图使用ggplot2的分面(facet)功能并排显示library(tidyr) # 转换数据为长格式 df_long - gather(df, keyfunction_type, valuevalue, -x) # 绘制图形 ggplot(df_long, aes(xx, yvalue, colorfunction_type)) geom_line(size1) facet_wrap(~function_type, scalesfree_y, labelleras_labeller(c(pdfPDF (λ0.5), cdfCDF (λ0.5)))) labs(title指数分布的PDF与CDF对比, x值, y) theme_minimal() theme(legend.positionnone)图形特征观察PDF从λ值开始快速下降右偏明显CDF逐渐趋近于1曲线上升速度与PDF对应当x2时即1/λCDF约为0.6321-1/e3.3 计算特定概率的实际案例假设我们建模客户到达间隔时间单位分钟λ0.5表示平均每分钟到达0.5个客户# 计算1分钟内没有客户到达的概率 no_customer_in_1min - 1 - pexp(1, rate0.5) print(paste(1分钟内无客户到达的概率:, round(no_customer_in_1min, 4))) # 计算3分钟内至少一个客户到达的概率 at_least_one_in_3min - pexp(3, rate0.5) print(paste(3分钟内至少一个客户到达的概率:, round(at_least_one_in_3min, 4)))这种实际问题的计算展示了CDF的直接应用价值。4. 高级应用自定义分布与非参数估计在实际数据分析中我们经常需要处理非标准分布。这时可以使用核密度估计KDE来估计PDF并用经验分布函数估计CDF。4.1 Python实现经验分布给定一组样本数据我们可以这样估计CDFfrom statsmodels.distributions.empirical_distribution import ECDF # 生成随机样本 np.random.seed(42) samples np.random.normal(0, 1, 1000) # 计算经验CDF ecdf ECDF(samples) # 绘制图形 plt.figure(figsize(8, 5)) plt.step(ecdf.x, ecdf.y, wherepost, label经验CDF) plt.plot(x, cdf, r--, label理论CDF) plt.title(经验CDF与理论CDF对比) plt.legend() plt.show()4.2 R语言实现核密度估计在R中使用density()函数可以轻松获得PDF的核密度估计# 生成随机样本 set.seed(123) samples - rnorm(1000) # 核密度估计 kde - density(samples) # 绘制对比图 plot(kde, main核密度估计(PDF), lwd2) curve(dnorm(x), addTRUE, colred, lty2, lwd2) legend(topright, legendc(KDE估计, 真实PDF), colc(black, red), lty1:2)4.3 实际数据案例收入分布分析假设我们有一组收入数据单位万元incomes np.array([15, 22, 18, 35, 12, 28, ..., 42]) # 实际数据会更长 # 计算PDF和CDF kde gaussian_kde(incomes) x_vals np.linspace(min(incomes), max(incomes), 1000) pdf_vals kde(x_vals) cdf_vals np.array([np.mean(incomes x) for x in x_vals]) # 绘制双轴图 fig, ax1 plt.subplots(figsize(10, 6)) ax1.plot(x_vals, pdf_vals, b-, labelPDF (核密度估计)) ax1.set_xlabel(收入万元) ax1.set_ylabel(概率密度, colorb) ax2 ax1.twinx() ax2.plot(x_vals, cdf_vals, r-, labelCDF (经验分布)) ax2.set_ylabel(累积概率, colorr) plt.title(收入分布的PDF与CDF) plt.show()这种分析可以帮助我们回答诸如收入低于20万的比例是多少或前10%的收入门槛是多少等实际问题。5. 常见误区与实用技巧在长期使用PDF和CDF的过程中我总结了一些容易混淆的地方和实用技巧5.1 必须避免的三个常见错误混淆纵坐标含义PDF的纵轴是密度不是概率CDF的纵轴是概率0到1之间错误理解PDF值对于连续变量PDF在某点的值不是概率只有对区间积分才能得到概率忽视分布类型差异离散分布的PDF可以有非零概率点连续分布的PDF需要区间才有非零概率5.2 实用代码片段收藏Python快速查询表from scipy import stats # 正态分布查询 def normal_probability(mu, sigma, lower, upper): 计算正态分布在[lower, upper]区间内的概率 return stats.norm.cdf(upper, mu, sigma) - stats.norm.cdf(lower, mu, sigma) # 示例标准正态分布在[-1,1]的概率 print(normal_probability(0, 1, -1, 1)) # 约0.6826R语言快速查询# 快速计算分位数 quantile_info - function(distribution, p) { q - quantile(distribution, probsp) cat(sprintf(第%.0f百分位数: %.2f\n, p*100, q)) } # 示例找出收入分布的中位数 quantile_info(incomes, 0.5)5.3 可视化进阶技巧Python动态交互可视化from ipywidgets import interact def plot_distribution(mean0, std1): x np.linspace(mean-4*std, mean4*std, 1000) pdf norm.pdf(x, mean, std) cdf norm.cdf(x, mean, std) plt.figure(figsize(10, 4)) plt.subplot(1, 2, 1) plt.plot(x, pdf) plt.title(fPDF (μ{mean}, σ{std})) plt.subplot(1, 2, 2) plt.plot(x, cdf) plt.title(fCDF (μ{mean}, σ{std})) plt.tight_layout() plt.show() interact(plot_distribution, mean(-2, 2, 0.1), std(0.1, 2, 0.1))R Shiny交互应用library(shiny) ui - fluidPage( sliderInput(lambda, λ参数:, min0.1, max2, value0.5, step0.1), plotOutput(distPlot) ) server - function(input, output) { output$distPlot - renderPlot({ x - seq(0, 10, length.out1000) pdf - dexp(x, rateinput$lambda) cdf - pexp(x, rateinput$lambda) par(mfrowc(1, 2)) plot(x, pdf, typel, mainpaste(PDF (λ, input$lambda, ))) plot(x, cdf, typel, mainpaste(CDF (λ, input$lambda, ))) }) } shinyApp(ui, server)掌握这些代码后你可以轻松应对各种分布分析需求无论是学术研究还是商业分析场景。记住理解PDF和CDF的最好方式就是多动手实践——尝试修改代码中的参数观察图形变化很快你就能培养出对概率分布的直观感觉。

相关文章:

别再傻傻分不清了!用Python和R语言代码实例,5分钟搞懂PDF和CDF的区别

别再傻傻分不清了!用Python和R语言代码实例,5分钟搞懂PDF和CDF的区别 第一次接触概率密度函数(PDF)和累积分布函数(CDF)时,很多人都会被这两个看似相似实则完全不同的概念搞得晕头转向。作为一名…...

同济高数第七版第一章:函数与极限,我用Python可视化帮你彻底搞懂(附代码)

用Python可视化拆解高数核心概念:从函数到极限的编程实践 数学从来不是纸面上的抽象符号,而是理解世界的语言。当同济大学《高等数学》第七版中的函数曲线在Matplotlib中动态呈现,当ε-δ定义通过动画逐帧展示,理工科学生第一次感…...

从数据清洗到模型输入:深度解析PyTorch中cat、stack、split的工程化使用场景

从数据清洗到模型输入:深度解析PyTorch中cat、stack、split的工程化使用场景 在深度学习项目的实际开发中,数据处理流水线往往占据了整个项目70%以上的工作量。而Tensor的拼接与拆分操作,正是构建高效数据流的关键枢纽。不同于教科书式的API讲…...

高效实战:深度解析cri-dockerd架构与Kubernetes容器运行时最佳实践

高效实战:深度解析cri-dockerd架构与Kubernetes容器运行时最佳实践 【免费下载链接】cri-dockerd dockerd as a compliant Container Runtime Interface for Kubernetes 项目地址: https://gitcode.com/gh_mirrors/cr/cri-dockerd cri-dockerd是一个专业的容…...

孤舟笔记 并发篇一 面试总问AQS,它到底是个啥?凭什么它是并发编程的灵魂

文章目录一、先说结论:AQS 是一把"排队管理器"二、没有 AQS 的世界:每个锁都得自己造轮子三、AQS 的两大核心:state 和队列1. state——一把万能计数器2. CLH 队列——抢不到就排队四、AQS 怎么用?抢锁和释放就两步独占…...

【缺陷检测】基于k-means分割Otsu阈值检测水果和蔬菜缺陷(外部和内部缺陷)附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...

别再死记硬背了!用Python递归函数5分钟搞定二叉树前序/中序/后序转换(附PTA真题解析)

用Python递归思维破解二叉树遍历转换难题 第一次接触二叉树的前序、中序、后序遍历转换时,你是否也曾在各种递归调用和数组下标中迷失方向?作为数据结构学习路上的经典难题,这三种遍历方式的相互转换常常让初学者感到头疼。但今天我要分享的&…...

基于AI与事件驱动的临床安全网系统:从概念到2.5小时原型实践

1. 项目概述:一个在2.5小时内诞生的临床安全网原型 在初级医疗领域,全科医生(GP)每天都会重复成百上千次同一句医嘱:“如果情况没有好转,请回来复诊。”这句话在医学上被称为“安全网”(Safety …...

打卡信奥刷题(3190)用C++实现信奥题 P8085 [COCI 2011/2012 #4] KRIPTOGRAM

P8085 [COCI 2011/2012 #4] KRIPTOGRAM 题目描述 现有一段明文和一部分密文。明文和密文都由英文单词组成,且密文中的一个单词必然对应着明文中的一个单词。 求给出的密文在明文中可能出现的最早位置。 输入格式 第一行,若干个英文单词和一个 $&…...

KiCad设计开源Snapdragon 845载板:高性能边缘计算实战

1. 开源硬件新标杆:基于KiCad的Snapdragon 845载板设计解析 当大多数商用开发板还在使用闭源EDA工具时,Antmicro团队用KiCad完成了一次漂亮的示范——他们为Quectel SA800U-WF模块设计的开源载板,不仅完整释放了骁龙845处理器的潜力&#xff…...

iMX93 Pro工业开发套件:边缘AI与实时控制解析

1. VOIPAC iMX93 Pro工业级开发套件深度解析作为一名长期跟踪嵌入式开发板的技术博主,我最近详细研究了VOIPAC公司推出的iMX93 Pro工业级开发套件。这款基于NXP i.MX 93处理器的开发平台,在边缘AI和工业自动化领域展现出独特优势。与常见的树莓派或Jetso…...

终极指南:如何在Windows上直接安装安卓应用?APK安装器完整教程

终极指南:如何在Windows上直接安装安卓应用?APK安装器完整教程 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上直接运行手机应…...

如何永久保存你喜爱的B站视频:m4s-converter完整使用指南

如何永久保存你喜爱的B站视频:m4s-converter完整使用指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的情况…...

KingbaseES权限管理新姿势:用backup_pri插件给你的数据库备份加把“锁”

KingbaseES权限管理新姿势:用backup_pri插件给你的数据库备份加把“锁” 在数据安全日益受到重视的今天,数据库备份权限的精细化管理已成为企业级运维的关键环节。传统SUPERUSER权限的"一刀切"模式,不仅增加了误操作风险&#xff0…...

完整指南:如何用开源AIOps平台Keep终结告警疲劳,实现智能运维自动化

完整指南:如何用开源AIOps平台Keep终结告警疲劳,实现智能运维自动化 【免费下载链接】keep The open-source AIOps and alert management platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep 面对海量告警信息却无从下手&#xff…...

3种高效处理方案:如何优化AutoDock-Vina中金属离子电荷的技术实现

3种高效处理方案:如何优化AutoDock-Vina中金属离子电荷的技术实现 【免费下载链接】AutoDock-Vina AutoDock Vina 项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina 在分子对接研究中,金属离子配位体系的准确处理一直是计算药物发现的…...

TV Bro:为Android电视优化的开源网页浏览器解决方案

TV Bro:为Android电视优化的开源网页浏览器解决方案 【免费下载链接】tv-bro Simple web browser for android optimized to use with TV remote 项目地址: https://gitcode.com/gh_mirrors/tv/tv-bro 在大屏智能电视上浏览网页,往往面临操作不便…...

RRT路径规划实战:在ROS的Gazebo仿真中,让你的TurtleBot3绕过障碍物(Python实现)

RRT路径规划实战:在ROS的Gazebo仿真中,让你的TurtleBot3绕过障碍物(Python实现) 当你第一次看到TurtleBot3在Gazebo仿真环境中灵活穿梭于障碍物之间时,那种成就感绝对值得回味。作为机器人开发者,我们常常需…...

面试官最爱问的奇数分频器,我用Verilog从1/3占空比讲到5/18占空比(附完整代码)

从1/3到5/18占空比:奇数分频器的Verilog实现与面试突破指南 在数字IC设计的面试中,手撕代码环节往往是决定成败的关键。而奇数分频器,尤其是非50%占空比的奇数分频器,已经成为各大芯片公司笔试面试中的"必考题"。本文将…...

5分钟部署实战:构建企业级智能告警管理平台Keep

5分钟部署实战:构建企业级智能告警管理平台Keep 【免费下载链接】keep The open-source AIOps and alert management platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep Keep是一个开源的AI驱动告警管理平台,专为现代运维团队设计…...

详解C语言初阶之函数

.main函数第一个函数是我们的main函数,它无处不在,main函数被称之为我们的入口函数,程序在运行时,从main函数进入,从main函数出来,main函数其实就是整个程序功能的集合,所有的功能必须被包含在m…...

四路触控 + 震动马达 + 0.71/1.28 双目光屏 + 三轴姿态 + 四博小助手 AI 平台

四路触控 震动马达 0.71/1.28 双目光屏 三轴姿态 四博小助手 AI 平台1. 方案定位四博 AI 双目是一套面向 AI 音箱、AI 桌宠、儿童陪伴、学习终端、IP 潮玩、品牌智能客服、智能家居入口 的多模态 AI 硬件方案。方案以 ESP32-S3R8 16M Flash VB6824 语音前端 为核心&#…...

如何彻底解除Navicat试用期限制:macOS智能重置方案完整指南

如何彻底解除Navicat试用期限制:macOS智能重置方案完整指南 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在为…...

如何快速搭建Sunshine游戏串流服务器:打造个人专属云游戏平台

如何快速搭建Sunshine游戏串流服务器:打造个人专属云游戏平台 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine游戏串流服务器是一个完全开源的自托管游戏流媒体…...

深度解析:如何构建专业高效的完整网页截图解决方案

深度解析:如何构建专业高效的完整网页截图解决方案 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-extensio…...

别再只盯着L1了!手把手教你用GSS7000测试GPS L5信号(附PosApp实战避坑指南)

别再只盯着L1了!手把手教你用GSS7000测试GPS L5信号(附PosApp实战避坑指南) 当实验室里的GNSS接收机开始支持L5频段时,许多工程师的第一反应往往是"这个新频段该怎么测?"不同于成熟的L1测试流程,…...

别再只调参数了!手把手教你用示波器调试激光打标机的Q驱动板(附RF信号实测波形)

激光打标机Q驱动板实战调试指南:从示波器波形到故障定位 激光打标机在长时间运行后,Q驱动电路板故障是导致出光异常的高发问题。许多工程师习惯通过反复调整参数来解决问题,但这种方法往往治标不治本。本文将带你用示波器直击问题核心&#…...

字节大模型二面:你的 Agent 服务是如何保证高可用和稳健性的?

1. 题目分析 做过 Agent 开发的人都知道,让 Agent 在 Jupyter Notebook 里跑通一个 demo 和让它在生产环境里稳定服务是两个完全不同的事情。Demo 阶段你只需要关心能不能跑出正确结果,而到了生产环境,你还得关心LLM API 挂了怎么办、工具调…...

拆解5G基站内部通信:手把手图解CU与DU之间的F1协议(含F1-C/F1-U全流程)

拆解5G基站内部通信:手把手图解CU与DU之间的F1协议(含F1-C/F1-U全流程) 想象一下5G基站内部如同一个高度协同的快递分拣中心:中央枢纽(CU)负责全局调度,而分布在城市各处的配送站(DU…...

ENACT基准:评估视觉语言模型在具身认知中的关键能力

1. 项目背景与核心价值 具身认知(Embodied Cognition)正成为AI领域的前沿方向,它强调智能体通过与环境的物理交互来发展认知能力。而视觉语言模型(VLMs)作为多模态AI的代表,如何评估其在具身场景中的世界建…...