【ML】特征类别整理

Situation:

最近在看业务代码,代码中很奇怪,出现了四类特征类型:连续、类别、one-hot、数值类型,然代码中部分类型并无后续操作。看到这四种类型特征,让我费解,为什么是四种?这四种究竟具体指代什么?确定正确?带着问题,开始了查找资料之路,汇总至此,若有不当之处,请批评指正,不吝赐教~~

Target:

1.上述四种类型特征的定义是什么?即什么样的特征能对其归类到上述特征。

2.每一类型特征会给模型带来什么影响。

Action:

首先,在situation中,看到的四种类型特征,并不是特征类别的分类。且往下看:

特征分为:连续特征、类别特征

1.连续特征:可理解为数值型数据,整数和浮点数是连续型数值数据中最常见也是最常使用的数值型数据类型。即使数值型数据可以直接输入到机器学习模型中。

2.类别特征:类别型特征(categorical feature)主要是指年龄,职业,血型等在有限类别内取值的特征。它的原始输入通常是字符串形式,除了决策树族的算法能直接接受类别型特征作为输入,对于支持向量机,逻辑回归等模型来说,必须对其做一定的处理,转换成可靠的数值特征才能正确运行[2]。

处理类别型特征的方法:

  • 序列编码(ordinal encoding)

一般处理类别间具有大小关系的数据,例如期末成绩的 [A, B, C, D] 四挡可以直接转化为 [0, 1, 2, 3]。在转化后,依然保持类别之间的顺序关系。

  • 序列编码(ordinal encoding)

序列编码潜在的定义了类别之间的距离具有相同的含义。
以成绩为例,两个人之间,得分A与B的成绩差,和B与C的成绩差,在进行预测时,是完全等价的,由于 [A, B, C, D] 直观上与成绩正相关,使用序列编码不会带来太大的损失。然而在处理像血型这样的类别特征时,如果将 [A, B, AB, O] 直接编码成 [1, 2, 3, 4],显然A与B和B与AB之间的距离,并不具有相同的含义,甚至是完全抽象的无法理解的意义,此时,序列编码就不适用了。

  • 二进制编码(binary encoder)

先使用序列编码转化为数值形式,再将数值转义成二进制的方式。相对于独热编码,二进制编码更加紧凑,节省存储空间。(效果未必更好)

  • 统计编码

统计各类别在训练集中出现的频率,并将频率作为新的特征。
在某些情况下,具有统计意义的统计编码也是一种值得尝试的技巧。

Result:

1.one-hot是类别特征的一种编码方式,不是一种类型特征。

特征工程中的处理方法(问答形式展现):

【为什么将类别特征二值化?】

二值化数据后,能将输入视为欧拉空间中的一个向量(或称其为欧拉空间中的的embeding向量)

【为什么将特征映射为欧拉空间中的向量?】

因为一些分类、回归、聚类等算法会计算特征间的相似度或者距离,许多距离或者相似度是定义在欧拉空间的,因此我们需要将特征映射到欧拉空间

【为什么将特征映射到欧拉空间需要我们将类别特征二值化?】

举一个例子:一个样本库中,有一个特征X,可指代工作类型,它有三个值,分别为1、2、3,令 x_1 = (1), x_2 = (2), x_3 = (3),那么三个样本之间的距离是多少呐?答曰: d(x_1, x_2) = 1, d(x_2, x_3) = 1, d(x_1, x_3) = 2。表示工作类型1跟工作2的距离小于工作类型1和工作类型3.但是这样的结果有实际意义吗?那么能否再不同的工作类型之间定义一个合理的距离计算方式呐?在上述类别特征的例子中,我们直接计算样本之间的距离,这样可能对所有类别特征来说不那么太完备。那么接下来,我们可以看下,将类别特征映射为向量之后, x_1 = (1, 0, 0), x_2 = (0, 1, 0), x_3 = (0, 0, 1),两个向量之间的距离是sqrt(2).这样一来,将输入二值化,隐式的表明所有类别特征的值与其他特别特征的值都是相等的。

那么,对离散型特征进行one-hot编码是为了让距离的计算显得更加合理。就算他有1000个值,我们也更倾向于将其二值化。

【什么情况下,我们不用做二值化?】

前面已经说过,我们进行二值化的目的是想获得不同值之间有意义的距离。将离散型特征进行one-hot编码的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one-hot编码就可以很合理的计算出距离,那么就没必要进行one-hot编码,比如,该离散特征共有1000个取值,我们分成两组,分别是400和600,两个小组之间的距离有合适的定义,组内的距离也有合适的定义,那就没必要用one-hot 编码
 
离散特征进行one-hot编码后,编码后的特征,其实每一维度的特征都可以看做是连续的特征。就可以跟对连续型特征的归一化方法一样,对每一维特征进行归一化。比如归一化到[-1,1]或归一化到均值为0,方差为1。

 基于树的方法是不需要进行特征的归一化,例如随机森林,bagging 和 boosting等。基于参数的模型或基于距离的模型,都是要进行特征的归一化。

 

参考资料:

1.https://blog.csdn.net/FRBeVrQbN4L/article/details/81140182

2.https://www.jianshu.com/p/fd8355e3d5d5

3.特征工程:连续数值v.s.离散类别的处理方法(二):https://blog.csdn.net/cymy001/article/details/79154135

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值