【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.26 统计圣殿:从描述统计到推断检验

在这里插入图片描述

1.26 统计圣殿:从描述统计到推断检验

目录

统计圣殿:从描述统计到推断检验
滑动窗口统计的极致优化
矩阵化假设检验实践
流式数据增量统计算法
A/B测试系统完整实现

1.26.1 滑动窗口统计的极致优化
1.26.2 矩阵化假设检验实践
1.26.3 流式数据增量统计算法
1.26.4 A/B测试系统完整实现

统计圣殿:从描述统计到推断检验
滑动统计量优化
向量化假设检验
流式增量计算
A/B测试系统
卷积运算加速
内存布局优化
分块处理
矩阵化t检验
快速ANOVA
多重检验校正
Welford算法
EMA实现
异常检测
实验设计
功效分析
结果可视化

1.26.1 滑动窗口统计的极致优化

卷积加速原理

对于窗口大小W的滑动平均,利用1D卷积实现:

moving_avg = 1 W ⋅ ( x ∗ ones ( W ) ) \text{moving\_avg} = \frac{1}{W} \cdot (x \ast \text{ones}(W)) moving_avg=W1(xones(W))

import numpy as np
from numpy.lib.stride_tricks import sliding_window_viewdef optimized_moving_stats(data, window):"""矢量化的滑动统计计算"""# 使用内存视图避免拷贝sw = sliding_window_view(data, window, writeable=False)# 并行计算统计量means = np.mean(sw, axis=1)stds = np.std(sw, ddof=1, axis=1)# 处理边界条件pad = np.full(window-1, np.nan)return np.concatenate([pad, means]), np.concatenate([pad, stds])# 测试100万数据点
data = np.random.normal(0, 1, 1_000_000)
means, stds = optimized_moving_stats(data, 30)

内存布局优化

def aligned_moving_sum(arr, window):"""内存对齐的滑动求和"""# 将数组转换为适合SIMD的类型arr = np.asarray(arr, dtype=np.float64)cumsum = np.cumsum(arr)# 使用预分配内存result = np.empty_like(arr)result[window-1:] = cumsum[window:] - cumsum[:-window]result[:window-1] = np.nanreturn result / window# 性能对比
%timeit aligned_moving_sum(data, 30)  # 平均3.2ms
%timeit data.rolling(30).mean()       # 平均12.7ms (pandas实现)

1.26.2 矩阵化假设检验实践

多组t检验向量化

t = X ˉ 1 − X ˉ 2 s 1 2 n 1 + s 2 2 n 2 t = \frac{\bar{X}_1 - \bar{X}_2}{\sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}} t=n1s12+n2s22 Xˉ1Xˉ2

def matrix_ttest(groups):"""矩阵化t检验实现"""# 将各组数据堆叠为矩阵max_len = max(len(g) for g in groups)matrix = np.full((len(groups), max_len), np.nan)for i,g in enumerate(groups):matrix[i, :len(g)] = g# 计算各组统计量means = np.nanmean(matrix, axis=1)vars = np.nanvar(matrix, ddof=1, axis=1)counts = np.sum(~np.isnan(matrix), axis=1)# 构建对比矩阵comb = np.array(np.meshgrid(np.arange(len(groups)), np.arange(len(groups)))).T.reshape(-1,2)comb = comb[comb[:,0] < comb[:,1]]  # 去除重复比较# 批量计算t值delta = means[comb[:,0]] - means[comb[:,1]]pooled_var = (vars[comb[:,0]]/counts[comb[:,0]] + vars[comb[:,1]]/counts[comb[:,1]])t_values = delta / np.sqrt(pooled_var)return t_values, comb# 测试5个样本组
groups = [np.random.normal(i, 1, 100) for i in range(5)]
tvals, pairs = matrix_ttest(groups)
print(f"生成{tvals.size}个t值,最大绝对值:{np.abs(tvals).max():.2f}")

1.26.3 流式数据增量统计算法

Welford在线算法

递推公式:
M n = M n − 1 + x n − M n − 1 n S n = S n − 1 + ( x n − M n − 1 ) ( x n − M n ) M_{n} = M_{n-1} + \frac{x_n - M_{n-1}}{n} \\ S_n = S_{n-1} + (x_n - M_{n-1})(x_n - M_n) Mn=Mn1+nxnMn1Sn=Sn1+(xnMn1)(xnMn)

class StreamingStats:"""实时统计量计算器"""def __init__(self):self.n = 0self.mean = 0.0self.M2 = 0.0self.min = float('inf')self.max = -float('inf')def update(self, x):x = np.asarray(x)for val in x.flat:self.n += 1delta = val - self.meanself.mean += delta / self.ndelta2 = val - self.meanself.M2 += delta * delta2self.min = min(self.min, val)self.max = max(self.max, val)@propertydef variance(self):return self.M2 / (self.n - 1) if self.n > 1 else 0.0@propertydef std(self):return np.sqrt(self.variance)# 模拟流式数据
stats = StreamingStats()
for _ in range(100000):stats.update(np.random.randn(10))  # 每次更新10个值print(f"最终均值:{stats.mean:.4f},标准差:{stats.std:.4f}")

1.26.4 A/B测试系统完整实现

系统架构

数据采集
指标计算
假设检验
功效分析
可视化报告

完整实现代码

class ABTestSystem:def __init__(self):self.groups = {}def add_group(self, name, data):"""添加实验组数据"""self.groups[name] = {'data': np.array(data),'mean': None,'var': None}self._calc_stats(name)def _calc_stats(self, name):"""预计算统计量"""data = self.groups[name]['data']self.groups[name]['mean'] = np.mean(data)self.groups[name]['var'] = np.var(data, ddof=1)self.groups[name]['n'] = len(data)def t_test(self, group_a, group_b):"""执行t检验"""a = self.groups[group_a]b = self.groups[group_b]delta_mean = a['mean'] - b['mean']pooled_var = (a['var']/a['n'] + b['var']/b['n'])t = delta_mean / np.sqrt(pooled_var)df = (a['n'] + b['n'] - 2)return t, dfdef power_analysis(self, group_a, group_b, alpha=0.05):"""统计功效分析"""from scipy import statst, df = self.t_test(group_a, group_b)effect_size = np.abs(t) / np.sqrt(df + 1)power = stats.t.sf(np.abs(t), df, loc=effect_size)return powerdef visualize(self):"""结果可视化"""import matplotlib.pyplot as pltlabels = list(self.groups.keys())means = [self.groups[n]['mean'] for n in labels]errs = [1.96*np.sqrt(self.groups[n]['var']/self.groups[n]['n']) for n in labels]plt.figure(figsize=(10,6))plt.errorbar(labels, means, yerr=errs, fmt='o', capsize=5)plt.title('A/B Test Group Comparison')plt.ylabel('Metric Value')plt.grid(True)plt.show()# 使用示例
ab = ABTestSystem()
ab.add_group('Control', np.random.normal(5.0, 1.0, 1000))
ab.add_group('Variant', np.random.normal(5.2, 1.0, 1000))
print(f"t值: {ab.t_test('Control', 'Variant')[0]:.2f}")
print(f"统计功效: {ab.power_analysis('Control', 'Variant'):.2%}")
ab.visualize()

参考文献

名称链接
NumPy性能优化指南https://numpy.org/doc/stable/user/c-info.ufunc-tutorial.html
Welford算法论文https://www.jstor.org/stable/1266577
统计功效分析原理https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3478819/
流式统计算法库https://github.com/janinehauling/streaming-stats
矩阵化运算技巧https://software.intel.com/content/www/us/en/develop/documentation/
滑动窗口优化https://numpy.org/doc/stable/reference/generated/numpy.lib.stride_tricks.sliding_window_view.html
在线统计算法https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance
A/B测试最佳实践https://www.optimizely.com/optimization-glossary/ab-testing/
假设检验数学原理https://online.stat.psu.edu/statprogram/reviews/statistical-concepts/hypothesis-testing
科学计算可视化https://matplotlib.org/stable/tutorials/index.html

这篇文章包含了详细的原理介绍、代码示例、源码注释以及案例等。希望这对您有帮助。如果有任何问题请随私信或评论告诉我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10111.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用 Groq API 免费使用 DeepSeek-R1 70B,并通过 Deno 实现国内访问

这几天都被Deepseek刷屏了&#xff0c;而且Deepseek由于异常访问量&#xff0c;这几天都不能愉快的和它玩耍了&#xff0c; 我发现Groq新增了一个Deepseek的70b参数的模型&#xff0c; DeepSeek-R1 70B 作为一款强大的开源模型&#xff0c;提供了卓越的推理能力&#xff0c;而 …

物联网智能项目之——智能家居项目的实现!

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于物联网智能项目之——智能家居项目…

Linux《基础指令》

在之前的Linux《Linux简介与环境的搭建》当中我们已经初步了解了Linux的由来和如何搭建Linux环境&#xff0c;那么接下来在本篇当中我们就要来学习Linux的基础指令。在此我们的学习是包括两个部分&#xff0c;即指令和关于Linux的基础知识&#xff1b;因此本篇指令和基础知识的…

Addressable学习

AssetsBundle是Unity的资源管理机制,将资源打包到AssetsBundle资源包并提供接口能从ab包里面加载资源出来。有了这个机制以后&#xff0c;我们要做资源管理&#xff0c;还需要做: a: 根据项目需求,编写编辑器扩展,提供指定资源打入对应bundle包工具策略; b: 根据项目的需求,资源…

详解u3d之AssetBundle

一.AssetBundle的概念 “AssetBundle”可以指两种不同但相关的东西。 1.1 AssetBundle指的是u3d在磁盘上生成的存放资源的目录 目录包含两种类型文件(下文简称AB包)&#xff1a; 一个序列化文件&#xff0c;其中包含分解为各个对象并写入此单个文件的资源。资源文件&#x…

【Block总结】OutlookAttention注意力,捕捉细节和局部特征|即插即用

论文信息 标题: VOLO: Vision Outlooker for Visual Recognition作者: Li Yuan, Qibin Hou, Zihang Jiang, Jiashi Feng, Shuicheng Yan代码链接: https://github.com/sail-sg/volo论文链接: https://arxiv.org/pdf/2106.13112 创新点 前景注意力机制: VOLO引入了一种称为“…

后端token校验流程

获取用户信息 前端中只有 await userStore.getInfo() 表示从后端获取数据 在页面中找到info对应的url地址&#xff0c;在IDEA中查找 这里是getInfo函数的声明&#xff0c;我们要找到这个函数的使用&#xff0c;所以点getInfo() Override public JSONObject getInfo() {JSO…

一文讲解Java中的异常处理机制

Java中的异常处理机制用于处理程序运行过程中可能发生的各种异常情况&#xff0c;通常通过try-catch-finally语句和throw关键字来实现 Throwable是Java语言中所有错误和异常的父类。它有两个主要的子类&#xff1a;Error和Exception&#xff1b;Error类代表那些严重的错误&am…

论文速读|Matrix-SSL:Matrix Information Theory for Self-Supervised Learning.ICML24

论文地址&#xff1a;Matrix Information Theory for Self-Supervised Learning 代码地址&#xff1a;https://github.com/yifanzhang-pro/matrix-ssl bib引用&#xff1a; article{zhang2023matrix,title{Matrix Information Theory for Self-Supervised Learning},author{Zh…

SpringCloud系列教程:微服务的未来(十八)雪崩问题、服务保护方案、Sentinel快速入门

前言 在分布式系统中&#xff0c;雪崩效应&#xff08;Avalanche Effect&#xff09;是一种常见的故障现象&#xff0c;通常发生在系统中某个组件出现故障时&#xff0c;导致其他组件级联失败&#xff0c;最终引发整个系统的崩溃。为了有效应对雪崩效应&#xff0c;服务保护方…

【NLP251】意图识别 与 Seq2Seq

Seq2Seq模型作为从RNN演进到Transformer和Attention机制的关键中间阶段&#xff0c;它不仅承前启后&#xff0c;还为我们深入理解这些复杂的模型架构提供了重要的基础。接下来&#xff0c;我们将详细探讨Seq2Seq模型的原理及其在自然语言处理领域中的应用。 1. 原理及网络框架 …

docker配置mysql并使用mysql connector cpp编程

mysql 配置mysql使用docker 这里使用docker安装了&#xff0c;比较简洁&#xff0c;不想使用了直接就可以把容器删掉&#xff0c;首先获取下镜像&#xff0c;如下命令 docker pull container-registry.oracle.com/mysql/community-server这里直接默认使用最新版本的mysql了 …

赛博算卦之周易六十四卦JAVA实现:六幺算尽天下事,梅花化解天下苦。

佬们过年好呀~新年第一篇博客让我们来场赛博算命吧&#xff01; 更多文章&#xff1a;个人主页 系列文章&#xff1a;JAVA专栏 欢迎各位大佬来访哦~互三必回&#xff01;&#xff01;&#xff01; 文章目录 #一、文化背景概述1.文化起源2.起卦步骤 #二、卦象解读#三、just do i…

【16届蓝桥杯寒假刷题营】第2期DAY4

【16届蓝桥杯寒假刷题营】第2期DAY4 - 蓝桥云课 问题描述 幼儿园小班的浩楠同学有一个序列 a。 他想知道有多少个整数三元组 (i,j,k) 满足 1≤i,j,k≤n 且 ai​aj​ak​。 输入格式 共2行&#xff0c;第一行一个整数 n&#xff0c;表示序列的长度。 第二行 n 个整数&#x…

基于单片机的超声波液位检测系统(论文+源码)

1总体设计 本课题为基于单片机的超声波液位检测系统的设计&#xff0c;系统的结构框图如图2.1所示。其中包括了按键模块&#xff0c;温度检测模块&#xff0c;超声波液位检测模块&#xff0c;显示模块&#xff0c;蜂鸣器等器件设备。其中&#xff0c;采用STC89C52单片机作为主控…

【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)

羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_8264829…

【Block总结】动态蛇形卷积,专注于细长和弯曲的局部结构|即插即用

论文信息 标题: Dynamic Snake Convolution based on Topological Geometric Constraints for Tubular Structure Segmentation 作者: 戚耀磊、何宇霆、戚晓明、张媛、杨冠羽 会议: 2023 IEEE/CVF International Conference on Computer Vision (ICCV) 发表时间: 2023年10月…

【NEXT】网络编程——上传文件(不限于jpg/png/pdf/txt/doc等),或请求参数值是file类型时,调用在线服务接口

最近在使用华为AI平台ModelArts训练自己的图像识别模型&#xff0c;并部署了在线服务接口。供给客户端&#xff08;如&#xff1a;鸿蒙APP/元服务&#xff09;调用。 import核心能力&#xff1a; import { http } from kit.NetworkKit; import { fileIo } from kit.CoreFileK…

Linux工具使用

1.gcc/g的使用 1.1程序翻译的过程 ①预处理&#xff1a;展开头文件&#xff0c;替换宏&#xff0c;调节编译&#xff0c;去注释。 ②编译&#xff1a;将代码变成汇编语言 ③汇编&#xff1a;将汇编代码变成二进制不可执行的目标文件。 ④链接&#xff1a;将多个我写的多个…

Mac Electron 应用签名(signature)和公证(notarization)

在MacOS 10.14.5之后&#xff0c;如果应用没有在苹果官方平台进行公证notarization(我们可以理解为安装包需要审核&#xff0c;来判断是否存在病毒)&#xff0c;那么就不能被安装。当然现在很多人的解决方案都是使用sudo spctl --master-disable&#xff0c;取消验证模式&#…