365打卡第N1周: one-hot编码案例

🍨 本文为🔗365天深度学习训练营中的学习记录博客
🍖 原作者:K同学啊

🏡 我的环境:

语言环境:Python3.10
编译器:Jupyter Lab
深度学习环境:torch==2.5.1    torchvision==0.20.1
------------------------------分割线---------------------------------

import torch
import torch.nn.functional as F

# 示例文本
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 enumerate(sequences):
    one_hot_results[i, seq] = 1

# 打印结果
print("词汇表:")
print(word_index)
print("\n文本:")
print(texts)
print("\n文本序列:")
print(sequences)
print("\nOne-Hot编码:")
print(one_hot_results)

import torch
import torch.nn.functional as F

# 示例中文文本
# texts = ['你好,最近怎么样?', '我过得很好,谢谢!', 'K同学啊']
texts = open(r"C:/Users/scu/pytorch_study/weekn1/任务文件.txt", "r", encoding="utf-8").read()

# 构建词汇表
word_index = {}
index_word = {}
for i, word in enumerate(set("".join(texts))):
    word_index[word] = i
    index_word[i] = word

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

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

# 将整数序列转化为one-hot编码
one_hot_results = torch.zeros(len(texts), vocab_size)
for i, seq in enumerate(sequences):
    one_hot_results[i, seq] = 1

# 打印结果
print("词汇表:")
print(word_index)
print("\n文本:")
print(texts)
print("\n文本序列:")
print(sequences)
print("\nOne-Hot编码:")
print(one_hot_results)

import torch
import torch.nn.functional as F
import jieba

# 示例中文文本
# texts = ['你好,最近怎么样?', '我过得很好,谢谢!', '再见。']

# 使用结巴分词进行分词
tokenized_texts = [list(jieba.cut(text)) for text in texts]

# 构建词汇表
word_index = {}
index_word = {}
for i, word in enumerate(set([word for text in tokenized_texts for word in text])):
    word_index[word] = i
    index_word[i] = word

# 将文本转化为整数序列
sequences = [[word_index[word] for word in text] for text in tokenized_texts]

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

# 将整数序列转化为one-hot编码
one_hot_results = torch.zeros(len(texts), vocab_size)
for i, seq in enumerate(sequences):
    one_hot_results[i, seq] = 1

# 打印结果
print("词汇表:")
print(word_index)
print("\n文本:")
print(texts)
print("\n分词结果")
print(tokenized_texts)
print("\n文本序列:")
print(sequences)
print("\nOne-Hot编码:")
print(one_hot_results)

--------------小结-----------------------

One-Hot 编码(独热编码)是一种将离散分类变量转换为二进制向量表示的技术,广泛应用于机器学习和数据预处理领域。

1. 优点​

  • ​处理非连续型数据​​:适用于无序离散特征,避免因数值化引入错误的顺序关系。
  • ​兼容算法需求​​:满足大多数机器学习算法(如逻辑回归、神经网络)对数值输入的要求。

2. 缺点与局限性​

  • ​维度灾难​​:类别数量多时,编码后特征维度激增,导致计算复杂度和内存消耗增加(例如,城市名称的编码可能生成数千维稀疏矩阵)。
  • ​信息稀疏性​​:编码结果多为0值,可能影响某些模型(如KNN)的距离计算效率。
  • ​顺序信息丢失​​:若分类变量存在自然顺序(如学历等级),需结合其他编码方法。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值