如何对类别变量进行独热编码
大部分机器学习算法是基于向量空间中度量来进行计算的,使用独热编码(One-hot encoding, 也称为哑变量 dummy variable)会让特征之间的距离计算更加合理。通过独热编码把类别变量转换为机器学习算法可使用的格式,其基本思想是对原始类别变量的每个值创建新的变量,并赋值为 1 和 0
示例说明
下图展示如何进行独热编码,把Team变量转为新的变量:
Team | Points |
---|---|
A | 25 |
A | 12 |
B | 15 |
B | 14 |
B | 19 |
B | 23 |
C | 25 |
C | 29 |
下面把原始变量转为独热编码形式:
Team_A | Team_B | Team_C | Points |
---|---|---|---|
1 | 0 | 0 | 25 |
1 | 0 | 0 | 12 |
0 | 1 | 0 | 15 |
0 | 1 | 0 | 14 |
0 | 1 | 0 | 19 |
0 | 1 | 0 | 23 |
0 | 0 | 1 | 25 |
0 | 0 | 1 | 29 |
R 语言实现
R 有多种方式很容易实现独热编码。可以使用工具包提供函数实现,也可以手动实现。下面定义演示数据:
# 定义数据框
df <- data.frame(team=c('A', 'A', 'B', 'B', 'B', 'B', 'C', 'C'),points=c(25, 12, 15, 14, 19, 23, 25, 29))# 查看数据
df# team points
# 1 A 25
# 2 A 12
# 3 B 15
# 4 B 14
# 5 B 19
# 6 B 23
# 7 C 25
# 8 C 29
我们先看caret包中提供了dummyVars()函数,它可以方便实现独热编码:
library(caret)# 定义独热编码函数
dummy <- dummyVars(" ~ .", data=df)# 在数据框df上执行独热编码函数
final_df <- data.frame(predict(dummy, newdata=df))# 查看结果
final_df# teamA teamB teamC points
# 1 1 0 0 25
# 2 1 0 0 12
# 3 0 1 0 15
# 4 0 1 0 14
# 5 0 1 0 19
# 6 0 1 0 23
# 7 0 0 1 25
# 8 0 0 1 29
另外fastDummies包提供的dummy_cols也可以轻松完成:
library(fastDummies)df2 <- dummy_cols(df, select_columns = "team")
df2# team_A team_B team_C points
# 1 1 0 0 25
# 2 1 0 0 12
# 3 0 1 0 15
# 4 0 1 0 14
# 5 0 1 0 19
# 6 0 1 0 23
# 7 0 0 1 25
# 8 0 0 1 29
当然我们也可以手动实现:
df$teamA <- ifelse(df$team=='A',1,0)
df$teamB <- ifelse(df$team=='B',1,0)
df$teamC <- ifelse(df$team=='C',1,0)
df# team points teamA teamB teamC
# 1 A 25 1 0 0
# 2 A 12 1 0 0
# 3 B 15 0 1 0
# 4 B 14 0 1 0
# 5 B 19 0 1 0
# 6 B 23 0 1 0
# 7 C 25 0 0 1
# 8 C 29 0 0 1
Python实现
import pandas as pd# 定义数据框
df = pd.DataFrame({'team': ['A', 'A', 'B', 'B', 'B', 'B', 'C', 'C'],'points': [25, 12, 15, 14, 19, 23, 25, 29]})# 查看结果
print(df)
sklearn 库提供的OneHotEncoder() 函数用于对pandas数据框实现独热编码:
from sklearn.preprocessing import OneHotEncoder# 创建实例
encoder = OneHotEncoder(handle_unknown='ignore')# 对team列执行独热编码
encoder_df = pd.DataFrame(encoder.fit_transform(df[['team']]).toarray())# 往源数据框中合并独热编码列
final_df = df.join(encoder_df)# 查看数据
print(final_df)# team points 0 1 2
# 0 A 25 1.0 0.0 0.0
# 1 A 12 1.0 0.0 0.0
# 2 B 15 0.0 1.0 0.0
# 3 B 14 0.0 1.0 0.0
# 4 B 19 0.0 1.0 0.0
# 5 B 23 0.0 1.0 0.0
# 6 C 25 0.0 0.0 1.0
# 7 C 29 0.0 0.0 1.0# 删除 'team' 列
final_df.drop('team', axis=1, inplace=True)# 重命名列
final_df.columns = ['points', 'teamA', 'teamB', 'teamC']print(final_df)# points teamA teamB teamC
# 0 25 1.0 0.0 0.0
# 1 12 1.0 0.0 0.0
# 2 15 0.0 1.0 0.0
# 3 14 0.0 1.0 0.0
# 4 19 0.0 1.0 0.0
# 5 23 0.0 1.0 0.0
# 6 25 0.0 0.0 1.0
# 7 29 0.0 0.0 1.0
如何对类别变量进行独热编码相关推荐
- 虚拟变量和独热编码的区别(Difference of Dummy Variable One Hot Encoding)
在<定量变量和定性变量的转换(Transform of Quantitative & Qualitative Variables)>一文中,我们可以看到虚拟变量(Dummy Var ...
- 特征工程—数据哑变量(独热编码)
哑变量=独热编码=稀疏矩阵 分类特征变量分为:名义变量,有序变量,有距变量 名义变量:如门A,B,C,指数据之间毫无关联性 有序变量:如小学,中学,大学,学历有高低,但不能相互计算 有距变量:如分数, ...
- 哑变量(Dummy Variable)、独热编码(one-hot Encoding)、label-encoding归纳
1 概念 1.1 定类型变量 定类类型就是纯分类,不排序,没有逻辑关系. 当某特征具有k个属性值,那么: a 哑变量(虚拟变量)-- 具有k-1个二进制特征,基准类别将被忽略,若基准类别选择不合理,仍 ...
- 数据预处理之One-Hot(独热编码)编码
数据预处理之One-Hot(独热编码)编码 为什么使用One-Hot编码 对于机器学习任务中,特征并不总是连续值,很多是分类值.这些分类值本身没有大小的意义.为了将数据集中一个分类变量替换为一个或多个 ...
- pandas.get_dummies (独热编码)详解
1.pandas.get_dummies使用场景 在对变量进行独热编码时使用,例如:某一列类别型变量是季节,取值为春.夏.秋.冬,当我们对其进行建模时,需要将其进行独热编码,这时:pandas.get ...
- python实现数据编码(独热编码+归一化)
实现功能: python实现数据编码,对离散型变量进行独热编码,对数值型变量进行归一化处理. 实现代码: import numpy as np import pandas as pddef Read_ ...
- Python下数值型与字符型类别变量独热编码(One-hot Encoding)实现
1 OneHotEncoder 2 pd.get_dummies 在数据处理与分析领域,数值型与字符型类别变量的编码是不可或缺的预处理操作.本文基于Python下OneHotEncoder与pd. ...
- 机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding)
机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding) 序号编码:序号编码通常用于处理类别间具有大小关系的数据 可以通过导入sklearn.preproce ...
- 数据预处理之独热编码(One-Hot)
1.前言 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等. 这些特征值并不是连续的,而是离散的,无序的.通常我们需要对其进行特征数字化. 那什么是特征数字化呢 ...
最新文章
- 团队-象棋游戏-设计文档
- java注解判断字段是否存在_使用注解和反射判断指定的字段不能为空
- One Bug of WatiN?
- lisp语言画阿基米德线_孩子总说“我不会画”!那么孩子是否要先学画形象?...
- MySQL where后面的标量子查询使用
- nginx delete form表单 收不到参数_HTTP 文件上传的一个后端完善方案(NginX)
- Spring Boot -Shiro配置多Realm 1
- HTML5人喜欢用来调侃自己生活状态的话
- C++ opengl GL_QUAD_STRIP的绘制
- 潜水员(信息学奥赛一本通-T1271)
- 2014年12月26日
- 计算机等级考试绝对应用,96年4月至210年全国计算机等级考试绝对全收集.docx
- 浅析那些带着“主角光环“的泰坦尼克号幸存者
- java与自动化的应用实例_自动化测试中java多线程的使用实例
- Erlang/Elixir: 外部通信之-NIF
- 手机浏览器 打开 APP,APP 嵌套在了浏览器里,网页跳转app问题
- 局域网下两台电脑ping不通的问题总结
- JavaScript学习第十九天
- 受力分析软件_学了那么多力学,怎么还是不会做有限元分析?
- 树莓派3b+安装ubuntu 16.04+ROS kinetic过程详解及踩坑总结
热门文章
- ubuntu16.04调节亮度
- xmind 8 for mac卡顿问题处理
- Ubuntu16.04设置以太网连接
- pygame控制飞船上下左右移动
- UI自动化测试之元素定位方法
- 为什么有的东西能卖那么贵?
- 曾国藩经典人生哲理语录——大师级别啊
- 老公叫老婆在中国有多少种称呼
- 汉诺塔+汉诺四塔(C/C++)
- pywintypes.com_error: (-2147221008, ‘尚未调用 CoInitialize。‘, None, None)