数据预处理-什么时候独热编码和归一化

数据的无量纲化包括中心化(Zero-centered或者Mean-subtraction)处理和缩放处理
中心化是减去某个固定值,即平移数据。
缩放本质是通过除法,将数据固定在某个范围之中,取对数也算一种缩放处理。

数据归一化Normalization或Min-Max scaling

x=x-min(x)/max(x)-min(x)
按照最小值中心化后,再按极差缩放
即数据移动了min(x)个单位,且被缩放到了[0,1]之间
归一化后数据服从正态分布

from sklearn.preprocessing import MinMaxScaler
data_after=MinMaxScaler.fit_transform(data)
#可归一化到[5,10]之间
scaler=MinMaxScaler(feature_range=[5,10])
scaler=scaler.fit(data)
data_after=scaler.transform(data)

数据标准化Standardization或Z-score normalization:

x=x-u/σ
按照均值中心化,再按标准差缩放
数据服从均值为0,方差为1的正态分布即标准正态分布

from sklearn.preprocessing import StandarScaler
scaler=StandardScaler()
sclaer.fit(data)
data_after=scaler.transform(data)


对于standardscaler和Minmaxscaler来说,控制NaN会被当做缺失值,fit时候忽略,在transform的时候保持缺失NaN状态。

大多数情况选择StandardScaler,因为MinMaxScaler对于异常值非常敏感。

什么情况下(不)需要归一化?

需要: 基于参数的模型或基于距离的模型,都是要进行特征的归一化。
不需要:基于树的方法是不需要进行特征的归一化,例如随机森林,bagging 和 boosting等。


编码和哑变量

preprocessing.LabelEncoder:标签专用,分类转换为分类数值
preprocessing.OrdinalEncoder:特征专用

独热编码

preprocessing.OneHotEncoder 针对无序分类特征
比如舱门(S,C,Q)三者独立,彼此无联系 三者之间没有顺序关系
S:[1,0,0]
C:[0,1,0]
Q:[0,0,1]

独热编码的优缺点

优点:独热编码解决了分类器不好处理属性数据的问题,在一定程度上也起到了扩充特征的作用。它的值只有0和1,不同的类型存储在垂直的空间。

缺点:当类别的数量很多时,特征空间会变得非常大,成为一个高维稀疏矩阵。在这种情况下,一般可以用PCA来减少维度。而且one hot encoding+PCA这种组合在实际中也非常有用。

什么情况下(不)用独热编码?

用:独热编码用来解决类别型数据的离散值问题,

不用:将离散型特征进行one-hot编码的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one-hot编码就可以很合理的计算出距离,那么就没必要进行one-hot编码。有些基于树的算法在处理变量时,并不是基于向量空间度量,数值只是个类别符号,即没有偏序关系,所以不用进行独热编码。 Tree Model不太需要one-hot编码: 对于决策树来说,one-hot的本质是增加树的深度。

总的来说,要是one hot encoding的类别数目不太多,建议优先考虑。

你可能感兴趣的:(数据预处理-什么时候独热编码和归一化)