目录:OneHot与Dummy

  • 一、前言
  • 二、OneHot编码
  • 三、Dummy编码

一、前言

在模型的训练过程中,我们会对数据集的连续特征进行离散化操作,如使用简单的线性模型,然后对离散化后的特征进行OneHot编码或哑变量编码。这样通常会使得我们模型具有较强的非线性能力。

二、OneHot编码

思想:

将离散化特征的每一种取值都成是一种状态,若你的这一特征中有N个不同的取值,那么我们就可以将这些特征抽象成N种不同的状态,OneHot编码保证了每一个取值只有一种状态处于“激活态”,也就是说N种状态中只有一个状态值为1,其他状态为0。

假设我们以学历为例,现有小学、中学、大学、硕士、博士五种类别,使用OneHot编码就会得到:

小学 -> [1,0,0,0,0]
中学 -> [0,1,0,0,0]
大学 -> [0,0,1,0,0]
硕士 -> [0,0,0,1,0]
博士 -> [0,0,0,0,1]

Python中的OneHot用法:

from sklearn import preprocessing
array = np.array([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])
print(array)
enc = preprocessing.OneHotEncoder()
enc.fit(array)
print(enc.n_values_) #每个特征对应的最大位数
print(enc.transform([[0,1,3]]).toarray())array([[0, 0, 3],[1, 1, 0],[0, 2, 1],[1, 0, 2]])
array是一个4行3列的矩阵,每一列对应于一个样本的特征序列,即一个样本有三个特征,4行表示传入了4个样本
[2 3 4]
每个特征对应的位数:观察第一列可知,第一个特征有两个取值0,1;第二个特征有三个取值0,1,2;第三个特征有四个取值0,1,2,3
[[1. 0. 0. 1. 0. 0. 0. 0. 1.]]
故第一个特征的onehot编码是一个两位的0、1串,第二个特征是一个三位0、1串,第三个特征是一个四位的0,1串

在对非数值型特征进行onehot编码时需要先通过LabelEncoder()将分类变量转换成整数形式,然后通过OneHotEncoder()进行编码,否则会报错误如下:

ValueError: could not convert string to float: '小学'。另外再用OneHotEncoder()进行编码时需为2D array,否则会有如下错误:ValueError: Expected 2D array, got 1D array instead:
array=[3. 0. 2. 4. 1.].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

三、Dummy编码

哑变量编码直观的解释就是任意的将一个状态去除,如学位信息,使用哑变量可以用4个状态就足以反映上述5个类别的信息,也就是我们仅使用前四个状态位就可以表示博士了。因为对于我们的一个研究样本,他如果不是小学生,也不是中学生,大学生、研究生,那他便默认为博士了。所以,用哑变量可以将上述5类表示成:

小学 -> [1,0,0,0]
中学 -> [0,1,0,0]
大学 -> [0,0,1,0]
硕士 -> [0,0,0,1]
博士 -> [0,0,0,0]

Python中的实现如下:

data = ["小学","初中","大学","硕士","博士"]
pd.get_dummies(data,prefix="data")data_初中  data_博士  data_大学  data_小学  data_硕士
0        0        0        0        1        0
1        1        0        0        0        0
2        0        0        1        0        0
3        0        0        0        0        1
4        0        1        0        0        0

【机器学习】特征编码OneHot与Dummy的区别与联系相关推荐

  1. 图解人工智能机器学习深度学习的关系和区别

    图解人工智能机器学习深度学习的关系和区别,先直观看下图的关系: AI(Artificial Intelligence.人工智能).机器学习(machine learning).深度学习(Deep le ...

  2. 机器学习和深度学习有什么区别?

    机器学习和深度学习是两个相互关联但又不完全相同的概念.机器学习是一种通过让计算机从数据中学习并改进算法模型,实现对数据的自动分析.预测.分类和决策等任务的方法.而深度学习是一种机器学习的分支,它通过构 ...

  3. 机器学习VS深度学习,两者区别在哪里?

    机器学习对深度学习--二者间的相近之处与差异所在. 如今人工智能已经成为一大热门话题,而人工智能的基本构建要素分为机器学习与深度学习.以下维恩图解释了机器学习对深度学习之间的关系: 机器学习: 机器学 ...

  4. 机器学习中算法与模型的区别

    点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要7分钟 跟随小博主,每天进步一丢丢 Datawhale干货 来自:Datawhale 作者:Sambodhi,海边的拾遗者 导读 机器学习涉及到 ...

  5. 机器学习和大数之间有什么区别?

    大数据的核心是利用数据的价值,机器学习是利用数据价值的关键技术,对于大数据而言,机器学习是不可或缺的.相反,对于机器学习而言,越多的数据会越可能提升模型的精确性,同时,复杂的机器学习算法的计算时间也迫 ...

  6. 【机器学习】onehot编码的各种实现

    对于定类类型的数据,建议使用one-hot encoding.定类类型就是纯分类,不排序,没有逻辑关系.比如性别分男和女,男女不存在任何逻辑关系,我们不能说男就比女好,或者相反.再者,中国各省市分类也 ...

  7. 【机器学习】GBDT 与 LR 的区别总结

    作者:杜博亚,阿里算法工程师,复旦大学计算机硕士,BDKE 之光. 1.从机器学习三要素的角度 1.1 模型 本质上来说,他们都是监督学习,判别模型,直接对数据的分布建模,不尝试挖据隐含变量,这些方面 ...

  8. 机器学习和传统编程有什么区别?✅

    什么是机器学习? 有些人说人工智能和机器学习只不过是if语句,更有甚至说它们只是简单的统计数据.或者说机器学习只是一个描述数学+算法的新词, 这种简化看起来很有道理,但很明显,机器学习更加复杂一些. ...

  9. 机器学习:导数与偏导数的区别.

    机器学习:导数与偏导数 导数和偏导数没有本质区别,都是当自变量的变化趋于0时,函数值的变化量与自变量变化量的比值的极限(如果极限存在的话). 一元函数,一个y对应一个x,导数只有一个. 二元函数,一个 ...

最新文章

  1. cmd启动tomcat
  2. Python爬虫之urllib模块2
  3. Linux中设置vim自动在运算符号两边加上空格
  4. 动态规划训练25 [Food Delivery ZOJ - 3469 ]好题
  5. ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门
  6. 在.net中序列化读写xml方法的总结(转载)
  7. 大白菜UEFI版制作u盘启动盘使用教程
  8. 《手把手教你》系列基础篇之1-python+ selenium自动化测试-环境搭建(详细)
  9. ireport在Java中不展示_编译错误:ireport with java;属性'uuid'不允许出现在元素'jasperReport'中...
  10. 代码仓库-SVN分支策略
  11. 网页游戏开发流程及常用技术大盘点
  12. 2021年,中国程序员前景一片灰暗,真的是这样吗?
  13. Word部分选项卡消失问题
  14. linux中文找不到resource,linux :Resource temporarily unavailable错误解决
  15. 2706: 正方形(简单模拟)
  16. 常见的夜间经济项目有哪些?
  17. 中国大学数据科学与大数据技术专业排名!2021软科排名
  18. FFmpeg入门详解之83:流媒体与直播技术
  19. 自治,甲骨文继续领先的开始?
  20. 如何打造陆金所营销活动配置发布平台

热门文章

  1. 层次分析法java_层次分析法java实现
  2. 项目中成功的运用proxool连接池
  3. 法院不能既判决驳回诉讼请求又告知当事人另行起诉
  4. FTP服务器部署与优化+Received message too long报错
  5. DevExpress VCL for Delphi 各版本收集下载(最新支持Delphi 10.3.3 RIO)
  6. activiti7入门体验(2)
  7. 数学之美:拼音输入法的数学原理
  8. java 开源 网络流量统计_开源 java CMS - FreeCMS2.6 统计分析
  9. Android软件中嵌入地图之三:Google地图
  10. android虚线边框_android 绘制虚线效果