LabelEncoder 和 OneHotEncoder 是什么

  • 在数据处理过程中,我们有时需要对不连续的数字或者文本进行数字化处理。
  • 在使用 Python 进行数据处理时,用 encoder 来转化 dummy variable(虚拟数据)非常简便,encoder 可以将数据集中的文本转化成0或1的数值。
  • LabelEncoder 和 OneHotEncoder 是 scikit-learn 包中的两个功能,可以实现上述的转化过程。
  • sklearn.preprocessing.OneHotEncoder 的官方介绍:LabelEncoder
  • sklearn.preprocessing.OneHotEncoder 的官方介绍:OneHotEnncoder

数据集中的类别数据

在使用回归模型和机器学习模型时,所有的考察数据都是数值更容易得到好的结果。因为回归和机器学习都是基于数学函数方法的,所以当我们要分析的数据集中出现了类别数据(categorical data),此时的数据是不理想的,因为我们不能用数学的方法处理它们。例如,在处理男和女两个性别数据时,我们用0和1将其代替,再进行分析。由于这种情况的出现,我们需要可以将文字数字化的现成方法。

LabelEncoder 和 OneHotEncoder 的例子

下面是一个使用 Python sci-kit 包中 LableEncoder 和 OneHotEncoder 的具体例子:

LableEncoder VS OneHotEncoder

  • 首先,我们需要创建一个变量 encoder_x 来进行编码工作。
  • 程序执行过后,我们的类别数据就被转化成了数值0、1、2、3.
  • 显然这种结果还不理想,因为计算机会对这些数值进行对比,例如2比1大,3比2也大,不利于我们进行数据分析。所以我们需要对这些数值进行再次的处理,得到一些虚拟数据。
  • 接下来我们就需要借助 OneHotEncoder 来创造一些虚拟数据。
  • OneHotEncoder 可以把数据分成多个不同的列,每一列都用0或1来表示。
  • 使用 OneHotEncoder 时,我们需要指明要处理的列。在这个例子中,我们想对第一列虚拟数据进行编码处理,所以我们设定 categorical_features 中的 index=0。

下面是具体代码:

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
encoder_x=LabelEncoder()
x[:,0]=encoder_x.fit_transform(x[:,0])
onehotencoder = onehotencoder(categorical_features = [0])
x=onehotencoder.fit_transform(x).toarray()
x=[:,1:]

远离虚拟数据陷阱

  • 如果数据集里面有一个以上的虚拟变量,而且这些虚拟变量之间又有联系,这样的数据集被数字化编码以后就容易掉入虚拟数据陷阱。
  • 在上面的例子中,如果被分析变量不是 b, c 或 d,那么一定就是 a! 所以就会出现虚拟变量陷阱,这个陷阱的实质其实就是完全共线性。(矩阵不是满秩的)
  • 接下来,我们需要去掉虚拟变量中的一列。也就是说,如果有 m 个定性变量,我们就引入 m-1 个虚拟变量。
  • 代码的最后一行 x=[:,1:] 作用是,从第1列开始复制数据中的所有行和所有列。
  • 至此,第一列哑数据被去除了,虚拟数据陷阱就得以避免了。

LabelEncoder 和 OneHotEncoder 的区别

  • LabelEncoder 将一列文本数据转化成数值。
  • 例如,[red, blue, red, yellow] = [0,2,0,1]

  • OneHotEncoder 将一列文本数据转化成一列或多列只有0和1的数据。
  • 例如,[red, blue, red, yellow] = [1,2,1,3] 会被转化成3列用0和1表示的数据列,如下图:

欢迎关注我的知乎专栏【数据池塘】,专注于分享机器学习、数据挖掘干货:https://zhuanlan.zhihu.com/datapool

⬇️ 扫描下方二维码关注公众号【数据池塘】 ⬇️

回复【算法】,获取最全面的机器学习算法网络图:

数据预处理之将类别数据数字化的方法 —— LabelEncoder VS OneHotEncoder相关推荐

  1. python数据预处理之将类别数据转换为数值的方法

    在进行python数据分析的时候,首先要进行数据预处理. 有时候不得不处理一些非数值类别的数据,嗯, 今天要说的就是面对这些数据该如何处理. 目前了解到的大概有三种方法: 1,通过LabelEncod ...

  2. 【Python】数据预处理之将类别数据转换为数值的方法(含Python代码分析)

    在进行Python数据分析的时候,首先要进行数据预处理.但是有时候不得不处理一些非数值类别的数据,遇到这类问题时该怎么解决呢? 目前为止,总结了三种方法,这里分享给大家. 一.通过mapping方式, ...

  3. [RS] 类别数据数字化的方法 —— LabelEncoder VS OneHotEncoder (虚拟变量陷阱(Dummy Variable Trap))

    参考:虚拟变量陷阱原理及算例 - 知乎 LabelEncoder 和 OneHotEncoder  在数据处理过程中,我们有时需要对不连续的数字或者文本进行数字化处理. 在使用 Python 进行数据 ...

  4. 地铁大数据挖掘之数据预处理——从原始一卡通数据提取城市地铁客流(一)

    这是很久以前写的一段代码,很简单很基础.最近突然用到,这里把它分享出来,希望可以为有需要的朋友提供帮助. 以及欢迎阅读这一系列第二篇:地铁大数据挖掘之客流数据预处理--从原始一卡通数据提取城市地铁客流 ...

  5. 地铁大数据挖掘之数据预处理——从原始一卡通数据提取城市地铁客流(二)

    关于初步处理,请参考地铁大数据挖掘之客流数据预处理--从原始一卡通数据提取城市地铁客流(一). 上一篇博客对数据进行了初步处理,得到结果如下图: "_10min"字段代表所处的时间 ...

  6. cnn对网络数据预处理_CNN中的数据预处理和网络构建

    cnn对网络数据预处理 In this article, we will go through the end-to-end pipeline of training convolution neur ...

  7. 数据预处理--噪声_为什么数据对您的业务很重要-以及如何处理数据

    数据预处理--噪声 YES! Data is extremely important for your business. 是! 数据对您的业务极为重要. A human body has five ...

  8. python数据预处理代码_Python中数据预处理(代码)

    本篇文章给大家带来的内容是关于Python中数据预处理(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助.1.导入标准库import numpy as np import matp ...

  9. python数据预处理 重复行统计_Python数据分析之数据预处理(数据清洗、数据合并、数据重塑、数据转换)学习笔记...

    1. 数据清洗 1.1 空值和缺失值的处理 ​空值一般表示数据未知.不适用或将在以后添加数据.缺失值是指数据集中某个或某些属性的值是不完整的. ​一般空值使用None表示,缺失值使用NaN表示 1.1 ...

最新文章

  1. 关于学习Python的一点学习总结(39->导入模块)
  2. Python3报错:TypeError: unsupported operand type(s) for +: ‘int‘ and ‘str‘
  3. boost::uuid模块实现不同形式随机生成器的基准的测试程序
  4. OpenGL整体概念
  5. 将字符串分割为指定长度的子字符串
  6. 三星想抢苹果芯片订单?台积电表示想多了
  7. MAPZONE GIS SDK接入Openlayers3之二——空间参考扩展
  8. CNET:乔布斯留给我们的12条宝贵经验
  9. 六款值得推荐的数据挖掘得力助手
  10. python语言中strike_基于Python的XSS测试工具XSStrike使用方法
  11. 光储直流微电网能量管理。 系统主要由光伏发电模块、mppt控制模块、混合储能系统模块、直流负载模块、改进前的soc限值管理控制模块
  12. 线段树合并学习笔记(P4556)
  13. 区块链技术应用将迎来多场景布局
  14. 武魂java_jdk及tomcat的安装
  15. 嵌入式设备查看系统的版本、编译时间、架构等信息(uname命令)
  16. .md文件中插入本地图片并显示图片预览
  17. 【AIoT库】“星”未来,展宏“图”—— 2022 AIoT星图品牌线上发布会圆满落幕
  18. 设置火狐浏览器firefox模拟微信浏览器客户端,调试网站
  19. google dapper论文 中文
  20. 上海交大牵手淘宝成立媒体计算实验室:推动视频超分等关键技术发展

热门文章

  1. thinkphp5 异步调用方法_详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
  2. python中int什么意思_python3中int(整型)的使用教程
  3. python tornado高并发_tornado IO并发真的很高么?
  4. java流式布局换行_自动换行的流式布局
  5. minus出错matlab,请求帮忙指点MATLAB中的语法错误
  6. 小程序的出现留给APP的时间还会久吗?
  7. Mozilla为Firefox添加新的CSRF保护
  8. php 5.3新增的闭包语法介绍function() use() {}
  9. BZOJ2693:JZPTAP——题解
  10. 基于实数编码的参数自适应遗传算法(matlab代码)