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

简介: 为什么独热编码会引起维度诅咒以及避免他的几个办法

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

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

什么是独热编码?

640.png

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

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

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

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

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

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

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

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

限制X个最常见的类别

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

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

640.png

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

640.png

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

640.png

ConcludingfromtheabovePDF:
50topoccuringcountriescoversalmost85%ofrows.
100topoccuringcountriescoversalmost95%oftherows.

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

频率编码

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

640.png

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

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

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

目标编码

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

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

640.png

嵌入

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

640.png

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

使用领域知识

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

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

总结

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

目录
相关文章
|
2月前
|
机器学习/深度学习 自然语言处理 算法
汉字的探索性分词方式:基于字图的部首分解与图神经网络的多因素表示
本文提出一种结合传统字符嵌入与部首结构的图表示法,用于捕捉汉字的语义和组成结构,提升大模型对汉字的理解能力。方法包括将字符分解为部首,构建部首图,并利用图卷积网络生成嵌入。此方法增强了模型的泛化能力和灵活性,并提供了代码实现。未来可优化的方向包括改进图构建算法、扩展部首系统、探索更先进的图神经网络架构及多模态融合。
|
7月前
|
数据可视化
R语言生态学进化树推断物种分化历史:分类单元数与时间关系、支系图可视化
R语言生态学进化树推断物种分化历史:分类单元数与时间关系、支系图可视化
R语言生态学进化树推断物种分化历史:分类单元数与时间关系、支系图可视化
|
7月前
|
机器学习/深度学习 算法 Unix
循环编码:时间序列中周期性特征的一种常用编码方式
循环编码是深度学习中处理周期性数据的一种技术,常用于时间序列预测。它将周期性特征(如小时、日、月)转换为网络可理解的形式,帮助模型识别周期性变化。传统的one-hot编码将时间特征转换为分类特征,而循环编码利用正弦和余弦转换,保持时间顺序信息。通过将时间戳转换为弧度并应用sin和cos,每个原始特征只映射到两个新特征,减少了特征数量。这种方法在神经网络中有效,但在树模型中可能需谨慎使用。
546 5
|
7月前
R语言中固定与随机效应Meta分析 - 效率和置信区间覆盖
R语言中固定与随机效应Meta分析 - 效率和置信区间覆盖
|
7月前
|
移动开发 数据可视化
R语言两层2^k析因试验设计(因子设计)分析工厂产量数据和Lenth方法检验显著性可视化|数据分享(二)
R语言两层2^k析因试验设计(因子设计)分析工厂产量数据和Lenth方法检验显著性可视化|数据分享(二)
|
7月前
|
数据可视化
R语言两层2^k析因试验设计(因子设计)分析工厂产量数据和Lenth方法检验显著性可视化|数据分享(一)
R语言两层2^k析因试验设计(因子设计)分析工厂产量数据和Lenth方法检验显著性可视化|数据分享(一)
|
7月前
【SPSS】两独立样本的极端反应检验和两配对样本的非参数检验详细操作教程(附案例实战)
【SPSS】两独立样本的极端反应检验和两配对样本的非参数检验详细操作教程(附案例实战)
237 0
|
7月前
|
数据挖掘
SPSS两独立样本的非参数检验
SPSS两独立样本的非参数检验
152 0
|
机器学习/深度学习 算法 C++
由数据范围反推算法复杂度以及算法内容
由数据范围反推算法复杂度以及算法内容
|
算法 搜索推荐
算法复杂度分析中的渐近分析(基于输入大小)
有许多重要的事情需要注意,例如用户友好性、模块化、安全性、可维护性等。为什么要担心性能?答案很简单,只有当我们有性能时,我们才能拥有上述所有东西。因此,性能就像货币,我们可以通过它购买上述所有东西。学习性能的另一个原因是——速度很有趣!
115 0