如何对训练好的Python模型的新人工测试数据做标准化?
人工生成测试数据的标准化方法
核心结论
必须**复用训练阶段从原始训练集计算得到的均值(mean)和标准差(std)**来标准化人工生成的测试数据,绝对不能把新数据加入原始数据集重新计算,也不能单独对新数据做标准化。
具体操作步骤
- 先确保你已经保存了训练时针对每个维度计算的mean和std:
- 比如训练数据第一维度的均值
mean_dim1、标准差std_dim1,第二维度的均值mean_dim2、标准差std_dim2,这些是训练模型时用来标准化输入的关键统计量。
- 比如训练数据第一维度的均值
- 对人工生成的测试数据,按维度分别套用训练时的标准化公式:
- 第一维度的每个值:
(生成的x值 - mean_dim1) / std_dim1 - 第二维度的固定值:
(固定y值 - mean_dim2) / std_dim2
- 第一维度的每个值:
举个Python代码示例:
import numpy as np # 假设这是训练阶段已经算出的各维度均值和标准差 mean_train = np.array([150.0, 30.0]) # 示例值,替换成你实际训练时的统计量 std_train = np.array([50.0, 5.0]) # 生成测试数据:第一维度101-199,第二维度固定为40 test_data = np.array([[x, 40] for x in range(101, 200)]) # 用训练集的统计量做标准化 normalized_test_data = (test_data - mean_train) / std_train
为什么不能用其他方式?
- 加入原始数据集重新计算:会改变mean和std的数值,导致测试数据的标准化规则和模型训练时的输入规则不一致,模型无法基于训练时学习到的分布做出有效预测。
- 单独标准化新数据:人工生成的数据分布(比如第一维度是101-199)和训练集(仅100、200)差异极大,单独标准化后的数据分布和模型训练时的输入分布完全不匹配,预测结果没有参考价值。
内容的提问来源于stack exchange,提问作者Lico
相关产品推荐
相关产品推荐

