详解np.random.normal(0, 3, size=x.shape)

一、完整语法与参数解释

np.random.normal(loc=0, scale=1, size=None) 是 NumPy 中生成「正态分布(高斯分布)」随机数的核心函数,参数含义如下:

参数名 默认值 作用说明 对应代码中的含义
loc 0 正态分布的「均值(μ)」,决定分布的中心位置 噪声的平均值为 0(即噪声围绕真实值上下波动,不偏向正/负方向)
scale 1 正态分布的「标准差(σ)」,决定分布的离散程度 噪声的波动幅度为 1(标准差越大,噪声越分散;越小越集中)
size None 生成的随机数的「形状」(如1D数组、2D数组) x.shape 表示:噪声数组的行数、列数和 x 完全一致(确保能和 y_true 逐元素相加)

二、结合之前的代码场景理解

之前的代码中,这行是用来给「真实模型」添加噪声,模拟真实世界的数据(真实数据不会完美贴合理论模型,总会有测量误差、环境干扰等噪声):

y_true = 2 * x**2 + 3 * x + 1  # 理论上的真实模型(无噪声,完美曲线)
y = y_true + np.random.normal(0, 1, size=x.shape)  # 加入噪声后的真实数据(散点)

具体效果:

  • y_true 是纯理论值(比如100个 x 对应100个精准的 y 值,画出来是光滑的红色曲线);
  • np.random.normal(0,1,size=x.shape) 生成100个随机数(和 x 一样是 (100,1) 的2D数组),每个数都符合「均值0、标准差1」的标准正态分布;
  • 把这100个随机数(噪声)加到 y_true 上,得到 y(带噪声的真实数据)—— 这就是我们后续用来训练模型的「原始数据」(蓝色散点)。

三、关键细节:正态分布与噪声的合理性

  1. 为什么用正态分布?
    真实世界中的噪声(如测量误差、环境干扰)大多遵循正态分布(中心极限定理):大部分噪声接近0(小误差),极少数噪声偏离0较远(大误差),这符合实际场景(比如用尺子测量长度,误差一般在±1mm内,很少出现±1cm的大误差)。

  2. 参数调整的影响(如果修改参数):

    • 若把 loc=0 改成 loc=2:噪声均值为2,所有 y 值都会整体上移2(数据偏向正方向),但模型仍能通过拟合修正这个偏移;
    • 若把 scale=1 改成 scale=3:噪声标准差变大,数据点会更分散(离红色真实曲线更远),模型拟合难度增加(MSE会更高);
    • 若把 scale=0.1:噪声极小,数据点几乎贴合真实曲线,模型很容易拟合出完美结果。

四、小例子:直观感受生成的随机数

运行以下代码,就能看到 np.random.normal(0,1,size=(5,1)) 生成的随机噪声是什么样的:

import numpy as np
np.random.seed(42)  # 固定种子,让结果可复现

# 生成5个符合标准正态分布的随机数(2D数组,和x的形状一致)
noise = np.random.normal(0, 1, size=(5, 1))
print("生成的噪声数据:")
print(noise)

输出(每次运行种子42时都相同):

生成的噪声数据:
[[ 0.49671415]
 [-0.1382643 ]
 [ 0.64768854]
 [ 1.52302986]
 [-0.23415337]]

可以看到:

  • 数值围绕0波动(符合均值0);
  • 大部分数值在±1.5之间(符合标准差1,正态分布中约95%的数据在±2σ内);
  • 形状是 (5,1) 的2D数组(如果 x 是 (100,1),这里就会生成100个值)。

五、和代码其他部分的关联

  • 因为 size=x.shape,所以噪声数组和 xy_true 的维度完全匹配(都是 (100,1)),才能用 + 号逐元素相加(广播机制);
  • 之前设置的 np.random.seed(42) 会影响这里的噪声生成——固定种子后,每次运行生成的噪声都一样,确保后续的模型训练、数据划分结果可复现;
  • 噪声的存在是「多项式次数选择」的前提:如果没有噪声(scale=0),高次多项式(如10次)也能完美拟合 y_true,无法体现过拟合(训练集MSE极小但验证集MSE飙升)的现象。

总结

np.random.normal(0, 1, size=x.shape) 的核心作用是:
生成「标准正态分布」的随机噪声,形状与 x 一致,用于给理论模型 y_true 添加不确定性,模拟真实数据的特点——这是后续能区分「欠拟合、合适拟合、过拟合」的关键前提。

posted @ 2025-11-28 21:41  wangya216  阅读(164)  评论(0)    收藏  举报