读童话的狼

2020-07-21   阅读量: 1701

​分测试集和训练集,在预处理的前面还是后面

扫码加入数据分析学习群

方法1:把训练集和测试集合在一起做归一化,这样特征范围就统一了。之后用训练集做训练,那测试集做测试。但很明显的,在训练模型时,不应该包括任何测试集的信息。这种做法会导致存在人为偏差的模型,不能用。
方法2:对训练集单独做归一化,之后对测试集单独做归一化。这种看法看似也可以,重点在于数据量以及数据的排列顺序。在数据量大且数据被充分打乱的前提下,这种做法是可行的。但换句话说,如果有这样的前提假设,那么方法1的结论也是可行的。
方法3:对训练集先做归一化,并保留其归一化参数(如最大、最小值),之后用训练集的归一化参数对测试集做处理。这种做法看似是可以的。但风险在于数据量有限的前提下,训练集的参数会导致测试集的结果异常,如产生极大或者极小的数值。

分类讨论的话,方法1、2、3都有可能是适合的方法。但我们依然希望能避免类似的风险,因此尽量避免不必要的特征工程,有以下建议:

选择对于特征学习能力强的模型,在数据量允许的情况下可以选择深度学习
避免不必要的特征工程,数据范围比较良好的情况下省略某些特征工程
优先选择对于特征工程要求低的模型,如xgboost等
除此之外,特征工程中还有很多其他风险。比如测试集中出现了训练集中未出现的类别。如果此时做独热编码(one-hot encoding),那么就会出现bug,除非单独赋予一个类别叫做“未知”。同时,储存训练集中的特征工程参数有时候是非常复杂的,有时候甚至会带来过大储存压力,导致模型失效。

因此,特征工程不是万能药,自动的特征抽取模型更加鲁棒和稳定。对特征进行处理时,必需要有一万分的小心,不然很容易出现意想不到的“惊喜”或者“惊吓”。



添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
25.1982 2 4 关注作者 收藏

评论(0)


暂无数据

推荐课程