我的编程空间,编程开发者的网络收藏夹
学习永远不晚

one-hot编码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

one-hot编码

one-hot编码

什么是one-hot编码

  • one-hot编码,又称独热编码、一位有效编码。其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。举个例子,假设我们有四个样本(行),每个样本有三个特征(列),如下图:

  • 我们拿feature2来说明:这里feature2有4种取值(状态),我们就用4个状态位来表示这个特征,one-hot编码就是保证每个样本中的单个特征只有1位处于状态1,其他的都是0。
    在这里插入图片描述

  • 对于2种状态、3种状态、甚至更多状态都可以这样表示,所以我们可以得到这些样本特征的新表示,入下图:

    one-ho编码将每个状态位都看成一个特征。对于前两个样本我们可以得到它的特征向量分别为

    Sample_1--->[0,1,1,0,0,0,1,0,0]Sample_2--->[1,0,0,1,0,0,0,1,0]

one-hot在提取文本特征上的应用

  • one hot在特征提取上属于词袋模型(bag of words)。关于如何使用one-hot抽取文本特征向量我们通过以下例子来说明。假设我们的语料库中有三段话:

    • 我爱中国

    • 爸爸妈妈爱我

    • 爸爸妈妈爱中国

    我们首先对预料库分词,并获取其中所有的词,然后对每个此进行编号:
    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编码

import numpy as npsamples = ['他 毕业 于 哈佛大学', '他 就职 于 工科院计算机研究所']# 分完词之后一般要将词典索引做好,一般叫token_indextoken_index = {}for sample in samples:    for word in sample.split():        if word not in token_index:            token_index[word] = len(token_index)+1print(len(token_index))print(token_index)# 构造one—hot编码results = np.zeros(shape=(len(samples), len(token_index)+1, max(token_index.values())+1))for i, sample in enumerate(samples):  # 索引    for j, word in list(enumerate(sample.split())):   # 对list组进行链接        index = token_index.get(word)   # 索引和word对应        print(i, j, index, word)        results[i, j, index] = 1print(results)# 改进的算法results2 = np.zeros(shape=(len(samples),max(token_index.values())+1) )for i, sample in enumerate(samples):    for _, word in list(enumerate(sample.split())):        index = token_index.get(word)        results2[i, index] = 1print(results2)

运行结果

Keras中one-hot编码的实现

Keras分词器Tokenizer的办法介绍

  • Tokenizer是一个用于向量化文本,或将文本转换为序列(即单词在字典中的下标形成的列表,从1算起)的类。Tokenizer实际上只是生成了一个字典,并且统计了词频等信息,并没有把文本转成须要的向量示意。
  • from keras.preprocessing.text import Tokenizer引入模块
  • tokenizer = Tokenizer()

生成词典tokenizer.fit_on_texts()

string = ['他 毕业 于 哈佛大学', '他 就职 于 工科院计算机研究所']# 构建单词索引tokenizer = Tokenizer()tokenizer.fit_on_texts(samples)print(tokenizer.word_index)

将句子序列转换成token矩阵tokenizer.texts_to_matrix()

tokenizer.texts_to_matrix(samples)  #如果string中的word出现在了字典中,那么在矩阵中出现的位置处标1
tokenizer.texts_to_matrix(string,mode='count') #如果string中的word出现在了字典中,那么在矩阵中出现的位置处标记这个word出现的次数

句子转换成单词索引序列tokenizer.texts_to_sequences

sequences = tokenizer.texts_to_sequences(samples)print(sequences)

分词器被训练的文档(文本或者序列)数量tok.document_count

依照数量由大到小Order排列的token及其数量tok.word_counts

完整代码:

from keras.preprocessing.text import Tokenizersamples = ['他 毕业 于 哈佛大学', '他 就职 于 工科院计算机研究所']# 构建单词索引tokenizer = Tokenizer()tokenizer.fit_on_texts(samples)word_index = tokenizer.word_indexprint(word_index)print(len(word_index))sequences = tokenizer.texts_to_sequences(samples)print(sequences)one_hot_results = tokenizer.texts_to_matrix(samples)print(one_hot_results)

运行结果

来源地址:https://blog.csdn.net/qq_44795788/article/details/126451564

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

one-hot编码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2023-09-04

One Hot编码指的是什么

这篇文章给大家介绍One Hot编码指的是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。导读 当你在玩ML模型的时候,你会在任何地方遇到这个“One hot encoding”的术语。当你在玩ML模型的时候,你
2023-06-19

python label与one-hot之间的互相转换方式

这篇文章主要介绍了python label与one-hot之间的互相转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-01

RAW图像编辑转换器Capture One 20 Pro for Mac

capture one 20 mac 特别是一款集所有必备功能和强大工具于一体的高端图像编辑转换软件。Capture One Pro 20 for Mac拥有无限制的批量冲洗功能,给你最好的转换质量!capture one mac特别版是一
2023-06-05

linux之系统编码,python编码,

如果你对python2和python3的中编解码很清楚,这里我认为你很清楚。具体参考文档:“python2 encode和decode函数说明.docx”“字符编码——从ASCII开始.docx”以上所有文档均为本地文档。sys.getde
2023-01-31

Quoted-printable 编码介绍、编码解码转换

Quoted-printable(引用打印)是一种用于在电子邮件和其他文本协议中编码非ASCII字符的方法。该编码将非ASCII字符转换为可打印字符,以便它们可以在各种系统和协议之间正确传输。Quoted-printable编码的基本原则是
2023-09-12

python编码总结(编码类型、格式、转码)

本文详细总结了python编码。分享给大家供大家参考,具体如下: 【所谓unicode】 unicode是一种类似于符号集的抽象编码,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。也就是它只是一种内部表示,不能直接保存。
2022-06-04

编码-2

最近在socket中遇到了一个偶现bug,那就是与websocket建立连接后,进行数据传输后,在linux平台的终端下用socket_read()读取出来后,再用echo打印出来的就是乱码。因为我做的只是一个数据中转,而另一端的C++则是
2023-01-31

Python HTML编码解码

>>> import HTMLParser>>> h = HTMLParser.HTMLParser()>>> h.unescape("")u'\u59d3\u540d\uff1a'>>> s = h.unescape("")>>> pri
2023-01-31

字符编码

计算机基础文本编辑器存取文件的原理1.打开编辑器就打开启动了一个进程,是在内存中,所以,用编码器编写的内容也都存放在内存中的,断电后数据丢失。2.要想永久保存,需要点击保存按钮:编辑器把内存的数据拴到硬盘上。3.早我们编写一个py文件,跟便
2023-01-31

Python Unicode编码

使用技巧事实上,只要遵守以下规则,可以规避90%由于Unicode字符串处理引起的bug,剩下的10%通过python的库和模块能够解决。程序中出现字符串时一定要加个前缀u。不要用str()函数,用unicode()代替。不要用过时的str
2023-01-31

PHP 会话编码解码

在 PHP 中,会话是一种跨网页处理数据的方式。会话编码和解码操作是存储或读取会话数据时的要求。在 PHP 中演示使用 session_encode() 和 session_decode内置函数 session_encode() 将 $_S
PHP 会话编码解码
2024-02-27

规范-编码

c++编码规范c++11, xcode, vistual studio编码规范http://zh-google-styleguide.r...常用库标准库: http://en.cppreference.com/w/日志: https://
2023-01-31

Python3的URL编码解码

博主最近在用python3比较强大的Django开发web的时候,发现一些url的编码问题,在浏览器提交请求api时,如果url中包含汉子,就会被自动编码掉。呈现的结果是 ==> %xx%xx%xx。如果出现3个百分号为一个原字符则为utf
2023-01-31

Android 怎么用Lame编码器编码mp3文件

这篇文章主要介绍“Android 怎么用Lame编码器编码mp3文件”,在日常操作中,相信很多人在Android 怎么用Lame编码器编码mp3文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android
2023-06-14

python字符编码与转码

python 2.x 字符编码与转码打印系统默认编码格式import sysprint(sys.getdefaultencoding())UTF-8 转 gbk方式:utf-8--转成--unicode--转成--gbka = "你好"pr
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录