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编码相关推荐

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

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

  2. 阿里巴巴线上使用的深度学习兴趣网络 DIN (三) - 论文翻译

    总述:阿里巴巴拥有世界上数一数二的电子商务系统,每天的成交额高达数十亿,那么这样一个大规模的商务网站肯定要做好一件事情,那就是用户搜索的时候给用户最好的搜索结果,用户不搜索的时候结合用户的兴趣给用户最 ...

  3. 分享GitHub上一位老外的嵌入式C编码规范(收藏细读)

    简 介: 本文分析在头条上分享GitHub上一位老外的嵌入式C编码规范(收藏细读):嵌入式大杂烩. 关键词: 嵌入式,C语句,编程规范 分享GitHub上一位老外的嵌入式C编码规范(收藏细读) §01 ...

  4. Redis 7.0 Multi Part AOF的设计和实现

    简介:本文将详解Redis中现有AOF机制的一些不足以及Redis 7.0中引入的Multi Part AOF的设计和实现细节. Redis 作为一种非常流行的内存数据库,通过将数据保存在内存中,Re ...

  5. 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 ...

  6. (转) mp4编码全介绍 (一)

    1) 什么是MP4?听闻它是一种"容器格式",那是什么?容器格式允许你将不同种类的多媒体数据流(多为视频流和音频流)合并在一个单一的文件内. 多媒体容器格式,就是我们熟知的AVI( ...

  7. x265编码H265

    目录 一.前言 二.x265介绍 三.x265主要编码接口介绍 1.int x265_param_default_preset(x265_param *, const char *preset, co ...

  8. (二)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.示 ...

  9. 常见音视频的编码方式和封装格式

    视频格式标准http://jingyan.baidu.com/article/fc07f98905797d12ffe519d6.html 视频编码标准只有 h.26x和mpegx.大多听书格式都是对他 ...

  10. [论文笔记]EMNLP2019: Fine-Grained Entity Typing via Hierarchical Multi Graph Convolutional Networks

    EMNLP2019: Fine-Grained Entity Typing via Hierarchical Multi Graph Convolutional Networks 链接: https: ...

最新文章

  1. NASA艾姆斯研究中心将跟Uber团队展开合作
  2. C# 真正能发邮件的源码
  3. 2021-1-17 随笔
  4. 9273:PKU2506Tiling
  5. 在字符串中附加格式化的字符串
  6. Hadoop学习(二)——MapReduce\Yarn架构
  7. gcc,cc,g++,CC的区别
  8. Dedecms 最新版漏洞收集并复现学习
  9. CentOS 新增swap交换空间
  10. 4.3 深层网络中的前向传播
  11. 【java笔记】java基本语言风格(注释,数据,运算符)
  12. java多线程同步与测试_Java多线程同步Synchronized深入解析
  13. 谷歌地球专业版 for mac
  14. 利用Python3 读sqlite数据库
  15. linux pbs 用户时间,Linux/超算中PBS常用命令
  16. 深度学习中初始化权重
  17. 用VirtualBox创建虚拟机
  18. python中的成员运算符用于判断指定_Python中的成员运算符用于判断指定序列中是否包含某个值...
  19. AddressBook 相关操作小计
  20. 计算机专业网名英语翻译,英语网名大全带翻译【三篇】

热门文章

  1. seate底层原理_Seate
  2. css入门之CSS1、CSS2、CSS3、CSS4发展历程
  3. PS--怎么取消之前选择的工具?
  4. R:字符串截取和匹配
  5. 安装VMware的VM Tools
  6. 使用mysqladmin检测MySQL运行状态的教程
  7. 已知由单链表表示的线性表中含有三类字符(数字,字母和其他字符)试编写算法来构造三个循环链表,使每个表中只含某一类字符,且利用原表中的结点空间作为这三个表的结点空间,头结点可另辟空间。
  8. Prism4学习笔记(七):State-Based Navigation QuickStart
  9. Android照片墙加强版,使用ViewPager实现画廊效果
  10. android水波纹动画制作,Framer之事件 | 如何制作安卓点击水波纹效果?