05如何处理类别特征?

Categorical Variables: Counting Eggs in theAge of Robotic Chickens

定义:

类别变量:顾名思义代表类别或标签。

比如:

  • 世界上的主要城市
  • 一年四季
  • 一个公司所处的行业(石油、交通、科技)

类别特征值总是有限的

类别特征可以用数值表示,但是不同于其他数值特征,类别变量的值是不可以比较的(石油和交通谁比较大?比不了

如何判断是否该使用类别变量?

两个值是只与它们不同有关,还是还与它们相差多少有关?

大型分类变量在交易记录中尤为常见。

比如:

  • 用户ID
  • IP地址

文档语料库的词汇可以解释为一个大的分类变量,类别是唯一的词。

类别变量的编码

类别特征通常不是数值,例如眼睛的颜色:黑、蓝、棕等,因此需要将这些非数值的特征用数值表示。

一个简单的尝试是简单地将它们用整数表示:1,2,3,…,k。

但是这会导致特征值是可比较的,这和类别特征不可比较的特性相违背。

One-Hot Encoding

利用一组位值,每一位代表一个类别,且每一个类别不能同时属于多个类别,因此这组位置只有一个位可以是on,这就是one-hot encoding

sklearn.preprocessing.OneHotEncoder

每一位都是一个特征,因此,一个有k种可能的类别变量,可以被编码为一个长度为k的特征向量。
在这里插入图片描述

one-hot编码比严格意义上所需的位数多了1,因为如果1到k-1都是0,那么最后一位必然是1。

变量之间是互相关的。

变量只需要k-1个自由度,但是one-hot编码给了它k个自由度。

这带来一个麻烦,当模型是线性模型时,模型预测不唯一。因此,我们需要额外的条件来判断特征对预测的影响。

Dummy Coding

为了解决One-Hot编码的这个问题。Dummy coding用仅k-1个特征来表示原始数据。

pandas.get_dummies

在这里插入图片描述

最后一个全部为0的特征,称为参考类别reference category

Dummy coding和one-hot编码相比,更具可解释性,这可以在一个简单线性回归问题中看出来:

在这里插入图片描述

在这里插入图片描述

我们以上面的假数据用一个简单的线性回归来预测每个城市的房价,简单地以城市类别为输入特征。

特征标注

  • one-hot encoding:
    在这里插入图片描述

  • dummy coding:去掉第一列,则NYC作为参考类别

在这里插入图片描述

模型:

  • one-hot encoding: y = w 1 x 1 + w 2 x 2 + w 3 x 3 + b y=w_1x_1+w_2x_2+w_3x_3+b y=w1x1+w2x2+w3x3+b
  • dummy coding: y = w 2 x 2 + w 3 x 3 + b y=w_2x_2+w_3x_3+b y=w2x2+w3x3+b

训练结果

  • one-hot encoding: y = 166.6667 x 1 + 666.667 x 2 − 833.333 x 3 + 3333.333 y=166.6667x_1+666.667x_2-833.333x_3+3333.333 y=166.6667x1+666.667x2833.333x3+3333.333​​
  • dummy coding: y = 500 x 2 − 1000 x 3 + 3500 y=500x_2-1000x_3+3500 y=500x21000x3+3500​​​

模型解释性

  • one-hot encoding:​截距项3333.333代表了全局的平均值,每一项的系数表示了和全局平均值的差。
  • dummy coding:截距项3500代表了**参考类别reference category(NYC)**项的平均值,每一项的系数是和此类别均值的差。

Effect Coding

Effect coding和dummy coding很类似,唯一的区别是,参考类别的特征值由0变为-1。

在这里插入图片描述

在线性回归模型中,effect coding比dummy coding更具可解释性。

以前面的房价例子为例:
特征标注:参考类别NYC特征值全部改为-1
在这里插入图片描述

模型:

  • y = w 2 x 2 + w 3 x 3 + b y=w_2x_2+w_3x_3+b y=w2x2+w3x3+b

训练结果

  • y = 666.667 x 2 − 833.333 x 3 + 3333.333 y=666.667x_2-833.333x_3+3333.333 y=666.667x2833.333x3+3333.333

模型解释性

  • 截距和系数都和one-hot encoding一致:截距是所有数据的平均值,每一项系数是该项特征对应的均值和全局均值的差(偏离总体均值的距离,偏得越远,对总体均值的影响就越大,因此叫做effect coding)。

  • 但是没有参考类别这一项,将-1,-1输入模型得到参考类别的均值或effect。

可参考:FAQ: What is effect coding?为什么使用effect coding?

https://stats.idre.ucla.edu/other/mult-pkg/faq/general/faqwhat-is-effect-coding/

类别变量编码的优缺点

One-hot encoding:

  • 缺点:冗余:对一个问题,允许由多个模型,对于可解释性来说,不唯一是一个问题。
  • 优点:
    • 每一个特征都对应一个类别
    • 缺失值可以都标注为0
    • 输出变量为总体均值

Dummy coding:

  • 优点:唯一
  • 缺点:
    • 不容易处理缺失值,因为0已经标注给了参考类别
    • 将effect是偏离参考类别均值的effect,这就有点奇怪

Effect coding:

  • 优点:

    • 唯一
    • effect是相对总体均值的
  • 缺点:-1是个稠密向量,这给存储和计算都带来了麻烦,因此,流行的pandas和sklearn库都只包含了one-hot encoding和dummy coding。

处理大量的类别变量

我们面临的挑战是找到一个良好的特征表示,它既能高效利用内存,又能生成快速训练的准确模型。

有两种途径:

  • 用一般的编码,选简单的模型。
  • 压缩特征:
    • Feature hashing,多用于线性模型
    • Bin counting,多用于线性模型和树模型

Feature Hashing

什么是 hash? - 腾讯技术工程的回答 - 知乎 https://www.zhihu.com/question/26762707/answer/890181997

⾼维特征的哈希技巧 - 锅逗逗的文章 - 知乎 https://zhuanlan.zhihu.com/p/161058660

维基百科 https://en.wikipedia.org/wiki/Feature_hashing

Introducing One of the Best Hacks in Machine Learning: the Hashing Trick https://medium.com/value-stream-design/introducing-one-of-the-best-hacks-in-machine-learning-the-hashing-trick-bf6a9c8af18f

Fully Understanding the Hashing Trick https://arxiv.org/abs/1805.08539

Bin Counting

Big Learning Made Easy – with Counts! https://docs.microsoft.com/zh-cn/archive/blogs/machinelearning/big-learning-made-easy-with-counts

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值