【问题标题】:Un-Normalise Data Frame in PandasPandas 中的非标准化数据框
【发布时间】:2021-09-23 11:17:09
【问题描述】:

我有一个数据框,我对其进行规范化以放入算法中。算法运行后,我得到一系列归一化的预测值。我想取消规范化这些值以进行后处理演算。为了标准化,我使用了 MinMax Scaler。如何正确取消标准化这些值?

数据标准化:

# normalise data
df_scaled = preprocessing.MinMaxScaler().fit_transform(df.values)
dfx_scaled = pd.DataFrame(df_scaled, columns=df.columns)

预测值具有数组的形式:

# predicted array of values
array([[0.25426427],
       [0.00605401],
       [0.60834366],
       [0.21384366],
       [0.16588062],
       [0.25884567]])

我考虑过在标准化之前将预测值乘以列目标的最大值,但我认为这是不正确的。 任何帮助表示赞赏!

【问题讨论】:

  • 只要取反函数如果范数y = (x-min)/(max-min)然后x = y*(max-min)+min

标签: python pandas dataframe numpy jupyter-notebook


【解决方案1】:

sklearn 中的变形金刚有一个inverse_transform 方法可以做到这一点。但是,您似乎对功能和目标进行了规范化,因此不能按原样使用。因此,您可以将它们分开:

# prepare two scalers
X_scaler = preprocessing.MinMaxScaler()
y_scaler = preprocessing.MinMaxScaler()

# features are everything but target
X = df.drop(columns="target")
y = df["target"]

# scale them separately
X_scaled = X_scaler.fit_transform(X)
y_scaled = y_scaler.fit_transform(y)

# training..
# ...

# prediction time
preds = ...
unnormalized_preds = y_scaler.inverse_transform(preds)

【讨论】:

  • 还注意到不应该同时扩展训练和测试数据,但这不是我认为问题的主要焦点。
  • 如果有多个目标,我应该一起规范化对吗?仅与其他数据分开
  • @Peter 是的,没错。
  • 例如,在我的实现中我有两个目标,过程是否与上面表示的相同?逆变换的非归一化?
  • @Peter 是的,缩放器(例如,y_scaler)会记住最小/最大值和它转换的形状,因此inverse_transform 也适用于多个目标。
猜你喜欢
  • 2018-09-13
  • 2021-08-20
  • 1970-01-01
  • 2023-03-14
  • 2022-01-24
  • 2021-07-20
  • 1970-01-01
  • 2018-01-26
  • 2018-12-19
相关资源
最近更新 更多