为什么独热编码会引起维度诅咒,以及避免他的几个办法
特征工程是数据科学模型开发的重要组成部分之一。数据科学家把大部分时间花在数据处理和特征工程上,以便训练一个鲁棒模型。数据集由各种类型的特征组成,包括类别、数字、文本、日期时间等。
由于大多数机器学习模型只理解数值向量,所以各种特征需要被设计成数值格式。有各种编码技术可以将文本数据转换为数字格式,包括词袋、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翻译组
为什么独热编码会引起维度诅咒,以及避免他的几个办法相关推荐
- 机器学习中使用的独热编码
什么是独热编码? 独热编码(One-Hot Encoding)是一种常用的特征编码方法,主要用于将离散特征转换为连续特征,以便机器学习算法能够更好地处理.独热编码将每个离散特征的取值映射为一个二进制向 ...
- 数据预处理之独热编码(One-Hot)
1.前言 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等. 这些特征值并不是连续的,而是离散的,无序的.通常我们需要对其进行特征数字化. 那什么是特征数字化呢 ...
- 数据预处理之独热编码(One-Hot Encoding)
问题的由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑以下三个特征: ["male","female"] ["from ...
- OneHotEncoder独热编码和 LabelEncoder标签编码——机器学习
学习sklearn和kagggle时遇到的问题,什么是独热编码?为什么要用独热编码?什么情况下可以用独热编码?以及和其他几种编码方式的区别. 首先了解机器学习中的特征类别:连续型特征和离散型特征 拿到 ...
- 数据预处理之独热编码(OneHotEncoder)
前言 ---------------------------------------- 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等. 这些特征值并不是连续 ...
- 机器学习:数据预处理之独热编码(One-Hot)
前言 ---------------------------------------- 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等. 这些特征值并不是连续 ...
- 【Python自然语言处理】文本向量化的六种常见模型讲解(独热编码、词袋模型、词频-逆文档频率模型、N元模型、单词-向量模型、文档-向量模型)
觉得有帮助请点赞关注收藏~~~ 一.文本向量化 文本向量化:将文本信息表示成能够表达文本语义的向量,是用数值向量来表示文本的语义. 词嵌入(Word Embedding):一种将文本中的词转换成数字向 ...
- 数据预处理之One-Hot(独热编码)编码
数据预处理之One-Hot(独热编码)编码 为什么使用One-Hot编码 对于机器学习任务中,特征并不总是连续值,很多是分类值.这些分类值本身没有大小的意义.为了将数据集中一个分类变量替换为一个或多个 ...
- OneHotEncoder独热编码
首先了解机器学习中的特征类别:连续型特征和离散型特征. 拿到获取的原始特征,必须对每一特征分别进行归一化,比如,特征A的取值范围是[-1000,1000],特征B的取值范围是[-1,1].如果使用lo ...
最新文章
- 遗传算法详解(GA)
- 固定在计算机主机箱体上,联结计算机各种部件,起桥梁作用的是,2014年12月计算机应用基础模拟试题...
- 【计算机网络】数据链路层 : 广域网 ( HDLC 协议 | HDLC 站 | HDLC 帧格式 | HDLC 帧类型 | PPP 协议 与 HDLC 协议 对比 )
- python学习-综合练习七(二分查找(递归)、线性查找、插入排序、快速排序、选择排序、冒泡排序、归并排序、堆排序)-实例
- linux安装软件包(pip, distribute, nose, virtualenv)
- (软件工程复习核心重点)第九章软件项目管理
- linux java 工具_Linux运维知识之linux下java版本管理工具jenv使用介绍
- 关于UIImageView的显示问题
- 将像素图转换为矢量图
- mysql.exe下载_mysql8 windows 下载安装
- 传奇脚本显示服务器开区时间代码,GOM引擎该地图只限新区开放方法,传奇开区时设置老区不能进脚本...
- 零成本搭建实验室、课题组网站教程(基于uniapp)
- CSS 3.0实现泡泡特效
- java卸载不了_java卸载不了怎么处理?卸载时总出现这个
- java字节流与字符流的区别编码缓冲
- 01-Spring_快速入门
- powershell获取linux文件,技术|微软爱上 Linux:当 PowerShell 来到 Linux 时
- 骇客教学_大数据。 大骇客。 大云。 你准备好2016年吗?
- 以企业IM为例,谈谈To B与To C有何不同
- EE308-Lab5-设计一款口算程序