Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >不要再对类别变量进行独热编码了

不要再对类别变量进行独热编码了

作者头像
石晓文
发布于 2020-09-07 09:07:49
发布于 2020-09-07 09:07:49
2.4K00
代码可运行
举报
文章被收录于专栏:小小挖掘机小小挖掘机
运行总次数:0
代码可运行

作者:Andre Ye 编译:ronghuaiyang

导读

还有很多更好的选择。

独热编码,也称为dummy变量,是一种将分类变量转换为若干二进制列的方法,其中1表示属于该类别的行。

很明显,从机器学习的角度来看,它不是分类变量编码的好选择。最明显的是它增加了大量的维数,这是常识,通常低维数是更好的。例如,如果我们要用一列表示美国的一个州(例如加利福尼亚、纽约),那么独热编码方案将会导致50个额外的维度。

它不仅给数据集增加了大量的维数,而且确实没有多少信息 —— 一大堆零中偶尔点缀着几个1。这导致了一个异常稀疏的现象,这使得它很难进行最优化。这对于神经网络来说尤其如此,它的优化器在几十个空维度的情况下很容易进入错误的优化空间。

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

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

诚然,如果只有3个或者甚至4个类别,独热编码可能不是一个糟糕的选择,但是它可能值得探索其他选择,这取决于数据集的相对大小。

目标编码是表示分类列的一种非常有效的方法,它只占用一个特征空间。也称为均值编码,将列中的每个值替换为该类别的均值目标值。这允许对分类变量和目标变量之间的关系进行更直接的表示,这是一种非常流行的技术(尤其是在Kaggle比赛中)。

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

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

由于每个类别的值都被相同的数值所取代,模型可能会倾向于过拟合它所看到的编码值(例如,将0.8与某个与0.79完全不同的值相关联)。这是将连续尺度上的值当作重复的类来处理的结果。

因此,需要仔细监视y变量,以发现异常值等情况。

要实现这一点,请使用category_encoders库。由于目标编码器是一个受监督的方法,它需要Xy训练集。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 encoding试图通过计算平均值(不包括当前行值)来弥补对y变量的依赖以及在值方面的多样性。这将消除异常值的影响,并创建更多样化的编码值。

由于模型对每个编码类不仅给予相同的值,而且给予一个范围,因此它学会了更好地泛化。

像往常一样,可以在category_encoders库中使用LeaveOneOutEncoder实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 源自信用评分领域,被用来衡量违约或偿还贷款的客户之间的区别。Weight of Evidence的数学定义是比值比例的自然对数,即:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ln (% of non events / % of events)

WoE越高,事件越有可能发生。‘Non-events’是那些不属于某个类的百分比。使用Weight of Evidence因变量建立单调的关系,并在逻辑尺度上确保类别,这对于逻辑回归来说很自然。WoE是另一个度量标准 —— Information Value中的一个关键组件,IV值衡量一个特征如何为预测提供信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from category_encoders import WOEEncoder
enc = WOEEncoder(cols=['Name_of_col','Another_name'])
training_set = enc.fit_transform(X_train, y_train)

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

Nonlinear PCA是一种利用分类量化方法处理分类变量的主成分分析方法。这将为类别找到最佳数值,从而使常规PCA的性能(解释方差)最大化。

—END—

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小小挖掘机 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
one-hot encoding不是万能的,这些分类变量编码方法你值得拥有
one-hot encoding 是一种被广泛使用的编码方法,但也会造成维度过高等问题。因此,medium 的一位博主表示,在编码分类变量方面,我们或许还有更好的选择。
石晓文
2020/10/09
1.3K0
one-hot encoding不是万能的,这些分类变量编码方法你值得拥有
30个数据科学工作中必备的Python包!
来源丨数据STUDIO 在本文中,云朵君将介绍一些非常独特的并且好用的 Python 包,它们可以在许多方面帮助你构建数据的工作流。 Python 可以说是最容易入门的编程语言,在numpy,scipy等基础包的帮助下,对于数据的处理和机器学习来说Python可以说是目前最好的语言,在各位大佬和热心贡献者的帮助下Python拥有一个庞大的社区支持技术发展,开发两个各种 Python 包来帮助数据人员的工作。 1、Knockknock Knockknock是一个简单的Python包,它会在机器学习模型训练结束
张俊红
2022/08/26
1.4K0
30个数据科学工作中必备的Python包!
文末重磅福利|Python实现回归预测及模型优化
大家好,之前写多了自动化办公的内容,现在换个机器学习的专题跟大家交流学习,作为一个眼科研究生后面也希望后面多通过一些眼科案例顺带普及下眼科知识!在眼科中AI的一项应用就是利用卷积神经网络实现图像识别。今天先从一个虚构的冠心病数据集说说python如何实现简单的有监督学习。
刘早起
2020/06/19
1.7K0
专栏 | 基于 Jupyter 的特征工程手册:数据预处理(二)
https://github.com/YC-Coder-Chen/feature-engineering-handbook
红色石头
2022/01/14
1K0
专栏 | 基于 Jupyter 的特征工程手册:数据预处理(二)
sklearn中多种编码方式——category_encoders(one-hot多种用法)
离散型编码的Python库,里面封装了十几种(包括文中的所有方法)对于离散型特征的编码方法,接口接近于Sklearn通用接口,非常实用 可以使用多种不同的编码技术把类别变量转换为数值型变量,并且符合sklearn模式的转换。
悟乙己
2021/12/07
3.3K0
sklearn中多种编码方式——category_encoders(one-hot多种用法)
11个常见的分类特征的编码技术
器学习算法只接受数值输入,所以如果我们遇到分类特征的时候都会对分类特征进行编码,本文总结了常见的11个分类变量编码方法。
deephub
2023/01/18
1.1K0
17种将离散特征转化为数字特征的方法
“Xgboost,LightGBM,Catboost,HistGradient。”
磐创AI
2020/12/24
4.1K1
标签编码和独热编码对线性模型和树模型的影响
概述 相信大家在建模中经常会用到标签编码和独热编码,这两种不同的编码方式到底会对模型产生什么影响,本期就使用kaggle贴纸销量预测的数据集针对这两种编码方式展开研究。让我们开始探索吧。
机器学习司猫白
2025/01/23
1130
标签编码和独热编码对线性模型和树模型的影响
Feature Engineering 特征工程 2. Categorical Encodings
在中级机器学习里介绍过了Label Encoding、One-Hot Encoding,下面将学习count encoding计数编码,target encoding目标编码、singular value decomposition奇异值分解
Michael阿明
2020/07/13
1.1K0
专栏 | 基于 Jupyter 的特征工程手册:数据预处理(三)
https://github.com/YC-Coder-Chen/feature-engineering-handbook
红色石头
2022/01/14
3570
专栏 | 基于 Jupyter 的特征工程手册:数据预处理(三)
kaggle入门级竞赛Spaceship Titanic LIghtgbm+Optuna调参
欢迎来到 2912 年,需要您的数据科学技能来解开宇宙之谜。我们收到了来自四光年外的信号,情况看起来不太好。 泰坦尼克号宇宙飞船是一个月前下水的一艘星际客轮。船上载有近 13,000 名乘客,这艘船开始了它的处女航,将太阳系的移民运送到绕附近恒星运行的三颗新的宜居系外行星。 在绕行半人马座阿尔法星前往其第一个目的地(炎热的 55 Cancri E)途中,粗心的泰坦尼克号宇宙飞船与隐藏在尘埃云中的时空异常相撞。可悲的是,它遭遇了与 1000 年前同名的相似命运。虽然飞船完好无损,但几乎一半的乘客都被传送到了异次元! 为了帮助救援人员并找回失踪的乘客,您面临的挑战是使用从飞船损坏的计算机系统中恢复的记录来预测哪些乘客被异常现象运送。
机器学习司猫白
2025/01/21
1240
全网最全的Scikit-Learn学习手册!
图解机器学习 本文详解 scikit-learn 工具库的用法,覆盖机器学习基础知识、SKLearn讲解、SKLearn三大核心API、SKLearn高级API等内容。
用户6888863
2023/03/01
2.4K0
全网最全的Scikit-Learn学习手册!
一篇值得收藏的ML数据预处理原理与实践文章
数据缺失,在现实生活中是十分常见的,原因也是非常复杂的,在我们进行建模的过程中,如果我们不对这些缺失值进行适当的处理,出来的模型恐怕也效果不太好,其重要性这里就不累赘多说,我们先来创建一个小栗子,助于大家理解数据缺失的问题:
Sam Gor
2019/10/15
8390
一篇值得收藏的ML数据预处理原理与实践文章
【数据竞赛】Kaggle实战之单类别变量特征工程总结!
这是一个系列篇,后续我们会按照我们第一章中的框架进行更新,因为大家平时都较忙,不会定期更新,如有兴趣欢迎长期关注我们的公众号,如有任何建议可以在评论区留言,该系列以往的经典内容可参考下面的篇章。
黄博的机器学习圈子
2021/04/16
1.3K0
【数据竞赛】Kaggle实战之单类别变量特征工程总结!
如何用Python在10分钟内建立一个预测模型
关于转载授权 大数据文摘作品,欢迎个人转发朋友圈,自媒体、媒体、机构转载务必申请授权,后台留言“机构名称+文章标题+转载”,申请过授权的不必再次申请,只要按约定转载即可,但文末需放置大数据文摘二维码。 编译:席雄芬 校对:黄念 引言 最近,我从孙子(指《孙子兵法》——译者注)那里学到了一些策略:速度和准备 速度与准备 “兵之情主速,乘人之不及,由不虞之道,攻其所不戒也。”(《孙子兵法•九地篇》)无备为战之大患,有备无患,其乃至德也。(哈哈,译者自己写了这句,想必大家能明白。) 这与数据科学博客有什么关
大数据文摘
2018/05/22
2.7K0
Kaggle知识点:类别特征处理
类别型特征(categorical feature)主要是指职业,血型等在有限类别内取值的特征。它的原始输入通常是字符串形式,大多数算法模型不接受数值型特征的输入,针对数值型的类别特征会被当成数值型特征,从而造成训练的模型产生错误。
Coggle数据科学
2022/05/05
1.6K0
Kaggle知识点:类别特征处理
机器学习归一化特征编码
因为对于大多数的机器学习算法和优化算法来说,将特征值缩放到相同区间可以使得获取性能更好的模型。就梯度下降算法而言,例如有两个不同的特征,第一个特征的取值范围为1——10,第二个特征的取值范围为1——10000。在梯度下降算法中,代价函数为最小平方误差函数,所以在使用梯度下降算法的时候,算法会明显的偏向于第二个特征,因为它的取值范围更大。在比如,k近邻算法,它使用的是欧式距离,也会导致其偏向于第二个特征。对于决策树和随机森林以及XGboost算法而言,特征缩放对于它们没有什么影响。
@小森
2024/06/15
990
机器学习归一化特征编码
入门 | 从结构到性能,一文概述XGBoost、Light GBM和CatBoost的同与不同
选自Medium 机器之心编译 参与:刘天赐、黄小天 尽管近年来神经网络复兴并大为流行,但是 boosting 算法在训练样本量有限、所需训练时间较短、缺乏调参知识等场景依然有其不可或缺的优势。本文从算法结构差异、每个算法的分类变量时的处理、算法在数据集上的实现等多个方面对 3 种代表性的 boosting 算法 CatBoost、Light GBM 和 XGBoost 进行了对比;虽然本文结论依据于特定的数据集,但通常情况下,XGBoost 都比另外两个算法慢。 最近,我参加了 kaggle 竞赛 WID
机器之心
2018/05/09
2.3K0
入门 | 从结构到性能,一文概述XGBoost、Light GBM和CatBoost的同与不同
LightGBM高级教程:高级特征工程
特征工程是机器学习中至关重要的一部分,它直接影响到模型的性能和泛化能力。在LightGBM中进行高级特征工程可以进一步提高模型的效果。本教程将详细介绍如何在Python中使用LightGBM进行高级特征工程,并提供相应的代码示例。
Echo_Wish
2024/03/03
4260
LabelEncoder(标签编码)与One—Hot(独热编码)
在做Kaggle项目的时候,碰到的问题,通常拿到一个比赛项目,将特征分为数字型特征和文字性特征,分别进行处理,而对于文字型特征如何处理,这时就需要用LabelEncoder(标签编码)和One—Hot(独热编码)将其转换为相应的数字型特征,再进行相应的处理。 首先了解机器学习中的特征类别:连续型特征和离散型特征
用户5745385
2019/07/04
9.9K0
LabelEncoder(标签编码)与One—Hot(独热编码)
推荐阅读
相关推荐
one-hot encoding不是万能的,这些分类变量编码方法你值得拥有
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验