Python文本处理(3)——文本表示之 one-hot 词向量(2)——再读 one-hot 编码

一文搞懂 One-Hot Encoding(独热编码) 本文将从独热编码的原理、独热编码的分类、独热编码的应用三个方面,来展开介绍独热编码 One-Hot Encoding。1、独热编码的原理特征数字化:将分类变量(或称为离散特征、无序特征)转换为一种适合机器学习算法处理的格式。特征数字化为每个分类特征的每个可能值创建一个新的二进制特征(即“独热”特征),其中只有一个特征在任何给定时间被激活(标记为1),而其他所有特征都被标记为0。步骤1:确定动物类别首先,确定需要分类的动物类别。在这个例子中,我们有四种动物:猫、狗、乌龟和鱼。 阅读详情

参考来源:https://www.cnblogs.com/zongfa/p/9305657.html

数据预处理:独热编码(One-Hot Encoding)和 LabelEncoder标签编码
一、问题由来

在很多机器学习任务中,特征并不总是连续值,而有可能是分类值。

离散特征的编码分为两种情况:

1、离散特征的取值之间没有大小的意义,比如color:[red,blue],那么就使用one-hot编码

2、离散特征的取值有大小的意义,比如size:[X,XL,XXL],那么就使用数值的映射{X:1,XL:2,XXL:3}

使用pandas可以很方便的对离散型特征进行one-hot编码
复制代码

import pandas as pd
df = pd.DataFrame([
[‘green’, ‘M’, 10.1, ‘class1’],
[‘red’, ‘L’, 13.5, ‘class2’],
[‘blue’, ‘XL’, 15.3, ‘class1’]])

df.columns = [‘color’, ‘size’, ‘prize’, ‘class label’]

size_mapping = {
‘XL’: 3,
‘L’: 2,
‘M’: 1}
df[‘size’] = df[‘size’].map(size_mapping)

class_mapping = {label:idx for idx,label in enumerate(set(df[‘class label’]))}
df[‘class label’] = df[‘class label’].map(class_mapping)

复制代码

例如,考虑一下的三个特征:

[“male”, “female”]

[“from Europe”, “from US”, “from Asia”]

[“uses Firefox”, “uses Chrome”, “uses Safari”, “uses Internet Explorer”]

如果将上述特征用数字表示,效率会高很多。例如:

[“male”, “from US”, “uses Internet Explorer”] 表示为[0, 1, 3]

[“female”, “from Asia”, “uses Chrome”]表示为[1, 2, 1]

但是,即使转化为数字表示后,上述数据也不能直接用在我们的分类器中。因为,分类器往往默认数据数据是连续的(可以计算距离?),并且是有序的(而上面这个0并不是说比1要高级)。但是,按照我们上述的表示,数字并不是有序的,而是随机分配的。
独热编码

为了解决上述问题,其中一种可能的解决方法是采用独热编码(One-Hot Encoding)。独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。

例如:

自然状态码为:000,001,010,011,100,101

独热编码为:000001,000010,000100,001000,010000,100000

可以这样理解,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征(如成绩这个特征有好,中,差变成one-hot就是100, 010, 001)。并且,这些特征互斥,每次只有一个激活。因此,数据会变成稀疏的。

这样做的好处主要有:

解决了分类器不好处理属性数据的问题

在一定程度上也起到了扩充特征的作用

实现方法一:pandas之get_dummies方法

pandas.get_dummies(data, prefix=None, prefix_sep=’_’, dummy_na=False, columns=None, sparse=False, drop_first=False)

该方法可以讲类别变量转换成新增的虚拟变量/指示变量。

常用参数
复制代码

data : array-like, Series, or DataFrame
输入的数据
prefix : string, list of strings, or dict of strings, default None
get_dummies转换后,列名的前缀
*columns : list-like, default None
指定需要实现类别转换的列名
dummy_na : bool, default False
增加一列表示空缺值,如果False就忽略空缺值
drop_first : bool, default False
获得k中的k-1个类别值,去除第一个

复制代码

1、实验

实现方法二:sklearn

from sklearn import preprocessing
enc = preprocessing.OneHotEncoder()
enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]) # fit来学习编码
enc.transform([[0, 1, 3]]).toarray() # 进行编码

输出:array([[ 1., 0., 0., 1., 0., 0., 0., 0., 1.]])

数据矩阵是4*3,即4个数据,3个特征维度。

0 0 3 观察左边的数据矩阵,第一列为第一个特征维度,有两种取值0\1. 所以对应编码方式为10 、01

1 1 0 同理,第二列为第二个特征维度,有三种取值0\1\2,所以对应编码方式为100、010、001

0 2 1 同理,第三列为第三个特征维度,有四中取值0\1\2\3,所以对应编码方式为1000、0100、0010、0001

1 0 2

再来看要进行编码的参数[0 , 1, 3], 0作为第一个特征编码为10, 1作为第二个特征编码为010, 3作为第三个特征编码为0001. 故此编码结果为 1 0 0 1 0 0 0 0 1

三. 为什么要独热编码?

  正如上文所言,独热编码(哑变量 dummy variable)是因为大部分算法是基于向量空间中的度量来进行计算的,为了使非偏序关系的变量取值不具有偏序性,并且到圆点是等距的。使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。将离散型特征使用one-hot编码,会让特征之间的距离计算更加合理。离散特征进行one-hot编码后,编码后的特征,其实每一维度的特征都可以看做是连续的特征。就可以跟对连续型特征的归一化方法一样,对每一维特征进行归一化。比如归一化到[-1,1]或归一化到均值为0,方差为1。       

    为什么特征向量要映射到欧式空间?

    将离散特征通过one-hot编码映射到欧式空间,是因为,在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。

四 .独热编码优缺点

优点:独热编码解决了分类器不好处理属性数据的问题,在一定程度上也起到了扩充特征的作用。它的值只有0和1,不同的类型存储在垂直的空间。
缺点:当类别的数量很多时,特征空间会变得非常大。在这种情况下,一般可以用PCA来减少维度。而且one hot encoding+PCA这种组合在实际中也非常有用。

五. 什么情况下(不)用独热编码?

用:独热编码用来解决类别型数据的离散值问题,
不用:将离散型特征进行one-hot编码的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one-hot编码就可以很合理的计算出距离,那么就没必要进行one-hot编码。 有些基于树的算法在处理变量时,并不是基于向量空间度量,数值只是个类别符号,即没有偏序关系,所以不用进行独热编码。  Tree Model不太需要one-hot编码: 对于决策树来说,one-hot的本质是增加树的深度。

总的来说,要是one hot encoding的类别数目不太多,建议优先考虑。

六. 什么情况下(不)需要归一化?

需要: 基于参数的模型或基于距离的模型,都是要进行特征的归一化。
不需要:基于树的方法是不需要进行特征的归一化,例如随机森林,bagging 和 boosting等。

七、one-hot编码为什么可以解决类别型数据的离散值问题

首先,one-hot编码是N位状态寄存器为N个状态进行编码的方式
  eg:高、中、低不可分,→ 用0 0 0 三位编码之后变得可分了,并且成为互相独立的事件
类似 SVM中,原本线性不可分的特征,经过project之后到高维之后变得可分了
  GBDT处理高维稀疏矩阵的时候效果并不好,即使是低维的稀疏矩阵也未必比SVM好
八、Tree Model不太需要one-hot编码

对于决策树来说,one-hot的本质是增加树的深度
  tree-model是在动态的过程中生成类似 One-Hot + Feature Crossing 的机制
    1. 一个特征或者多个特征最终转换成一个叶子节点作为编码 ,one-hot可以理解成三个独立事件
    2. 决策树是没有特征大小的概念的,只有特征处于他分布的哪一部分的概念
  one-hot可以解决线性可分问题 但是比不上label econding
  one-hot降维后的缺点:

降维前可以交叉的降维后可能变得不能交叉 
随机化策略——随机变量rand、约束constraint、权重dist、随机数产生示例 文章目录一、随机变量类型1.1.rand随机变量1.2.randc随机变量二、随机化约束2.1.constraint指定约束范围2.1.1.关系操作符约束(>、<、=、>=、<=)2.1.2.范围操作符约束(inside)2.1.3.权重分布约束(dist)2.1.4.条件约束(if-else; ->)三、启动随机化——randomize( )函数四、关闭或打开随机变... 阅读详情

相关推荐

Python文本处理(3)——文本表示之 one-hot 词向量(1)——纯小白都能懂!

python 文本处理小结-供自己复习使用 文本表示最基础的怕是最基础的 one-hot 编码,基础的东西有利于我们从源头和本质上进行思考。比如,现在给一堆文本数据给你,你会如何思考将文本信息传递出去并让计算机识别? ——单词作为文本的最小单位,我们自然而然的会想到从单词入手。 的确,自然语言就是一套用来表达含义的系统,在这套系统中,词,就是表义的基本单元。 词向量被用来表示词的向量或表征,也可被...

Robin_Pi的博客 7631

机器学习之One-Hot Encoding详解

标签: AI什么是one-hot编码?one-hot编码,又称独热编码、一位有效编码。其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。假设有如下表格,记录了某网站访问者的三个信息:性别,来自,使用的浏览器:考虑以下三个特征:性别:["男","女"]来自:["北京","上海","广州"]使用的浏览器:["Firefox"," Chrome","Safari","Internet Explorer"]如果将上述特征用数字表示。例如:性别:["男",

wuyy0224的博客 7492

常见的文本特征(句向量)提取方法有哪些?什么是One-Hot、TF-IDF?word2vec如何训练?【Python】

文本特征提取的方法目前已经有很多种,传统的提取方法有平权统计、TF-IDF等,神经网络的方法有word2vec,接下来我会具体对这三种方法进行介绍,以及如何用代码实现。 平权统计 平权统计非常容易理解,参见下述代码。 # 特征向量化——稀疏表示 from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() corpus = ['This is the first document.',

w0714的博客 3万+

学习笔记 | 独热编码(One-Hot Encoding)

最近学习机器学习,接触到独热编码相关内容,参考了一些资料,加上自己的思考,做出了如下总结。

Bryce230的博客 1万+

(深度学习记录)第N1周:one-hot编码案例

one-hot编码的基本思想是将每个类别映射到一个向量,其中只有一个元素的值为1,其余元素的值为0。这种编码方式不仅能够避免不必要的关系假设,还能够提供清晰的输入表示,有助于模型的学习和泛化。在文本表征表示上有些缺点非常突出,首先one-hot 编码是一个词袋模型,是不考虑词和词之间的顺序问题,它是假设词和词之间是相互独立的,但是在大部分情况下词和词之间是相互影响的。one-hot编码得到的特征是离散稀疏的,每个单词的one-hot编码维度是整个词汇表的大小,维度非常巨大,编码稀疏,会使得计算代价变大。

weixin_55952636的博客 901

NLP之文本特征提取详解

深度学习入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 一、词袋模型(Bag of Words, BoW) 1、目的 将不定长的文本型数据转化为定长的数值型数据,方便用作机器学习模型的输入 2、主要思想 建立一个词典库,其中包含训练语料库的所有词语,每个词语都对应一个唯一识别的编号,利用one-hot文本来表示;文档的词向量维度与单词向量的维度相同,每个位置的值是对应位置词语在文档中出现的次数。 3、具体算法步骤 (1)对所有文本进行单

tt丫的博客 1万+

词向量系列之One-Hot编码详解

目录0.前言1. 独热编码1.1 独热编码例子1.2 独热编码的优点1.3 独热编码的缺点1.4 独热编码适用的情况2. 独热编码的实现2.1 python简单实现one-hot编码2.2 sklearn2.3 Keras2.4 tensorflow 0.前言   在回归,分类,聚类等机器学习算法中,各个特征之间的距离(相似度)计算是非常重要的,然而常用的距离计算都是在欧式空间内计算,例如计算余弦...

Elenstone的博客 5821

NLP文本向量化:从One-Hot到Embedding的实战指南

文本向量化是自然语言处理(NLP)的基础技术,它将文字转换为计算机可处理的数值向量。核心原理是通过数学表示捕捉词语间的语义关系,常用的方法包括One-Hot编码、Word2Vec和Embedding层。Word2Vec通过上下文预测生成低维稠密向量,能有效表达语义关联;而Embedding层作为深度学习标准组件,支持端到端训练。这些技术在搜索引擎、推荐系统和智能客服等场景广泛应用,其中FastText通过子词分解解决了未登录词问题。实际工程中需要权衡向量维度、训练效率和应用场景,预训练词向量能显著提升小数据

weixin_30644369的博客 366

词向量 文本相似度计算

为把人们所理解的自然语言让计算机也能够认识并且操作,需要将人的语言(即文字)转换成计算机的语言(即数字)

m0_71334725的博客 2418

2026年了,你还分不清One-Hot、TF-IDF、Word2Vec和Embedding?一文搞懂AI“读心术”的底层逻辑

在深度学习与NLP的领域中,计算机无法直接理解文字,它只看懂数字。如何将文本转化为向量,是AI理解语言的第一步。本文将带你深入剖析四种主流的文本向量化技术:One-Hot编码(基础中的基础)、TF-IDF(统计学的经典)、Word2Vec(语义相似度的先驱)以及Word Embedding(深度学习的标配)。我们将结合 TensorFlow/Keras 与 PyTorch 的实战代码,手把手教你如何实现这些算法,并理解它们背后的数学逻辑。无论你是NLP新手还是想巩固基础,这篇文章都将为你提供巨大的价值。

专注AI与大模型技术,深耕NLP、RAG、Agent开发,分享Python机器学习与深度学习实战经验,助力技术成长。 930

1.1 文本表示——离散形式表示

欢迎感兴趣的伙伴点个赞,关注不迷路!你的支持是我前进的动力! 感谢你的阅读,专栏文章持续更新! 🥝🥝文本表示 🥝🥝(一)one-hot 🥝🥝(二)词袋法(Bag of word,简称BOW) 🥝🥝(三)词频–逆文档频率(TF-IDF): 🥝🥝(四)n-gram 🥝🥝(五)神经概率语言模型

炫云云 1489

第18周:one-hot编码

🍨 本文为 [🔗365天深度学习训练营] 中的学习记录博客🍖 原作者: [K同学啊]说在前面本周任务:了解one-hot编码,并加载.txt文件,使用字典序列方法与one-hot编码进行数字化处理我的环境:Python3.8、Pycharm2020、torch1.12.1+cu113[K同学啊]一、One-hot编码概念自然语言处理(NLP)入门,绕不开的第一个概念就是词向量,文字对于计算机来说就仅仅只是一个个符号,计算机无法理解其中含义,更无法处理——所以,NLP第一步就是将文本数字化。

weixin_46620278的博客 1266

《Python星球日记》 第65天:词向量与语言表示

《Python星球日记》 第65天:词向量与语言表示,今天我们将探索自然语言处理中的一个重要概念——词向量与语言表示。通过词向量,我们能够将文本中的单词转换为计算机可以理解和处理的数值形式,这是构建高效NLP应用的基础。

Code_流苏:在代码中寻诗意,在实践中觅真知 987

第N1周:one-hot编码案例

one-hot编码的基本思想是将每个类别映射到一个向量,其中只有一个元素的值为1,其余元素的值为0。这种编码方式不仅能够避免不必要的关系假设,还能够提供清晰的输入表示,有助于模型的学习和泛化。在文本表征表示上有些缺点非常突出,首先one-hot 编码是一个词袋模型,是不考虑词和词之间的顺序问题,它是假设词和词之间是相互独立的,但是在大部分情况下词和词之间是相互影响的。one-hot编码得到的特征是离散稀疏的,每个单词的one-hot编码维度是整个词汇表的大小,维度非常巨大,编码稀疏,会使得计算代价变大。

m0_62017984的博客 740

onehot:SystemVerilog中的参数化一键编码器

SystemVerilog中的参数化onehot编码器 目录 描述 SystemVerilog中的参数化一键编码器。 这是在SystemVerilog中实现的二进制到单热码编码器。 该电路是组合的。 输入bin的位宽可以通过参数WIDTH来指定。 输出onehot的位宽为2 WIDTH 。 当bin == 0时, onehot的最低有效位为1,其他位变为0。当bin == 2 WIDTH -1时, onehot的最高有效位为1,其他位变为0。 输入输出 名称 方向 宽度 极性 描述 箱子 输入 宽度 -- 二进制代码 一个人 输出 2宽度 积极的 onehot代码 范围 名称 类型 宽度 默认值 描述 宽度 整型 32 4 bin的位宽。 时序图 3位onehot编码器的时序图如图1所示。 图1. 3位onehot编码器的时序图。 实例化 onehot #( .WIDTH

可视化工具--Plotly

随着信息技术的发展和硬件设备成本的降低,当今的互联网存在海量的数据,要想快速从这些数据中获取更多有效的信息,数据可视化是重要的一环。对于Python语言来说,比较传统的数据可视化模块是Matplotlib,但它存在不够美观、静态性、不易分享等缺点,限制了Python在数据可视化方面的发展。   为了解决这个问题,新型的动态可视化开源模块Plotly应运而生。由于Plotly具有动态、美观、易用、种类丰富等特性,所以一经问世就受到开发人员的喜爱。

YFater的博客 1万+

NLP文本表示技术:从词向量到大模型应用

文本表示是自然语言处理(NLP)的核心基础技术,它将人类语言转化为计算机可处理的数学形式。从早期的one-hot编码、TF-IDF到Word2Vec词向量,再到基于Transformer的BERT、GPT等大模型动态表示,文本表示技术不断演进。这些技术通过捕捉词语间的语义关系,为下游任务如文本分类、机器翻译提供基础支持。特别是在大模型应用中,先进的文本表示方法使模型能够理解上下文语义,处理复杂语言任务。分词、停用词处理等文本预处理技术,以及词袋模型、TF-IDF等传统方法仍是工程实践中的重要组成部分。掌握文

weixin_30700977的博客 397

simulink中MIL测试简单理解

输入信号设置如下:选中New Test Case1 ---INPUT。5、新建(选择New,Test from Spreadsheet)6、可以新建也可以导入(Use existing test)Source:Output为自己预测结果。3、右键子系统(Create)打开生成表格,可以自己调试。4、创建测试用例表格。保存路径为模型路径。保存路径在模型路径。8、运行测试设h置。

lingdianhuat的博客 1784

Word2vec词向量文本分析详解

Word2vec词向量文本分析讲解

敷衍zgf的博客 3556

SAP-ABAP:SAP中如何查看系统表之间的关联关系?

在业务逻辑开发或者ALV开发过程中,我们通常要从系统中找出几个标准表之间的关联关系,有的是head与item,通过外键进行关联的关系。那么怎么去找到呢?以上就是具体如何产看系统表之间的关联关系的步骤,对于不同代码的业务顾问,也是必须要掌握的。

LinkStar的博客 2430

使用广播星历进行 GPS 卫星位置的计算

目录1.计算卫星运动的平均角速度 n2.计算观测瞬间卫星的近地点角3.计算偏近点角4.计算真近点角 f5.计算升交角距 6.计算摄动改正项7.进行摄动改正 8.计算卫星在轨道面坐标系中的位置9.计算观测瞬间升交点的经度 L10.计算卫星在瞬时地球坐标系中的位置11.计算卫星在协议地球坐标系中的位置使用广播星历进行GPS卫星位置的计算的详细步骤如下:关于在广播星历中各参数的分布情况可以参考下图:首先根据广播星历中给出的参数 计算参考时刻(TOE) 的平均角速度 式中,GM为万有引力常数 G 与地球总质量

qq_43381998的博客 5569
上一篇: 深度之眼Kaggle比赛实战项目记录—1—赛前介绍
下一篇: 如何去除文本数据里面所有非单词/非字母的字符?以及 list 和 string 之间的转换?
Robin_Pi
博客等级 码龄9年 2万+粉丝 632原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值