最近学习机器学习,接触到独热编码相关内容,参考了一些资料,加上自己的思考,做出了如下总结。

一、什么是独热编码

独热编码,即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。(百度百科)

说起来这么复杂,举个例子就很容易理解了:

比如颜色特征有3种:红色、绿色和黄色,转换成独热编码分别表示为(此时上述描述中的N=3):001, 010, 100。(当然转换成100, 010, 001也可以,只要有确定的一一对应关系即可)

红色、绿色和黄色分别转换成1, 2, 3行不行,一般不这样处理,这样处理也不叫独热编码了,只能说是文本转换成数字,具体原因可以往下看。

二、为什么要使用独热编码

在机器学习算法中,一般是通过计算特征之间距离或相似度来实现分类、回归的。一般来说,距离或相似度都是在欧式空间计算余弦相似性得到。

对于上述的离散型颜色特征,1、2、3编码方式就无法用在机器学习中,因为它们之间存在大小关系,而实际上各颜色特征之间并没有大小关系,红色>绿色??? 所以,独热编码便发挥出了作用,特征之间的计算会更加合理。

三、独热编码的优缺点

优点:为处理离散型特征提供了方法,在一定程度上扩充了特征属性。

缺点:当特征的类别很多时,特征空间会变得非常大,在这种情况下,一般可以用PCA来减少维度。

四、什么时候不需要使用独热编码

1、离散特征的取值之间没有大小意义时,可以使用独热编码。

当离散特征的取值之间有大小意义或者有序时,比如衣服尺寸: [X, XL, XXL],那么就不能使用独热编码,而使用数值的映射{X: 1, XL: 2, XXL: 3}。

2、如果特征是离散的,并且不用独热编码就可以很合理的计算出距离,就没必要进行独热编码。

3、有些并不是基于向量空间度量的算法,数值只是类别符号,没有偏序关系,就不用进行独热编码。

五、如何用Python实现独热编码

方式一:get_dummies 官方文档

将类别变量转换成虚拟变量/指示变量,也叫哑变量。

pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)

各参数的含义:

data: array-like, Series, or DataFrame

prefix: string, list of strings, or dict of strings, default None

prefix_sep: str, default '_' (转换后列名的前缀)

dummy_na: bool, default False(增加一列表示空缺值,如果False就忽略空缺值)

columns: list-like, default None (指定需要实现类别转换的列名)

sparse: bool, default False

drop_first: bool, default False (获得k中的k-1个类别值,去除第一个)

dtype: dtype, default np.uint8

——举例子:

方式二:sklearn

Sklearn提供了一个编码器OneHotEncoder,用于将整数分类值转换成独热向量。

一共有4个值,3个特征:

对于第1个特征,也即第1列 [0, 1, 0, 1],有0、1两种取值,对应的编码为10, 01;

对于第2个特征,也即第2列 [0, 1, 2, 0],有0、1、2三种取值,对应的编码为100, 010, 001;

对于第3个特征,也即第3列 [3, 0, 1, 2],有0、1、2、3四种取值,对应的编码为1000, 0100, 0010, 0001。

需要转换的是[0, 1, 2],对应的结果为100100010。

在sklearn中,可以先通过factorize()将文本转换为整数分类,然后通过OneHotEncoder将整数分类转换为独热向量。当然,也可以使用CategoricalEncoder类一步到位。

最后,欢迎大家关注我的WX公众号:且听数据说,更多内容与你分享,期待相遇。

学习笔记 | 独热编码(One-Hot Encoding)相关推荐

  1. R语言构建xgboost模型:基于叶子索引衍生出新的特征并进行独热编码(one-hot encoding)之后构建新的模型、比较加入叶子索引特征的模型的分类性能提升

    R语言构建xgboost模型:基于叶子索引衍生出新的特征并进行独热编码(one-hot encoding)之后构建新的模型.比较加入叶子索引特征的模型的分类性能提升 目录

  2. 机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding)

    机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding) 序号编码:序号编码通常用于处理类别间具有大小关系的数据 可以通过导入sklearn.preproce ...

  3. 数据预处理之独热编码(One-Hot Encoding)

    问题的由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑以下三个特征: ["male","female"] ["from ...

  4. 独热编码(One-Hot Encoding)介绍、代码实现应用与优缺点

    一.独热编码(One-Hot Encoding)介绍 One-hot在数字电路中被用来表示一种特殊的位元组合,该字节里,仅容许单一位元为1,其他位元都必须为0.之所以称为one-hot就是因为只能有一 ...

  5. python 独热码_数据预处理:独热编码(One-Hot Encoding)

    问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male", "female"] ["from ...

  6. Python下数值型与字符型类别变量独热编码(One-hot Encoding)实现

    1 OneHotEncoder 2 pd.get_dummies   在数据处理与分析领域,数值型与字符型类别变量的编码是不可或缺的预处理操作.本文基于Python下OneHotEncoder与pd. ...

  7. 深度学习工作笔记003---数据预处理:独热编码(One-Hot Encoding)

    JAVA技术交流QQ群:170933152 问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male", "fem ...

  8. OneHotEncoder独热编码和 LabelEncoder标签编码——机器学习

    学习sklearn和kagggle时遇到的问题,什么是独热编码?为什么要用独热编码?什么情况下可以用独热编码?以及和其他几种编码方式的区别. 首先了解机器学习中的特征类别:连续型特征和离散型特征 拿到 ...

  9. 循环神经网络的实现(独热编码,梯度裁剪)

    参考8.5. 循环神经网络的从零开始实现 - 动手学深度学习 2.0.0 documentation 参考循环神经网络(MLP-->RNN)_流萤数点的博客-CSDN博客 我们可以训练一个基于循 ...

最新文章

  1. 【题解】P1080 国王游戏(贪心+高精python天下第一)
  2. 解决2003不支持FLV的方法
  3. Linux中防火墙命令笔记
  4. cvtcolor函数_5 OpenCV几个函数操作实例
  5. JAVA常用的工具类
  6. colorui 使用iconfont图标
  7. android选择本地相册或拍照更换软件背景图片
  8. 隧道场景人员车辆定位系统-帮助隧道施工实现智能化管理
  9. c加加中print是什么意思_Java中的null到底是什么意思?
  10. 浏览器火狐3.0发布之盛况
  11. 数据事务及ACID特性、事务回滚
  12. Windows批处理bat常用命令教程
  13. svn 创建分支、切换分支 及 合并分支 操作
  14. 京东运维开发工程师 2019校招卷总结
  15. 百亿积木市场,能跑出一个“中国乐高”?
  16. 无人自动驾驶汽车的信息安全问题与汽车以太网安全防护
  17. 2013年1月当选微软MVP的CSDN会员名单揭晓!
  18. Sony spad sensor 周边的tdc电路要求满足什么
  19. CTF-Show-数学99
  20. python学习——requests模块

热门文章

  1. CANOpen SDO
  2. 区块链开发工程师和人工智能算法工程师,哪个会在未来 5 年收入更高?
  3. 多项式拟合 java_最小二乘法多项式拟合的Java实现
  4. 机器学习数学知识(一) 自然数e
  5. startactivity后App出现闪退问题情况分析
  6. 生鲜电商平台多方位可行性方案,如何撬开“蓝海”
  7. 昆十四中2021年高考成绩查询,昆明第十四中学2021年排名
  8. 如何快速爬取QQ音乐上的歌手曲目排名并做成Excel表格形式
  9. 基于NODE.JS与KUE搭建消息队列[转]
  10. 集成测试最全详解,看完必须懂了