机器学习数据预处理的坑
【摘要】 机器学习过程中,数据预处理的步骤是非常重要的,对于建模人员而言,用于数据分析,预处理,特征工程的时间甚至会多于模型搭建与调优的时间。
机器学习过程中,数据预处理的步骤是非常重要的,对于建模人员而言,用于数据分析,预处理,特征工程的时间甚至会多于模型搭建与调优的时间。
常见的数据预处理方法有归一化、标准化、中心化、零均值化,以及独特编码。
我通常是使用sklearn进行数据预处理,以归一化为例,最常用的包是:from sklearn.preprocessing import MinMaxScaler,当我们准备好数据,分割出了训练集与测试集,要对两个部分进行训练的时候,通常应当只对训练集进行fit,得到训练好的归一化标准,对训练集与测试集进行transform得到归一化结果。
这么做的原因显而易见,避免测试集中的数据特征影响了训练集的归一化过程,造成测试集的特征泄露,导致模型结果过拟合,影响模型效果。
有一点需要注意的是,倘若测试集中的数据集不在训练集的最大最小值范围内,则把测试集大于训练集最大值的数据调整为归一化的最大值,把测试集小于训练集最大值的数据调整为归一化的最小值。
不只是归一化,在标准化、中心化、零均值化这些数据预处理方法中,也需要注意这一点。
但在one-hot编码过程中,却恰好相反。
原因是,one-hot编码需要对数据集特定字段的每一个类别进行one-hot编码,如假如我们只对训练集进行one-hot编码额训练,如果测试集中出现了训 练集中没有的数据类别,那么将无法对测试集完成one-hot编码动作。
因此,为了保证one-hot编码顺利进行,我们应当将测试集,训练集指定字段合并后的所有类别进行one-hot编码训练。
====================================================================
本文发表在李思原博客“机器在学习”
原文链接:http://www.siyuanblog.com/?p=2033
欢迎扫码关注我的微信公众号:聚数为塔
=====================================================================
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)