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=w1​x1​+w2​x2​+w3​x3​+b
  • dummy coding: y = w 2 x 2 + w 3 x 3 + b y=w_2x_2+w_3x_3+b y=w2​x2​+w3​x3​+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.667x2​−833.333x3​+3333.333​​
  • dummy coding: y = 500 x 2 − 1000 x 3 + 3500 y=500x_2-1000x_3+3500 y=500x2​−1000x3​+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=w2​x2​+w3​x3​+b​

训练结果

  • y = 666.667 x 2 − 833.333 x 3 + 3333.333 y=666.667x_2-833.333x_3+3333.333 y=666.667x2​−833.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

05如何处理类别特征?相关推荐

  1. Lightgbm如何处理类别特征?

    本篇文章主要参考柯国霖大神在知乎上的回答,以及自己阅读LGBM的部分源码整理而来. 1.one-hot编码弊端 one-hot编码是处理类别特征的一个通用方法,然而在树模型中,这可能并不一定是一个好的 ...

  2. AI基础:特征工程-类别特征

    0.导语 特征工程到底是什么呢?顾名思义,其本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用. 此之前,我已经写了以下几篇AI基础的快速入门,本篇文章讲解特征工程基础第一部分 ...

  3. [深度学习]CTR模型如何加入稠密连续型|多值类别特征

    一 稠密连续类型特征的处理 在点击率预估问题中,可以尝试的几种方法 1.归一化后直接拼接到embedding向量侧dnn部分,不参与fm部分交叉 归一化的方式可以包括:直接对原始特征做归一化:通过bn ...

  4. 多值类别特征加入CTR预估模型的方法

    [摘要] 本文用图示的方法梳理和介绍了多值类别特征加入到CTR预估模型的一般方法,通俗易懂. 我们都知道一般单值类别特征加入到CTR预估模型的方法是先对单值类别特征进行one-hot,然后和embed ...

  5. KDD2021 | 推荐系统中利用深度哈希方法学习类别特征表示

    本文分享一篇谷歌团队发表在KDD'21的推荐系统文章:不使用嵌入表的方式获得类别特征的表征用于推荐系统[1]. 本文结构组织如下: 背景 已有的类别特征嵌入方法 One-hot Full Embedd ...

  6. 机器学习基础(三十七) —— 处理类别特征

    当类别特征仍保持原始形式时,其取值来自所有可能取值构成的集合而不是一个数字,故不能作为输入. 当各个取值之间是没有顺序关系的并列关系,这样的类别特征称为 名义(nominal)变量.相反,那些存在顺序 ...

  7. 高数量类别特征(high-cardinality categorical attributes)的预处理方法

    high-cardinality categorical attributes,从字面上理解,即对于某个category特征,不同值的数量非常多,这里暂且把它叫做高数量类别属性.反之,即低数量类别属性 ...

  8. 平均数编码:针对高基数定性特征(类别特征)的数据预处理/特征工程

    https://zhuanlan.zhihu.com/p/26308272 (在另一篇文章中,我正在汇总所有已知的数据挖掘特征工程技巧:[持续更新]机器学习特征工程实用技巧大全 - 知乎专栏.) 前言 ...

  9. XGBoost之类别特征的处理

    目录 Label encoding与 One-Hot encoding Label encoding one-hot encoding 利用神经网络的Embedding层处理类别特征 Embeddin ...

最新文章

  1. styleable cannot be resolved or is not a field
  2. C# System.Runtime.InteropServices 相关学习总结
  3. 6-11数据库mysql初始
  4. excel 字符串拼接_Python|处理字符串
  5. 性能测试、 障碍条件和回滚
  6. 软件测试中有关界面测试经验总结
  7. Ghost8.0分区备份与恢复详细图解
  8. 和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例
  9. python内置数据结构和stl_python里有C++ STL中的set和map吗?
  10. 自己对行业未来发展的认知_我们正在建立的认知未来
  11. 搜索引擎技术揭密:网络蜘蛛
  12. 用Matplotlib绘制渐变的彩色曲线
  13. Excel里如何显示“开发工具”?
  14. 在iphone中添加日历库kal
  15. Cousera Machine Learning 笔记:Gradient Descent
  16. 连环画教科书,讲课轻松。听课易懂
  17. MUR6060PT-ASEMI快恢复二极管MUR6060PT
  18. IDEA 设置4个空格代替tab
  19. 凤舞丹心东方美,中华才女竞风采 ——黛兰娜杯《中华才女大赛》七月汇演
  20. 【 同 余 定 理 (补充)】

热门文章

  1. spleeter——人声伴奏分离工具安装
  2. Unity 游戏设计心得体会
  3. 巴巴腾机器人视频_巴巴腾机器人,没想到你是这样的机器人!
  4. 正则表达式输入框验证正整数、负整数、小数点
  5. Electron 自定义托盘实战——桌面计算器
  6. 一篇不错的网文 闻鸡起舞早耕耘,天道酬勤有志人
  7. 一个理财小白如何挑选靠谱的网络理财产品?
  8. Python 理解 精灵 和 精灵组
  9. Back键和Home键的屏蔽
  10. ebp 函数堆栈esp_EBP、ESP作用——esp始终指向栈顶,ebp是在堆栈中寻址用的(就是临时变量嘛)...