p 值计算(置信度)

文章介绍了P值的概念,它用于检验假设,当P值小于0.05时,通常拒绝无效假设。T检验用于确定两个样本均值的差异,自由度df影响T分布。在AB实验中,P值小于0.05意味着实验组与基线有显著差异。文章还讨论了自由度的选择和计算方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、p值的概念

在这里插入图片描述

参考 【科研新手必学】手把手教你统计学的P值含义和检验假设

在这里插入图片描述
在这里插入图片描述

下图中,μ0 表示整个地区的总体均值,μ 表示整个矿区的整体均值, X ‾ \overline{X} X 表示矿区抽样的均值

  • H0是无效假设(原假设),即,矿区的均值和该地区的均值其实是一样的,只是因为抽样误差而导致的(即矿区的样本是整个地区样本的一部分)
  • H1是备择假设,即,矿区的数据分布和整个地区的数据分布是完全不同的,两者均值本身就不相等。所以从矿区中抽样出来的均值自然和整个地区的均值不同,即矿区影响了新生儿头围的发育
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

如下图所示,S 表示标准差,n 表示样本数
在这里插入图片描述
在这里插入图片描述
注意,这里需要对 μ 取绝对值,即 μ=2.273,2.273是介于 1.96 到 2.58 之间,所以 p 值介于 0.01 到 0.05 之间

  • μ 越大,p 越小;μ越小,p越大
    在这里插入图片描述
    接受 H1 即表示:矿区新生儿的头围,和全地区的数据,是不一致的
    在这里插入图片描述

如下图所示,即表示,H0的零假设其实就是假设 “没有差别”,拒绝了 “没有差别” 的假设,那结论自然就是 “有差别”
在这里插入图片描述

在这里插入图片描述

参考:【统计】从P值到6σ(六西格玛)质量控制(P值与Z值,与置信水平的关系,python scipy 计算)

在这里插入图片描述

下图中,z=1.96 表示,距离均值 1.96 个标准差
在这里插入图片描述

In [88]: from scipy.stats import norm

In [89]: help
Out[89]: Type help() for interactive help, or help(object) for help about object.

In [90]: help(norm.cdf)


In [91]: norm.cdf(1.96)
Out[91]: 0.9750021048517795

In [92]: norm.cdf(-1.96)
Out[92]: 0.024997895148220435

In [93]: norm.cdf(1.96)-norm.cdf(-1.96)
Out[93]: 0.950004209703559


# 参考 https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.t.html
# sf = 1 - cdf
# 注意下面的参数 df 表示自由度
In [113]: 1-scipy.stats.t.sf(1.67, df=1)
Out[113]: 0.8282595795437305

In [114]: scipy.stats.t.cdf(1.67, df=1)
Out[114]: 0.8282595795437305

二、T检验

参考:

关于 两个样本均值之差的分布:

在这里插入图片描述

参考:

如下图,T分布的自由度 df 越大,则越趋近于正态分布
在这里插入图片描述

三、实际计算

在做AB实验时,经常需要计算实验的p值,当p<0.05时,表示该实验的结论是置信的(原假设是实验组和基线没有差别,备择假设是实验组和基线有差别,当p<0.05时,即接受备择假设,即表示实验组和基线有区别)

""" 
t 检验, T 检验用于确定两个变量的均值之间是否存在显著差异,并判断它们是否属于同一分布。
"""
from scipy.stats import t  


def adv_test(self, num_base, mu_base, var_base, num_exp, mu_exp, var_exp, alpha=0.05, beta=0.8):
	"""
	官方文档 https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.t.html
	exp 后缀表示实验组,base 后缀表示基线组
	"""
    num = num_exp + num_base
    mu = mu_exp - mu_base
    mu_ratio = float(mu_exp)/float(mu_base)-1
    # print("mu_exp: {}, mu_base: {}".format(mu_exp, mu_base))
    var = var_exp / num_exp + var_base / num_base
    t_value = mu / np.sqrt(var)

    # 自由度 degrees of freedom,当自由度足够大时,计算出来的p值几乎没有差别
    df = num - 1
    # df = var**2 / ((var_exp**2)/(num_exp**2 * (num_exp-1)) + (var_base**2) / (num_base**2 * (num_base-1)))
    print("mu: {}, var: {}, t_value: {}, df: {}".format(mu, var, t_value, df))
    # 这里 t.sf = 1-t.cdf,t.sf 的第二个参数是 df,即自由度(df, degrees of freedom)
    pvalue = t.sf(t_value, df)
    half_alpha_percentile = t.isf(alpha / 2, df)
    lower_bound = mu - half_alpha_percentile * np.sqrt(var)
    upper_bound = mu + half_alpha_percentile * np.sqrt(var)
    mde = (t.isf(alpha / 2, num - 2) - t.isf(beta, num - 2)) * np.sqrt(var)
    # return pvalue, lower_bound, upper_bound, mu
    return pvalue, lower_bound, upper_bound, mu_ratio

"""
######### arpu 相对值 #######
# old_df,自由度 df=num-1
mu: 0.007, var: 0.00119234226134, t_value: 0.202720454552, df: 26764544
In [193]: 0.007 / np.sqrt(0.00119234226134)
Out[193]: 0.20272045455163987

In [179]: t.sf(0.202720454552, 26764544)
Out[179]: 0.4196767681194182


# new_df,自由度 df=var**2 / ((var_exp**2)/(num_exp**2 * (num_exp-1)) + (var_base**2) / (num_base**2 * (num_base-1)))
mu: -0.007, var: 0.00119234226134, t_value: -0.202720454552, df: 8170882.10005
In [180]: t.sf(0.202720454552, 8170882.10005)
Out[180]: 0.4196767698726953

######### arpu 绝对值 #######
# old_df,自由度 df=num-1
mu: 0.16, var: 0.624730231747, t_value: 0.2024294622, df: 26764544
In [194]: 0.16 / np.sqrt(0.624730231747)
Out[194]: 0.20242946219986416

In [190]: t.sf(0.2024294622, 26764544)
Out[190]: 0.41979049958805537


# new_df,自由度df=var**2 / ((var_exp**2)/(num_exp**2 * (num_exp-1)) + (var_base**2) / (num_base**2 * (num_base-1)))
mu: 0.16, var: 0.624730231747, t_value: 0.2024294622, df: 8170882.10005
In [191]: t.sf(0.2024294622, 8170882.1005)
Out[191]: 0.4197905013387206


#################### 结论 #####################
1. 使用arpu 绝对值 还是 相对值,计算出来的p值没有差异
2. 使用新版的 df 计算方法,p值也没有差异(当自由度足够大时,对p值计算几乎没有影响了,因为当自由度足够大时,已经趋近于正态分布,算出来的面积已经基本是不变的常数了)
"""

关于 自由度 df 的理解

  • 根据谢宇老师《回归分析》一书中的介绍:自由度是通过样本统计量来估计总体参数时必须涉及的一个基本概念,指的是计算样本统计量时能自由取值的数值个数。当做t检验时,是用样本方差去对总体方差进行估计。需要变量减去观测样本的均值,故而样本中只有n-1个自由取值。确定了n-1个数,基于均值,第n个数就确定了。所以一般来讲,丧失的自由度数目也就是需要估计的参数的数目,或者约束条件的数目。

其他参考

<think>好的,我需要回答用户关于YOLOv8中置信度分数计算方法的问题。首先,我需要回顾YOLO系列中置信度的基本概念,尤其是YOLOv8的改进点。根据引用[3],置信度在YOLO中代表预测框包含目标且位置准确的程度,通常由两部分组成:是否存在对象的概率以及预测框的准确度。 接下来,用户询问具体的计算公式。YOLOv8可能延续了先前版本的置信度计算方式,但可能有调整。一般来说,置信度等于对象置信度(是否有对象)乘以类别概率的最大。例如,公式可能是$Confidence = P_{obj} \times \max(P_{class})$。不过需要确认YOLOv8是否将两者分开处理,比如在v3中,置信度仅指对象存在的概率,而类别概率单独处理。 然后,实现部分需要考虑模型输出的结构。YOLOv8的输出张量可能包含边界框坐标、置信度和类别分数。例如,每个预测框可能有4个坐标、1个对象置信度和多个类别分数。因此,在代码中,需要从输出中提取这些部分,并进行相应的计算。引用[4]提到YOLOv5的正样本匹配和损失计算,可能涉及置信度的处理方式,可以类比参考。 用户提供的引用[2]讨论了边界框的公式,虽然主要关于坐标变换,但可能涉及置信度计算是否与位置准确性有关。需要确认YOLOv8是否将IoU(交并比)或其他指标融入置信度计算,比如通过预测框与anchor的匹配程度来调整置信度。 另外,引用[1]中的AP计算涉及精确率和召回率,而置信度分数在评估时用于确定检测结果的真阳性,因此阈的设定会影响最终指标。这可能关联到置信度的应用场景,但用户主要关注的是计算方法而非评估。 综合以上信息,我需要整理出YOLOv8置信度计算公式,并给出代码实现的示例。需要注意YOLOv8可能的改进点,比如是否简化了公式或引入了新的机制。同时,代码部分需要展示如何从模型输出中提取相关数并进行计算,可能涉及sigmoid函数处理原始输出,因为YOLO通常使用逻辑回归处理置信度。 最后,生成相关问题,如置信度在评估中的作用、与YOLOv5的区别,以及如何处理低置信度检测框,这些可以帮助用户深入理解。</think>### YOLOv8置信度分数计算方法分步说明 #### 1. 置信度的组成 YOLOv8的置信度分数由两个核心部分构成: - **对象置信度**($P_{obj}$):预测框包含有效目标的概率,取范围[0,1] - **类别置信度**($\max(P_{class})$):预测目标属于最可能类别的概率 #### 2. 计算公式 置信度最终计算公式为: $$ Confidence = P_{obj} \times \max(P_{class}) $$ 该公式通过逐元素相乘实现两个概率的联合评估,既考虑目标存在性也考虑分类准确性[^3] #### 3. 实现过程 以PyTorch框架为例,模型输出处理流程: ```python # 假设原始输出维度为(batch, anchors, 4+1+num_classes) raw_output = model(input_tensor) # 获取模型原始输出 # 分离各组成部分 bbox_coords = raw_output[..., 0:4] # 边界框坐标 obj_conf = torch.sigmoid(raw_output[..., 4:5]) # 对象置信度[^4] cls_conf = torch.softmax(raw_output[..., 5:], dim=-1) # 类别概率 # 计算最终置信度 max_cls_conf, _ = cls_conf.max(dim=-1, keepdim=True) final_scores = obj_conf * max_cls_conf # 逐元素相乘 ``` #### 4. 技术细节 - **Sigmoid激活**:对象置信度通过sigmoid转换为概率,确保输出在0-1之间 - **Softmax处理**:类别置信度使用softmax保证各类别概率和为1 - **Anchor匹配**:正样本匹配时,通过与预设anchor的IoU计算影响置信度得分[^4] #### 5. 置信度应用 在预测后处理阶段,置信度用于: 1. 过滤低质量检测框(通常设置阈如0.5) 2. 非极大抑制(NMS)中的排序依据 3. 评估指标计算(如AP)时的重要参数[^1] ```mermaid graph TD A[模型原始输出] --> B[坐标解码] A --> C[对象置信度计算] A --> D[类别概率计算] C --> E[逐元素相乘] D --> E E --> F[最终置信度分数] ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值