one-hot和multi-hot编码
1、one-hot
One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。
One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1。
听概念的话显得比较复杂,我们来看一个例子。
假设我们有一群学生,他们可以通过四个特征来形容,分别是:
- 性别:[“男”,“女”]
- 年级:[“初一”,“初二”,“初三”]
- 学校:[“一中”,“二中”,“三中”,“四中”]
举个例子,用上述四个特征来描述小明同学,即“男生,初一,来自二中”,如果特征类别是有序的话,我们能够用表示顺序的数组表示
即“男生,初一,来自一中” ==> [0,0,1]
但是这样的特征处理并不能直接放入机器学习算法中,因为类别之间是无序的。
这时候就可以用独热编码的形式来表示了,我们用采用N位状态寄存器来对N个状态进行编码,拿上面的例子来说,就是:
因此,当我们再来描述小明的时候,就可以采用 [1 0 1 0 0 0 1 0 0]。
代码解释
from sklearn import preprocessing enc = preprocessing.OneHotEncoder()
enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]]) #这里一共有4个数据,3种特征
array = enc.transform([[0,1,3]]).toarray() #这里使用一个新的数据来测试print(array) # [[ 1 0 0 1 0 0 0 0 1]]
2、multi-hot
对于某个属性对应的分类特征,可能该特征下有多个取值,比如一个特征表示对哪些物品感兴趣,那么这个特征不是单个值,而是有多个取值,样本1 在该属性下取值有1,2两种特征, 样本2 在该属性下有2一种特征, 样本3 在该属性下有3,4 两种特征,如果以类似one-hot编码的形式来定义特征应为样本1 [1,1,0,0] 样本2 [0,1,0,0], 样本3 [0,0,1,1],但是这种变量不能够直接用embedding_lookup去做,embedding_lookup只接受只有一个1的one-hot编码,那么为了完成这种情况的embedding需要两个步骤:
1. 将输入属性转化为类型one-hot编码的形式, 在tensorflow中这个过程是通过tf.SparseTensor来完成的,实际上就是构建了一个字典矩阵,key为坐标,value为1或者0表示是否有值,对于一个样本如样本1来说就是构建了一个矩阵[[1,1,0,0]]表示有物品1和2,这个矩阵的规模为[batch_size,num_items],这个过程即为multi-hot编码。
2. 将构建好的类似于one-hot编码的矩阵与embedding矩阵相乘, embedding矩阵的规模为[num_items, embedding_size],相乘之后得到的输出规模为[batchi_size, embedding_size],即对多维多属性的特征构建了embedding vector。
参考链接:https://blog.csdn.net/weixin_40314737/article/details/81737101
机器学习之独热编码(One-Hot)详解(代码解释) - 云+社区 - 腾讯云
one-hot和multi-hot编码相关推荐
- 机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding)
机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding) 序号编码:序号编码通常用于处理类别间具有大小关系的数据 可以通过导入sklearn.preproce ...
- 阿里巴巴线上使用的深度学习兴趣网络 DIN (三) - 论文翻译
总述:阿里巴巴拥有世界上数一数二的电子商务系统,每天的成交额高达数十亿,那么这样一个大规模的商务网站肯定要做好一件事情,那就是用户搜索的时候给用户最好的搜索结果,用户不搜索的时候结合用户的兴趣给用户最 ...
- 分享GitHub上一位老外的嵌入式C编码规范(收藏细读)
简 介: 本文分析在头条上分享GitHub上一位老外的嵌入式C编码规范(收藏细读):嵌入式大杂烩. 关键词: 嵌入式,C语句,编程规范 分享GitHub上一位老外的嵌入式C编码规范(收藏细读) §01 ...
- Redis 7.0 Multi Part AOF的设计和实现
简介:本文将详解Redis中现有AOF机制的一些不足以及Redis 7.0中引入的Multi Part AOF的设计和实现细节. Redis 作为一种非常流行的内存数据库,通过将数据保存在内存中,Re ...
- python打开xml文件报错:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xb7 in position 58: illegal multi
本篇文章主要讲解,python打开xml文件报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xb7 in position 58: ille ...
- (转) mp4编码全介绍 (一)
1) 什么是MP4?听闻它是一种"容器格式",那是什么?容器格式允许你将不同种类的多媒体数据流(多为视频流和音频流)合并在一个单一的文件内. 多媒体容器格式,就是我们熟知的AVI( ...
- x265编码H265
目录 一.前言 二.x265介绍 三.x265主要编码接口介绍 1.int x265_param_default_preset(x265_param *, const char *preset, co ...
- (二)UPF之电压域、低功耗模式编码(Primary Supply Set、Power State)
文章目录 一.电压域编码 1.1.PD分类 1.2.PD - Supply Set Bind 1.3.PD - Supply Set Bind - Available Supply Set 1.4.示 ...
- 常见音视频的编码方式和封装格式
视频格式标准http://jingyan.baidu.com/article/fc07f98905797d12ffe519d6.html 视频编码标准只有 h.26x和mpegx.大多听书格式都是对他 ...
- [论文笔记]EMNLP2019: Fine-Grained Entity Typing via Hierarchical Multi Graph Convolutional Networks
EMNLP2019: Fine-Grained Entity Typing via Hierarchical Multi Graph Convolutional Networks 链接: https: ...
最新文章
- NASA艾姆斯研究中心将跟Uber团队展开合作
- C# 真正能发邮件的源码
- 2021-1-17 随笔
- 9273:PKU2506Tiling
- 在字符串中附加格式化的字符串
- Hadoop学习(二)——MapReduce\Yarn架构
- gcc,cc,g++,CC的区别
- Dedecms 最新版漏洞收集并复现学习
- CentOS 新增swap交换空间
- 4.3 深层网络中的前向传播
- 【java笔记】java基本语言风格(注释,数据,运算符)
- java多线程同步与测试_Java多线程同步Synchronized深入解析
- 谷歌地球专业版 for mac
- 利用Python3 读sqlite数据库
- linux pbs 用户时间,Linux/超算中PBS常用命令
- 深度学习中初始化权重
- 用VirtualBox创建虚拟机
- python中的成员运算符用于判断指定_Python中的成员运算符用于判断指定序列中是否包含某个值...
- AddressBook 相关操作小计
- 计算机专业网名英语翻译,英语网名大全带翻译【三篇】
热门文章
- seate底层原理_Seate
- css入门之CSS1、CSS2、CSS3、CSS4发展历程
- PS--怎么取消之前选择的工具?
- R:字符串截取和匹配
- 安装VMware的VM Tools
- 使用mysqladmin检测MySQL运行状态的教程
- 已知由单链表表示的线性表中含有三类字符(数字,字母和其他字符)试编写算法来构造三个循环链表,使每个表中只含某一类字符,且利用原表中的结点空间作为这三个表的结点空间,头结点可另辟空间。
- Prism4学习笔记(七):State-Based Navigation QuickStart
- Android照片墙加强版,使用ViewPager实现画廊效果
- android水波纹动画制作,Framer之事件 | 如何制作安卓点击水波纹效果?