如何从缩放数据重建原始数据?

How to reconstruct raw data from scaled data?

我有一些数据,我在这些数据上应用了 scikit-learn 的缩放。 缩放后我想恢复原始数据。这可能吗?如果没有,我怎样才能得到原始数据的对应关系。

这是一个玩具示例

from sklearn.datasets import load_iris
from sklearn.preprocessing import scale
iris = load_iris()
X = iris.data
X_scale = scale(X)
print X[:4]
print X_scale[:4]

生产

[[ 5.1  3.5  1.4  0.2]
 [ 4.9  3.   1.4  0.2]
 [ 4.7  3.2  1.3  0.2]
 [ 4.6  3.1  1.5  0.2]]
[[-0.90068117  1.03205722 -1.3412724  -1.31297673]
 [-1.14301691 -0.1249576  -1.3412724  -1.31297673]
 [-1.38535265  0.33784833 -1.39813811 -1.31297673]
 [-1.50652052  0.10644536 -1.2844067  -1.31297673]]

如何从第二个数据中恢复出原始数据?

最常见的特征缩放方法之一是通过将数据集的平均值设置为零,将标准差设置为 1 来缩放数据。这对许多学习算法都非常有用。只需使用以下内容即可实现:

scaled_array = (original_array - mean_of_array)/std_of_array

在 Sklearn 中,每个数组列似乎都以这种方式缩放。要找到原始数据,只需重新排列以上内容,或者只需计算未缩放数据中每一列的标准差和平均值。然后,您可以随时使用它将缩放后的数据转换回原始数据。

有关 Sklearn 的缩放如何工作的更多信息,文档是 here. To understand more about feature scaling generally, the wiki page 是一个很好的起点。

MarkyD43 已经很好地回答了这个问题。这是将数据转换回原始版本的代码版本

from sklearn.datasets import load_iris
from sklearn.preprocessing import scale
iris = load_iris()
X = iris.data

mean_of_array = X.mean(axis=0)
std_of_array = X.std(axis=0)

X_scale = scale(X)

X_original = (X_scale * std_of_array) + mean_of_array

print X[:4]
print X_original[:4]

生产

[[ 5.1  3.5  1.4  0.2]
 [ 4.9  3.   1.4  0.2]
 [ 4.7  3.2  1.3  0.2]
 [ 4.6  3.1  1.5  0.2]]
[[ 5.1  3.5  1.4  0.2]
 [ 4.9  3.   1.4  0.2]
 [ 4.7  3.2  1.3  0.2]
 [ 4.6  3.1  1.5  0.2]]