三、处理分类型特征:编码与哑变量

点击标题即可获取文章相关的源代码文件哟!

在机器学习中,大多数算法,譬如逻辑回归,支持向量机SVM,k近邻算法等都只能够处理数值型数据,不能处理文字,在sklearn当中,除了专用来处理文字的算法,其他算法在fit的时候全部要求输入数组或矩阵,也不能够导入文字型数据(其实手写决策树和普斯贝叶斯可以处理文字,但是sklearn中规定必须导入数值型)。

然而在现实中,许多标签和特征在数据收集完毕的时候,都不是以数字来表现的。比如说,学历的取值可以是[“小 学”,“初中”,“高中”,“大学”],付费方式可能包含[“支付宝”,“现金”,“微信”]等等。在这种情况下,为了让数据适应算法和库,我们必须将数据进行编码,即是说,将文字型数据转换为数值型。

  • preprocessing.LabelEncoder:标签专用,能够将分类转换为分类数值





  • preprocessing.OrdinalEncoder:特征专用,能够将分类特征转换为分类数值




  • preprocessing.OneHotEncoder:独热编码,创建哑变量

我们刚才已经用OrdinalEncoder把分类变量Sex和Embarked都转换成数字对应的类别了。在舱门Embarked这一列中,我们使用[0,1,2]代表了三个不同的舱门,然而这种转换是正确的吗?

我们来思考三种不同性质的分类数据:
1) 舱门(S,C,Q)
三种取值S,C,Q是相互独立的,彼此之间完全没有联系,表达的是S≠C≠Q的概念。这是名义变量
2) 学历(小学,初中,高中)
三种取值不是完全独立的,我们可以明显看出,在性质上可以有高中>初中>小学这样的联系,学历有高低,但是学历取值之间却不是可以计算的,我们不能说小学 + 某个取值 = 初中。这是有序变量
3) 体重(>45kg,>90kg,>135kg)
各个取值之间有联系,且是可以互相计算的,比如120kg - 45kg = 90kg,分类之间可以通过数学计算互相转换。这是有距变量

然而在对特征进行编码的时候,这三种分类数据都会被我们转换为[0,1,2],这三个数字在算法看来,是连续且可以计算的,这三个数字相互不等,有大小,并且有着可以相加相乘的联系。所以算法会把舱门,学历这样的分类特征,都误会成是体重这样的分类特征。这是说,我们把分类转换成数字的时候,忽略了数字中自带的数学性质,所以给算法传达了一些不准确的信息,而这会影响我们的建模。
类别OrdinalEncoder可以用来处理有序变量,但对于名义变量,我们只有使用哑变量的方式来处理,才能够尽量向算法传达最准确的信息:

这样的变化,让算法能够彻底领悟,原来三个取值是没有可计算性质的,是“有你就没有我”的不等概念。在我们的数据中,性别和舱门,都是这样的名义变量。因此我们需要使用独热编码,将两个特征都转换为哑变量。






特征可以做哑变量,标签也可以吗?

可以,使用类sklearn.preprocessing.LabelBinarizer可以对做哑变量,许多算法都可以处理多标签问题(比如说决策树),但是这样的做法在现实中不常见,因此我们在这里就不赘述了。

三、数据预处理——处理分类型数据:编码与哑变量相关推荐

  1. 数据预处理和特征工程2-缺失值处理、分类型特征:编码与哑变量

    缺失值处理 import pandas as pd data = pd.read_csv(r"E:\机器学习\sklearn学习\数据\Narrativedata.csv",ind ...

  2. 3.4 数据预处理(一) - 数据集成(Data Integration)

    简介 数据集成(Data Integration)是一个数据整合的过程.通过综合各数据源,将拥有不同结构.不同属性的数据整合归纳在一起,就是数据集成.由于不同的数据源定义属性时命名规则不同,存入的数据 ...

  3. Python数据分析之数据预处理(数据清洗、数据合并、数据重塑、数据转换)学习笔记

    文章目录 1. 数据清洗 1.1 空值和缺失值的处理 1.1.1 使用isnull()和notnull()函数 1.1.1.1 isnull()语法格式: 1.1.1.2 notnull()语法格式: ...

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

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

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

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

  6. 分类变量要编码成哑变量_停止对分类变量进行热编码

    分类变量要编码成哑变量 重点 (Top highlight) One-hot encoding, otherwise known as dummy variables, is a method of ...

  7. 数据预处理的分箱操作

    介绍 我们在建立模型前,一般需要对特征变量进行离散化,特征离散化后,模型会更稳定,降低模型过拟合的风险.尤其是采用 logsitic 建立评分卡模型时,必须对连续变量进行离散化.而特征离散化处理通常采 ...

  8. 系列文章(一):机器学习与深度学习——数据预处理(数值型数据)

    系列文章(一):机器学习与深度学习中的数据预处理(数值型数据) 目录 系列文章(一):机器学习与深度学习中的数据预处理(数值型数据) 一.引言 1.1 为何预处理(Why preprocessing? ...

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

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

最新文章

  1. [转载]在线文档预览方案-Office Web Apps
  2. TechED 2005 博客园兄弟合影
  3. 面试时真能“坦白从宽”?
  4. python用途与前景-java和Python的前景谁更好
  5. linux下安装mysql笔记
  6. Simulink仿真 第五节 复用器和分路器
  7. tp中php验证码程序,thinkPHP 验证码生成与验证
  8. 网络通信-2(TCP通信、ServerSocket、Socket)
  9. Gartner APM 魔力象限技术解读——全量存储? No! 按需存储?YES!
  10. oracle adf_Oracle ADF和Oracle Jet一起工作。 建筑模式
  11. 计算机网络原理(第三章) 传输层 课后习题
  12. 路由器05---多拨
  13. Java 8 新的时间日期库java.time
  14. 初学者的回归测试,都该注意哪几点?
  15. EF框架step by step(9)—Code First Fluent API
  16. DHCP Option 82
  17. android远程控制电视,手机如何远程控制电视
  18. 离散-关系矩阵乘法运算
  19. C++阶段03笔记03【文件操作(文本文件读写、二进制文件读写)】
  20. 支持掉线自动报警Profinet远程分布式IO模块

热门文章

  1. Django项目--csrf攻击
  2. 计算机系统的部件名称作用,电脑配件与每个配件作用详细完整的解释
  3. python 去掉空格_如何从Python DataFrame中去除空格在这个例子中
  4. 深度学习目标检测之 YOLO v1
  5. HTML块,含样式的标签
  6. 【Python基础入门系列】第06天:Python 模块和包
  7. 多继承以及MRO顺序【super().的使用】
  8. php redis 队列,Redis 实现队列
  9. 课外知识----浏览器存储技术
  10. S2-016、S2-017