我怎样才能干净地规范化数据,然后在以后“取消规范化”它?

Posted

技术标签:

【中文标题】我怎样才能干净地规范化数据,然后在以后“取消规范化”它?【英文标题】:How can I cleanly normalize data and then "unnormalize" it later? 【发布时间】:2017-09-09 00:17:39 【问题描述】:

我正在使用带有 Tensorflow 神经网络的 Anaconda。我的大部分数据都存储在pandas。 我正在尝试预测加密货币市场。我知道很多人可能都在这样做,而且它很可能不会很有效,我这样做主要是为了让自己熟悉 Tensorflow 和 Anaconda 工具。 我对此很陌生,所以如果我做错了什么或做得不够好,请告诉我。

以下是我获取和处理数据的方式:

    从 quandl.com 下载数据集到 pandas DataFrames 从每个下载的数据集中选择所需的列 连接DataFrames 从新合并的DataFrame 中删除所有 NaN 使用代码df = (df - df.min()) / (df.max() - df.min()) 将新DataFrame 中的每一列(独立)标准化为0.0-1.0 将标准化数据输入我的神经网络 对数据进行非规范化(这是我没有实现的部分)

现在,我的问题是,我怎样才能干净地规范化然后取消规范化这些数据?我意识到,如果我想对数据进行非规范化,我将需要存储初始的 df.min()df.max() 值,但这看起来很难看,感觉很麻烦。 我知道我可以使用 sklearn.preprocessing.MinMaxScaler 规范化数据,但据我所知,我无法使用它对数据进行非规范化。

这可能是我做错了什么,但如果没有一种干净的方法可以使用 Anaconda 或其他库对数据进行规范化和非规范化,我会感到非常惊讶。

【问题讨论】:

在不存储最小值和最大值的情况下无法进行非规范化。我会将规范化封装在一个函数中并返回最大值和最小值(以及规范化数据)以供以后使用。 @Robbie 这就是我打算做的事情,但没有实现这样的事情似乎很奇怪。我接近这个错误吗?我什至应该正常化吗?我正在使用这个网络进行加密货币市场分析 您不必对数据进行归一化以在神经网络中使用它,尽管这样做是出于各种原因(请参阅faqs.org/faqs/ai-faq/neural-nets/part2)。 @Robbie 谢谢,那里有很多有价值的信息。 【参考方案1】:

sklearn.preprocessing 中的所有缩放器都有专门为此设计的 inverse_transform 方法。

例如,要使用 MinMaxScaler 缩放和取消缩放 DataFrame,您可以这样做:

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled = scaler.fit_transform(df)
unscaled = scaler.inverse_transform(scaled)

请记住,transform 函数(以及 fit_transform)返回的是 numpy.array,而不是 pandas.Dataframe

【讨论】:

以上是关于我怎样才能干净地规范化数据,然后在以后“取消规范化”它?的主要内容,如果未能解决你的问题,请参考以下文章

为什么我的机器学习图像如此混乱?

jdk怎样才能卸载干净?

Pandas 中的非标准化数据框

我怎样才能停止/启动/暂停@JmsListener(干净的方式)

我怎样才能写出干净利落的c++构造函数?

我怎样才能明智地处理版本控制和核心数据模型?