数据预处理之将类别数据数字化的方法 —— LabelEncoder VS OneHotEncoder
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相关推荐
- python数据预处理之将类别数据转换为数值的方法
在进行python数据分析的时候,首先要进行数据预处理. 有时候不得不处理一些非数值类别的数据,嗯, 今天要说的就是面对这些数据该如何处理. 目前了解到的大概有三种方法: 1,通过LabelEncod ...
- 【Python】数据预处理之将类别数据转换为数值的方法(含Python代码分析)
在进行Python数据分析的时候,首先要进行数据预处理.但是有时候不得不处理一些非数值类别的数据,遇到这类问题时该怎么解决呢? 目前为止,总结了三种方法,这里分享给大家. 一.通过mapping方式, ...
- [RS] 类别数据数字化的方法 —— LabelEncoder VS OneHotEncoder (虚拟变量陷阱(Dummy Variable Trap))
参考:虚拟变量陷阱原理及算例 - 知乎 LabelEncoder 和 OneHotEncoder 在数据处理过程中,我们有时需要对不连续的数字或者文本进行数字化处理. 在使用 Python 进行数据 ...
- 地铁大数据挖掘之数据预处理——从原始一卡通数据提取城市地铁客流(一)
这是很久以前写的一段代码,很简单很基础.最近突然用到,这里把它分享出来,希望可以为有需要的朋友提供帮助. 以及欢迎阅读这一系列第二篇:地铁大数据挖掘之客流数据预处理--从原始一卡通数据提取城市地铁客流 ...
- 地铁大数据挖掘之数据预处理——从原始一卡通数据提取城市地铁客流(二)
关于初步处理,请参考地铁大数据挖掘之客流数据预处理--从原始一卡通数据提取城市地铁客流(一). 上一篇博客对数据进行了初步处理,得到结果如下图: "_10min"字段代表所处的时间 ...
- cnn对网络数据预处理_CNN中的数据预处理和网络构建
cnn对网络数据预处理 In this article, we will go through the end-to-end pipeline of training convolution neur ...
- 数据预处理--噪声_为什么数据对您的业务很重要-以及如何处理数据
数据预处理--噪声 YES! Data is extremely important for your business. 是! 数据对您的业务极为重要. A human body has five ...
- python数据预处理代码_Python中数据预处理(代码)
本篇文章给大家带来的内容是关于Python中数据预处理(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助.1.导入标准库import numpy as np import matp ...
- python数据预处理 重复行统计_Python数据分析之数据预处理(数据清洗、数据合并、数据重塑、数据转换)学习笔记...
1. 数据清洗 1.1 空值和缺失值的处理 空值一般表示数据未知.不适用或将在以后添加数据.缺失值是指数据集中某个或某些属性的值是不完整的. 一般空值使用None表示,缺失值使用NaN表示 1.1 ...
最新文章
- 关于学习Python的一点学习总结(39->导入模块)
- Python3报错:TypeError: unsupported operand type(s) for +: ‘int‘ and ‘str‘
- boost::uuid模块实现不同形式随机生成器的基准的测试程序
- OpenGL整体概念
- 将字符串分割为指定长度的子字符串
- 三星想抢苹果芯片订单?台积电表示想多了
- MAPZONE GIS SDK接入Openlayers3之二——空间参考扩展
- CNET:乔布斯留给我们的12条宝贵经验
- 六款值得推荐的数据挖掘得力助手
- python语言中strike_基于Python的XSS测试工具XSStrike使用方法
- 光储直流微电网能量管理。 系统主要由光伏发电模块、mppt控制模块、混合储能系统模块、直流负载模块、改进前的soc限值管理控制模块
- 线段树合并学习笔记(P4556)
- 区块链技术应用将迎来多场景布局
- 武魂java_jdk及tomcat的安装
- 嵌入式设备查看系统的版本、编译时间、架构等信息(uname命令)
- .md文件中插入本地图片并显示图片预览
- 【AIoT库】“星”未来,展宏“图”—— 2022 AIoT星图品牌线上发布会圆满落幕
- 设置火狐浏览器firefox模拟微信浏览器客户端,调试网站
- google dapper论文 中文
- 上海交大牵手淘宝成立媒体计算实验室:推动视频超分等关键技术发展
热门文章
- thinkphp5 异步调用方法_详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
- python中int什么意思_python3中int(整型)的使用教程
- python tornado高并发_tornado IO并发真的很高么?
- java流式布局换行_自动换行的流式布局
- minus出错matlab,请求帮忙指点MATLAB中的语法错误
- 小程序的出现留给APP的时间还会久吗?
- Mozilla为Firefox添加新的CSRF保护
- php 5.3新增的闭包语法介绍function() use() {}
- BZOJ2693:JZPTAP——题解
- 基于实数编码的参数自适应遗传算法(matlab代码)