ML&DEV[4] | 系统理解特征工程

【ML&DEV】

这是大家没有看过的船新栏目!ML表示机器学习,DEV表示开发,本专栏旨在为大家分享作为算法工程师的工作,机器学习生态下的有关模型方法和技术,从数据生产到模型部署维护监控全流程,预备知识、理论、技术、经验等都会涉及,近期内容以入门线路为主,敬请期待!

往期回顾:

为什么要写这篇文章

首先,近期看完了《特征工程入门与实践》这本书,感觉收获非常大,其次,其实在工作中能够明显感觉到,特征工程的作用有很多时候效用会高于模型,而且改进成本相对低很多,last but not least,在前一条理由下,现在很多人其实都没有关注于特征工程或者在学习特征工程(个人感觉很可能和科研导向有关,科研确实应该注重模型更多),所以今天写一篇文章来讨论一下特征工程的整体思路。

事先说明,本文部分内容参考了这本书——《特征工程入门与实践》,下称“这本书”。另外本文不涉及具体的方法解释,会去提名词,名词背后详细概念自己去查哈~本文主要给大家梳理好特征工程的思路。

当然的,为了让大家能全面理解特征工程,我把一份整理的很好的材料放在这里,也是本书。

懒人目录:

  • 什么是特征工程

  • 对数据的理解

  • 特征工程的内容

  • 如何评估特征工程效果

什么是特征工程

在这本书里面,给出了一个定义,我觉得很精辟。

特征工程是这样一个过程:将数据转化为能更好地表示潜在问题的特征,从而提高机器学习性能。

划重点,表示潜在问题、提高机器学习性能,所以但凡能实现这个目标的,我们都可以称其为特征工程方法的一种。

另外有一种“特征调不好,调参调到老”的说法,因此学好特征工程绝对对你的算法性能有很大提升,甚至让你的模型有四两拨千斤的作用。

对数据的理解

这可能是我最喜欢的地方,对数据的理解我自己一直在探索,可是没有一个系统性的方案可以概括,这本书给了我答案。

首先是,我们常拿到的数据都是规则的,例如excel、数据库的形式,这种比较规范规整的,但是还有的时候我们拿到的是非结构化的数据,需要我们去提取和处理,例如日志数据、文本数据等。

然后,这本书把数据分为了4个等级,这4个等级的确认将会很有利于我们对数据的理解:

  • 定类等级。离散无序,不可计算。例如用户ID、地点等。

  • 定序等级。有顺序,可比较,但是不能计算。例如考试排名。

  • 定距等级。数字大小有意义,数字的差别有意义。例如摄氏度,100度不能认为是50度的2倍(详见摄氏度的定义)。

  • 定比等级。不仅有意义可计算,还有绝对零点,此时可以做除法之类的操作,是操作最灵活的数据了。

分了这个几个等级有什么用呢,其实就是在进行分析、转化时,你能知道哪些操作可行,哪些操作适合,那么此时就可以有这么一个工作流程:

  1. 数据有没有组织,结构化还是非结构化的。

  2. 每列数据是定量还是定性的,单元格上的数代表数值还是字符串。

  3. 该列出于什么等级,定类定序定距定比。

  4. 可以做什么可视化和处理。

简单地说,就是下面这个表:

640?wx_fmt=jpeg

特征工程有什么工作

根据这本书的内容,分为了清洗、构建、选择、学习,这几个部分。

清洗

这是最为基本的过程。拿了数据,数据里面可能存在很多缺失、错误的内容,此时我们需要识别、处理这些内容,以保证我们的数据是足够干净,以支撑我们未来机器学习的训练和应用。

首先是识别,对于缺失的,其实非常好识别,但是对错误的,难度其实就比较高了,我们一般很难能够找到错误的数据,只能去推测,很可能是错的,或者错的太明显的,我们能尽可能的减少这种错误,其实就已经能对数据质量提升很多了,方法很多,我简单列举一些:

  • 首先一定是根据业务逻辑筛选,有一些明显就是违反业务的,例如一个人一天跑了1w公里,肯定是有问题的对吧。

  • 然后,问题实质上就转为了离群点检测,通过特定的手段,例如正态分布的3sigema、孤立森林、密度聚类等去检测。

然后就应该是处理了,在我看来,是指上就归结到3点:

  • 删。空或者错的太多的,就要删,纵向某个属性问题太多就不能用,横向样本问题太多也不能用,直接删。

  • 补。对于空的或者是错的,可以用0、平均数或者众数、设计新值等方式来补充。

  • 归一化。除非你后续就是计划用树类的模型,否则建议所有数据集最好都做一下归一化,此处强调的是列归一化,每个属性尽量都能映射到相同的分布下,例如z分数标准化、最大最小标准化,另外行标准化也可以做,尽可能让每一行的向量长度一致。

构建

构建的方法很多,但无一不在考验你对业务的理解以及对数据操作的熟练程度,这里先谈方法,再谈这个玄学抽象的“数据敏感度”。

首先要说的是基本特征的构建,这些特征一般不需要经过特别的计算,只是简单的转化,就能够灌入机器学习模型中完成一版基线模型。而这块,还是建议从数据等级来讨论具体的操作方法。

  • 定类等级,就可以考虑使用one-hot或者虚拟变量的方式转化。

  • 定序等级,其使用0-1-2等非连续的顺序值标注即可,当然按照定类去做也可以。

  • 定距和定比,则可以用分箱的方法转化为定序或者定类去操作也可以。

当然的,这都是一些基础操作,对于高等级的数据,定距和定比,由于数据本身的连续性,可操作空间大了很多,所以也有了很多操作,但是这些操作很多时候就开始要基于业务了。

  • 特征的交叉和组合。

  • 多项式计算,例如某个特征的高次方、求正弦余弦等。

当然的,对于特殊的数据格式,我们也有特殊的方法,对文本,我们有从TFIDF开始到现在BERT一系列的文本表示模型等等,甚至引入深度学习等进行计算。

说白了,就是,你拿到了数据,肯定不可以一大股脑的就灌进模型,需要转化,一方面要根据模型本身的特质,另一方面要看具体的业务和你的模型目标,这样才能找到更加合适的特征,从而得到性能提升。

选择

特征选择应该是很多特征工程中非常喜欢说的一步了,毕竟是这里应该是最为系统的一块了,有成型的方法和模型。在这里,文章里面谈了一句话:

特征选择尝试剔除数据中的噪声。

但是在我看来,更应该理解为,选择更加格式的特征来为模型服务,毕竟不是所有特征都有利于分类或者回归,这里面当然包括去除噪声,但是不局限于去除噪声。

下面来总结一下特征选择中存在的方法吧。

  • 基于统计的特征选择。说白了就是直接通过某个指标来判断他对预测的共现程度,如pearson相关系数、假设检验等,在《统计自然语言处理》中甚至说过信息增益等。

  • 模型层面有正则化等方式处理,这个其实就是在模型层去做的特征选择了。

  • 基于业务,有的时候就是根据业务去筛选,有没有重复、多余、无效之类的。

另外补充一下,这本书提到了转换,这是我个人觉得这本书不敢苟同的地方,整一章就谈了PCA、LDA,其实还有很多深度学习层面的内容,其实都算转换,而且很多我觉得是可以放在构建里面的。

如何评估特征工程效果

评估在这里其实并不是一个复杂的动作,我们先回归一下我提到的特征工程的概念。

特征工程是这样一个过程:将数据转化为能更好地表示潜在问题的特征,从而提高机器学习性能。

提升机器学习性能,这个就是特征工程的目标,那么,只要性能提升了,我们的特诊工程策略其实就成功了,就这么简单。对于特征工程策略A与特征工程策略B,用同一个模型,对比预测性能,即可知道我们的特征工程策略哪个好。

当然的,要评价模型,就比较复杂了,要选择最适合问题的指标,然后进行对比,才是有效的,这个就和选择信用卡一样,在竞争如此激烈的环境下,每家银行都好比一个特征工程策略,而用户就是评价模型。

经过多重模型的筛选,招商银行信用卡跃然成为了市场占有量第一的信用卡。可以说是经过多个特征工程的有效评估,效果依然很好。这跟招商银行针对用户的不同喜好,定制的各种联名卡是密不可分的。针对广大打王者荣耀的客户不仅订制了各种炫酷特效的英雄卡面,还争取到了,新秀丽的双肩背包。针对年轻人(30周岁以下)出去旅游的时候比较多,订制了young卡,发卡使用寄送行李箱,满足大家出行需求,等等。招行信用卡,你值得拥有!快来扫码办理吧!

640?wx_fmt=png

●●●

点击下方阅读原文 或 扫描二维码

加入办理招行信用卡

640?wx_fmt=jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值