问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

警惕“特征工程”中的陷阱

发布网友 发布时间:2022-12-10 02:43

我来回答

1个回答

热心网友 时间:2023-09-18 02:10

特征工程(Feature Engineering)是机器学习中的重要环节。在传统的项目中,百分之七十以上的时间都花在了预处理数据上(Data Preprocessing),其中特征工程消耗了很多时间。

一般来说,特征工程涵盖的内容非常广泛,包括从缺失值补全、特征选择、维度压缩,到对输入数据的范围进行变换(Data Scaling)等。举个简单的例子,一个K-近邻算法的输入数据有两个特征 {X_1,X_2} ,但 X_1 这个特征的取值范围在 [0,1] 而 X_2 的范围在[-1000,1000] 。不可避免的,K-近邻的结果取决于距离,那么很容易被取值范围大的特征,也就是此处的 X_2 所“垄断”。在这种情况下,把 {X_1,X_2} 的取值调整到可比较的范围上就成了必须。常见的做法有归一化或者标准化,此处不再赘述,可以参考[1]。为了简化内容,本文中的例子仅以归一化作为唯一的特征工程。今天主要说的是:特征工程中的面临的进退两难。

1. 如何保证 训练集、测试集、预测数据 有相同的输入?

以刚才的例子为基础,我们把所有数据按照70:30的比例分为训练集和测试集,并打算使用K-近邻进行训练。那么一个令人困扰的问题是,对训练集的特征做归一化后,测试集的特征怎么办?这是一个非常关键的问题,因为训练集特征归一化后,测试集的特征范围可能就不同了,因此模型失效。一般有几种思路:

方法1:把训练集和测试集合在一起做归一化,这样特征范围就统一了。之后用训练集做训练,那测试集做测试。但很明显的,在训练模型时,不应该包括任何测试集的信息。这种做法会导致存在人为偏差的模型,不能用。

方法2:对训练集单独做归一化,之后对测试集单独做归一化。这种看法看似也可以,重点在于数据量以及数据的排列顺序。在数据量大且数据被充分打乱的前提下,这种做法是可行的。但换句话说,如果有这样的前提假设,那么方法1的结论也是可行的。

方法3:对训练集先做归一化,并保留其归一化参数(如最大、最小值),之后用训练集的归一化参数对测试集做处理。这种做法看似是可以的。但风险在于数据量有限的前提下,训练集的参数会导致测试集的结果异常,如产生极大或者极小的数值。

其实不难看出,从某种意义上说,三种做法是等价的。在数据量大且充分打乱的前提下,训练集和验证集有相同的分布假设,因此用任意一种其实差别不大。然而这样的假设过于乐观,且我们在真实情况下应该只有{训练集+1个测试数据},因此方法2是明显不行的。

于是似乎方法1和方法3都可以。但其实不然,方法1常常被认为是错误的操作,原因是在训练阶段引入了测试数据,这属于未知数据。即使仅仅引入了1个测试数据,如果取值非常极端,依然会导致输出范围有较大的波动。其次,如果对于每一个测试数据都需要用整个训练集来归一的话,那么运算开销会非常大。

那么似乎备选的只有方案3,即保留验证集上的归一化参数,并运用于测试集。这样的做法看似可以,但有不少风险:

不是每种特征工程都可以保存参数,很多特征工程是非常繁复的。

如果测试集数据和训练集数据有很大的差别,那么用测试集的参数会产生异常数据。

2. 可能的解决方案

在模型评估阶段,如果我们假设拥有大量数据,且充分打乱其顺序。那么在划分训练集和测试集前,可以对整体数据进行统一的特征工程。不难看出,这和统计学的大数定理有异曲同工之妙。这种做法是最为高效的,需要的运算量最小。而将“测试数据”暴露给训练模型的风险也并不大,因为大数据量使得分布比较稳定,可以忽略。换个角度来看,当数据量非常大的时候,使用其他方法进行特征工程的开销会过大,不利于模型评估。因此,在模型评估阶段,如果符合以上假设,可以用这种方法(也就是上文的方法1)。但退一步说,如果满足这个条件,那么方法3也是等价的。

在预测阶段,每次假设我们只有1个测试点,那么最佳方案还是保存训练集上特征工程的参数或者模型,并直接用于未知数据的特征工程(也就是上文的方法3)。

但在预测阶段,一个一个数据的预测是非常昂贵的,我们一般会做“批处理”(batch operation)。换句话说,就是攒够一定量的预测数据后统一进行预测。在这种情况下,我们:

利用方法3,按照顺序对每个训练数据进行处理

利用方法1,风险在于(方法1)会影响训练数据且需要重新训模型

利用方法2,此时较为稳妥。在批的尺寸较大,且与训练数据分布相同(接近)时,效果应该与方法3一致,但效率可以得到提升

3. 总结

这篇文章的重点是:“特征工程虽然重要,但极容易在使用中带来风险。”比如在训练时同时误用了测试数据进行特征工程,也叫做数据泄露(data leakage)。但数据泄露其实也是个伪命题,当数据量大且分布相同时,使用哪一种方法得到结果应该都近似等价,而更重要的是运行效率。分类讨论的话,方法1、2、3都有可能是适合的方法。

但我们依然希望能避免类似的风险,因此尽量避免不必要的特征工程,有以下建议:

选择对于特征学习能力强的模型,在数据量允许的情况下可以选择深度学习

避免不必要的特征工程,数据范围比较良好的情况下省略某些特征工程

优先选择对于特征工程要求低的模型,如xgboost等

除此之外,特征工程中还有很多其他风险。比如测试集中出现了训练集中未出现的类别。如果此时做独热编码(one-hot encoding),那么就会出现bug,除非单独赋予一个类别叫做“未知”。同时,储存训练集中的特征工程参数有时候是非常复杂的,有时候甚至会带来过大储存压力,导致模型失效。

因此,特征工程不是万能药,自动的特征抽取模型更加鲁棒和稳定。对特征进行处理时,必需要有一万分的小心,不然很容易出现意想不到的“惊喜”或者“惊吓”。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
可以提前退出“三支一扶”计划吗 能提前退出“三支一扶”计划吗 绒沙金礼品制作工艺 什么叫绒沙金 榖皮巾的意思是什么 IPOD新版本安装会不会影响内存 我的是ipod 4 8G的,我下载了东西以后发现内存是占了,但是显示不出来东西... 为什么我的IPOD下载程序只用了4G却显示用了6.4G 间谍过家家阿尼亚表情包汇总(间谍过家家阿尼亚次子) 关于"化物语"中的女主 战场原黑仪(戦场ヶ原ひたぎ)的1440*900宽屏壁纸... 关于lightgbm处理category特征的理解 Xgboost需要做one-hot编码吗? 热血武宗(上线送648充值卡)哪个平台的激活码最好? 初中数学数与式 方程和不等式 函数的知识总结 方程与不等式的基本性质一样吗?有什么不同?有什么相同? 微信怎么下载7.0版本 围巾掉毛是质量差吗 羊绒围巾为什么掉毛 ...与赵露思都是从网红晋升为明星艺人的,她们的身上有哪些共同特点? 良医第四季在哪里可以观看呢? 粘土手办教程 巧手DIY社团解说词 可以接彩虹社的粘土人单子吗 谁能知道这是什么的耳机吗 lpl解说用的耳麦是什么 彩虹六号阿bin用的什么耳机 刑事诉讼法中规定回避应发生的什么? 有做外汇的吗?有在西城威尔士做外汇的吗? 做外汇投资资金安全吗,求告知 做外汇资金安全吗? 投资外汇是不是选择平台很重要?西城威尔士行吗? 铜镍合金眼镜框是什么材质的? 6061铝合金棒的简介 铝合金板材型号规格 生日祝福语最暖心短句 求二十句朋友生日祝福语 简短精练点的 刑法第78条规定 中华人民刑事诉颂法第七十八条是什么内容 关于罪犯减刑法律规定是什么 证据不足不批捕原因应该怎么处理? 中国法院审理自诉案件是否可先行逮捕 证据不足检察院不批捕的案子怎么处理 电大建筑 工程估价形考1钢筋混凝土工程属于什么工程 建筑工程项目管理形考作业学习过程表现 电大形成性考核 建筑工程监理概论 作业多少分算合格 作为一名房地产估价师学习建筑工程知识的作用 给个现在的龙之谷月之领主的加点 我要刷图的 跪求龙之谷月之领主刷图加点方法要绝对给力!!! 龙之谷,我现在80级月之领主,想重新加点;我要单修魔的,急求帮助啊_百度... 求龙之谷满级{50}月之领主的加点 龙之谷手游月之领主技能怎么加点 月之领主技能加点图