缩放数组 (sklearn) - python

Scaling an array (sklearn) - python

过去几个小时我一直在努力解决这个问题,但我遇到了很多问题。我想使用 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])

您使用以下公式计算特定列的 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 列的值是所需值,即使用建议的逆标准化公式计算的值。

希望这会有所帮助。

不断提问,不断成长:)