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

一、函数作用

这个函数是数据标准化(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}")
相关推荐
EatFans几秒前
AI Agent 为什么总是失忆?一篇讲透 Agent Memory
人工智能
sijiaoh2 分钟前
用 Jev 写了个按意思搜的 grep
人工智能
智商网输送线配件4 分钟前
2026 自动化流水线配件采购难题破解:小批量混批与非标定制的供应链实测
大数据·人工智能·自动化·智商网·流水线设备配件
wabs6666 分钟前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树
hanlin039 分钟前
刷题笔记:力扣第41题-缺失的第一个正数
笔记·算法·leetcode
武子康14 分钟前
Codex 后台任务结束了,为什么还不能直接接着用?
人工智能·llm·agent
shehuiyuelaiyuehao42 分钟前
算法50,分治归并,数组中的逆序对
java·算法
Ivanqhz1 小时前
数据搬运是性能关键
java·服务器·网络·人工智能·深度学习
糖糖单片机设计1 小时前
基于STM32的电子密码锁设计与实现(矩阵键盘+防拆检测+GSM远程报警)
人工智能·stm32·单片机·嵌入式硬件
johnsong1 小时前
AI前沿日报 2026-09-19
人工智能·语言模型