【问题标题】:Scaling an array (sklearn) - python缩放数组(sklearn) - python
【发布时间】:2018-12-29 03:35:07
【问题描述】:

在过去的几个小时里,我一直试图解决这个问题,但我遇到了很多问题。我想使用 sklearn 的 MinMaxScaler。

公式是这样的

Xnorm = X-Xmin / Xmax-Xmin

我想将该公式应用于某些数组位置,但无法弄清楚如何也应用逆公式,例如

Xnorm = Xmax-X / Xmax-Xmin

我的尝试:我想对数组中的第一个和第三个值以及数组中的第二个值进行标准化我想从上面的公式中得到逆标准化

X = np.array([[-0.23685953,  0.04296864,  0.94160742],  
              [-0.23685953,  1.05043547,  0.67673782],
              [0.12831355,  0.16017461,  0.27031023]])


from sklearn import preprocessing
minmax_scale = preprocessing.MinMaxScaler().fit(X)
X_std = minmax_scale.transform(X.iloc[:,np.r_[1,3])

【问题讨论】:

    标签: python numpy scikit-learn sklearn-pandas numpy-ndarray


    【解决方案1】:

    您使用公式为特定列计算 Xnorm 的任务:-

    Xnorm = Xmax-X / Xmax-Xmin

    如果您反转该特定列中值的符号,然后在该列中应用基本标准化,则可以解决。

    证明

    如果一列的最大值为 A 最小值为 B ,所有的值乘以 -1 后,新的最小值元素的绝对值将变为 |A|

    (所以分子将被计算为 { -1*X - -1*A } == { A - X } ),

    并且分母的相对差异将保持不变。


    在您的测试用例上实现逻辑:-

    import numpy as np
    X = np.array([[-0.23685953,  0.04296864,  0.94160742],  
                  [-0.23685953,  1.05043547,  0.67673782],
                  [0.12831355,  0.16017461,  0.27031023]])
    
    
    from sklearn import preprocessing
    X[:, 1] =  -1*X[:, 1]
    minmax_scale = preprocessing.MinMaxScaler().fit(X)
    X_std = minmax_scale.transform(X)
    

    在打印 X_std 时,我们得到:-

    array([[0.        , 1.        , 1.        ],
           [0.        , 0.        , 0.60543616],
           [1.        , 0.8836627 , 0.        ]])
    

    这表明第 2 列的值是所需值,即使用建议的逆标准化公式计算的值。

    希望这会有所帮助。

    不断询问,不断成长:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 2015-10-28
      • 2014-08-29
      • 2020-03-09
      • 2017-10-05
      • 1970-01-01
      • 2019-11-24
      相关资源
      最近更新 更多