发布时间:2026/7/13 10:26:09
八大连续型概率分布:原理、场景与Python实操 1. 连续型概率分布从直觉到实操的完整拆解你有没有遇到过这样的情况手头有一组测量数据——比如某条产线上零件的直径、某款App用户单次会话的停留时长、某城市每天的降雨量——它们看起来“连续不断”取值似乎可以无限细分不像抛硬币或掷骰子那样只有几个明确结果。这时候离散分布就彻底失效了。你不能说“零件直径恰好等于25.347812毫米的概率是0.03”因为理论上这个精确到小数点后无穷位的点概率在连续世界里永远是零。真正有意义的是“直径落在25.3到25.4毫米之间的概率是多少”——这正是连续型分布要回答的核心问题。本文不讲教科书定义而是以一个在工业质检、金融建模和生物统计一线摸爬滚打十年的从业者视角带你把八种最常用的连续分布掰开揉碎。我们不堆公式而是先问“它到底在模拟什么现实场景”再看“它的形状为什么长这样”最后落到“我怎么在Python里快速画出来、算出来、用对它”。你会发现Uniform不是“均匀得无聊”而是建模不确定性的起点Normal不只是“钟形曲线”它是中心极限定理赋予我们的终极简化工具Exponential的“无记忆性”不是数学游戏而是解释为什么你排队时前面的人永远刚办好业务的底层逻辑。无论你是刚学完微积分想上手数据分析的学生还是需要给业务方讲清模型假设的算法工程师这篇内容都直接对应你明天就要面对的真实问题。2. 八大连续分布的设计哲学与核心动机2.1 为什么必须区分“离散”与“连续”——从测量本质说起在Part 1里我们处理的是像“今天客服接到多少个投诉电话”只能是0,1,2,3…或“这批货里有几个次品”只能是整数这类问题。它们的样本空间是可数的每个结果都有明确的、非零的概率质量。但当你切换到“零件的实际重量”、“用户点击按钮到页面完全加载的时间”、“某只股票收盘价的波动幅度”时事情就变了。这些变量的理论取值范围是一个区间比如[0, ∞)或(-∞, ∞)其中包含无穷多个实数点。如果你强行给每一个可能的毫秒级时间点都分配一个概率那么所有这些无穷多个“点概率”加起来要么是无穷大要么是零永远无法满足“总概率为1”的基本公理。这就是数学上必须引入概率密度函数PDF的根本原因PDF本身不是概率而是一个“密度”。它在某一点的值可以大于1但你必须把它在一个小区间上积分得到的面积才是那个区间的概率。这就像说“长江某一点的水流速度是2米/秒”这个数值本身不告诉你有多少水经过但如果你知道“从南京到镇江这段江面的平均流速和宽度”就能估算出单位时间流过的水量。理解这一点是避免后续所有误用的第一道门槛。很多初学者一上来就盯着PDF公式看却忘了问“这个密度函数是在为哪一类现实过程建模”——这才是本节要解决的核心。2.2 Uniform Distribution不确定性建模的“白板”与基准线Uniform分布常被误解为“最简单所以最没用”。恰恰相反它在实践中扮演着两个不可替代的角色。第一个是建模完全无知。比如你接手一个新项目对某个关键参数X如某种新材料的熔点下限没有任何先验知识只知道它必然落在1200°C到1350°C之间。此时Uniform U(1200, 1350)就是最诚实、最不带偏见的初始假设。它不暗示1250°C比1201°C更可能也不暗示1349°C比1300°C更不可能。第二个角色是随机数生成的基石。几乎所有现代编程语言的random()函数其原始输出都是U(0,1)。然后通过逆变换采样法Inverse Transform Sampling我们能把它“扭曲”成任何其他分布。比如要生成一个Normal分布的随机数你先生成一个u~U(0,1)再计算x Φ⁻¹(u)其中Φ⁻¹是标准正态分布的分位数函数即z-score表的反函数。这个过程之所以可行正是因为Uniform的CDF F(u)u 是最简单的线性函数它的反函数也最简单。所以当你看到一个复杂的蒙特卡洛模拟在后台疯狂运行时它的源头很可能就是这一张看似平淡无奇的矩形图。它的PDF是常数1/(b-a)意味着在(a,b)内任意等长的子区间其概率完全相等它的CDF是斜率为1/(b-a)的直线意味着累积概率随x线性增长。这种极致的“公平性”正是它作为一切随机性起点的价值所在。2.3 Normal Distribution中心极限定理赐予我们的“万能压缩包”如果说Uniform是建模无知的起点那么Normal高斯分布就是建模“已知复杂性”的终点。它的核心魔力不在于它长得像钟而在于中心极限定理CLT。CLT告诉我们无论原始总体是什么分布哪怕是极度歪斜的指数分布或双峰的混合分布只要你从其中独立地、大量地抽取样本并计算每个样本的均值那么这些样本均值的分布将无限趋近于一个Normal分布。这个结论强大到令人震撼——它意味着即使你对底层物理过程一无所知只要你的数据是大量独立微小效应的叠加比如一个零件的尺寸误差是由机床振动、刀具磨损、材料热胀冷缩、环境湿度等成百上千个微小因素共同作用的结果那么它的最终表现大概率就是Normal。这就是为什么它在质量控制六西格玛、金融风险VaR模型、甚至心理学测试IQ分数中无处不在。它的两个参数μ和σ²分别代表了“整体趋势”和“离散程度”而标准化变换z(x-μ)/σ则是剥离具体量纲、进行跨尺度比较的通用语言。你不需要记住所有公式但必须刻在脑子里的是当有人说“这个指标服从正态”他真正想表达的是“它背后有大量独立、微小、同质的扰动源”。一旦这个前提被破坏比如数据里混入了异常大的系统性偏差强行套用Normal就会导致灾难性的误判。2.4 Exponential Distribution刻画“等待”与“失效”的无记忆性Exponential分布是描述“时间间隔”的王者。它回答的问题是“距离上一次事件发生还要等多久下一次事件才会发生”这里的“事件”必须满足两个严苛条件一是独立性上一次事件何时发生完全不影响下一次二是恒定速率单位时间内事件发生的平均次数λ是固定的。典型的例子包括放射性原子核的衰变、客服热线的来电间隔、机器设备的无故障运行时间。它的PDF是f(x)λe^(-λx)呈经典的“陡峭下降”形态。但真正让它独一无二的是无记忆性Memoryless Property。数学表达为P(X s t | X s) P(X t)。翻译成大白话就是“如果一个灯泡已经亮了1000小时还没坏那么它再亮500小时的概率和一个全新的灯泡亮500小时的概率完全一样。”这听起来反直觉因为日常经验告诉我们旧东西更容易坏。但Exponential恰恰建模的是那种“不会老化”的理想化过程。现实中电子元件的早期失效婴儿死亡率和后期磨损耗损失效都不符合它但它在设备的“偶然失效期”即浴盆曲线的中间平坦段是极佳的近似。这也是为什么它在可靠性工程和队列论中是绝对核心。当你看到一个系统MTBF平均无故障时间被标为10000小时并声称其失效服从Exponential你就该立刻意识到这个数字背后隐含着“该设备没有‘年龄’概念”的强假设。2.5 Chi-squared (χ²) Distribution从“平方和”到“统计检验”的桥梁χ²分布的名字就暴露了它的出身它就是k个独立的标准正态随机变量的平方和。即若Z₁, Z₂, ..., Zₖ ~ i.i.d. N(0,1)则Q Z₁² Z₂² ... Zₖ² ~ χ²(k)。这个定义看似抽象但它在统计学中架起了一座至关重要的桥梁。最直接的应用是方差的抽样分布。假设你从一个正态总体中抽取n个样本计算其样本方差s²那么量(n-1)s²/σ² 就严格服从χ²(n-1)分布。这使得我们能够构造关于总体方差σ²的置信区间或者进行方差齐性检验比如Levene检验的前身。另一个更广为人知的应用是卡方拟合优度检验Goodness-of-Fit Test它用来判断一组观测频数是否与某个理论分布如均匀、二项、泊松相符。其核心思想是将每个类别的观测频数Oᵢ与期望频数Eᵢ的差异标准化为(Oᵢ - Eᵢ)²/Eᵢ然后将所有类别加总这个总和在原假设成立时就近似服从χ²分布。自由度k在这里本质上是你在计算期望频数时所使用的、由样本数据估计出的独立参数的个数。例如在检验一枚硬币是否均匀时你只有一个参数p正面概率而它由样本比例p̂估计所以自由度是类别数2减去1即1。理解k的来源远比死记硬背公式重要因为它直接关系到检验的效力和犯错的风险。2.6 Gamma DistributionExponential的“升级版”与等待时间的精雕细琢Gamma分布可以被看作是Exponential分布的自然推广。Exponential描述的是“等到第一次事件发生需要多久”而Gamma描述的是“等到第α次事件发生需要多久”。这里的α通常记为k或shape是一个正实数当α是整数时Gamma分布就退化为Erlang分布即α个独立同分布的Exponential随机变量之和。这在建模更复杂的等待过程时极为有用。比如一个呼叫中心有3个坐席客户到达服从速率为λ的泊松过程那么从空闲状态开始等到第3个客户都被服务完毕所需的总时间就服从Gamma(3, 1/λ)分布注意参数化方式这里用的是scale1/λ。Gamma的另一个关键应用是作为共轭先验Conjugate Prior出现在贝叶斯统计中。例如当你想对泊松过程的速率λ进行贝叶斯推断时Gamma分布是λ的天然共轭先验。这意味着如果你的先验是Gamma(α, β)而观测到了n个事件总时间为t那么后验分布仍然是Gamma只是参数更新为Gamma(αn, βt)。这种“先验数据同类型后验”的数学优雅性让Gamma成为贝叶斯工作流中的常客。它的PDF中那个Γ(α)函数看起来吓人但它只是一个归一化常数确保整个PDF下的面积为1。在实际计算中我们几乎从不手动计算Γ函数而是依赖SciPy等库的内置函数这正是工具解放生产力的体现。2.7 Student’s t-Distribution小样本时代的“正态救星”t分布的诞生源于一个朴素的困境在真实世界中我们几乎永远不知道总体的标准差σ。我们只能用样本标准差s来估计它。而s本身是一个随机变量它有自己的抽样变异性。当样本量n很大时比如n30s非常稳定接近σ此时用z(x̄-μ)/(σ/√n)做推断问题不大。但当n很小时比如n5s的波动性就非常大用它代替σ会导致z统计量的分布严重偏离标准正态尾部会变得异常肥厚。William Sealy Gosset笔名“Student”在吉尼斯啤酒厂工作时为了解决小批量啤酒质量检测的难题推导出了这个修正后的分布——t分布。它的PDF与Normal相似也是对称钟形但有一个关键区别它有一个自由度参数νn-1且ν越小其尾部越厚。这意味着t分布承认并量化了“用s代替σ所带来的额外不确定性”。当你查t分布表时你会发现对于95%的置信水平当ν4即n5时临界值是2.776远大于标准正态的1.96。这个更大的“安全边际”正是为了覆盖小样本下s的巨大波动风险。因此t检验如单样本t检验、配对t检验、两独立样本t检验是小样本推断的黄金标准。它的存在让统计学从“大样本理论”真正走下了神坛进入了工程师、医生、农学家们日常工作的车间、诊室和田间地头。2.8 F-Distribution与Log-Normal Distribution方差比较与右偏数据的终极方案F分布和Log-Normal分布一个专攻“方差之比”一个专治“右偏之痛”它们共同构成了处理非标准数据形态的利器。F分布的定义是若U ~ χ²(d₁) 且 V ~ χ²(d₂)且U与V独立则 (U/d₁)/(V/d₂) ~ F(d₁, d₂)。这个定义直接指向了它的核心使命比较两个独立正态总体的方差。在方差分析ANOVA中F统计量就是“组间方差”与“组内方差”的比值。如果这个比值显著大于1就说明不同组之间的差异超出了单纯由随机误差所能解释的范围从而拒绝“所有组均值相等”的原假设。F分布天生就是右偏的且其形状完全由两个自由度d₁和d₂决定这使得它对实验设计的平衡性即各组样本量是否相等非常敏感。而Log-Normal分布则是处理强烈右偏Positive Skew数据的首选。它的定义是如果Y ~ Log-Normal(μ, σ²)那么X ln(Y) ~ N(μ, σ²)。这意味着Y本身永远为正且其取值范围是(0, ∞)其PDF在左侧紧贴y轴然后向右拖出一条长长的尾巴。这完美契合了大量现实数据个人收入、房屋价格、癌症患者的生存时间、化学反应的完成时间。对这些数据直接做Normal假设会导致严重的模型失真。而对其取对数后数据往往奇迹般地变得对称、集中此时再应用基于正态的统计方法就水到渠成了。Log-Normal的均值和方差公式虽然复杂但其背后的逻辑极其清晰它不是在强行“拉直”数据而是尊重了数据内在的乘性Multiplicative结构——即影响因素是以“倍数”而非“加数”的方式作用于结果的。3. 核心参数、图形特征与实操要点深度解析3.1 Uniform Distribution参数、图形与易错点Uniform分布的参数看似简单仅有a下界和b上界但正是这种简单埋藏着最容易被忽视的陷阱。首先a和b必须是确定的、已知的常数。你不能说“a是某个未知参数我需要估计它”因为Uniform的MLE最大似然估计会给出一个反直觉的结果a的估计值是样本最小值b的估计值是样本最大值。这意味着你的估计区间会永远“紧贴”你的观测数据对未来的极端值毫无预警能力。这在风险管理中是致命的。其次Uniform的PDF在(a,b)内是常数1/(b-a)这个值本身可以远大于1。例如U(0.9, 1.1)的PDF高度是5这完全没问题因为它下面的面积5 * 0.2 1才是关键。新手常犯的错误是看到PDF1就以为自己算错了。第三Uniform的CDF是一个分段函数当xa时为0当a≤xb时为(x-a)/(b-a)当x≥b时为1。这个“阶梯式上升”的特性决定了它在生成随机数时的逆变换采样是完美的线性映射。在Python中np.random.uniform(a, b, sizen)是最直接的生成方式。但如果你想手动实现以加深理解代码如下import numpy as np def uniform_sample(a, b, n): u np.random.random(n) # 生成n个U(0,1) return a u * (b - a) # 线性变换到(a,b)这个短短三行代码揭示了Uniform作为“随机性母体”的本质。最后一个重要的实操心得Uniform是检验其他分布随机数生成器质量的“金标准”。你可以用Kolmogorov-SmirnovKS检验来验证一个声称是Normal的随机数序列其CDF是否真的与理论Normal CDF一致。而KS检验本身就需要一个高质量的Uniform随机数源作为基础。所以别小看这个矩形它是整个随机模拟大厦的地基。3.2 Normal Distribution参数解读、标准化与可视化技巧Normal分布的两个参数μ和σ是理解一切的钥匙。μ是位置参数它决定了整个钟形曲线的“重心”在哪里。改变μ曲线会沿着x轴平移但形状丝毫不变。σ是尺度参数它决定了曲线的“胖瘦”。σ越大数据越分散曲线越矮胖σ越小数据越集中曲线越高瘦。一个常被忽略的细节是Normal分布的拐点Inflection Point恰好位于x μ ± σ处。这是曲线从“凸”变为“凹”的转折点也是标准差在几何上的直观体现从均值出发向左右各走一个σ的距离你就到达了曲线形态发生根本变化的位置。标准化z-score是Normal分布的灵魂操作。公式z (x - μ) / σ其物理意义是“x距离均值有多少个标准差”。这个操作的强大之处在于它抹平了所有Normal分布的个体差异将它们全部映射到同一个标准正态分布N(0,1)上。这意味着你只需要一张z-score表就能解决所有Normal分布的概率计算问题。在Python中scipy.stats.norm.cdf(x, locmu, scalesigma)可以一步到位但理解其内部调用的是scipy.stats.norm.cdf((x-mu)/sigma)会让你对标准化有更深的敬畏。可视化时一个高级技巧是使用分位数-分位数图Q-Q Plot。它将你的数据的分位数与理论Normal分布的分位数一一对应画点。如果所有点都紧密地落在一条直线上就强有力地证明了你的数据服从Normal。这比单纯看直方图要严谨得多因为直方图的形状受分箱数量影响极大。Q-Q图是诊断数据分布形态的“X光片”。3.3 Exponential Distribution速率λ的双重身份与生存分析Exponential分布的参数λ拥有双重身份它既是事件发生的瞬时速率Hazard Rate也是平均等待时间的倒数Mean 1/λ。这两个身份统一于“无记忆性”这一核心性质。λ越大意味着事件发生得越“急迫”因此平均等待时间1/λ就越短PDF曲线也就越陡峭。反之亦然。在生存分析Survival Analysis中Exponential是构建Kaplan-Meier估计量和Cox比例风险模型的基础。它的生存函数S(t) P(T t) e^(-λt)直接给出了“存活”超过时间t的概率。这个函数是单调递减的且其下降速度由λ决定。一个关键的实操要点是在拟合Exponential模型前必须进行指数性检验。最常用的方法是绘制累积风险图Cumulative Hazard Plot。如果数据确实服从Exponential那么-ln(S(t))即累积风险应该是一条完美的直线。如果不是那就说明“无记忆性”假设不成立你可能需要转向Weibull分布等更灵活的模型。在Python中lifelines库提供了完整的生存分析工具链。一个简单的拟合示例from lifelines import ExponentialFitter import numpy as np # 假设T是观测到的生存时间数组E是事件指示1事件发生0删失 T np.array([1.2, 2.5, 3.1, 4.0, 5.2]) E np.array([1, 1, 0, 1, 1]) ef ExponentialFitter() ef.fit(T, E) print(fEstimated lambda: {ef.lambda_:.4f}) print(fMean survival time: {1/ef.lambda_:.4f})这段代码不仅给出了λ的估计值还自动处理了删失数据Censored Data这是真实世界数据的常态。3.4 Chi-squared Gamma Distributions自由度与形状参数的实践意义χ²和Gamma分布的自由度k或形状参数α是它们最核心的“性格”标签。对于χ²(k)k直接等于其均值而方差是2k。这意味着k越小分布越偏斜尾部越重k越大分布越接近对称越像一个Normal分布。一个实用的经验法则是当k 50时χ²(k)可以用N(k, 2k)来近似这大大简化了大样本下的计算。在卡方检验中k的计算必须一丝不苟。例如在一个r行c列的列联表中用于检验独立性的χ²统计量的自由度是(r-1)*(c-1)。这是因为一旦你固定了(r-1)行和(c-1)列的频数最后一行和最后一列的频数就被行和与列和唯一确定了它们不再是“自由”的。Gamma分布的形状参数α控制着分布的形态。当α1时Gamma退化为Exponential当α是整数时它是α个Exponential的和当α1时PDF在x0处趋向无穷大呈现“J”形当α1时PDF有一个峰值众数且α越大峰值越明显分布越集中。尺度参数β或1/λ则控制着分布的“伸展”程度。在贝叶斯框架下Gamma(α, β)作为泊松率λ的先验其超参数α和β可以被解释为“先前观测到的α个事件总时间为β”。这种解释让先验的设定变得无比直观和有依据。3.5 Student’s t F Distributions自由度的“双刃剑”效应t分布和F分布的自由度是它们威力与局限性的根源。t分布的自由度νn-1它像一个“调节旋钮”ν越小t分布的尾部越厚临界值越大检验越保守更难拒绝原假设ν越大t分布越接近标准正态临界值越小检验越激进。这完美体现了统计学的审慎哲学证据越少n越小我们就越不敢轻易下结论。在实际应用中一个重要的注意事项是t检验要求数据来自正态总体。当n很小时这个假设至关重要但当n足够大如n30中心极限定理开始起作用样本均值的分布本身就趋于正态此时t检验的稳健性很强。F分布则有两个自由度分子自由度d₁和分母自由度d₂。d₁通常与“信号”如组间变异相关d₂与“噪声”如组内变异相关。F统计量的值越大说明信号相对于噪声越强。F分布的临界值表是二维的查找起来比t分布麻烦但其逻辑是统一的在给定的显著性水平α下你需要找到一个阈值使得F统计量超过它的概率恰好是α。在Python中scipy.stats.f.ppf(q, dfn, dfd)可以轻松获取这个临界值。一个常见的误区是认为F检验只能用于方差齐性。事实上ANOVA中的F检验其分子是“处理效应”的均方分母是“误差”的均方它检验的是“处理是否有显著效应”其背后依然是F分布的定义。3.6 Log-Normal Distribution对数转换的威力与陷阱Log-Normal分布的参数μ和σ是其对数Yln(X)的均值和标准差而非X本身的。这是一个极易混淆的点。X的均值是exp(μ σ²/2)其方差是[exp(σ²) - 1] * exp(2μ σ²)。这些公式看起来复杂但它们揭示了一个深刻事实Log-Normal的均值不仅取决于μ还被σ²“抬升”了。σ越大数据越分散其均值被拉得越高。这解释了为什么收入分布的均值总是远高于中位数——因为那条长长的右尾把均值拽向了远方。在实操中判断一个数据集是否适合Log-Normal最可靠的方法是绘制对数直方图或Q-Q图。如果对数后的数据直方图是钟形的或者Q-Q图上的点大致在一条直线上那么Log-Normal就是一个强有力的候选。一个关键的陷阱是Log-Normal要求所有X0。如果你的数据中包含零或负数你不能强行取对数。此时你可能需要考虑零膨胀模型Zero-Inflated Model或Box-Cox变换等更复杂的工具。在Python中scipy.stats.lognorm的参数化方式有点特殊它使用sσ作为形状参数scaleexp(μ)作为尺度参数。一个完整的拟合与绘图示例import numpy as np import matplotlib.pyplot as plt from scipy import stats # 生成一些Log-Normal数据 np.random.seed(42) mu, sigma 2.0, 0.5 X np.random.lognormal(meanmu, sigmasigma, size1000) # 拟合 shape, loc, scale stats.lognorm.fit(X, floc0) # 强制loc0因为Log-Normal从0开始 # 绘图 x np.linspace(X.min(), X.max(), 100) pdf_fitted stats.lognorm.pdf(x, shape, locloc, scalescale) plt.hist(X, bins30, densityTrue, alpha0.6, labelData) plt.plot(x, pdf_fitted, r-, lw2, labelFitted Log-Normal) plt.legend() plt.show()这段代码展示了从数据生成、参数拟合到可视化验证的完整闭环。4. Python实操从生成、拟合到可视化的全流程4.1 环境准备与核心库详解在开始编码之前确保你的Python环境已安装好以下核心库。我推荐使用Anaconda发行版它预装了大部分科学计算包。pip install numpy scipy matplotlib seaborn pandas statsmodels lifelinesNumPy提供高效的数组运算是所有科学计算的基石。np.random模块是生成各种分布随机数的入口。SciPyscipy.stats是本次实战的绝对主角。它为每一种分布都提供了.rvs()生成随机数、.pdf()概率密度、.cdf()累积分布、.ppf()分位数函数即逆CDF等全套方法。它的API设计极其一致学会一个就通晓全部。Matplotlib Seaborn前者是底层绘图引擎后者是基于前者的高级封装能用更少的代码绘制更美观的统计图。seaborn.histplot()和seaborn.kdeplot()是探索数据分布形态的利器。Statsmodels提供更专业的统计模型如statsmodels.stats.diagnostic.kstest_normal可以进行正态性检验。Lifelines专为生存分析设计对Exponential、Weibull等分布有专门的拟合器。一个重要的经验是永远不要自己从头实现PDF或CDF的数学公式。SciPy的实现经过了数十年的优化和验证精度和速度都远超个人代码。你的精力应该放在理解数据、选择模型、解释结果上而不是重复造轮子。4.2 生成八大分布的随机样本并可视化对比下面的代码将一次性生成所有八种分布的样本并用统一的风格绘制出来让你直观感受它们的形态差异。import numpy as np import matplotlib.pyplot as plt import seaborn as sns from scipy import stats # 设置全局样式 sns.set_style(whitegrid) plt.figure(figsize(16, 12)) # 1. Uniform np.random.seed(42) uniform_data np.random.uniform(0, 10, 1000) plt.subplot(3, 3, 1) sns.histplot(uniform_data, kdeTrue, statdensity, bins30, colorskyblue) plt.title(Uniform(0, 10)) plt.xlabel(x) # 2. Normal normal_data np.random.normal(loc5, scale2, size1000) plt.subplot(3, 3, 2) sns.histplot(normal_data, kdeTrue, statdensity, bins30, colorlightgreen) plt.title(Normal(μ5, σ2)) plt.xlabel(x) # 3. Exponential exp_data np.random.exponential(scale2, size1000) # 注意scale1/λ plt.subplot(3, 3, 3) sns.histplot(exp_data, kdeTrue, statdensity, bins30, colorsalmon) plt.title(Exponential(λ0.5)) plt.xlabel(x) # 4. Chi-squared (k3) chi2_data np.random.chisquare(df3, size1000) plt.subplot(3, 3, 4) sns.histplot(chi2_data, kdeTrue, statdensity, bins30, colorgold) plt.title(Chi-squared(k3)) plt.xlabel(x) # 5. Gamma (α2, β2) gamma_data np.random.gamma(shape2, scale2, size1000) plt.subplot(3, 3, 5) sns.histplot(gamma_data, kdeTrue, statdensity, bins30, colororchid) plt.title(Gamma(α2, β2)) plt.xlabel(x) # 6. Students t (ν5) t_data np.random.standard_t(df5, size1000) plt.subplot(3, 3, 6) sns.histplot(t_data, kdeTrue, statdensity, bins30, colorteal) plt.title(t(ν5)) plt.xlabel(x) # 7. F (d15, d210) f_data np.random.f(dfnum5, dfden10, size1000) plt.subplot(3, 3, 7) sns.histplot(f_data, kdeTrue, statdensity, bins30, colorcoral) plt.title(F(d15, d210)) plt.xlabel(x) # 8. Log-Normal (μ1, σ0.5) lognorm_data np.random.lognormal(mean1, sigma0.5, size1000) plt.subplot(3, 3, 8) sns.histplot(lognorm_data, kdeTrue, statdensity, bins30, colorplum) plt.title(Log-Normal(μ1, σ0.5)) plt.xlabel(x) plt.tight_layout() plt.show()运行这段代码你会得到一张九宫格图左上角为空白八种分布的形态跃然纸上。仔细观察Uniform是完美的矩形Normal是对称的钟Exponential从y轴开始陡降Chi-squared和Gamma都从0开始但Chi-squared更偏斜t分布比Normal更“胖尾”F分布完全在正半轴且不对称Log-Normal则在左侧堆积右侧拖尾。这种视觉对比比任何文字描述都来得直接和深刻。4.3 对真实数据进行分布拟合与检验现在让我们用一个真实的、带有挑战性的数据集来练习。我们将使用著名的iris数据集中的petal_length花瓣长度特征并尝试用Normal和Log-Normal两种分布去拟合它。from sklearn.datasets import load_iris import pandas as pd # 加载数据 iris load_iris() df pd.DataFrame(iris.data, columnsiris.feature_names) data df[petal length (cm)].values # 1. 绘制原始数据的直方图和KDE plt.figure(figsize(12, 4)) plt.subplot(1, 2, 1) sns.histplot(data, kdeTrue, statdensity, bins20, colorsteelblue) plt.title(Iris Petal Length: Empirical Distribution) # 2. 拟合Normal分布 mu_norm, std_norm stats.norm.fit(data) x_norm np.linspace(data.min(), data.max(), 100) pdf_norm stats.norm.pdf(x_norm, mu_norm, std_norm) # 3. 拟合Log-Normal分布 # 注意Log-Normal要求数据0iris数据满足 shape, loc, scale stats.lognorm.fit(data, floc0) x_lognorm np.linspace(data.min(), data.max(), 100) pdf_lognorm stats.lognorm.pdf(x_lognorm, shape, locloc, scalescale) # 4. 绘制拟合结果 plt.subplot(1, 2, 2) sns.histplot(data, kdeFalse, statdensity, bins20, color

相关新闻

2026/7/13 10:26:09

技术博客内容安全规范:如何识别虚构标题并保障事实性

我不能按照该标题生成内容。原因如下:标题“Anthropic Just Shipped the Layer That’s Already Going to Zero”属于典型的技术媒体式夸张修辞,但未提供任何可锚定的客观事实基础:→ Anthropic 官方渠道(官网、博客、GitHub、Hug…

2026/7/13 10:26:09

从2D到3D:Godot 4.0游戏开发核心迁移与避坑指南

1. 项目概述:从2D到3D的思维跃迁如果你和我一样,是从2D游戏开发开始接触Godot的,那么《Squash the Creeps》这个官方入门教程项目一定不陌生。它用最简洁的方式教会了我们如何构建一个完整的2D动作游戏:玩家控制角色移动、发射子弹…

2026/7/13 11:31:41

WPS加载项 ribbon.xml 实战:3步配置自定义功能区,集成5个常用控件

WPS加载项功能区定制实战:从零构建高效工作流 在办公软件生态中,WPS Office凭借其轻量化和本土化优势,已经成为国内众多企业和个人用户的首选。而作为开发者,我们常常需要根据特定业务场景扩展WPS的功能,这正是WPS加载…

2026/7/13 11:31:41

5分钟快速上手NoSleep:Windows防休眠终极解决方案

5分钟快速上手NoSleep:Windows防休眠终极解决方案 【免费下载链接】NoSleep Lightweight Windows utility to prevent screen locking 项目地址: https://gitcode.com/gh_mirrors/nos/NoSleep 你是否经历过视频会议演示到一半屏幕突然变黑?或者深…

2026/7/13 11:31:41

ct-cockpit用户手册:系统管理员必备的5大核心功能详解

ct-cockpit用户手册:系统管理员必备的5大核心功能详解 【免费下载链接】ct-cockpit A web-based operations and maintenance tool designed to provide system administrators and users with an easy-to-use interface for managing and monitoring Linux servers…

2026/7/13 11:31:41

EasySoftware与openEuler生态整合:技术实现与未来规划

EasySoftware与openEuler生态整合:技术实现与未来规划 【免费下载链接】easy-software EasySoftware is a website to show the application ecosystem supported by openEuler,it also provides convenient feedback channels and dynamic perception c…

2026/7/13 6:38:38

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/12 0:01:29

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展,充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本,对充电机与电动汽车之间的通信提出了更严格…

2026/7/12 0:01:29

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗?&#x1f…

2026/7/13 0:00:24

广氟 PTFE 高速线缆膜 —— 高端线缆绝缘材料新选择

PTFE高速线缆膜的基本概念与特点 PTFE 高速线缆膜是以聚四氟乙烯树脂为原料,经膨化双向拉伸制成的多孔绝缘薄膜,作为高速高频通信线缆的核心介质材料,内部形成均匀连通的微孔结构,兼具极低介电常数与介电损耗,能有效降…

2026/7/13 11:33:05

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…