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

时间:2015-11-30 08:41:24

标签: python machine-learning scipy scikit-learn

我有一些数据,我使用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]]

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

2 个答案:

答案 0 :(得分:1)

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

scaled_array = (original_array - mean_of_array)/std_of_array

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

有关Sklearn缩放如何工作的详细信息,文档为here。要了解有关功能扩展的更多信息,wiki page是一个很好的起点。

答案 1 :(得分:0)

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]]