MinMaxScaler sklearn:我也应该规范化类标签吗?

时间:2017-10-16 10:48:16

标签: python machine-learning scikit-learn deep-learning

我正在使用MLPRegressor,它有5个连续的特征和1个从一组40个值[0,1,2,.., 39]中提取值的特征。

我被告知使用sklearn.preprocessing.MinMaxScaler(feature_range = (0,1))对功能进行规范化可以帮助提高性能,无论是MLP还是LSTM。

因此,我在包含上述功能的Xtrain矩阵中使用它。

然而,对我来说,我应该最小化一个分类变量看起来很奇怪..我应该这样做吗?文档说明(http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html)MInMaxScaler分别规范化每个功能。我是否应该删除分类栏并将所有其他列标准化?

另外,如果它单独规范化每个功能,当我使用inverse_transform时,它如何知道如何将它们转换回来?

3 个答案:

答案 0 :(得分:1)

应该相应地处理分类变量,即使用one-hot encoding

之后,MinMax缩放器不会真正改变编码特征。

回答你的最后一个问题 - 缩放器只为每个输入的feacture separatley存储最小值和最大值,因此它可以进行逆变换。独立扩展功能是有意义的 - 它们可能具有不同的规模甚至性质。

答案 1 :(得分:1)

分类功能应显示为OneHotEncoding。即使您执行归类功能的归一化,也不会损害您的数据。它只是将您的数据从一种形式转换为另一种形式,并保持值的离散性。 请在下面的小代码示例中找到:

from sklearn.preprocessing import OneHotEncoder, MinMaxScaler
data = np.array([-2,-2,-78,-78,-1,-1,0,0,1,1])
scaler = MinMaxScaler(feature_range=(0,1))
normalizedData = scaler.fit_transform(data.reshape(-1,1))
encoder = OneHotEncoder(categories='auto',sparse=False)
encodedData = encoder.fit_transform(normalizedData.reshape(-1,1))
print(encodedData)

OneHotEncoding后的O / P:

[[0. 1. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [1. 0. 0. 0. 0.]
 [1. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]
 [0. 0. 0. 0. 1.]]

即使我直接将数据馈送到编码器(即不进行标准化),O / P也会保持不变。

答案 2 :(得分:0)

缩放分类变量是不必要的,因为在这些类型的变量空间中没有自然的度量标准。

第二个答案 - MinMaxScaler对象在拟合数据后保留scale_, data_range_, data_min_ data_max_(规范化变量长度的数组)。

此属性启用每个要素的逆转换。