发布网友 发布时间:2022-04-21 03:44
共2个回答
热心网友 时间:2022-06-17 19:47
引用谷歌上的一篇论文《The ML Test Score》来回答,在这篇论文里,谷歌总结了非常具体的机器学习系统相关工程实践准则,其中就包含了特征与数据测试。
特征期望值编写到schema中:很多特征的分布情况或数值期望是有一些先验知识可以去校验的。比如一般人身高都在0-3米的范围内、英语中最常见的词是”the”、整体的词频一般服从幂律分布等。我们可以把这些先验领域知识,或是从训练集中计算出的数学期望值编写在数据schema文件中,后续对于新的输入数据,构建完特征后的模型训练数据以及最终上线使用模型时都能进行自动化的检查,避免因为数据不符合预期而导致的错误预测情况。
确保所有的特征都是有用的:在之前的机器学习技术债论文中也有提到研发人员总是倾向于不断往系统中添加新的特征,尤其在上线时间比较紧迫的情况下,缺少细致的特征选择和有效性验证工作。这会导致特征数量越来越多,构建训练集需要花费的时间也越来越长,后续的维护成本也会更高。所以跟业务代码一样,没有帮助的特征也要及时清理,轻装前行。文中给出的方法基本是常见的特征选择法,比如计算特征相关度,使用单独或小批量特征来跑模型看是否有预测能力等。
去除性价比低的特征:计算添加任何一个特征都需要消耗资源,包括生成和训练模型开销,模型预测开销,甚至还要考虑到对上游数据的依赖,额外的库函数引入,特征本身的不稳定性等等。对于任何一个特征的添加,都要综合考虑这些开销与它能带来的性能提升来决定是否引入。如果只是非常有限的效果提升,我们应该果断放弃那些过于复杂的特征。
特征必须遵循业务规范需求:不同的项目对机器学习系统可以使用的数据可能有不同的规范需求,比如可能有些业务禁止我们使用从用户数据中推演出来的特征。所以我们也需要从代码工程层面把这些规范需求进行实现,以避免训练与线上特征出现不一致或违反了业务规范等问题。
数据流水线必须有完善的隐私控制:与上一条类似,机器学习系统从数据源获取用户相关隐私数据时已经通过了相应的控制校验,后续在系统内部流水线做处理时我们也要时刻注意对隐私数据的访问控制。比如各种中间数据集,数据字典的存放与访问控制,上游系统的用户数据删除能够级联更新到机器学习系统的整个链路中,诸如此类需要特别注意的问题。
能够快速开发新特征:一个新特征从提出到实现,测试,上线的整个流程所需要花费的时间决定了整个机器系统迭代演进,响应外部变化的速度。要实现这一点,良好的工程结构、不同模块的抽象设计都是非常重要的。文中没有给具体的例子,不过我们可以借鉴sklearn中pipeline模块设计的思想,以及类似FeatureHub这样的开源系统的实现来不断优化完善特征工程实践。
为特征工程代码写相应的测试:在实验探索阶段,我们经常会写完一个特征之后,粗略地取样一些数据,大致验证通过后就认为这个特征基本没有问题了。但这其中可能就隐藏了不少bug,而且不像业务代码中的错误,要发现这些bug极其困难。所以必须养成良好的习惯,在特征开发阶段就写好相应的测试代码,确保特征的正确性,后续应对各种系统变更也都能很快通过测试来进行快速验证。
以上。希望对题主有帮助。
热心网友 时间:2022-06-17 19:47
机器学习中,有哪些特征选择的工程方法?