当前位置: 首页 > news >正文

机器学习之方差和标准差计算

📊 标准差(σ)完整计算指南

这个公式是Z-score标准化(Standardization),其中的σ就是总体标准差(Population Standard Deviation),下面给你完整的计算步骤、公式、Python实现和注意事项。


一、标准差的核心定义

标准差是衡量一组数据离散程度的指标,数值越大,数据波动越大;数值越小,数据越集中。
在机器学习/数据标准化中,我们通常用总体标准差(用全部样本计算),公式如下:

1. 总体标准差公式(对应公式中的σ)

σ=1N∑i=1N(xi−μ)2 \sigma = \sqrt{\frac{1}{N}\sum_{i=1}^{N}(x_i - \mu)^2}σ=N1i=1N(xiμ)2

  • xix_ixi:第iii个原始数据
  • μ\muμ(mean):该特征的平均值μ=1N∑i=1Nxi\mu = \frac{1}{N}\sum_{i=1}^{N}x_iμ=N1i=1Nxi
  • NNN:样本总数
  • ∑i=1N(xi−μ)2\sum_{i=1}^{N}(x_i - \mu)^2i=1N(xiμ)2:离均差平方和(每个数据与均值的差的平方之和)

2. 样本标准差(注意区分!)

如果是用样本估计总体(比如抽样统计),分母用N−1N-1N1(贝塞尔校正),公式:
s=1N−1∑i=1N(xi−xˉ)2 s = \sqrt{\frac{1}{N-1}\sum_{i=1}^{N}(x_i - \bar{x})^2}s=N11i=1N(xixˉ)2

🔴 关键提醒:数据标准化(Z-score)必须用总体标准差(分母N),不能用样本标准差(分母N-1),否则标准化结果会偏离预期。


二、手动计算步骤(一步步算)

举个例子:计算数据[1, 2, 3, 4, 5]的标准差

步骤1:计算平均值(mean/μ)

μ=1+2+3+4+55=3 \mu = \frac{1+2+3+4+5}{5} = 3μ=51+2+3+4+5=3

步骤2:计算每个数据与均值的差(离均差)

1−3=−2,2−3=−1,3−3=0,4−3=1,5−3=2 1-3=-2,\quad 2-3=-1,\quad 3-3=0,\quad 4-3=1,\quad 5-3=213=2,23=1,33=0,43=1,53=2

步骤3:计算离均差的平方

(−2)2=4,(−1)2=1,02=0,12=1,22=4 (-2)^2=4,\quad (-1)^2=1,\quad 0^2=0,\quad 1^2=1,\quad 2^2=4(2)2=4,(1)2=1,02=0,12=1,22=4

步骤4:计算平方和(方差的分子)

4+1+0+1+4=10 4+1+0+1+4 = 104+1+0+1+4=10

步骤5:计算方差(总体方差)

σ2=105=2 \sigma^2 = \frac{10}{5} = 2σ2=510=2

步骤6:开平方得到标准差

σ=2≈1.4142 \sigma = \sqrt{2} \approx 1.4142σ=21.4142


三、Python代码实现(工程化用法)

1. 手动实现(对应公式)

importmathdefpopulation_std(data):# 1. 计算均值mean=sum(data)/len(data)# 2. 计算离均差平方和sum_sq=sum((x-mean)**2forxindata)# 3. 计算总体方差,开平方得标准差variance=sum_sq/len(data)returnmath.sqrt(variance)# 测试data=[1,2,3,4,5]print(population_std(data))# 输出: 1.4142135623730951

2. 用NumPy/Pandas(工业界标准用法)

importnumpyasnpimportpandasaspd# NumPy:ddof=0 表示总体标准差(默认就是0)data=np.array([1,2,3,4,5])sigma=np.std(data,ddof=0)# 必须指定ddof=0,否则部分版本默认ddof=0,部分为1,要显式声明print(sigma)# 1.4142135623730951# Pandas:Series.std()默认ddof=1(样本标准差),必须手动改ddof=0s=pd.Series([1,2,3,4,5])sigma=s.std(ddof=0)print(sigma)# 1.4142135623730951# 直接做Z-score标准化(对应题目公式)X_standard=(data-data.mean())/np.std(data,ddof=0)print(X_standard)# 输出: [-1.41421356 -0.70710678 0. 0.70710678 1.41421356]

3. 用sklearn(机器学习标准化工具)

fromsklearn.preprocessingimportStandardScaler# 注意:StandardScaler内部用的就是总体标准差(分母N)scaler=StandardScaler()data=np.array([[1],[2],[3],[4],[5]])# 必须是2D数组scaler.fit(data)print("均值:",scaler.mean_[0])# 3.0print("标准差:",scaler.scale_[0])# 1.4142135623730951print("标准化后:",scaler.transform(data).flatten())# 输出: [-1.41421356 -0.70710678 0. 0.70710678 1.41421356]

四、关键注意事项(避坑指南)

1. 分母N vs N-1的区别

类型公式分母适用场景标准化是否可用
总体标准差NNN全部样本已知(如训练集全量数据)✅ 必须用
样本标准差N−1N-1N1抽样估计总体(如统计推断)❌ 绝对不能用

2. 标准差为0的情况

如果某特征所有值都相同(比如[5,5,5,5]),标准差σ=0\sigma=0σ=0,此时标准化公式会出现除以0的错误。

  • 解决方案:
    1. 直接删除该特征(无区分度);
    2. 给分母加一个极小值(如1e-8),避免除零:X' = (x - mean) / (σ + 1e-8)

3. 标准化的核心作用

  • 消除量纲影响:比如“身高(cm)”和“体重(kg)”数值范围不同,标准化后可公平参与模型训练;
  • 加速模型收敛:梯度下降类模型(如神经网络、逻辑回归)对特征尺度敏感,标准化后收敛更快;
  • 满足模型假设:如SVM、KNN、PCA等算法依赖距离计算,必须做标准化。

五、拓展:标准差 vs 方差

  • 方差σ2\sigma^2σ2:是标准差的平方,单位是原数据单位的平方,不直观;
  • 标准差σ\sigmaσ:开平方后单位与原数据一致,更适合解释数据波动。

六、快速验证

用题目公式做标准化后,数据的均值一定为0,标准差一定为1,可以用代码验证:

data=np.array([1,2,3,4,5])X_standard=(data-data.mean())/np.std(data,ddof=0)print("标准化后均值:",X_standard.mean())# 0.0print("标准化后标准差:",X_standard.std(ddof=0))# 1.0

http://www.cnnetsun.cn/news/1914881.html

相关文章:

  • 如何在微控制器上用纯 Python 替代 NumPy 实现颜色渐变计算
  • Go 中使用 go-json-rest 时调用 Write 方法的正确方式
  • 计算机毕业设计:Python全国降水数据采集与预警平台 Flask框架 数据分析 可视化 大数据 AI 大模型 爬虫 数据大屏(建议收藏)✅
  • 高精度加减
  • 朱雀AI检测率高怎么降?嘎嘎降AI实操攻略分享
  • uv提供的cpython高版本已经解决了matplotlib无法显示图形问题
  • Batch Normalization在VAE中的花式用法:从防梯度消失到解决posterior collapse的完整指南
  • 告别裸机思维:在IMX6ULL上,用设备树重构你的第一个Linux按键驱动
  • mysql为何建议放弃MyISAM_从InnoDB ACID特性分析
  • 算法基础应用精讲【自动驾驶】-自动驾驶负障碍物感知:从井盖缺失看长尾场景的技术突围
  • Python 切片语法基础:[start:end:step] 全解
  • HALCON copy_obj算子保姆级教程:从‘复制粘贴’到高效数据管理的避坑指南
  • Jellyfin Android TV客户端版本兼容性问题的深度诊断与解决指南
  • 魔兽争霸III现代化改造:5大核心功能让你的经典游戏焕发新生
  • 【硬件开发】自举电路设计实战:从原理到参数计算
  • 计及自适应预测修正的微电网 MPC 优化调度方法研究(Python代码实现)
  • 计算机考研408真题解析(2024-36 VLAN间通信与三层交换机路由机制实战剖析)
  • 救命!收藏这篇就够了, 从ChatGPT到Qwen/GLM,程序员小白大模型入门全攻略(附实战)
  • 从一次应急响应看致远OA wpsAssistServlet漏洞:攻击者如何利用,我们又该如何溯源与加固?
  • MECS UTX1010 461412A02 控制器
  • ncmdumpGUI:3步解锁网易云音乐NCM文件,实现跨平台音乐自由
  • 2025届必备的十大AI学术网站横评
  • 手把手教你用Ansible批量加固CentOS 7/8服务器,一键搞定等保三级合规
  • 有源电力滤波器(APF)模型在Matlab/Simulink中的仿真实践:质量过硬,治理电能质量问题
  • 2026最权威的AI辅助写作助手推荐
  • 企业级 AI Agent Harness Engineering 部署指南
  • 从零到一:在Win11与VS2022上部署OpenSceneGraph 3.6.5的避坑实践
  • 国芯筑基驭智城,第二届酒仙桥论坛解锁“十五五”产城AI增长新范式
  • 【无人机控制】基于LPV方法的无人机模型预测控制器附matlab代码
  • PreScan 8.5.0 与 MATLAB 联调:除了版本,你的编译器设置和启动流程对了吗?