1.4 用Embedding处理分类特征
传统机器学习的输入数据中一般含有分类特征,对这些特征或字段的处理是特征工程的重要内容之一。
分类(Categorical)特征也被称为离散特征,其数据类型通常是object,而机器学习模型通常只能处理数值数据,所以需要将Categorical数据转换成Numeric数据。
Categorical特征包含两类,我们需要理解它们的具体含义并进行相应转换。
(1)有序(Ordinal)类型
有序类型的Categorical存在自然的顺序结构,所以可以对该类型数据进行升序或者降序排列,比如关于衣服型号特征的值可能有S(Small)、M(Middle)、L(Large)、XL(eXtra Large)等不同尺码,它们之间存在XL>L>M>S的大小关系。
(2)常规(Nominal)类型或无序类型
常规类型或无序类型是常规的Categorical类型,这类特征数据没有大小之分,比如颜色特征的可能值有red、yellow、blue、black等,我们不能对Nominal类型数据进行排序。
可以使用不同的方法将Ordinal类型和Nominal类型数据转换成数字。对于Nominal类型数据,可以使用独热编码进行转换,但当遇到大数据,如一个特征的类别有几百、几千或更多个时,若将这些特征全部转换成独热编码,特征数将巨大!此外,独热编码只是简单把类别数据转换成0或1,无法准确反映这些特征内容隐含的规则或这些类别的分布信息,如一个表示地址的特征,可能包括北京、上海、杭州、纽约、华盛顿、洛杉矶、东京、大阪等,这些属性具有一定分布特性,北京、上海、杭州之间的距离较近,上海与纽约之间的距离应该比较远,而独热编码是无法表示这些内容的。
是否有更好、更有效的处理方法呢?有,就是接下来将介绍的Embedding方法。
近几年,从计算机视觉到自然语言处理再到时间序列预测,神经网络、深度学习的应用越来越广泛。在深度学习的应用过程中,Embedding这样一种将离散变量转变为连续向量的方式在各方面为传统机器学习、神经网络的应用带来极大便利。该技术目前主要有两种应用,自然语言处理中常用的Word Embedding以及用于类别数据的Entity Embedding。
简单来说,Embedding就是用一个低维的向量表示一个事物,可以是一个词、一个类别特征(如商品、电影、物品等)或时间序列特征等。通过学习,Embedding向量可以更准确地表示对应特征的内在含义,使几何距离相近的向量对应的物体有相近的含义,如图1-22所示。
图1-22 可视化german_states_embedding
由图1-22可知,德国的萨克森州、萨克森安哈尔特州、图林根州彼此比较接近,其他各州也有类似属性,这就是Embedding通过多次迭代,从数据中学习到的一些规则。具体代码实现方法请参考本书第11章。
Embedding层往往是神经网络的第一层,它可以训练,可以学习到对应特征的内在关系。含Embedding的网络结构可参考图1-23,所以Embedding有时又称为Learned Embedding。一个模型学习到的Embedding,也可以被其他模型重用。
图1-23 含Embedding层的神经网络结构图
如图1-23所示,两个分类特征(input_3,input_4)转换为Embedding后,与连续性输入特征(input_5)合并在一起,然后,连接全连接层。在训练过程中,Embedding向量不断更新。
在结构化数据上运用神经网络时,Entity Embedding表现得很好。例如,在Kaggle竞赛“预测出租车的距离问题”上获得第1名的解决方案,就是使用Entity Embedding来处理每次乘坐的分类元数据的(Alexandre de Brébisson,2015)。同样,预测Rossmann药店销售任务获得第3名的解决方案使用了比前两个方案更简单的方法:使用简单的前馈神经网络,再加上类别变量的Entity Embedding。这个Rossmann系统包括超过1000个类别的变量,如商店ID(Guo & Berkahn,2016)。作者把比赛结果汇总在论文Entity Embeddings of Categorical Variables中,并使用Entity Embedding对传统机器学习与神经网络进行比较,结果如表1-2所示。
表1-2 传统机器学习与神经网络的对比
注:MAPE是指平均绝对百分比误差。
从表1-2可以看出,如果使用Entity Embedding,神经网络的优势就更加明显了。