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 在特定时间(不是午夜)将数据帧标准化为数据(引号)