我正在使用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
时,它如何知道如何将它们转换回来?
分类特征应显示为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)
OneHot编码后的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 也将保持不变。
分类变量应相应地处理,即使用独热编码
之后,MinMax缩放器不会真正改变编码的特征。
回答您的最后一个问题 - 缩放器只是存储每个输入特征分离的最小值和最大值,因此它可以进行逆变换。独立缩放功能是有意义的 - 它们可能具有不同的规模甚至性质。
缩放分类变量是不必要的,因为在这种类型的变量空间中没有度量的自然意义。
第二个答案 - MinMaxScaler 对象在拟合到数据(规范化变量长度的数组)后保持scale_, data_range_, data_min_ data_max_
。
此属性启用每个要素的逆变换。