首页 > > > 全自动机器学习:自动特征筛选(A)
作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R/Python),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等。知乎专栏:R语言数据挖掘 邮箱:huang.tian-yuan@qq.com.欢迎合作交流。
从前我一直认为数据科学家需要在懂业务的前提下来做特征工程,但是在实际工作中,当你看到成百上千个特征的时候,真的不可能一个一个去理解了再来做特征工程。机器学习就是为了能够利用计算机辅助业务问题理解,如果已经理解了,机器学习就可以退位了。因此,必须要想出一套通用的全自动特征筛选方法,从而能够在数据挖掘的开始阶段快速实现降维。
高维数据的维度灾难问题,一直是困扰着数据科学家。这究竟是一个什么问题?这里打个比方:独角兽公司HOPE现在要找人来做人工智能商业项目,招人,怎么才能对这些人进行遴选并有效组织起来做好这个项目呢?这就是特征工程的实质。找到合适的人(特征),这才能够更好地往目标迈进。
正如我们需要评价一个人能否胜任一个岗位,我们也需要对特征进行应用的评估,从而判定每个特征是否应该进入模型。这里有必要对一些基本的问题进行阐述(同时欢迎大佬进行补充):
1、近零方差变量需要直接剔除。近零方差变量,可以视为常数项,比如某个特征在所有样本中取值均为一个常数(比如0或缺失)。这样的特征明显不能够提供信息,可以直接删掉。
2、分类变量的处理。这是一个能够独自再写好多帖子的话题,但是在这里也不能随便忽略掉。计算机从来只认数字,但是在现实中却充满了分类变量,在R语言中我们称之为因子变量(factor)。从科学的角度出发,做one-hot encoding是最为科学的,比如性别分为男女,那么在特征表示中就是两列,是否为男一列与是否为女一列(当然在二值变量中,其实存在一列就足够了)。但是当一个分类中类别过多的时候,使用one-hot会加重维度灾难。
所以类别太多是机器的问题么?不,是人类的问题。能够把一个特征分为n个类别,n还无比地大,这本身就是一个问题。特征的终极目标在于区分不同的样本,特征一多就错综复杂,这样就会存在很多少数类,这样少数类的样本就会不足。所以,如果可以的话,最好就在源头解决问题:不要构造包含过多分类的特征,如果已经构造了,看看是否能够通过归并来减少类别(基于业务背景)。仔细思考类别之间是否存在重叠,也就是一个样本是否可能同时能够归为多个类别,这时候就要对类别进行拆分。
尽管不是机器的问题,机器是否能够解决多分类问题?答案是,可以。一个典型的例子就是信用评分卡的WOE分箱法,根据类别对响应变量影响的方向和程度进行分箱,构造特征。此外,自然语言处理中的embedding(词嵌入)也是非常好的方法,也许能够推广到其他的特征工程中。
3、共线性问题的处理。变量直接存在相关性,这是很常见的。试想,如果我们的数据中存在一模一样的特征,那剔除掉其中一个是毫无问题的(类比构建团队,就是团队中不需要技能重叠得太厉害的多个人,只要一两个优秀的就够了)。关于共线性的问题,我在HopeR:R语言信用评分卡:拒绝推断(3) 特征筛选B中已经有所解释,这里不再赘述。除了之前提到的方法,PCA、SVD等方法也能够实现降维,但是这样会降低特征的可解释性,因此这里不会采用(也不推荐采用,机器学习是把业务问题变清晰,不是变模糊,当然特定问题也许这种方法会有效,欢迎各位大佬一同探讨)。
4、缺失值的处理。之前在HopeR:R语言信用评分卡:拒绝推断(4) 特征工程A提到过,缺失值本身可能蕴藏着信息,因此不能简单插补了事。其实插补也许是“最糟糕”的处理方式,它是一个零和博弈,插值可能会直接毁掉一个特征,引入额外的噪音。如果插值方法的前提是正确的,那么会帮助模型拟合,但是在更多的情况下它只会导致模型更差。因此,能够把缺失值视为其中一个类别是最好的选择。
下面再来谈谈特征工程的本质:特征工程就是机器学习本身!特征工程就是机器学习本身!特征工程就是机器学习本身!这不是开玩笑,以推测客户违约情况为例,在极端理想的情况下,如果我们在事前问一个问题就能够得知客户是否会违约,那么就不需要做任何机器学习!机器学习只是辅助我们去找这个特征,而不是胡乱把特征揉成一团就觉得自己在决策中拥有了更高的高度。当然世界不是理想的,每个问题都是复杂性问题,当它复杂到一定程度的时候,我们认为它的随机性太强,是“不可知的”。所有模型都是错的但是一些是有用的,因此机器学习应该是把复杂问题简单化的一种方法,是辅助科学探索的方法,促进业务经验积累的手段。机器学习是在找响应变量的复杂表征方法,特征工程的重要性远大于模型选择和参数调节,而后者应该是为前者服务。也就是说:模型选择、集成学习、超参数调整这些下游的方法,都是末节,它们的本身也是辅助特征工程的一种手段而已,得到的预测值即构造的一个“新的特征”,用来表征响应变量。结论:简单的模型不一定好,过于复杂的模型一定是错的。每一个把简单规则变复杂的过程,都需要给模型表现带来实质性的提高,单位复杂度的特征给表现带来的提高称之为建模效率。我们要追求的,应该是建模效率的最大化。在“简单-复杂”、“不准确-准确”之间找到平衡,是为建模的艺术,是基于技术而超脱技术的一种存在。通俗的例子:项目团队,能够招到的人不需要太多,但是都是能干的,真实有效地加快项目进展的。
下面谈谈如何构建全自动特征工程,这里会基于我之前的系列:
HopeR:R语言信用评分卡:拒绝推断(7) 最小样本量确定
这个系列之所以停更了,是因为我觉得,如果不把更加基本的问题弄清楚解决掉,继续做这些东西根本就是白费力气。不过之前的努力积累的经验和认识并没有白费,我们会基于之前的工作,继续探索。因此这里还会沿用之前的数据集,但是背景条件会有所改动,然后来做全自动机器学习的探索。工具包括R和Python,代码会在github中进行记录(hope-data-science/full_automl)。欢迎各位大佬一起进行讨论和探索。
原文作者:;如有侵权,请联系管理员删除。