N1 - OneHot编码



one-hot编码

自然语言处理(NLP)入门,绕不开的第一个概念就是词向量

文字对于计算机来说仅仅只是一个一个的符号,计算机是没有办法理解其中的含义的,计算也没有办法直接处理字符,因此,NLP任务的第一步就是:将文本数字化

最早期的文本数字化方法,就是将文本转换为字典序列。如:阿 在新华字典中排第一,所以它的字典序列就是1。

但是使用字典序列有缺点,就是模型可能会错误地认为不同类型之间存在一些顺序或距离关系,而实际上这些关系可能是不存在或者不具有实际意义的。

为了避免这种问题,引入了one-hot编码(也称为独热编码)。

one-hot编码的基本思想是将每个类别映射到一个向量,其中只有一个元素的值为1,剩下的全部为0。这样,每个类别之间是相互独立的,不存在顺序或者距离关系。例如:三个不同的类别被标记为

  • [1, 0, 0]
  • [0, 1, 0]
  • [0, 0, 1]

这种表示方式有助于模型更好地理解文本的含义。在深度学习中,神经网络的输入层通常使用one-hot编码来表示分类变量。这种编码方式不仅能够避免不必要的关系假设,还能够提供清晰的输入表示,有助于模型的学习和泛化。

优点

  • 解决了分类器不好处理离散数据的问题,能够处理非连续型数值特征

缺点

  • 在文本表征表示上有些缺点非常突出,首先one-hot编码是一个词袋模型,是不考虑词和词之间的顺序问题,它是假设词和词之间是相互独立的,但是大部分情况下词和词之间是相互影响的
  • one-hot编码得到的特征是离散稀疏的,每个单词的one-hot编码维度是整个词汇表的大小,维度非常巨大,编码稀疏,会使计算代价变大。

英文文本案例

import torch
texts = ["Hello, how are you?", 'I am doing well, thank you!', 'Goodbye.']
# 构建词汇表
word_index = {
   
   }
index_word = {
   
   }
for i, word in enumerate(set(" ".join(texts).split())):
    word_index[word] = i
    index_word[i] = word

# 将文本转化为整数序列
sequences = [[word_index[word] for word in text.split()] for text in texts]

# 获取词汇大小
vocab_size = len(word_index)

# 将整数序列转化为one-hot编码
one_hot_results = torch.zeros(len(texts), vocab_size)
for i, seq in 
### 回答1: 这段代码使用了 pandas 库中的 concat 函数,将三个经过 One-Hot 编码的 DataFrame 对象 one_hot_protocol、one_hot_service、one_hot_flag 按列方向(axis=1)拼接起来,并将结果与另一个 DataFrame 对象 data 按列方向拼接起来,得到一个新的 DataFrame 对象。 具体来说,假设 one_hot_protocol、one_hot_service、one_hot_flag 的列数分别为 n1、n2、n3,data 的列数为 m,则拼接后的新 DataFrame 对象的列数为 n1 + n2 + n3 + m。 需要注意的是,拼接时要求各个 DataFrame 对象的行数必须相同,否则会出现错误。 ### 回答2: 这段代码是使用`pd.concat`函数将`one_hot_protocol`, `one_hot_service`, `one_hot_flag`三个DataFrame对象以列的方式拼接到`data` DataFrame对象的右侧。 `pd.concat`是pandas库中的一个函数,它用于在指定的轴上连接两个或多个对象。在这段代码中,`axis=1`表示按列进行连接。 通过将`one_hot_protocol`, `one_hot_service`, `one_hot_flag`和`data` DataFrame对象按列连接到一起,可以将它们合并成一个新的DataFrame对象。这样可以构建一个包含更多特征的完整数据集,以便进行后续的数据分析或建模工作。 拼接后的DataFrame对象将包含`one_hot_protocol`, `one_hot_service`, `one_hot_flag`三个DataFrame对象中的所有列,以及`data` DataFrame对象中的所有列。它们将按照在`concat`函数中指定的顺序进行拼接。 需要注意的是,拼接的两个DataFrame对象在连接轴上的索引需要是一致的,否则可能会导致错误。如果列名称存在冲突,会自动在列名后面添加后缀以区分。 总之,这段代码的作用是将`one_hot_protocol`, `one_hot_service`, `one_hot_flag`三个DataFrame对象按列拼接到`data` DataFrame对象的右侧,构建一个新的包含扩展特征的完整数据集。 ### 回答3: 这段代码使用了Python的pandas库中的concat函数将四个数据集(即one_hot_protocol、one_hot_service、one_hot_flag和data)按列连接起来。其中,axis=1参数表示按列连接。 通过执行这段代码,我们可以将这四个数据集的列按顺序合并到一个新的数据集中,新数据集的列数将比原来的data数据集多出三个one_hot_protocol、one_hot_service和one_hot_flag的列。 数据集的合并可以通过pd.concat函数实现,其中pd代表pandas库。 这种数据集的合并可以用在多个场景中,例如将多个相对独立的数据集进行连接,使得我们可以在一个数据集中综合考虑多个特征的影响。具体来说,这段代码的作用就是将这四个数据集按列连接起来,使得我们可以在新的数据集中同时考虑协议、服务和标志等特征在数据分析和建模中的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值