如何从规范化数组中获取原始数据

时间:2017-10-24 20:53:02

标签: python preprocessor normalize

我在下面给出了一段简单的代码,它根据行对数组进行规范化。

import numpy as np
from sklearn import preprocessing

X = np.asarray([[-1,2,1],
                [4,1,2]], dtype=np.float)

X_normalized = preprocessing.normalize(X, norm='l2')

你能帮助我再次将X标准化转换为X吗?

2 个答案:

答案 0 :(得分:0)

您无法从标准化版本中恢复X.考虑几个数据集的简单情况,每个数据集有2个不同的元素:

[3, 4]
[-18, 20]
[0, 0.0001]

每个都标准化为相同的数据集:

[-1, 1]

映射不是双射:它是多对一的。因此,它不是唯一可逆的。

但是,您可以使用几种简单的技术恢复原始集:

  1. 保持原始数据集完好无损(是的,这很简单)。
  2. 存储标准化参数:均值和标准差(或其平方,方差)。这为您提供了将每个原始元素转换为规范化元素的线性方程;将这个等式反转是微不足道的。

答案 1 :(得分:0)

https://scikit-learn.org/stable/modules/classes.html#module-sklearn.preprocessing中的所有缩放器都具有专门为此设计的inverse_transform方法。

例如,要使用MinMaxScaler缩放和取消缩放DataFrame,可以执行以下操作:

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

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

[Refrence][1]


  [1]: https://stackoverflow.com/questions/43382716/how-can-i-cleanly-normalize-data-and-then-unnormalize-it-later/43383700