You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于训练集DataFrame对测试集Pandas DataFrame做MinMax归一化

基于训练集的MinMaxScaler归一化测试集(不合并数据集)

需求说明

现有两个Pandas DataFrame,已使用MinMaxScaler完成训练集的归一化用于神经网络训练。需要完全基于训练集的最小值和最大值对测试集执行归一化,且不能合并两个数据集(避免测试数据污染训练集统计量),同时适配多列数据集的场景。

示例数据

训练集

colA
13
210
34
40

测试集

colA
12
25

预期归一化结果

colA
10.2
20.5

解决方案

核心思路:复用拟合过训练集的MinMaxScaler对象直接转换测试集。MinMaxScaler在fit()阶段会自动记录每个特征的最小值和最大值,后续transform()时会直接使用这些训练集的统计量,无需手动计算,完美适配多列场景。

完整代码示例

import pandas as pd
from sklearn.preprocessing import MinMaxScaler

# 1. 构建示例数据集(实际场景替换为你的真实数据)
train_df = pd.DataFrame({'colA': [3, 10, 4, 0]}, index=[1, 2, 3, 4])
test_df = pd.DataFrame({'colA': [2, 5]}, index=[1, 2])

# 2. 初始化并拟合训练集(这一步是你已完成的训练集归一化操作)
scaler = MinMaxScaler()
# fit_transform同时完成拟合和训练集转换
train_scaled_df = pd.DataFrame(
    scaler.fit_transform(train_df),
    columns=train_df.columns,
    index=train_df.index
)

# 3. 用训练集拟合好的scaler转换测试集
test_scaled_df = pd.DataFrame(
    scaler.transform(test_df),
    columns=test_df.columns,
    index=test_df.index
)

# 查看结果
print(test_scaled_df)

输出结果

colA
1  0.2
2  0.5

关键说明

  • 绝对不要在测试集上调用fit()或fit_transform(),否则会用测试集的统计量覆盖训练集的记录,导致数据泄露。
  • 多列场景下,scaler会自动为每个特征单独记录训练集的min和max,转换测试集时自动匹配对应列的统计量,无需额外处理。

内容的提问来源于stack exchange,提问作者abootorabi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 13:36:14