传统机器学习的输入数据中一般含有分类特征,对这些特征或字段的处理是特征工程的重要内容之一。分类(Categorical)特征也被称为离散特征,而机器学习模型通常只能处理数值数据,所以需要将分类数据转换成数值数据。

有序(Ordinal)类型

有序类型的分类特征存在自然的顺序结构,所以可以对该类型数据进行升序或者降序排列,比如关于衣服型号特征的值可能有S (Small)、M (Middle)、L (Large)、XL(eXtra Large)等不同尺码,它们之间存在XL>L>M>S的大小关系。

常规(Nominal)类型或无序类型

常规类型或无序类型是常规的分类特征类型,这类特征数据没有大小之分,比如颜色特征的可能值有red、yellow、blue、black等,我们不能对常规类型数据进行排序。

可以使用不同的方法将有序类型和无序类型数据转换成数字。对于无序类型数据,可以使用独热编码进行转换,但当遇到大数据,如一个特征的类别有几百、几千或更多个时,若将这些特征全部转换成独热编码,特征数将特别巨大。此外,独热编码只是简单把类别数据转换成0或1,无法准确反映这些特征内容隐含的规则或这些类别的分布信息,如一个表示地址的特征,可能包括北京、上海、杭州、纽约、华盛顿、洛杉矶、东京、大阪等,这些属性具有一定分布特性,北京、上海、杭州之间的距离较近,上海与纽约之间的距离应该比较远,而独热编码是无法表示这些内容的,但Embedding方法就可以解决这个问题。

近几年,从计算机视觉到自然语言处理再到时间序列预测,神经网络、深度学习的应用越来越广泛。在深度学习的应用过程中,Embedding这样一种将离散变量转变为连续向量的方式在各方面为传统机器学习、神经网络的应用带来极大便利。该技术目前主要有两种应用,自然语言处理中常用的Word Embedding以及用于类别数据的Entity Embedding。

简单来说,Embedding就是用一个低维的向量表示一个事物,可以是一个词、一个类别特征(如商品、电影、物品等)或时间序列特征等。通过学习,Embedding向量可以更准确地表示对应特征的内在含义,使几何距离相近的向量对应的物体有相近的含义。

Embedding层往往是神经网络的第一层,它可以训练,可以学习到对应特征的内在关系。含Embedding的神经网络结构可参考下图,所以Embedding有时又称为Learned Embedding。一个模型学习到的Embedding,也可以被其他模型重用。

含Embedding的神经网络结构
如上图所示,两个分类特征(input_3,input_4)转换为Embedding后,与连续性输入特征(input_5)合并在一起,然后,连接全连接层。在训练过程中,Embedding向量不断更新。在结构化数据上运用神经网络时,Entity Embedding表现得很好。例如,在Kaggle竞赛“预测出租车的距离问题”上获得第1名的解决方案,就是使用Entity Embedding来处理每次乘坐的分类元数据的。同样,预测Rossmann药店销售任务获得第3名的解决方案使用了比前两个方案更简单的方法:使用简单的前馈神经网络,再加上类别变量的Entity Embedding。这个Rossmann系统包括超过1000个类别的变量,如商店ID。