python实现基于单词级one-hot编码和字符级的one-hot编码

one-hot编码是将标记转换为向量的最常用、最基本的方法。它将每个单词与一个唯一的整数索引相关联,然后将这个整数索引 i 转换为长度为N的二进制向量(N是词表大小),这个向量只有第i个元素是1,其余元素都为0.

 

单词级的one-hot编码

import numpy as np

samples = ['This is a dog','The is a cat']

all_token_index = {} #构建一个字典来存储数据中的所有标记的索引

for sample in samples:
    for word in sample.split():   #拆分每一个单词
        if word not in all_token_index:  #为每一个单词指定一个索引
            all_token_index[word] = len(all_token_index) + 1

max_length = 10
result = np.zeros(shape=(len(samples), max_length, max(all_token_index.values()) + 1 )) 

for i, sample in enumerate(samples):  # 获取sample中的索引和值
    for j, word in list(enumerate(sample.split()))[:max_length]: # 获取单词的索引和值
        index = all_token_index.get(word)
        result[i,j,index] = 1

结果:

 

字符级的one-hot编码:

import string
import numpy as np
samples = ['This is a dog', 'The is a cat']
characters = string.printable # 包含所有可打印的ASCII字符
# 把所有可打印字符都装进字典中,从1开始索引
all_token_index = dict(zip(range(1, len(characters)+1), characters))

max_length = 50
result = np.zeros(shape=(len(samples), max_length, max(all_token_index.keys()) + 1))

for i, sample in enumerate(samples):  # 获取sample中的索引和值
    for j, character in enumerate(sample):
        index = all_token_index.get(character)
        result[i,j,index] = 1

上述代码均参考《python深度学习》,感觉书讲的挺好的,推荐一波。

 

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在机器学习领域中,文本数据是十分常见的数据类型,然而文本数据不能直接作为输入数据进行机器学习,需要先对其进行数值化处理。在文本数值化的处理方法中,onehot编码是一种常用的方式,可以将文本内容转化为数值化的向量表示。 Python中可以使用sklearn库中的OneHotEncoder类来实现onehot编码。具体实现方法如下: 首先需要将文本内容进行标准化处理,将大写字母转换为小写字母,并去除标点符号和空格等无关字符。 然后可以使用sklearn库中的CountVectorizer类将文本转化为计数向量。该类会将文本中的每个单词都进行计数,生成对应的文本词汇表。对于每个文本,可以根据词汇表中的单词出现情况生成该文本的计数向量。 接下来就可以使用OneHotEncoder类将计数向量转化为onehot编码的向量了。对于每个计数向量,OneHotEncoder类会根据该向量中的每个元素是否为0或非0来生成一个二元向量,该向量的维度与计数向量的维度相同。对于每个非零元素,该向量相应位置标记为1,零元素则标记为0。 在使用完OneHotEncoder类后,可以得到一组数值化的向量,将这些向量作为输入数据进入机器学习模型进行训练。需要注意的是,在进行onehot编码时需要先对训练数据和测试数据分别进行数值化处理,避免测试数据的数值与训练数据不一致导致模型预测结果不准确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值