python对离散变量的one-hot编码方法


Posted in Python onJuly 11, 2018

我们在进行建模时,变量中经常会有一些变量为离散型变量,例如性别。这些变量我们一般无法直接放到模型中去训练模型。因此在使用之前,我们往往会对此类变量进行处理。一般是对离散变量进行one-hot编码。下面具体介绍通过python对离散变量进行one-hot的方法。

注意:这里提供两种哑编码的实现方法,pandas和sklearn。它们最大的区别是,pandas默认只处理字符串类别变量,sklearn默认只处理数值型类别变量(需要先 LabelEncoder )

① pd.get_dummies(prefix=)

pandas的get_dummies()可以直接对变量进行one-hot编码,其中prefix是为one-hot编码后的变量进行命名。

②LabelEncoder和OneHotEncoder

我们也可以通过sklearn的模块实现对离散变量的one-hot编码,其中LabelEncoder是将离散变量替换为数字,

OneHotEncoder则实现对替换为数字的离散变量进行one-hot编码。

注:get_dummies()可以直接对字符型变量进行one-hot编码,但OneHotEncoder不能直接对字符型变量编码,因此我们需要先将字符型变量转换为数值型变量。这就是为什么在OneHotEncoder之前需要LabelEncoder的原因。

下面我们通过实例来介绍这两种方法的具体使用:

①数据的导入

import pandas as pd
import os
os.getcwd() 
os.chdir('E:\study\kaggle\Titanic')
from sklearn.preprocessing import OneHotEncoder 
from sklearn.preprocessing import LabelEncoder 
data = pd.read_csv('train.csv')

②数据熟悉

data['Sex'].value_counts()
Out[38]: 
male  577
female 314
Name: Sex, dtype: int64 #可以看到,变量Sex为字符型变量,取值有male和female两种

③get_dummies

Sex_ohe_1 = pd.get_dummies(data['Sex'])
Sex_ohe_1.head()
Out[40]: 
 female male
0  0  1
1  1  0
2  1  0
3  1  0
4  0  1

④OneHotEncoder

Sex_ohe_2 = OneHotEncoder(sparse=False).fit_transform(data['Sex'].reshape((-1,1))) 
 
ValueError: could not convert string to float: male

可以看到OneHotEncoder无法直接对字符型变量进行编码,需要通过OneHotEncoder将字符型变量转换为数值型变量。

le_sex=LabelEncoder().fit(data['Sex']) 
Sex_label=le_sex.transform(data['Sex']) 
Sex_label= LabelEncoder().fit_transform(data['Sex']) #fit_transform等价于fit和transform两个函数结合
ohe_sex=OneHotEncoder(sparse=False).fit(Sex_label.reshape(-1,1)) 
Sex_ohe=ohe_sex.transform(Sex_label.reshape(-1,1)) 
Sex_ohe_3 = OneHotEncoder(sparse=False).fit_transform(Sex_label.reshape((-1,1)))

注:get_dummies返回的为数据框,OneHotEncoder返回的为数组。

以上这篇python对离散变量的one-hot编码方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pyv8学习python和javascript变量进行交互
Dec 04 Python
简单掌握Python的Collections模块中counter结构的用法
Jul 07 Python
python生成式的send()方法(详解)
May 08 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
Nov 14 Python
详解python上传文件和字符到PHP服务器
Nov 24 Python
Python中使用遍历在列表中添加字典遇到的坑
Feb 27 Python
OpenCV 轮廓检测的实现方法
Jul 03 Python
python实现的Iou与Giou代码
Jan 18 Python
Python基于httpx模块实现发送请求
Jul 07 Python
使用tensorflow 实现反向传播求导
May 26 Python
python实现自定义日志的具体方法
May 28 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Apr 09 Python
Python基于多线程操作数据库相关问题分析
Jul 11 #Python
pandas 按照特定顺序输出的实现代码
Jul 10 #Python
Python OpenCV处理图像之图像直方图和反向投影
Jul 10 #Python
Python中 map()函数的用法详解
Jul 10 #Python
python 读取视频,处理后,实时计算帧数fps的方法
Jul 10 #Python
Python OpenCV处理图像之图像像素点操作
Jul 10 #Python
查找python项目依赖并生成requirements.txt的方法
Jul 10 #Python
You might like
php防止伪造数据从地址栏URL提交的方法
2014/08/24 PHP
php将access数据库转换到mysql数据库的方法
2014/12/24 PHP
javascript判断用户浏览器插件安装情况的代码
2011/01/01 Javascript
js 金额文本框实现代码
2012/02/14 Javascript
eval的两组性能测试数据
2012/08/17 Javascript
jQuery的控件及事件(输入控件及回车事件)使用示例
2013/07/25 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
JQuery中clone方法复制节点
2015/05/18 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
js实现多个标题吸顶效果
2020/01/08 Javascript
[40:05]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
python遍历数组的方法小结
2015/04/30 Python
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
分享6个隐藏的python功能
2017/12/07 Python
python2.7安装图文教程
2018/03/13 Python
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
学python安装的软件总结
2019/10/12 Python
使用Python Tkinter实现剪刀石头布小游戏功能
2020/10/23 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
Java模拟试题
2014/11/10 面试题
高中生期末评语大全
2014/01/28 职场文书
入党积极分子对十八届四中全会期盼的思想汇报
2014/10/17 职场文书
建议书格式
2015/02/04 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
大学生求职信怎么写
2015/03/19 职场文书
员工升职自荐信
2015/03/27 职场文书
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js
Golang连接并操作MySQL
2022/04/14 MySQL