当前位置:首页 > 文章列表 > 文章 > python教程 > Python statistics.kde 怎样按样本构造密度函数

Python statistics.kde 怎样按样本构造密度函数

来源:17golang原创 2026-10-31 06:10:10 0浏览 收藏

如果手里只有一组离散测量值,想观察它大致集中在哪些位置,可以用 Python 标准库的 statistics.kde 把样本转换成一个可调用的概率密度函数。它不会直接返回一张图,而是返回类似 pdf(x) 的函数;你再给它一组横坐标,就能得到对应的密度值。

官方地址:https://docs.python.org/3/library/statistics.html

kde(data, h, kernel='normal', cumulative=False) 的核心是样本、带宽 h 和核函数。h 越小越强调局部细节,越大越平滑;cumulative=True 时返回的是累计分布函数。

把样本变成可调用的密度函数

kde 的输入是一组数值样本和正向的平滑尺度 h。返回值本身是函数,所以适合与网格、表格或其他绘图工具组合。下面的例子只展示标准库的计算关系,未把图形库混进来:

from statistics import kde

# 样本应保持同一量纲;这里把它看成一组测量结果
samples = [1.2, 1.5, 1.7, 2.0, 2.1, 2.4, 2.8]

# h 控制平滑程度;返回值是可以反复调用的密度函数
pdf = kde(samples, h=0.35)

# 用等距横坐标取值,便于后续表格或绘图工具消费
x_grid = [1.0 + i * 0.2 for i in range(11)]
density = [pdf(x) for x in x_grid]

# 只输出坐标和密度,不把输出误认为原始样本频数
for x, y in zip(x_grid, density):
    print(f"{x:.1f}: {y:.6f}")

这里的 density 与样本列表不是一一对应的频数表,而是估计出的连续函数在指定位置的函数值。横坐标网格越密,得到的观察点越多,但不会改变 kde 本身的估计规则。

样本序列、statistics.kde 参数与 pdf 函数和密度值之间的静态关系结构图
图1:结构说明图,查看样本、kde 参数与可调用密度函数的关系。

带宽 h 决定局部细节和整体平滑

在 KDE 中,h 是最值得先调的参数。较小的 h 会让每个样本点附近的特征更突出,可能保留更多局部起伏;较大的 h 会把相邻样本的影响摊得更开,曲线更平滑,但过大时可能掩盖数据中的峰。

可以固定样本和横坐标,只比较不同带宽返回的函数:

from statistics import kde

samples = [10, 11, 11.5, 12, 18, 18.5, 19]
x = 12.0

# 同一位置比较两个带宽,观察局部细节与平滑程度的取舍
for h in (0.5, 2.0):
    pdf = kde(samples, h=h, kernel="normal")
    print(f"h={h}: density({x})={pdf(x):.6f}")

这个比较只能说明参数带来的形态差异,不能单凭某一个点的密度值判断模型“更准确”。实际使用时应结合样本量、测量噪声和下游任务选择 h,并保持比较时的样本与横坐标一致。

kernel 与 cumulative 参数分别改变什么

kernel 决定每个样本点对附近位置如何分配权重。官方文档列出了 normal、logistic、sigmoid 等会影响所有样本位置的核,也列出了 uniform、triangular、parabolic、quartic、triweight 和 cosine 等只在带宽范围内产生影响的核。通常先固定一个合适的 h,再有目的地比较核函数,避免同时改动两个变量。

如果需要的是“截至某个 x 的累计比例”,可把返回语义切换为 CDF:

from statistics import kde

samples = [2.0, 2.5, 3.0, 3.2, 4.1, 4.8]

# cumulative=True 返回累计分布函数,而不是密度函数
cdf = kde(samples, h=0.4, cumulative=True)

# 这些值用于回答“样本分布估计中有多少落在 x 左侧”
for x in (2.5, 3.0, 4.0):
    print(f"P(X 

因此,PDF 更适合观察分布形状,CDF 更适合读取某个阈值左侧的累计概率。两者都来自同一组样本和带宽,但不能把 CDF 的值当成某个点的密度。

带宽 h、核函数、PDF、CDF 和空输入异常之间的静态依赖结构图
图2:结构说明图,查看带宽、核函数与 PDF/CDF 返回形式的边界。

空输入、类型和版本边界

空数据会触发 StatisticsError,所以在接收外部数据时应先决定“空批次是跳过、补采样还是报错”,不要让它在函数调用深处才暴露。statistics 文档还说明,标准库统计函数通常支持 int、float、Decimal 和 Fraction;混合类型的行为不应依赖,输入最好先统一成同一种数值类型。

kde 是 Python 3.13 加入的能力。如果部署环境低于这个版本,不能只把导入语句复制过去就期待标准库存在;应先确认运行时版本,再决定升级 Python 或使用项目允许的第三方统计方案。本文不把第三方库的接口与 statistics.kde 混用。

常见问题

h 越小是不是一定越好?

不是。小带宽能保留更多局部变化,也更容易把噪声当成结构;大带宽更平滑,也可能抹掉窄峰。应在固定数据和下游目标的前提下比较,而不是只追求曲线细节。

kde 返回的是数组吗?

不是,它返回一个可调用对象。需要数组时,先准备自己的 x_grid,再逐点调用返回函数收集结果。

什么时候用 cumulative=True?

当问题是“估计有多少样本不超过某个阈值”时使用;如果问题是观察分布峰值和形状,保留默认的 PDF 语义更合适。

小结:先把样本统一成数值序列,再用 kde 得到可调用函数;优先理解 h 对平滑程度的影响,最后根据问题选择普通密度或累计分布。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Go go-mp3 怎样从可定位输入跳到PCM字节位置Go go-mp3 怎样从可定位输入跳到PCM字节位置
上一篇
Go go-mp3 怎样从可定位输入跳到PCM字节位置
Linux lsirq 怎样筛选指定中断编号
下一篇
Linux lsirq 怎样筛选指定中断编号
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    804次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    795次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    883次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    853次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    683次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码