我正在使用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
时,它如何知道如何将它们转换回来?
答案 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_
(规范化变量长度的数组)。
此属性启用每个要素的逆转换。