机器学习实战:基于Sophon平台的机器学习理论与实践
上QQ阅读APP看书,第一时间看更新

2.1.3 类别特征

类别特征,顾名思义,就是用来表达种类或标签的特征。比如,用类别特征表示的世界上的主要城市、一年的四季,或者行业(石油业、旅游业、科技行业等)。在真实世界的数据集中,类别特征的取值是有限的,一般可以用数值来表示。但与数值特征不一样的是,用来表示类别特征的数值无法与其他数值进行比较(比如石油业与旅行业无法进行比较),这类特征又被称为无序特征


一个简单的问题可以用来区分一个特征是否为类别特征:是两个值之间的差别比较重要,还是两个值不同本身比较重要?500元的商品价格是100元的商品价格的5倍,因此商品价格应该使用连续数值特征来表示。而行业(石油业、旅游业、科技行业等)是无法比较的,因此就是类别特征。


种类庞大的类别特征在交易记录中很常见。比如,许多网络服务提供商通过ID来标识用户,而用户ID就是一个取值从几百到几百万的类别特征,类别数取决于网络服务的用户数量。交易的IP地址是另一个种类庞大的类别特征的例子。IP地址和用户ID都是类别特征,因为它们都是使用数字的形式来表示,并且其大小通常与任务无关。例如,在进行网络欺诈检测时,与个人交易相关的IP地址是重要的特征,可能某些IP产生的欺诈行为比其他IP产生的多,但这并不是因为该IP地址的某些位数比其他IP地址的大。也就是说数值本身无关紧要。


类别特征的取值通常不是数字。例如,眼睛的颜色可以是“黑色”“蓝色”“棕色”等。因此,需要使用编码方法将这些非数值类别变为数值形式。简单地将一个整数(比如1到k)分配给k个可能类别中的每一个是一种可行的方案。但是,由此产生的整数值具有可以相互比较大小的特性,而这种比较在类别特征中是没有意义的。因此,在Sophon中引入了其他的编码方法。


独热编码


独热编码(one-hot encoder)是一种使用二进制(bit)位串来表达类别特征的方法。每一位代表一个可能的类别,由于类别的唯一性,在一组独热编码的位串中只有一位是1,其余位均是0。


例如,对上面提到的行业进行独热编码,如表2-1所示。

表2-1 独热编码示例

独热编码的缺点是容易造成特征维度大幅增加,以及无法处理之前没见过的值。


高势集特征编码


高势集指的是类别取值非常多的类别特征。一个简单的例子就是邮编,每一个城市细分到每一条街道都可能会有不同的邮编,因此邮编的总数可能有成百上千个。随着邮编数量的增多,使用独热编码显然效果不太好,因为会产生非常高维的稀疏特征。因此D.Micci-Barreca等人[32]就提出了一种基于经验贝叶斯理论的方法,这种方法是将高势类别特征(high-cardinality categorical attribute)映射到连续值上的方法。So-phon中的高势集特征编码算子便是基于这一思想实现的。这里不详细展开有关经验贝叶斯理论的介绍,详情可参照算子的说明及原始论文。算子的使用需要指定标签列,因此只适用于有监督学习的数据集。