【问题标题】:how to get original data from normalized array如何从标准化数组中获取原始数据
【发布时间】:2018-04-05 19:11:09
【问题描述】:

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

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 吗?

【问题讨论】:

  • 你为什么要把它标准化?您丢弃了无法找回的信息。
  • 我会将 SVM 应用于具有连续和分类属性的数据集。我正在关注一篇论文,该论文建议我将一个热编码器应用于分类数据,然后根据样本对所有数据进行归一化。但后来,我需要取回原来的属性。
  • 你不能再引用X,而不是X_normalized吗?您不能“取消规范化”向量。

标签: python preprocessor normalize


【解决方案1】:

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

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

这些中的每一个都归一化为相同的数据集:

[-1, 1]

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

但是,您可以通过几个简单的技术恢复原始集合:

  1. 保持原始数据集不变(是的,很简单)。
  2. 存储标准化参数:均值和标准差(或其平方,方差)。这为您提供了将每个原始元素转换为归一化元素的线性方程;把这个等式倒过来很简单。

【讨论】:

    【解决方案2】:

    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)
    

    请记住,transform 函数(以及 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
    

    【讨论】:

      猜你喜欢
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 2014-08-01
      相关资源
      最近更新 更多