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 相关文章推荐
python 中文乱码问题深入分析
Mar 13 Python
python检测服务器是否正常
Feb 16 Python
python获取指定时间差的时间实例详解
Apr 11 Python
用不到50行的Python代码构建最小的区块链
Nov 16 Python
TensorFlow高效读取数据的方法示例
Feb 06 Python
Python序列循环移位的3种方法推荐
Apr 09 Python
Pycharm 操作Django Model的简单运用方法
May 23 Python
用Python绘制漫步图实例讲解
Feb 26 Python
Python如何使用OS模块调用cmd
Feb 27 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
Mar 06 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
Mar 28 Python
Python实例方法、类方法、静态方法区别详解
Sep 05 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设计模式中的工厂模式
2008/06/12 PHP
php数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
php对数组排序代码分享
2014/02/24 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
2010/12/11 Javascript
实现动画效果核心方式的js代码
2013/09/27 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
JS完成画圆圈的小球
2017/03/07 Javascript
angularJs中datatable实现代码
2017/06/03 Javascript
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
koa2的中间件功能及应用示例
2020/03/05 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
2020/07/13 Javascript
python获取多线程及子线程的返回值
2017/11/15 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
python属于解释型语言么
2020/06/15 Python
HTML5 Canvas鼠标与键盘事件demo示例
2013/07/04 HTML / CSS
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
2014年助理政工师工作总结
2014/12/19 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
新员工入职感言范文!
2019/07/04 职场文书
如何撰写促销方案?
2019/07/05 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
Python 内置函数速查表一览
2021/06/02 Python