关于特征是什么?以及特征工程是什么意思?在先前我写的文章中已经为大家详细的介绍过了。本文想继续深入特征中的其中一种——类别型特征,来解答一个我自己遇到的困惑,同时记录成文章供大家一起学习。
【机器学习300问】14、什么是特征工程?http://t.csdnimg.cn/q7lng
一、什么是类别型特征?
特征是用于描述或刻画数据实例的属性、变量或指标。每一个特征代表了原始数据的一个特定维度上的信息,它们是模型进行学习和预测的基础。知道了特征的概念后,再来理解类别型特征就很轻松了。
(1)举个例子吧
现在有一件衣服,我想让你描述一下具体这件衣服。你的衣服可能按颜色分为“红色”、“蓝色”、“绿色”,按款式分为“T恤”、“衬衫”、“毛衣”。在这里一件具体的衣服=数据实例;衣服的颜色=第一个特征;衣服的款式=第二个特征。
(2)类别型特征的定义
类别型特征是指哪些在有限可能选项中取值的特征。这些有限可能选项通常是离散的,而且大多数情况下是字符串形式的,除了少数模型能够直接处理类别型特征,对于大多数模型来说都需要对类别型特征进行必要的处理,转换成数值型特征才能正常工作。
但有些模型是可以直接处理类别型特征的,比如决策树、随机森林。
二、有哪些处理类别型特征的方式?
在上面的类别特征定义的末尾谈到了类别特征的特点,它一般是非数字的,所以有必要对其进行转换,那么常见的处理类别型特征的方式有哪些呢:
(1)序号编码(Ordinal Encoding)
序号编码通常处理类别特征之间存在明确的顺序关系(即等级或次序意义)时。比如学习成绩可以分为高中低三个档次,序号编码会按照大小关系对类别型特征赋予一个数值ID,在学习成绩这个特征中就可以按照高=3,中=2,低=1的规则来转换,转换后的编码保留了原有的大小关系。
教育程度 | 序号编码 |
小学 | 0 |
中学 | 1 |
高中 | 2 |
专科 | 3 |
本科 | 4 |
硕士 | 5 |
博士 | 6 |
(2)标签编码(Label Encoding)
标签编码方式是说将每一个类别赋予一个唯一的整数标签,但并不表达类别之间的顺序关系。有点想强行硬对应起来,如果模型不关心类别之间的顺序,就可以使用这种方法。
车辆类型 | 标签编码 |
轿车 | 0 |
卡车 | 1 |
巴士 | 2 |
摩托车 | 3 |
自行车 | 4 |
(3)独热编码(One-hot Encoding)
对于类别间不存在大小关系或顺序意义的特征,最常用的是独热编码。这种方法将每一个类别转化为一个二进制向量,向量中只有一个位置为1(类别存在时为1),其余均为0。独热中的“独”就是指只有一个,“热”就是指1。
例如,性别(男、女)会被编码为二维向量特征:[1, 0] 表示男性,[0, 1] 表示女性。
例如,血型(A型、B型、AB型、O型)会被编码为四维向量特征:[1,0,0,0]表示A型,[0,1,0,0]表示B型,[0,0,1,0]表示AB型,[0,0,0,1]表示O型。
血型 | A型 | B型 | AB型 | O型 |
---|---|---|---|---|
A型 | 1 | 0 | 0 | 0 |
B型 | 0 | 1 | 0 | 0 |
AB型 | 0 | 0 | 1 | 0 |
O型 | 0 | 0 | 0 | 1 |
独热编码是一种有效的离散特征编码手段,但在实际应用中,使用独热编码时需要注意几个问题:
① 使用稀疏向量节省空间
当类别很多时,独热编码会导致特征空间的维度急剧增加,尤其是对于那些低频的类别,可能会产生大量的零值。这时,可以利用稀疏矩阵存储这些特征向量,以节省存储空间和计算资源。
② 配合特征选择降低维度
在高维数据环境下,由于维度灾难等问题,所有独热编码生成的特征不一定都对模型性能有帮助,反而可能导致过拟合。因此,需要结合特征选择的方法来剔除冗余或不相关的特征,减少维度,提高模型效率和泛化能力。
(4)二进制编码(Binary Encoding)
二进制编码是介于独热编码和标签编码之间的方法,它将类别转换为二进制代码,从而减少新的变量维度。它主要分为两步:
- 用序号编码给每个类别赋予一个数值型类别ID
- 将类别ID对应的二进制编码作为编码结果
血型 | 序号编码 | 二进制编码 |
---|---|---|
A型 | 1 | 001 |
B型 | 2 | 010 |
AB型 | 3 | 011 |
O型 | 4 | 100 |