one-hot是比较常用的文本特征特征提取的方法。

one-hot编码,又称“独热编码”。其实就是用N位状态寄存器编码N个状态,每个状态都有独立的寄存器位,且这些寄存器位中只有一位有效,说白了就是只能有一个状态。

下面举例说明:

有四个样本,每个样本有三种特征:

    feature1   feature2   feature3
sample1   1      4     3
sample2   2      3     2
sample3   1      2     2
sample4   2      1     1
上图用十进制数对每种特征进行了编码,feature1有两种可能的取值,feature2有4种可能的取值,feature3有3种可能的取值。比如说feature3有3种取值,或者说有3种状态,那么就用3个状态位来表示,以保证每个样本中的每个特征只有1位处于状态1,其他都是0。

1->001

2->010

3->100

其他的特征也都这么表示:

    feature1   feature2   feature3
sample1   01     1000    100
sample2   10     0100    010
sample3   01     0010    010
sample4   10     0001    001
这样,4个样本的特征向量就可以这么表示:

sample1 -> [0,1,1,0,0,0,1,0,0]

sample2 -> [1,0,0,1,0,0,0,1,0]

sample3 -> [0,1,0,0,1,0,0,1,0]

sample4 -> [1,0,0,0,0,1,0,0,1]

接下来看看怎么应用one-hot:

one-hot在特征提取上属于词袋模型(bag of words),假设语料库中有三句话:

我爱中国
爸爸妈妈爱我
爸爸妈妈爱中国
首先,将语料库中的每句话分成单词,并编号:

1:我      2:爱      3:爸爸      4:妈妈      5:中国

然后,用one-hot对每句话提取特征向量:(图来源于网络)

所以最终得到的每句话的特征向量就是:

我爱中国 -> 1,1,0,0,1
爸爸妈妈爱我 -> 1,1,1,1,0
爸爸妈妈爱中国 -> 0,1,1,1,1
那么这样做的优点和缺点都有什么?

优点:

解决了分类器处理离散数据困难的问题
一定程度上起到了扩展特征的作用(上例中从3扩展到了9)
缺点:

one-hot是一个词袋模型,不考虑词与词之间的顺序问题,而在文本中,次的顺序是一个很重要的问题
one-hot是基于词与词之间相互独立的情况下的,然而在多数情况中,词与词之间应该是相互影响的
one-hot得到的特征是离散的,稀疏的

one-hot编码理解的更多相关文章

  1. python--字符编码理解

    一.字符编码简史: 美国:1963年 ASCII (包含127个字符  占1个字节) 中国:1980年 GB2312 (收录7445个汉字,包括6763个汉字和682个其它符号) 1993年 GB13 ...

  2. 编码理解的漫漫长路(Unicode、GBK、ISO)

    Ø 那么现在开始康康都有哪些编码方式  1.  ASCII

  3. 关于python中的字符串编码理解

    python2.x 中中间编码为unicode,一个字符串需要decode为unicode,再encode为其它编码格式(gbk.utf8等) 以gbk转utf8为例: s = "我是字符串 ...

  4. python字符串编码理解(转载)

    (转载)字符编码和python使用encode,decode转换utf-8, gbk, gb2312 (http://www.cnblogs.com/jxzheng/p/5186490.html) A ...

  5. python基础之Day7part2 史上最清晰字符编码理解

    二.字符编码 基础知识: 文本编辑器存取文件原理与py执行原理异同: 存/写:进入文本编辑器 写内容 保存后 内存数据刷到硬盘 取/读:进入文本编辑器 找到内容 从硬盘读到内存 notepad把文件内 ...

  6. base64编码理解

    原文地址:http://www.ruanyifeng.com/blog/2008/06/base64.html 所谓Base64,就是说选出64个字符----小写字母a-z.大写字母A-Z.数字0-9 ...

  7. Java IO4:字符编码

    前言 字符编码,这本不属于IO的内容,但字节流之后写的应该是字符流,既然是字符流,那就涉及一个"字符编码的"问题,考虑到字符编码不仅仅是在IO这块,Java中很多场景都涉及到这个概 ...

  8. 【算法】Base64编码

    1.说明 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. 2.编码 ASCII码 -> 十六进制码 -> ...

  9. IO细述

    Java IO1:IO和File IO 大多数的应用程序都要与外部设备进行数据交换,最常见的外部设备包含磁盘和网络.IO就是指应用程序对这些设备的数据输入与输出,Java语言定义了许多类专门负责各种方 ...

随机推荐

  1. Css新增内容

    css3新增属性 可节省设计时间的属性 border-color:控制边框的颜色,并且有更大的灵活性,可以产生渐变效果 border-image:控制边框图像 border-radius:能产生类似圆 ...

  2. python_ 基本语法

    一.基础知识: 1.鸡汤 摘抄至 :简明 python 教程 在人生中取得成功,与其说靠天才与机会,不如说靠专注与毅力! Python 特点:简单.易于学习(简单得语法体系).自由且开发.高级语言.跨 ...

  3. Buy or Build(UVa1151)

    如果枚举每个套餐,并每次都求最小生成树,总时间复杂度会很高,因而需要先求一次原图的最小生成树,则枚举套餐之后需要考虑的边大大减少了. 具体见代码: #include<cstdio> #in ...

  4. 1130-Host '192.168.0.105' is not allowed to connect to this MySQL server的解决方案

    在CentOS 7服务器(192.168.0.118)上安装mysql5.7.17后,在本地(192.168.0.105)通过Navicat连接服务器上的MySQL报错,报错如图所示: Paste_I ...

  5. 20. Web proxies (网页代理 4个)

    用于评估Web应用程序漏洞的基于Java的Web代理. 它支持在运行时编辑/查看HTTP / HTTPS消息,以更改Cookie和表单字段等项. 它包括网络流量记录器,网络蜘蛛,哈希计算器和用于测试常 ...

  6. Jrebel 配置

    先下载插件 http://139.199.89.239:1008/88414687-3b91-4286-89ba-2dc813b107ce http://jrebel.autoseasy.cn/xix ...

  7. Docker构建FastDFS镜像

    https://blog.csdn.net/qq_26440803/article/details/83066132 Dockerfile 所需依赖: fastdfs    libfastcommon ...

  8. Django学习笔记之安全

    CSRF攻击 CSRF攻击概述 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一.其他安全 ...

  9. 一键安装Davinci

    官网:https://edp963.github.io/davinci/index.html 下载地址:https://github.com/edp963/davinci   环境:Centos7   ...

  10. Android学习笔记-事件处理

    第三章 Android的事件处理 Android提供两种事件处理方式,基于回调和基于监听器.前者常用于传统图形界面编程中,而后者在AWT/Swing开发中常用. 3.1 事件处理概述 对于基于回调的事 ...