🍨 本文为🔗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)的距离计算效率。
- 顺序信息丢失:若分类变量存在自然顺序(如学历等级),需结合其他编码方法。