机器学习数据预处理归一化、标准化、中心化、零均值化以及One-hot编码转换的一个坑

机器学习过程中,数据预处理的步骤是非常重要的,对于建模人员而言,用于数据分析,预处理,特征工程的时间甚至会多于模型搭建与调优的时间。

常见的数据预处理方法有归一化、标准化、中心化、零均值化,以及独特编码。

我通常是使用sklearn进行数据预处理,以归一化为例,最常用的包是:from sklearn.preprocessing import MinMaxScaler,当我们准备好数据,分割出了训练集与测试集,要对两个部分进行训练的时候,通常应当只对训练集进行fit,得到训练好的归一化标准,对训练集与测试集进行transform得到归一化结果。

这么做的原因显而易见,避免测试集中的数据特征影响了训练集的归一化过程,造成测试集的特征泄露,导致模型结果过拟合,影响模型效果。

有一点需要注意的是,倘若测试集中的数据集不在训练集的最大最小值范围内,则把测试集大于训练集最大值的数据调整为归一化的最大值,把测试集小于训练集最大值的数据调整为归一化的最小值。

不只是归一化,在标准化、中心化、零均值化这些数据预处理方法中,也需要注意这一点。

但在one-hot编码过程中,却恰好相反。

原因是,one-hot编码需要对数据集特定字段的每一个类别进行one-hot编码,如假如我们只对训练集进行one-hot编码额训练,如果测试集中出现了训练集中没有的数据类别,那么将无法对测试集完成one-hot编码动作。

因此,为了保证one-hot编码顺利进行,我们应当将测试集,训练集指定字段合并后的所有类别进行one-hot编码训练。

The End


已发布

分类

,

标签:

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注