
优点
可以这样理解,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征。并且,这些特征互斥,每次只有一个激活。因此,数据会变成稀疏的。
这样做的好处主要有:
解决了分类器不好处理属性数据的问题
在一定程度上也起到了扩充特征的作用

将离散型特征进行one-hot编码的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one-hot编码就可以很合理的计算出距离,那么就没必要进行one-hot编码,比如,该离散特征共有1000个取值,我们分成两组,分别是400和600,两个小组之间的距离有合适的定义,组内的距离也有合适的定义,那就没必要用one-hot 编码
离散特征进行one-hot编码后,编码后的特征,其实每一维度的特征都可以看做是连续的特征。就可以跟对连续型特征的归一化方法一样,对每一维特征进行归一化。比如归一化到[-1,1]或归一化到均值为0,方差为1
基于树的方法是不需要进行特征的归一化,例如随机森林,bagging 和 boosting等。基于参数的模型或基于距离的模型,都是要进行特征的归一化。
缺点:
很显然,从机器学习的角度来看,它并不是一个对分类变量编码的很好的选择。
一般来说,维度的数量越低越好,而这种方法很明显增加了大量的维度。例如,如果我们要有一列代表美国的州(比如加州、纽约州),独热编码就会增加五十个维度。
它不仅给数据集增加了大量的维度,而且冗余信息太多——1偶尔点缀在零的海洋中。这个异常稀疏的矩阵,使得它很难处理优化问题。对于神经网络来说尤其如此,这几十个空的维度使得神经网络的优化器在错误空间中寻找最优解时就会遇到许多麻烦。
更糟糕的是,每一个信息稀疏的列之间都有线性关系。这意味着一个变量可以很容易地使用其他变量进行预测,高维度下这会造成的并行性和多线性问题。
最优的数据集由独立且包含有价值信息的特征组成,而独热编码张成的空间却不是这样的。
当然,如果只有三个或四个类别,独热编码可能还不是那么糟糕,但根据数据集的相对大小,探索其他选择也是值得。
其他编码方式
目标编码是表示分类列的一种非常有效的方法,只占用一个特征的空间。其又称均值编码,列中的每个值都用该类别的目标均值代替。这样可以更直接地表示分类变量和目标变量之间的关系,是一种非常流行的技术(尤其是在Kaggle比赛上)。

这种编码方法有一些缺点。首先,它使模型更难学习均值编码变量和另一变量之间的关系,它只根据一列变量与目标变量的关系来得出相似性,这既可能是个优点也可能是个缺点。
但主要的是,这种编码方法会对变量y非常敏感,从而影响模型提取编码信息的能力。
由于类别的每一个值都被替换为相同的数值,模型可能会倾向于过拟合它所见的编码值(比如将0.8与0.79联系成完全不同的东西)。这就是将连续值视为大量重复类的影响。
因此,需要仔细监控y变量是否存在异常值。
要实现这一点,可以使用category_encoders库。由于目标编码器是一种监督方法,所以它需要包含x和y两个值才能训练。
留一法编码试图弥补这种对y变量的依赖,并通过排除当前行的数值来计算平均值作为编码,使数值更加多样化。这种方法可以消除离群值的影响,并生成了更多样化的编码值。
参考文献
【1】https://www.leiphone.com/news/202009/qYjt7xZTLtRy1VJK.html 请停止对分类变量进行独热编码
【2】https://www.cnblogs.com/whisper-yi/p/6079177.html 独热编码在数据处理中的作用
网友评论