Pandas 中的非标准化数据框

Posted

技术标签:

【中文标题】Pandas 中的非标准化数据框【英文标题】:Un-Normalise Data Frame in Pandas 【发布时间】: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 【参考方案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 也适用于多个目标。

以上是关于Pandas 中的非标准化数据框的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 获取部分数据框并标准化值

pandas 在特定时间(不是午夜)将数据帧标准化为数据(引号)

Pandas Groupby:同一列上的聚合,但总计基于两个不同的标准/数据框

在特定列标准化Pandas DataFrame

pandas:是不是可以使用任意长的布尔标准过滤数据帧?

Pandas Groupby 加权标准差