You need to enable JavaScript to run this app. 如何直接对已归一化的DataFrame数据执行逆归一化还原原始值
优惠活动
大模型
产品
解决方案
定价
更多

如何直接对已归一化的DataFrame数据执行逆归一化还原原始值

逆归一化实现方法

要完成MinMax归一化后的逆变换,你必须提前知晓每一列原始数据的最大值和最小值,缺少这两个参数无法还原出真实的原始数值。MinMaxScaler的逆变换本质是对归一化公式的反向推导,不依赖原始数据,只依赖归一化时使用的各列最大/最小值参数。

核心公式

默认MinMaxScaler会将数据缩放到[0,1]区间,归一化公式为:
x_norm = (x - x_min) / (x_max - x_min)
反向推导得到逆归一化公式:
x = x_norm * (x_max - x_min) + x_min
其中x为原始值,x_norm为归一化后的值,x_min、x_max为对应列原始数据的最小值、最大值。

代码实现

方法1:手动按公式计算(最直接)

假设你已经提前记录了所有列的原始最大、最小值,存储为字典结构,可直接遍历列计算:

import pandas as pd

# 示例:你需要提前补充所有列的原始min、max值
col_params = {
    "n_rgt_ps": {"min": 0, "max": 120},
    "n_th_ps": {"min": 5, "max": 180},
    "n_lft_ps": {"min": 2, "max": 95},
    # 剩余列按实际情况补充完整
}

df_original = df.copy()
for col in df.columns:
    min_val = col_params[col]["min"]
    max_val = col_params[col]["max"]
    df_original[col] = df_original[col] * (max_val - min_val) + min_val

方法2:使用MinMaxScaler直接调用inverse_transform

可以手动给MinMaxScaler赋值参数,无需拟合原始数据:

from sklearn.preprocessing import MinMaxScaler
import numpy as np
import pandas as pd

# 提取所有列的min、max为数组
col_mins = np.array([col_params[col]["min"] for col in df.columns])
col_maxs = np.array([col_params[col]["max"] for col in df.columns])

# 初始化scaler并手动赋值参数
scaler = MinMaxScaler()
scaler.fit(df) # 仅初始化特征维度,不使用拟合结果
scaler.scale_ = 1/(col_maxs - col_mins)
scaler.min_ = - col_mins / (col_maxs - col_mins)

# 执行逆变换
df_original = pd.DataFrame(scaler.inverse_transform(df), columns=df.columns)

注意事项

  • 如果你归一化时自定义了缩放区间(比如缩放到[-1,1]),需要对应调整逆变换公式,或者在初始化MinMaxScaler时传入对应的feature_range参数再赋值scale_和min_
  • 必须保证所有列的原始最大、最小值和归一化时使用的参数完全一致,否则逆变换结果会有偏差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 02:54:02