特征工程是数据科学模型开发的重要组成部分之一。数据科学家把大部分时间花在数据处理和特征工程上,以便训练一个鲁棒模型。数据集由各种类型的特征组成,包括类别、数字、文本、日期时间等。

由于大多数机器学习模型只理解数值向量,所以各种特征需要被设计成数值格式。有各种编码技术可以将文本数据转换为数字格式,包括词袋、Tf-Idf矢量化等等。分类特征可以编码成数字格式,独热编码就是其中一种方式。

什么是独热编码?

独热编码,又称虚拟编码,是一种将分类变量转换为数值向量格式的方法。每个类别在数值向量中都有自己的列或特征,并被转换为0和1的数值向量。

为什么独热编码对于有许多类的列是不可行的?

对于一个有许多类别或层次的分类特征,从机器学习的角度来看独热编码不是一个很好的选择,最明显的原因是它加起来有大量的维度。例如,pin码有大量的级别或类别。创建一个单热编码的向量的Pincode列将使所有的值加起来都为零,只有1列除外。这个数字向量包含的信息不多,只有一大堆0。

数据集维数的增加会引起维数诅咒,从而导致并行性和多重共线性问题。

基本有两种类型的分类特征:

  • 有序变量:离散值的有限变量集,值之间按等级排序。例如:学历、工资等。
  • 标称变量:离散值之间没有关系的有限变量集。例如:国家、Pin码等。

有序分类特征在它们的层次之间有一个已知的关系,使用标签编码是最好的选择。而对于标称变量来说,类别之间没有关系。但是有各种已知的技术来编码标称分类变量,例如独热编码就是其中之一。

但是,对多层分类变量的进行独热编码会导致维度诅咒。在本文中,您可以阅读一些技巧/技巧,这些技巧可以用于多层编码分类变量。

限制X个最常见的类别

独热编码具有多个层次的全部标称分类变量增加了许多的维度。这里有个更好的选择是采用最常见的x个类别,并创建一个虚拟编码或一个独热编码。

例如,我们使用世界城市数据库进行演示,从simple maps网站下载。

数据集中的“国家/地区”列具有224个唯一特征,如果使用独热编码产生224个维度。 在下面可以看到,“国家/地区”列的频率分布非常偏斜,很少有类别具有最高频率。

从频率分布来看,几乎没有类别具有高频,而大多数类别具有非常低的频率。 因此,我们可以将“独热编码”限制为仅出现在前x个频繁出现的类别。 在此可以对x进行试验并确定。

Concluding from the above PDF:
50 top occuring countries covers almost 85% of rows.
100 top occuring countries covers almost 95% of the rows.

因此,限制为100个类别可以覆盖95%的行,并将224个国家的一键编码的维度减少到101个国家(其他100个国家/地区排名最高,其他1个国家/地区)。

频率编码

频率编码是Kaggle比赛中大量使用的一种技术或技巧。 想法是用其计数或频率替换每个类别。

可以使用pandas函数生成“国家/地区”列的频率分布:data [‘country’].value_counts()

现在用数据中的频率替换每个类别,例如,美国将被7768取代,俄罗斯将被1161取代。这项技术实施起来非常广泛,并且在Kagglers中非常流行。

使用此技术的缺点是,如果某些类别具有相同的计数,则模型将对它们进行类似的处理,因此会丢失一些信息。

目标编码

目标编码也称为平均编码是Kagglers广泛使用的一种流行技术,该技术将分类变量表示为一维数值向量。

每个类别都是将变量替换为该类别的平均目标值。 这种技术使我们在目标变量和分类变量之间形成直接关系。

嵌入

对于文本数据类型或具有字符串值且不特定于领域的类别变量,可以使用预先训练的模型(如Word2Vec)将它们转换为词嵌入。如果数据集具有较长的文本类别,则可以对Word2Vec取加权平均值或使用预先训练过的Sent2Vec。

因此,使用预训练的嵌入模型,您可以将分类变量的文本类别转换为数值向量。

使用领域知识

最后还可以使用领域知识对分类特征进行编码。 可以根据多种因素(例如GDP,人口,人均纯收入等)对“国家/地区”列进行编码。 这种编码根据案例研究和要求而有所不同。

同样,您也可以使用领域知识将标称变量转换为序数变量,标签会对其进行编码,以将其转换为数字格式。

总结

具有多个类别的一键编码类别变量会导致编码的维数增加。 这引起了维度诅咒,因此产生了并行性和多重共线性的问题。在本文中,我们讨论了几种编码具有多个级别的分类变量的技术,能够部分解决维度诅咒的问题。

作者:Satyam Kumar

deephub翻译组

为什么独热编码会引起维度诅咒,以及避免他的几个办法相关推荐

  1. 机器学习中使用的独热编码

    什么是独热编码? 独热编码(One-Hot Encoding)是一种常用的特征编码方法,主要用于将离散特征转换为连续特征,以便机器学习算法能够更好地处理.独热编码将每个离散特征的取值映射为一个二进制向 ...

  2. 数据预处理之独热编码(One-Hot)

    1.前言 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等. 这些特征值并不是连续的,而是离散的,无序的.通常我们需要对其进行特征数字化. 那什么是特征数字化呢 ...

  3. 数据预处理之独热编码(One-Hot Encoding)

    问题的由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑以下三个特征: ["male","female"] ["from ...

  4. OneHotEncoder独热编码和 LabelEncoder标签编码——机器学习

    学习sklearn和kagggle时遇到的问题,什么是独热编码?为什么要用独热编码?什么情况下可以用独热编码?以及和其他几种编码方式的区别. 首先了解机器学习中的特征类别:连续型特征和离散型特征 拿到 ...

  5. 数据预处理之独热编码(OneHotEncoder)

    前言 ---------------------------------------- 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等. 这些特征值并不是连续 ...

  6. 机器学习:数据预处理之独热编码(One-Hot)

    前言 ---------------------------------------- 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等. 这些特征值并不是连续 ...

  7. 【Python自然语言处理】文本向量化的六种常见模型讲解(独热编码、词袋模型、词频-逆文档频率模型、N元模型、单词-向量模型、文档-向量模型)

    觉得有帮助请点赞关注收藏~~~ 一.文本向量化 文本向量化:将文本信息表示成能够表达文本语义的向量,是用数值向量来表示文本的语义. 词嵌入(Word Embedding):一种将文本中的词转换成数字向 ...

  8. 数据预处理之One-Hot(独热编码)编码

    数据预处理之One-Hot(独热编码)编码 为什么使用One-Hot编码 对于机器学习任务中,特征并不总是连续值,很多是分类值.这些分类值本身没有大小的意义.为了将数据集中一个分类变量替换为一个或多个 ...

  9. OneHotEncoder独热编码

    首先了解机器学习中的特征类别:连续型特征和离散型特征. 拿到获取的原始特征,必须对每一特征分别进行归一化,比如,特征A的取值范围是[-1000,1000],特征B的取值范围是[-1,1].如果使用lo ...

最新文章

  1. 遗传算法详解(GA)
  2. 固定在计算机主机箱体上,联结计算机各种部件,起桥梁作用的是,2014年12月计算机应用基础模拟试题...
  3. 【计算机网络】数据链路层 : 广域网 ( HDLC 协议 | HDLC 站 | HDLC 帧格式 | HDLC 帧类型 | PPP 协议 与 HDLC 协议 对比 )
  4. python学习-综合练习七(二分查找(递归)、线性查找、插入排序、快速排序、选择排序、冒泡排序、归并排序、堆排序)-实例
  5. linux安装软件包(pip, distribute, nose, virtualenv)
  6. (软件工程复习核心重点)第九章软件项目管理
  7. linux java 工具_Linux运维知识之linux下java版本管理工具jenv使用介绍
  8. 关于UIImageView的显示问题
  9. 将像素图转换为矢量图
  10. mysql.exe下载_mysql8 windows 下载安装
  11. 传奇脚本显示服务器开区时间代码,GOM引擎该地图只限新区开放方法,传奇开区时设置老区不能进脚本...
  12. 零成本搭建实验室、课题组网站教程(基于uniapp)
  13. CSS 3.0实现泡泡特效
  14. java卸载不了_java卸载不了怎么处理?卸载时总出现这个
  15. java字节流与字符流的区别编码缓冲
  16. 01-Spring_快速入门
  17. powershell获取linux文件,技术|微软爱上 Linux:当 PowerShell 来到 Linux 时
  18. 骇客教学_大数据。 大骇客。 大云。 你准备好2016年吗?
  19. 以企业IM为例,谈谈To B与To C有何不同
  20. EE308-Lab5-设计一款口算程序

热门文章

  1. 理解GloVe模型(+总结)
  2. matlab可视化界面怎么修改,matlab可视化界面
  3. 什么叫结构化的算法?为什么要提倡结构化的算法?
  4. 我的Android开发半年工作经验总结
  5. 关于css设置第n个元素
  6. ONES × 中国信通院《中国企业软件研发管理白皮书》即将发布 | 预约直播
  7. 【大数据】服务器硬盘基础知识
  8. 逆讯图驴企业版,这一次颜值更高
  9. (转)Openbravo ERP架构分析
  10. 4.1nbsp;需求定律分析