趋近智
置信区间是一个根据样本数据计算出的范围,很可能包含未知总体参数 (parameter)的真实数值,例如总体均值 ()。这里将介绍如何计算均值的这些区间。
置信区间的通用结构是:
对于总体均值 (),我们最好的点估计通常是样本均值 ()。误差范围衡量了围绕此点估计的不确定性,并取决于两个主要因素:数据的变异程度以及我们希望达到的置信程度。具体来说:
在构建完整区间之前,我们需要弄明白均值标准误 (SEM)。还记得中心极限定理吗?它告诉我们,样本均值的分布(抽样分布)趋于正态,以真实总体均值 为中心。这个抽样分布的标准差就是SEM。它衡量了我们预期样本均值在不同样本之间变化的程度。
如果我们知道真实的总体标准差 ,那么SEM是: 其中 是样本大小。
然而,我们通常不知道总体标准差 。因此,我们使用样本标准差 来估计它。在这种情况下,估计的SEM是: 这个估计的SEM是我们通常在实践中使用的。请注意,随着样本大小 的增加,SEM会减小。较大的样本可以更准确地估计总体均值。
具体计算方式取决于总体标准差 () 是已知还是未知。
"这种情况在机器学习 (machine learning)问题中不太常见,因为如果您知道总体标准差,那么您可能已经知道总体均值,从而不再需要一个区间。但是,这是一个更简单的起点。"
当 已知时,均值的抽样分布服从正态分布(这得益于中心极限定理,假设 足够大或总体呈正态分布)。我们使用标准正态 (Z) 分布来找到临界值。
置信区间公式为:
其中:
您可以使用标准正态分布表或 Python 的 SciPy 库找到 :
import scipy.stats as stats
import numpy as np
# 示例:找到 95% 置信区间的 Z 临界值
confidence_level = 0.95
alpha = 1 - confidence_level
# 使用 ppf(百分点函数,CDF 的逆)
# 我们需要分布中 1 - alpha/2 位于左侧的点
z_critical = stats.norm.ppf(1 - alpha / 2)
print(f"对于 {confidence_level*100}% 置信度,Z 临界值为: {z_critical:.3f}")
# 输出:对于 95.0% 置信度,Z 临界值为: 1.960
因此,对于已知 的 95% 置信区间,误差范围是 。
这是一种更常见的情况。我们不知道 ,因此我们使用样本标准差 来估计它。当我们在标准误计算中用 代替 ()时,统计量 的抽样分布就不再完全服从标准正态分布了,特别是对于较小的样本。
相反,它服从 t分布(也称为学生t分布)。t分布的形状与正态分布相似(钟形,关于零对称),但尾部更“厚重”。这意味着它考虑了用 估计 所带来的额外不确定性。
t分布由其自由度 (df) 来描述,自由度取决于样本大小。对于单个均值的置信区间,自由度是:
当 未知时,置信区间公式为:
其中:
随着样本大小 (以及自由度)的增加,t分布趋近于标准正态分布。
您可以使用 SciPy 找到 t 临界值:
import scipy.stats as stats
import numpy as np
# 示例:找到 n=25 的 95% 置信区间的 t 临界值
sample_size = 25
confidence_level = 0.95
alpha = 1 - confidence_level
degrees_freedom = sample_size - 1
# 使用 t 分布的 ppf
t_critical = stats.t.ppf(1 - alpha / 2, df=degrees_freedom)
print(f"对于 {confidence_level*100}% 置信度 (df={degrees_freedom}),t 临界值为: {t_critical:.3f}")
# 输出:对于 95.0% 置信度 (df=24),t 临界值为: 2.064
请注意,对于相同的置信水平,这个 t 临界值 (2.064) 略大于 Z 临界值 (1.960),这导致了更宽的区间,体现了增加的不确定性。
假设我们正在评估一个机器学习 (machine learning)模型的推理 (inference)时间(以毫秒为单位)。我们对 个不同的输入运行模型并记录时间。我们得到:
我们想计算真实平均推理时间 () 的 99% 置信区间。
import scipy.stats as stats
t_critical = stats.t.ppf(1 - 0.01 / 2, df=29)
print(f"t_临界值: {t_critical:.3f}")
# 输出:t_临界值: 2.756
解释: 根据我们的样本数据,我们有 99% 的把握认为该模型在所有可能输入上的真实平均推理时间在 78.96 毫秒和 91.04 毫秒之间。
SciPy 的 stats.t.interval 函数可以直接计算区间:
import scipy.stats as stats
import numpy as np
# 样本数据参数
sample_mean = 85
sample_std_dev = 12
sample_size = 30
confidence = 0.99
# 计算标准误
sem = sample_std_dev / np.sqrt(sample_size)
degrees_freedom = sample_size - 1
# 计算置信区间
ci = stats.t.interval(confidence, degrees_freedom, loc=sample_mean, scale=sem)
print(f"样本均值: {sample_mean}")
print(f"标准误: {sem:.3f}")
print(f"{confidence*100}% 置信区间: ({ci[0]:.3f}, {ci[1]:.3f})")
# 输出:
# 样本均值: 85
# 标准误: 2.191
# 99.0% 置信区间: (78.961, 91.039)
这证实了我们的手动计算结果。
置信区间的宽度(上限 - 下限)反映了我们估计的准确程度。两个主要因素影响此宽度:
此图显示了置信区间的相对宽度(与临界值 / sqrt(n) 成比例)如何随着样本大小的增加而快速减小。在任何给定样本大小下,更高的置信水平始终会产生更宽的区间。(注意:为简化起见,此处使用Z值,t值显示出类似的行为)。
计算置信区间提供了一种根据样本数据量化 (quantization)我们估计中不确定性的实用方法,它从简单的点估计转向为总体参数 (parameter)(如均值)提供一个合理值的范围。这是从数据中得出可靠结论的一种基本方法。
这部分内容有帮助吗?
t.interval)的详细信息。© 2026 ApX Machine LearningAI伦理与透明度•