【问题标题】:How to reconstruct raw data from scaled data?如何从缩放数据中重建原始数据?
【发布时间】:2015-11-30 08:41:24
【问题描述】:

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

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

【问题讨论】:

    标签: python machine-learning scipy scikit-learn


    【解决方案1】:

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

    scaled_array = (original_array - mean_of_array)/std_of_array
    

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

    有关 Sklearn 的缩放工作原理的更多信息,文档是 here。要了解有关特征缩放的更多信息,wiki page 是一个很好的起点。

    【讨论】:

    • 谢谢,这是一个很好的答案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-08
      • 2019-12-08
      • 2011-05-13
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      相关资源
      最近更新 更多