博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
别再对分类变量进行独热编码!你还有更好的选择
阅读量:2109 次
发布时间:2019-04-29

本文共 2461 字,大约阅读时间需要 8 分钟。

全文共2380字,预计学习时长6分钟

图源:unsplash

 

独热编码(又称虚拟变量)是一种将分类变量转换为若干二进制列的方法,其中1表示存在属于该类别的行。显然,从机器学习的角度来看,它并不适合对分类变量进行编码。

 

很明显,它增加了大量的维度,但通常来说维数越小越好。例如,如果设置一个列代表美国的州(例如加利福尼亚州、纽约州)的话,那么独热编码方案将会多出50个维度。

 

这样做不仅会为数据集增加大量维度,而且实际上并没有太多信息——大量0中零散分布着几个1。这造成了一个异常稀疏的景观,使得优化难以进行。对于神经网络来说尤其如此,其优化器在大量的空白维度中很容易进入错误的空间。

 

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

 

 

最佳数据集包含了信息具有独立价值的特征,而独热编码可创建一个完全不同的环境。当然,如果只有三个或甚至四个类,那么独热编码可能不是一个糟糕的选择。不过根据数据集的相对大小,其他的替代方法有可能值得一探。

 

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

 

 

这种编码方法有一些缺点。首先,它使模型更难以学习均值编码变量和另一个变量之间的关系。它只能根据它与目标的关系在在列中绘制相似性,这有利有弊。

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

 

由于该类别的每个值都被相同的数值替换,因此该模型可能会趋于过拟合它所看到的编码值(例如,将0.8与完全不同于0.79的值相关联)。这是将连续规模上的值视为严重重复的类处理的结果。因此,需要仔细监控y变量是否存在异常值。

 

为实现这一目的,可以使用category_encoders库。由于目标编码器是一种受监督的方法,因此需要X和y训练集。

 

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

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

 

 

由于模型不仅为每个编码的类提供了相同的值,还为其提供了一个范围,可以更好地进行泛化。可以像往常一样使用LeaveOneOutEncoder在category_encoders库中执行实现。

 

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

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

 

贝叶斯目标编码(Bayesiantarget encoding)是一种将目标用作编码方法的数学方法。仅使用均值可能是一种欺骗性度量,因此贝叶斯目标编码试图结合使用其他统计量来衡量目标变量的分布,例如其方差或偏度(highermoments)。

 

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

 

证据权重(WoE)是对分类自变量与因变量之间关系的另一种细微看法。WoE源自信用评分行业,用于衡量拖欠或偿还贷款的客户之间的差别。证据权重的数学定义是优势比的自然对数,或:

 

ln (% of non events / % of events)

WoE越高,事件发生的可能性就越大。“Non-events”是指那些不属于某个类的事件所占的百分比。使用证据权重与因变量建立单调(永不停止朝一个方向发展)关系,并在逻辑尺度范围内确保类别。WoE是“信息价值”指标的关键组成部分,该指标用于衡量功能如何为预测提供信息。

 

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

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

 

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

 

 

下次遇到分类变量别再进行独热编码啦,这么多种方法任君挑选!

推荐阅读专题

留言点赞发个朋友圈

我们一起分享AI学习与发展的干货

编译组:高淳子、郝岩君

相关链接:

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

如转载,请后台留言,遵守转载规范

推荐文章阅读

长按识别二维码可添加关注

读芯君爱你

你可能感兴趣的文章
Play on Words UVA - 10129 (欧拉路径)
查看>>
mininet+floodlight搭建sdn环境并创建简答topo
查看>>
【linux】nohup和&的作用
查看>>
【UML】《Theach yourself uml in 24hours》——hour4
查看>>
Set、WeakSet、Map以及WeakMap结构基本知识点
查看>>
【NLP学习笔记】(一)Gensim基本使用方法
查看>>
【NLP学习笔记】(二)gensim使用之Topics and Transformations
查看>>
【深度学习】LSTM的架构及公式
查看>>
【深度学习】GRU的结构图及公式
查看>>
【python】re模块常用方法
查看>>
剑指offer 19.二叉树的镜像
查看>>
剑指offer 20.顺时针打印矩阵
查看>>
剑指offer 21.包含min函数的栈
查看>>
剑指offer 23.从上往下打印二叉树
查看>>
剑指offer 25.二叉树中和为某一值的路径
查看>>
剑指offer 26. 数组中出现次数超过一半的数字
查看>>
剑指offer 27.二叉树的深度
查看>>
剑指offer 29.字符串的排列
查看>>
剑指offer 31.最小的k个树
查看>>
剑指offer 32.整数中1出现的次数
查看>>