数据标准化(拟合的时候使用非常重要)

一、函数作用

这个函数是数据标准化(Z-Score 标准化) 函数,专门对两组数据 x_raw(自变量)做标准化处理,并返回标准化后的数据 + 记录标准化参数的对象。

具体做了这 4 件事:

  1. 计算 x_raw均值标准差
  2. 用 Z-Score 公式对两组数据分别标准化:标准化值 = (原始值 - 均值) / 标准差
  3. 处理标准差为 0的极端情况(避免除以 0 报错)
  4. 返回:标准化后的 x、标准化后的 beta、标准化信息对象(保存均值 / 标准差,方便后续还原数据)

二、核心好处(为什么要写这个函数?)

1. 避免除以 0 错误(鲁棒性强)

代码里做了关键防护:

python

运行

复制代码
x_scale = float(np.std(x_raw)) or 1.0
if x_scale < 1e-12: x_scale = 1.0
  • 如果数据全是同一个数(标准差 = 0),直接把分母设为 1.0
  • 不会崩溃、不会产生无穷大数值
  • 这是工程化代码必备的容错处理

2. 数据同步标准化,保持一致性

  • 同时标准化 xbeta
  • 适合回归模型、拟合、机器学习场景
  • 保证输入和系数在同一量纲体系下计算,结果更稳定

3. 保留标准化参数,支持逆标准化

  • x 的均值、x 的标准差
  • beta 的均值、beta 的标准差
  • 自定义 u 值

用途 :后续你可以用这些参数,把标准化后的数据还原成原始数据 ,这在模型预测、结果展示时必须用到

4. 统一量纲,提升模型 / 计算效果

标准化最核心的价值:

  • 消除单位不同 (比如米和千克)、数值量级差距大(比如 1 和 10000)的影响
  • 让梯度下降、回归、优化算法收敛更快、更稳定
  • 避免大数值变量 "主导" 计算结果

5. 代码复用、简洁规范

把标准化逻辑封装成函数:

  • 不用重复写均值、标准差计算
  • 一处修改,全局生效
  • 可读性强,团队协作更方便

三、适用场景

这个函数最常用在:

  1. 线性回归 / 多项式拟合
  2. 机器学习模型训练前的数据预处理
  3. 数值优化、方程求解
  4. 需要对输入和系数同时归一化的科学计算

四、总结

核心一句话

这是一个安全、健壮、可还原双变量 Z-Score 标准化函数,专门用于预处理数据,让计算更稳定、模型效果更好,同时避免程序崩溃。

关键优点

  1. 防除零错误,代码鲁棒性拉满
  2. 同步标准化两组数据,保持一致性
  3. 保存标准化参数,支持数据还原
  4. 统一量纲,优化模型 / 数值计算效果
  5. 封装复用,代码简洁规范

五、测试

python 复制代码
import numpy as np


# 定义一个简单的类,用来保存标准化信息(方便后续还原数据)
import numpy as np

# 标准化信息类:保存均值、标准差,方便后续还原数据
class NormalizationInfo:
    def __init__(self, data_mean, data_std, custom_value=0.0):
        self.data_mean = data_mean    # 原始数据的均值(一看就懂)
        self.data_std = data_std      # 原始数据的标准差(一看就懂)
        self.custom_value = custom_value  # 自定义额外参数


def normalize_data(original_data, custom_value=0.0):
    """
    【单变量数据标准化】Z-Score 标准化
    作用:把数据变成 均值=0,标准差=1 的标准分布,消除量纲影响
    自动防止除以0错误,非常稳定

    参数:
        original_data: 原始数据(列表 或 numpy数组)
        custom_value: 可选,自定义额外值
    返回:
        标准化后的数据 + 标准化信息对象
    """
    # 计算原始数据的均值和标准差
    mean_val = np.mean(original_data)
    std_val = np.std(original_data)

    # 安全处理:如果标准差接近0,就设为1,避免除以0报错
    if std_val < 1e-12:
        std_val = 1.0

    # 标准化核心公式
    standardized_data = (original_data - mean_val) / std_val

    # 返回标准化结果 + 记录均值和标准差(用于还原数据)
    return standardized_data, NormalizationInfo(mean_val, std_val, custom_value)


# ===================== 示例使用 =====================
if __name__ == "__main__":
    # 测试用的原始数据
    test_data = np.array([1, 2, 3, 4, 5])

    # 执行标准化
    data_after_standard, standard_info = normalize_data(test_data)

    # 输出结果
    print("原始数据:", test_data)
    print("标准化后:", np.round(data_after_standard, 4))
    print("\n标准化用到的参数:")
    print(f"原始数据均值 = {standard_info.data_mean:.4f}")
    print(f"原始数据标准差 = {standard_info.data_std:.4f}")
相关推荐
程序员码歌1 小时前
别再让 AI 自由发挥了:OpenSpec 才是团队协作不跑偏的关键
android·前端·人工智能
时光Autistic1 小时前
【安装教程】AI标注工具X-AnyLabeling安装配置
人工智能·python
knight_9___1 小时前
大模型project面试7
人工智能·python·算法·面试·大模型·agent
liudanzhengxi1 小时前
CRM系统技术文章
linux·服务器·网络·人工智能·新人首发
JavaAgent架构师1 小时前
前端AI工程化(六):Function Calling与RAG前端实践
前端·人工智能
ZhengEnCi1 小时前
08-编码器结构 🏗️
人工智能
掘金安东尼1 小时前
Buildsom |老板说要加码 AI 推广?我调研后发现:77% 的品牌,其实都在“盲投”
人工智能
Android出海1 小时前
5月合规风暴眼:Google Play权限大限与欧盟游戏监管新棋局
人工智能·游戏·google play·谷歌开发者·android开发者·google开发者·google play开发者
在繁华处2 小时前
轻棋局(一):项目总览与架构设计
人工智能·windows