【机器学习】特征编码OneHot与Dummy的区别与联系
目录: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的区别与联系相关推荐
- 图解人工智能机器学习深度学习的关系和区别
图解人工智能机器学习深度学习的关系和区别,先直观看下图的关系: AI(Artificial Intelligence.人工智能).机器学习(machine learning).深度学习(Deep le ...
- 机器学习和深度学习有什么区别?
机器学习和深度学习是两个相互关联但又不完全相同的概念.机器学习是一种通过让计算机从数据中学习并改进算法模型,实现对数据的自动分析.预测.分类和决策等任务的方法.而深度学习是一种机器学习的分支,它通过构 ...
- 机器学习VS深度学习,两者区别在哪里?
机器学习对深度学习--二者间的相近之处与差异所在. 如今人工智能已经成为一大热门话题,而人工智能的基本构建要素分为机器学习与深度学习.以下维恩图解释了机器学习对深度学习之间的关系: 机器学习: 机器学 ...
- 机器学习中算法与模型的区别
点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要7分钟 跟随小博主,每天进步一丢丢 Datawhale干货 来自:Datawhale 作者:Sambodhi,海边的拾遗者 导读 机器学习涉及到 ...
- 机器学习和大数之间有什么区别?
大数据的核心是利用数据的价值,机器学习是利用数据价值的关键技术,对于大数据而言,机器学习是不可或缺的.相反,对于机器学习而言,越多的数据会越可能提升模型的精确性,同时,复杂的机器学习算法的计算时间也迫 ...
- 【机器学习】onehot编码的各种实现
对于定类类型的数据,建议使用one-hot encoding.定类类型就是纯分类,不排序,没有逻辑关系.比如性别分男和女,男女不存在任何逻辑关系,我们不能说男就比女好,或者相反.再者,中国各省市分类也 ...
- 【机器学习】GBDT 与 LR 的区别总结
作者:杜博亚,阿里算法工程师,复旦大学计算机硕士,BDKE 之光. 1.从机器学习三要素的角度 1.1 模型 本质上来说,他们都是监督学习,判别模型,直接对数据的分布建模,不尝试挖据隐含变量,这些方面 ...
- 机器学习和传统编程有什么区别?✅
什么是机器学习? 有些人说人工智能和机器学习只不过是if语句,更有甚至说它们只是简单的统计数据.或者说机器学习只是一个描述数学+算法的新词, 这种简化看起来很有道理,但很明显,机器学习更加复杂一些. ...
- 机器学习:导数与偏导数的区别.
机器学习:导数与偏导数 导数和偏导数没有本质区别,都是当自变量的变化趋于0时,函数值的变化量与自变量变化量的比值的极限(如果极限存在的话). 一元函数,一个y对应一个x,导数只有一个. 二元函数,一个 ...
最新文章
- cmd启动tomcat
- Python爬虫之urllib模块2
- Linux中设置vim自动在运算符号两边加上空格
- 动态规划训练25 [Food Delivery ZOJ - 3469 ]好题
- ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门
- 在.net中序列化读写xml方法的总结(转载)
- 大白菜UEFI版制作u盘启动盘使用教程
- 《手把手教你》系列基础篇之1-python+ selenium自动化测试-环境搭建(详细)
- ireport在Java中不展示_编译错误:ireport with java;属性'uuid'不允许出现在元素'jasperReport'中...
- 代码仓库-SVN分支策略
- 网页游戏开发流程及常用技术大盘点
- 2021年,中国程序员前景一片灰暗,真的是这样吗?
- Word部分选项卡消失问题
- linux中文找不到resource,linux :Resource temporarily unavailable错误解决
- 2706: 正方形(简单模拟)
- 常见的夜间经济项目有哪些?
- 中国大学数据科学与大数据技术专业排名!2021软科排名
- FFmpeg入门详解之83:流媒体与直播技术
- 自治,甲骨文继续领先的开始?
- 如何打造陆金所营销活动配置发布平台
热门文章
- 层次分析法java_层次分析法java实现
- 项目中成功的运用proxool连接池
- 法院不能既判决驳回诉讼请求又告知当事人另行起诉
- FTP服务器部署与优化+Received message too long报错
- DevExpress VCL for Delphi 各版本收集下载(最新支持Delphi 10.3.3 RIO)
- activiti7入门体验(2)
- 数学之美:拼音输入法的数学原理
- java 开源 网络流量统计_开源 java CMS - FreeCMS2.6 统计分析
- Android软件中嵌入地图之三:Google地图
- android虚线边框_android 绘制虚线效果