当前位置: 首页 > 科技观察

one-hot编码不是万灵药,这些分类变量编码方法你值得拥有

时间:2023-03-11 22:17:04 科技观察

one-hot编码是一种被广泛使用的编码方式,但也会造成维度过高等问题。因此,媒体上的一位博主建议,在对分类变量进行编码时,我们可能有更好的选择。单热编码类似于虚拟变量,是一种将分类变量转换为几个二进制列的方法。其中1表示输入属于该类别。从机器学习的角度来看,one-hot编码并不是编码分类变量的好方法。我们都知道维度越少越好,但是one-hotencoding增加了很多维度。例如,如果用一个序列来表示美国的州,那么one-hotencoding会带出50多个维度。one-hotencoding不仅会给数据集增加很多维度,实际上并没有多少信息。很多时候1散落在很多0当中,也就是有用的信息散落在大量的数据中。这可能导致异常稀疏的结果,使其难以优化,尤其是对于神经网络。更糟糕的是,每个信息稀疏列之间都存在线性关系。这意味着可以很容易地使用其他变量来预测一个变量,从而导致高维度的并行性和多重共线性问题。最佳数据集由其信息具有独立价值的特征组成,但单热编码会创建一个完全不同的环境。当然,如果你只有三四个类,那么one-hotencoding可能是个不错的选择。但随着品类的增加,或许还有其他更合适的选择值得探索。本文作者列举了几种方案供读者参考。目标编码目标编码是一种非常有效的表示分类列的方式,只占用一个特征空间,也称为均值编码。此列中的每个值都替换为该类别的平均目标值。这允许更直接地表示分类变量和目标变量之间的关系,并且也是一种流行的技术(尤其是在Kaggle竞赛中)。但是这种编码方式也有一些缺点。首先,它使模型更难学习均值编码变量与另一个变量之间的关系,仅根据它们与目标的关系在列中绘制相似性。而且最重要的是,这种编码方式对y变量非常敏感,影响了模型提取编码信息的能力。由于类别的每个值都被相同的数值替换,模型可能会过度拟合它所看到的编码值(例如将0.8与一个完全不同的值而不是0.79相关联),这是一个值与被认为是大量重复类的结果。因此,需要仔细监测y变量是否存在异常值。为此,请使用category_encoders库。由于目标编码器是一种监督方法,因此它需要X和y训练集。fromcategory_encodersimportTargetEncoderenc=TargetEncoder(cols=['Name_of_col','Another_name'])training_set=enc.fit_transform(X_train,y_train)留一法编码尝试计算平均值(不包括当前行值)以补偿对y变量和值的多样性。这消除了异常值的影响并创建了更多种类的编码值。由于模型不仅面临每个编码类的相同值,而且还面临一系列值,因此它的泛化能力更好。在实现方面,可以使用category_encoders库中的LeaveOneOutEncoder。fromcategory_encodersimportLeaveOneOutEncoderenc=LeaveOneOutEncoder(cols=['Name_of_col','Another_name'])training_set=enc.fit_transform(X_train,y_train)实现类似效果的另一种策略是向编码分数添加正态分布噪声,其中标准差是可调参数。贝叶斯目标编码贝叶斯目标编码(BayesianTargetEncoding)是一种以目标作为编码方式的数学方法。仅使用均值可能是一种具有欺骗性的度量,因此贝叶斯目标编码试图结合目标变量分布的其他统计度量。例如它的方差或偏度(称为更高的矩)。然后通过贝叶斯模型合并这些分布的属性,从而产生一种关于类目标分布的方面更明确的编码,但结果的可解释性较差。证据权重证据权重(WoE)是分类自变量和因变量之间关系的另一种方案。WoE起源于信用评分领域,用于区分用户是否拖欠贷款或已偿还贷款。证据权重的数学定义是优势比的自然对数,即:ln(%ofnonevents/%ofevents)WoE越高,事件发生的可能性越大。“非事件”是不属于某个类别的百分比。使用证据权重在逻辑尺度上与因变量和安全类别建立单调关系,这对于逻辑回归是很自然的。WoE是另一个衡量标准“信息价值”的关键组成部分。该指标衡量特征为预测提供信息的程度。fromcategory_encodersimportWOEEncoderenc=WOEEncoder(cols=['Name_of_col','Another_name'])training_set=enc.fit_transform(X_train,y_train)这些方法是有监督的编码器,或者说是考虑了目标变量的编码方法,所以它们通常用在预测任务中是一个更高效的编码器。然而,当需要进行无监督分析时,这些方法不一定适用。非线性PCA非线性PCA(NonlinearPCA)是一种主成分分析(PCA)方法,它使用分类量化来处理分类变量。它为最大化常规PCA性能(解释方差)的类找到最佳值。