大部分机器学习算法是基于向量空间中度量来进行计算的,使用独热编码(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

如何对类别变量进行独热编码相关推荐

  1. 虚拟变量和独热编码的区别(Difference of Dummy Variable One Hot Encoding)

    在<定量变量和定性变量的转换(Transform of Quantitative & Qualitative Variables)>一文中,我们可以看到虚拟变量(Dummy Var ...

  2. 特征工程—数据哑变量(独热编码)

    哑变量=独热编码=稀疏矩阵 分类特征变量分为:名义变量,有序变量,有距变量 名义变量:如门A,B,C,指数据之间毫无关联性 有序变量:如小学,中学,大学,学历有高低,但不能相互计算 有距变量:如分数, ...

  3. 哑变量(Dummy Variable)、独热编码(one-hot Encoding)、label-encoding归纳

    1 概念 1.1 定类型变量 定类类型就是纯分类,不排序,没有逻辑关系. 当某特征具有k个属性值,那么: a 哑变量(虚拟变量)-- 具有k-1个二进制特征,基准类别将被忽略,若基准类别选择不合理,仍 ...

  4. 数据预处理之One-Hot(独热编码)编码

    数据预处理之One-Hot(独热编码)编码 为什么使用One-Hot编码 对于机器学习任务中,特征并不总是连续值,很多是分类值.这些分类值本身没有大小的意义.为了将数据集中一个分类变量替换为一个或多个 ...

  5. pandas.get_dummies (独热编码)详解

    1.pandas.get_dummies使用场景 在对变量进行独热编码时使用,例如:某一列类别型变量是季节,取值为春.夏.秋.冬,当我们对其进行建模时,需要将其进行独热编码,这时:pandas.get ...

  6. python实现数据编码(独热编码+归一化)

    实现功能: python实现数据编码,对离散型变量进行独热编码,对数值型变量进行归一化处理. 实现代码: import numpy as np import pandas as pddef Read_ ...

  7. Python下数值型与字符型类别变量独热编码(One-hot Encoding)实现

    1 OneHotEncoder 2 pd.get_dummies   在数据处理与分析领域,数值型与字符型类别变量的编码是不可或缺的预处理操作.本文基于Python下OneHotEncoder与pd. ...

  8. 机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding)

    机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding) 序号编码:序号编码通常用于处理类别间具有大小关系的数据 可以通过导入sklearn.preproce ...

  9. 数据预处理之独热编码(One-Hot)

    1.前言 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等. 这些特征值并不是连续的,而是离散的,无序的.通常我们需要对其进行特征数字化. 那什么是特征数字化呢 ...

最新文章

  1. 团队-象棋游戏-设计文档
  2. java注解判断字段是否存在_使用注解和反射判断指定的字段不能为空
  3. One Bug of WatiN?
  4. lisp语言画阿基米德线_孩子总说“我不会画”!那么孩子是否要先学画形象?...
  5. MySQL where后面的标量子查询使用
  6. nginx delete form表单 收不到参数_HTTP 文件上传的一个后端完善方案(NginX)
  7. Spring Boot -Shiro配置多Realm 1
  8. HTML5人喜欢用来调侃自己生活状态的话
  9. C++ opengl GL_QUAD_STRIP的绘制
  10. 潜水员(信息学奥赛一本通-T1271)
  11. 2014年12月26日
  12. 计算机等级考试绝对应用,96年4月至210年全国计算机等级考试绝对全收集.docx
  13. 浅析那些带着“主角光环“的泰坦尼克号幸存者
  14. java与自动化的应用实例_自动化测试中java多线程的使用实例
  15. Erlang/Elixir: 外部通信之-NIF
  16. 手机浏览器 打开 APP,APP 嵌套在了浏览器里,网页跳转app问题
  17. 局域网下两台电脑ping不通的问题总结
  18. JavaScript学习第十九天
  19. 受力分析软件_学了那么多力学,怎么还是不会做有限元分析?
  20. 树莓派3b+安装ubuntu 16.04+ROS kinetic过程详解及踩坑总结

热门文章

  1. ubuntu16.04调节亮度
  2. xmind 8 for mac卡顿问题处理
  3. Ubuntu16.04设置以太网连接
  4. pygame控制飞船上下左右移动
  5. UI自动化测试之元素定位方法
  6. 为什么有的东西能卖那么贵?
  7. 曾国藩经典人生哲理语录——大师级别啊
  8. 老公叫老婆在中国有多少种称呼
  9. 汉诺塔+汉诺四塔(C/C++)
  10. pywintypes.com_error: (-2147221008, ‘尚未调用 CoInitialize。‘, None, None)