本文转载自机器之心。

选自towardsdatascience

机器之心编译

作者:Andre Ye
编辑:小舟、张倩

one-hot encoding 是一种被广泛使用的编码方法,但也会造成维度过高等问题。因此,medium 的一位博主表示,在编码分类变量方面,我们或许还有更好的选择。

one-hot 编码(one-hot encoding)类似于虚拟变量(dummy variables),是一种将分类变量转换为几个二进制列的方法。其中 1 代表某个输入属于该类别。

从机器学习的角度来看,one-hot 编码并不是一种良好的分类变量编码方法。

众所周知,维数越少越好,但 one-hot 编码却增加了大量的维度。例如,如果用一个序列来表示美国的各个州,那么 one-hot 编码会带来 50 多个维度。

one-hot 编码不仅会为数据集增加大量维度,而且实际上并没有太多信息,很多时候 1 散落在众多零之中,即有用的信息零散地分布在大量数据中。这会导致结果异常稀疏,使其难以进行优化,对于神经网络来说尤其如此。

更糟糕的是,每个信息稀疏列之间都具有线性关系。这意味着一个变量可以很容易地使用其他变量进行预测,导致高维度中出现并行性和多重共线性的问题。

最优数据集由信息具有独立价值的特征组成,但 one-hot 编码创建了一个完全不同的环境。

当然,如果只有三、四个类,那么 one-hot 编码可能不是一个糟糕的选择。但是随着类别的增加,可能还有其他更合适的方案值得探索。本文作者列举了几个方案供读者参考。

目标编码

目标编码(Target encoding)是表示分类列的一种非常有效的方法,并且仅占用一个特征空间,也称为均值编码。该列中的每个值都被该类别的平均目标值替代。这可以更直接地表示分类变量和目标变量之间的关系,并且也是一种很受欢迎的技术方法(尤其是在 Kaggle 比赛中)。

但这种编码方法也有一些缺点。首先,它使模型更难学习均值编码变量和另一个变量之间的关系,仅基于列与目标的关系就在列中绘制相似性。

而最主要的是,这种编码方法对 y 变量非常敏感,这会影响模型提取编码信息的能力。

由于该类别的每个值都被相同的数值替换,因此模型可能会过拟合其见过的编码值(例如将 0.8 与完全不同的值相关联,而不是 0.79),这是把连续尺度上的值视为严重重复的类的结果。

因此,需要仔细监控 y 变量,以防出现异常值。要实现这个目的,就要使用 category_encoders 库。由于目标编码器是一种有监督方法,所以它同时需要 X 和 y 训练集。

from category_encoders import TargetEncoder enc = TargetEncoder(cols=['Name_of_col','Another_name']) training_set = enc.fit_transform(X_train, y_train)

留一法编码

留一法(Leave-one-out)编码试图通过计算平均值(不包括当前行值)来弥补对 y 变量的依赖以及值的多样性。这使异常值的影响趋于平稳,并创建更多样化的编码值。

由于模型不仅要面对每个编码类的相同值,还要面对一个范围值,因此它可以更好地泛化。

在实现方面,可以使用 category_encoders 库中的 LeaveOneOutEncoder。

from category_encoders import LeaveOneOutEncoderenc = LeaveOneOutEncoder(cols=['Name_of_col','Another_name'])training_set = enc.fit_transform(X_train, y_train)

实现类似效果的另一种策略是将正态分布的噪声添加到编码分数中,其中标准差是可以调整的参数。

贝叶斯目标编码

贝叶斯目标编码(Bayesian Target Encoding)是一种使用目标作为编码方法的数学方法。仅使用均值可能是一种欺骗性度量标准,因此贝叶斯目标编码试图结合目标变量分布的其他统计度量。例如其方差或偏度(称为高阶矩「higher moments」)。

然后通过贝叶斯模型合并这些分布的属性,从而产生一种编码,该编码更清楚类别目标分布的各个方面,但是结果的可解释性比较差。

证据权重

证据权重(Weight of Evidence,简称 WoE)是另一种关于分类自变量和因变量之间关系的方案。WoE 源自信用评分领域,曾用于区分用户是违约拖欠还是已经偿还贷款。证据权重的数学定义是优势比的自然对数,即:

ln (% of non events / % of events)

WoE 越高,事件发生的可能性就越大。「Non-events」是不属于某个类的百分比。使用证据权重与因变量建立单调关系,并在逻辑尺度上确保类别,这对于逻辑回归来说很自然。WoE 是另一个衡量指标「Information Value」的关键组成部分。该指标用来衡量特征如何为预测提供信息。

from category_encoders import WOEEncoder enc = WOEEncoder(cols=['Name_of_col','Another_name']) training_set = enc.fit_transform(X_train, y_train)

这些方法都是有监督编码器,或者是考虑目标变量的编码方法,因此在预测任务中通常是更有效的编码器。但是,当需要执行无监督分析时,这些方法并不一定适用。

非线性 PCA

非线性 PCA(Nonlinear PCA)是一种使用分类量化来处理分类变量的主成分分析(PCA)方法。它会找到对类别来说的最佳数值,从而使常规 PCA 的性能(可解释方差)最大化。

原文链接:

https://towardsdatascience.com/stop-one-hot-encoding-your-categorical-variables-bbb0fba89809

END

备注:CV

计算机视觉交流群

扫码备注研究方向拉你入群。

我爱计算机视觉

微信号:aicvml

QQ群:805388940

微博知乎:@我爱计算机视觉

投稿:amos@52cv.net

网站:www.52cv.net

在看,让更多人看到  

one-hot encoding 并非分类变量编码的唯一选择相关推荐

  1. Scikit-learn数据预处理分类变量编码之字段特征编码

    Scikit-learn数据预处理分类变量编码之字段特征编码 1 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 2 字段特征编码简介 ...

  2. Scikit-learn数据预处理分类变量编码之等级变量编码

    Scikit-learn数据预处理分类变量编码之等级变量编码 1 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 2 等级分类变量编码 ...

  3. Scikit-learn数据预处理分类变量编码之多标签二值化

    Scikit-learn数据预处理分类变量编码之多标签二值化 1 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 2 名义变量多标签二 ...

  4. Scikit-learn数据预处理分类变量编码之标签二值化

    Scikit-learn数据预处理分类变量编码之标签二值化 1 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 2 名义变量标签二值化 ...

  5. python 分类变量编码_深度学习编码分类变量的3种方法——AIU人工智能学院

    :数据科学.人工智能从业者的在线大学. 数据科学(Python/R/Julia) 作者 | CDA数据分析师 像Keras中的机器学习和深度学习模型一样,要求所有输入和输出变量均为数字. 这意味着,如 ...

  6. 分类变量编码python处理

    当变量为分类变量,又可称定性变量时,文字时无法进行数学运算的,需要将其转化. 分类变量可以分为有序分类与无序分类,如奖学金的等级.疫情的风险区等属于有序分类,而省份.国家.地区等是没有优劣之分的,属于 ...

  7. R语言分类变量进行回归时的编码方案

    本文首发于公众号:医学和生信笔记,完美观看体验请至公众号查看本文. 文章目录 演示数据 Dummy Coding simple coding Deviation coding Orthogonal P ...

  8. 特征工程:分类变量的处理方式总结

    1.什么是分类变量? 通常来说,分类变量是用来表示某一属性的类别或标识的.例如:一年中的四季,月份,OS,brand,行业(银行.保险.券商.科技......),地区等等:大型分类变量例如:IP地址, ...

  9. 15种分类变量编码方法

    原文:HTML 原题:All about Categorical Variable Encoding:Convert a categorical variable to number for Mach ...

最新文章

  1. 【CSS】【14】CSS中使用背景图像
  2. 设计模式(二)工厂模式
  3. php文本教学,php中文本操作的类
  4. Angularjs1.x 中的 service,factory,provider,constant,value
  5. 【原】Python基础-函数
  6. rsync同步数据到内网
  7. XML文件的读取(XmlParserDemo)
  8. 初学者python笔记(封装、反射、类内置attr属性、包装与授权)
  9. 关于“工作组管理员”
  10. PV EV AC BAC EAC ETC等计算公式
  11. iperf3 网络探测详解(android、iOS、windows)
  12. 菜鸟程序猿的工作心态
  13. 广东省计算机一级网络题分值,计算机一级考试内容题型以及分值
  14. HashMap 排序题
  15. 计算机共享怎么ip设置,如何设置网络打印机共享
  16. 互联网周刊:草根创业选择题
  17. Linux 英文版命令窗口,在LINUX命令行中翻译英文
  18. python读取文件名包含某字符的文件_Python 在当前和子目录中查找文件名中包含指定字符串的文件...
  19. java使用环信信息推送,环信推送详解
  20. 计算机网络调试记录表,计算机网络管理员中级操作技能考核评分记录表.doc

热门文章

  1. OPenCV的中cvErode和cvDilate腐蚀和膨胀函数
  2. Maven手工管理项目
  3. ipv6 服务器虚拟机软件,ipv6虚拟主机是做什么的
  4. html请求接口_软件测试学习教程——LoadRunner实现接口测试
  5. 挑选出tensor中等于0的索引_Pytorch中的5个非常有用的张量操作
  6. stk在计算机仿真中的应用_学习电路仿真:proteus电路仿真软件在ARM中的应用解析...
  7. 2014年高级计算机操作员工种代码36-323不可积分入户深圳吗,2014年深圳积分入户工种加分考证...
  8. qdir 自动创建多级目录_Qt 判断文件或文件夹是否存在及创建文件夹
  9. php常用分页类,php 分页类(整理)
  10. html漂亮的表格模板+背景_教育与课程主题响应式网站着陆页模板