您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    one-hot encoding不是万能的,这些分类变量编码办法你值得拥有
    时间:2020-09-16 21:05 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    one-hot encoding 是一种被普遍运用的编码办法,但也会形成维渡过初等成绩。因此,medium 的一位博主表示,在编码分类变量方面,我们或许还有更好的选择。

    one-hot 编码(one-hot encoding)相似于虚拟变量(dummy variables),是一种将分类变量转换为几个二进制列的办法。其中 1 代表某个输入属于该类别。

    one-hot encoding不是万能的,这些分类变量编码办法你值得拥有

    从机器学习的角度来看,one-hot 编码并不是一种良好的分类变量编码办法。

    众所周知,维数越少越好,但 one-hot 编码却添加了少量的维度。例如,假设用一个序列来表示美国的各个州,那么 one-hot 编码会带来 50 多个维度。

    one-hot 编码不只会为数据集添加少量维度,而且实践上并没有太多信息,很多时分 1 散落在众多零之中,即有用的信息零散地散布在少量数据中。这会招致结果异常稀疏,使其难以停止优化,关于神经网络来说尤其如此。

    更蹩脚的是,每个信息稀疏列之间都具有线性关系。这意味着一个变量可以很容易地运用其他变量停止预测,招致高维度中出现并行性和多重共线性的成绩。

    最优数据集由信息具有独立价值的特征组成,但 one-hot 编码创立了一个完全不同的环境。

    当然,假设只要三、四个类,那么 one-hot 编码能够不是一个蹩脚的选择。但是随着类别的添加,能够还有其他更适宜的方案值得探求。本文作者罗列了几个方案供读者参考。

    目的编码

    目的编码(Target encoding)是表示分类列的一种十分有效的办法,并且仅占用一个特征空间,也称为均值编码。该列中的每个值都被该类别的平均目的值替代。这可以更直接地表示分类变量和目的变量之间的关系,并且也是一种很受欢迎的技术办法(尤其是在 Kaggle 比赛中)。

    但这种编码办法也有一些缺陷。首先,它使模型更难学习均值编码变量和另一个变量之间的关系,仅基于列与目的的关系就在列中绘制相似性。

    而最主要的是,这种编码办法对 y 变量十分敏感,这会影响模型提取编码信息的才能。

    由于该类别的每个值都被相反的数值交流,因此模型能够会过拟合其见过的编码值(例如将 0.8 与完全不同的值相关联,而不是 0.79),这是把延续尺度上的值视为严重重复的类的结果。

    因此,需求细心监控 y 变量,以防出现异常值。要完成这个目的,就要运用 category_encoders 库。由于目的编码器是一种有监视办法,所以它同时需求 X 和 y 训练集。

    from category_encoders import TargetEncoder  

     enc = TargetEncoder(cols=['Name_of_col','Another_name'])  

     training_set = enc.fit_transform(X_train, y_train) 

    留一法编码

    留一法(Leave-one-out)编码试图经过计算平均值(不包括以后行值)来补偿对 y 变量的依赖以及值的多样性。这使异常值的影响趋于颠簸,并创立更多样化的编码值。

    由于模型不只要面对每个编码类的相反值,还要面对一个范围值,因此它可以更好地泛化。

    在完成方面,可以运用 category_encoders 库中的 LeaveOneOutEncoder。

    from category_encoders import LeaveOneOutEncoder 

     

    enc = LeaveOneOutEncoder(cols=['Name_of_col','Another_name']) 

     

    training_set = enc.fit_transform(X_train, y_train) 

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

    贝叶斯目的编码

    贝叶斯目的编码(Bayesian Target Encoding)是一种运用目的作为编码办法的数学办法。仅运用均值能够是一种诈骗性度量标准,因此贝叶斯目的编码试图结合目的变量散布的其他统计度量。例如其方差或偏度(称为高阶矩「higher moments」)。

    然后经过贝叶斯模型兼并这些散布的属性,从而产生一种编码,该编码更清楚类别目的散布的各个方面,但是结果的可解释性比较差。

    证据权重

    证据权重(Weight of Evidence,简称 WoE)是另一种关于分类自变量和因变量之间关系的方案。WoE 源自信誉评分范围,曾用于区分用户是违约拖欠还是曾经偿还存款。证据权重的数学定义是优势比的自然对数,即:

    ln (% of non events / % of events) 

    WoE 越高,事情发作的能够性就越大。「Non-events」是不属于某个类的百分比。运用证据权重与因变量树立单调关系,并在逻辑尺度上确保类别,这关于逻辑回归来说很自然。WoE 是另一个权衡目的「Information Value」的关键组成部分。该目的用来权衡特征如何为预测提供信息。

    from category_encoders import WOEEncoder 

     

    enc = WOEEncoder(cols=['Name_of_col','Another_name']) 

     

    training_set = enc.fit_transform(X_train, y_train) 

    这些办法都是有监视编码器,或许是思索目的变量的编码办法,因此在预测义务中通常是更有效的编码器。但是,当需求执行无监视剖析时,这些办法并不一定适用。

    非线性 PCA

    非线性 PCA(Nonlinear PCA)是一种运用分类量化来处置分类变量的主成分剖析(PCA)办法。它会找到对类别来说的最佳数值,从而使常规 PCA 的功用(可解释方差)最大化。

    【编辑引荐】

    7种过时的代码作风

    融云CTO杨攀: Geek Online 2020编程应战赛 让开发者站上C位

    无需GPT-3!国外小哥徒手开发Text2Code,数据剖析代码一键生成

    当今溢价最高的13个IT技艺

    微软.NET 5.1迎来RC1版本 开发者已可上线尝鲜

    (责任编辑:admin)