深度学习Day-35:One-hot独热编码

news/2024/10/4 9:49:57 标签: 人工智能

  🍨 本文为:[🔗365天深度学习训练营] 中的学习记录博客
 🍖 原作者:[K同学啊 | 接辅导、项目定制]

一、 独热编码原理

        独热编码(One-Hot Encoding)是一种将分类数据转换为二进制向量的方法,其中每个类别对应一个唯一的二进制向量。在独热编码中,每个类别都由一个长度为n的向量表示,其中n是所有可能类别的数量。向量中的每个位置对应一个可能的类别,该位置上的值是1或0,表示该实例是否属于该类别。

        例如,假设我们有四个类别:A、B、C和D。使用独热编码,我们可以将它们表示为:

  • A: [1, 0, 0, 0]
  • B: [0, 1, 0, 0]
  • C: [0, 0, 1, 0]
  • D: [0, 0, 0, 1]

        独热编码的优点包括:
        处理分类数据:独热编码允许分类数据被模型处理,因为许多机器学习算法和神经网络都要求输入是数字。
        无序性:独热编码假设类别之间没有顺序关系,每个类别都是相互独立的。
        稀疏性:独热编码产生的向量通常是稀疏的,这意味着大多数位置的值都是0,只有少数几个位置的值是1。这种稀疏性在某些情况下可以减少模型复杂性。
        兼容性:独热编码可以与多种机器学习算法兼容,包括逻辑回归、支持向量机、决策树、随机森林、神经网络等。

        在Python中,可以使用多种库来实现独热编码,例如pandasget_dummies函数或scikit-learnOneHotEncoder类。

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

        例如:

John likes to watch movies. Mary likes too
John also likes to watch football games.

以上两句可以构造一个词典: 

{"John": 1, "likes": 2, "to": 3, "watch": 4, "movies": 5, "also": 6, "football": 7, "games": 8, "Mary": 9, "too": 10}

One-hot可表示为: 

John: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
likes: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]

其余类推。 

二、 案例

2.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)

输出结果为:

词汇表:
{'doing': 0, 'well,': 1, 'I': 2, 'how': 3, 'thank': 4, 'you!': 5, 'am': 6, 'Hello,': 7, 'are': 8, 'you?': 9, 'Goodbye.': 10}

文本:
['Hello, how are you?', 'I am doing well, thank you!', 'Goodbye.']

文本序列:
[[7, 3, 8, 9], [2, 6, 0, 1, 4, 5], [10]]

One-Hot编码:
tensor([[0., 0., 0., 1., 0., 0., 0., 1., 1., 1., 0.],
        [1., 1., 1., 0., 1., 1., 1., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]])

Process finished with exit code 0

2.2 中文案例

import torch
import torch.nn.functional as F

# 示例中文文本
texts = ['你好,最近怎么样?', '我过得很好,谢谢!', 'K同学啊']

# 构建词汇表
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)

输出结果为:

词汇表:
{'!': 0, '谢': 1, '你': 2, '怎': 3, '好': 4, '学': 5, '近': 6, '么': 7, '同': 8, '最': 9, '样': 10, '很': 11, '我': 12, ',': 13, '得': 14, '过': 15, 'K': 16, '啊': 17, '?': 18}

文本:
['你好,最近怎么样?', '我过得很好,谢谢!', 'K同学啊']

文本序列:
[[2, 4, 13, 9, 6, 3, 7, 10, 18], [12, 15, 14, 11, 4, 13, 1, 1, 0], [16, 8, 5, 17]]

One-Hot编码:
tensor([[0., 0., 1., 1., 1., 0., 1., 1., 0., 1., 1., 0., 0., 1., 0., 0., 0., 0.,
         1.],
        [1., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 0., 0.,
         0.],
        [0., 0., 0., 0., 0., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 1.,
         0.]])

Process finished with exit code 0

         可以注意到上面的案例是以字为基本单位的,但词语被拆分开后,显然会失去原有的意思。在下面的案例中,我们使用jieba分词工具对句子进行划分。

        使用结巴分词(jieba)进行中文文本的分词处理,然后将分词后的结果转化为one-hot编码。首先,确保你已经安装了结巴分词库。

pip install jieba

接着,运行下述代码:

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)

 输出结果为:

词汇表:
{',': 0, '再见': 1, '?': 2, '!': 3, '得': 4, '你好': 5, '。': 6, '很': 7, '最近': 8, '谢谢': 9, '我过': 10, '怎么样': 11, '好': 12}

文本:
['你好,最近怎么样?', '我过得很好,谢谢!', '再见。']

分词结果
[['你好', ',', '最近', '怎么样', '?'], ['我过', '得', '很', '好', ',', '谢谢', '!'], ['再见', '。']]

文本序列:
[[5, 0, 8, 11, 2], [10, 4, 7, 12, 0, 9, 3], [1, 6]]

One-Hot编码:
tensor([[1., 0., 1., 0., 0., 1., 0., 0., 1., 0., 0., 1., 0.],
        [1., 0., 0., 1., 1., 0., 0., 1., 0., 1., 1., 0., 1.],
        [0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.]])

Process finished with exit code 0

        在ACGAN中,判别器的整体结构包括两部分:一个是用于判断样本真伪的主分类器,另一个是用于预测条件类别的辅助分类器。以下是判别器的整体结构:

        共享的特征提取层:判别器的主分类器和辅助分类器通常共享相同的特征提取层。这意味着它们使用相同的网络层来提取输入样本的特征。
        主分类器分支:特征提取层的输出被送入主分类器分支,这个分支通常是一个或几个全连接层,用于预测样本是真(来自真实数据分布)还是假(来自生成器)。
        辅助分类器分支:同时,特征提取层的输出也被送入辅助分类器分支,用于预测样本的条件类别。
        损失函数和优化:判别器的总损失是主分类器损失和辅助分类器损失的加权组合。在训练过程中,优化器会同时最小化这两个损失,以更新判别器的权重。
通过这种方式,ACGAN的判别器不仅能够区分真实和生成的样本,还能够准确预测样本的类别,从而为生成器提供了更具体的指导,使其能够生成具有特定条件属性的数据。

三、任务

运行代码:

import torch
import jieba

#打开txt文件的方式
texts = open('任务.txt', 'r',encoding='utf-8').read().split('\n')
print(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)

输出结果:

['比较直观的编码方式是采用上面提到的字典序列。', '例如,对于一个有三个类别的问题,可以用1、2和3分别表示这三个类别。', '但是,这种编码方式存在一个问题,就是模型可能会错误地认为不同类别之间存在一些顺序或距离关系', '而实际上这些关系可能是不存在的或者不具有实际意义的,为了避免这种问题,引入了one-hot编码(也称独热编码)。', 'one-hot编码的基本思想是将每个类别映射到一个向量,其中只有一个元素的值为1,其余元素的值为0。', '这样,每个类别之间就是相互独立的,不存在顺序或距离关系。', '例如,对于三个类别的情况,可以使用如下的one-hot编码:', '这是K同学啊的“365天深度学习训练营”教案内容']
词汇表:
{'提到': 0, '是': 1, '而': 2, '顺序': 3, '称': 4, '训练营': 5, '字典': 6, '内容': 7, '不同': 8, '问题': 9, '编码': 10, '每个': 11, '独热': 12, 'K': 13, '这是': 14, '例如': 15, '映射': 16, '3': 17, '情况': 18, '教案': 19, '表示': 20, '基本': 21, '向量': 22, '对于': 23, '可以': 24, '存在': 25, '将': 26, ',': 27, '了': 28, '到': 29, '元素': 30, '地': 31, '采用': 32, '值': 33, '为了': 34, '啊': 35, '或': 36, '或者': 37, '“': 38, '认为': 39, '避免': 40, '这些': 41, '编码方式': 42, '为': 43, '一个': 44, '分别': 45, '。': 46, '就是': 47, '一些': 48, '之间': 49, '不': 50, '具有': 51, '使用': 52, '深度': 53, '学习': 54, '和': 55, '比较': 56, 'hot': 57, '模型': 58, '实际上': 59, '1': 60, '可能': 61, '错误': 62, '其余': 63, ':': 64, '(': 65, '距离': 66, '会': 67, '-': 68, '这样': 69, '相互': 70, '关系': 71, '直观': 72, '思想': 73, '序列': 74, '如下': 75, '其中': 76, '实际意义': 77, '”': 78, '独立': 79, '有': 80, '365': 81, '天': 82, '三个': 83, '也': 84, '用': 85, '这': 86, '但是': 87, '引入': 88, 'one': 89, '这种': 90, '的': 91, '0': 92, '、': 93, '2': 94, '上面': 95, '只有': 96, '同学': 97, ')': 98, '类别': 99}

文本:
['比较直观的编码方式是采用上面提到的字典序列。', '例如,对于一个有三个类别的问题,可以用1、2和3分别表示这三个类别。', '但是,这种编码方式存在一个问题,就是模型可能会错误地认为不同类别之间存在一些顺序或距离关系', '而实际上这些关系可能是不存在的或者不具有实际意义的,为了避免这种问题,引入了one-hot编码(也称独热编码)。', 'one-hot编码的基本思想是将每个类别映射到一个向量,其中只有一个元素的值为1,其余元素的值为0。', '这样,每个类别之间就是相互独立的,不存在顺序或距离关系。', '例如,对于三个类别的情况,可以使用如下的one-hot编码:', '这是K同学啊的“365天深度学习训练营”教案内容']

分词结果
[['比较', '直观', '的', '编码方式', '是', '采用', '上面', '提到', '的', '字典', '序列', '。'], ['例如', ',', '对于', '一个', '有', '三个', '类别', '的', '问题', ',', '可以', '用', '1', '、', '2', '和', '3', '分别', '表示', '这', '三个', '类别', '。'], ['但是', ',', '这种', '编码方式', '存在', '一个', '问题', ',', '就是', '模型', '可能', '会', '错误', '地', '认为', '不同', '类别', '之间', '存在', '一些', '顺序', '或', '距离', '关系'], ['而', '实际上', '这些', '关系', '可能', '是', '不', '存在', '的', '或者', '不', '具有', '实际意义', '的', ',', '为了', '避免', '这种', '问题', ',', '引入', '了', 'one', '-', 'hot', '编码', '(', '也', '称', '独热', '编码', ')', '。'], ['one', '-', 'hot', '编码', '的', '基本', '思想', '是', '将', '每个', '类别', '映射', '到', '一个', '向量', ',', '其中', '只有', '一个', '元素', '的', '值', '为', '1', ',', '其余', '元素', '的', '值', '为', '0', '。'], ['这样', ',', '每个', '类别', '之间', '就是', '相互', '独立', '的', ',', '不', '存在', '顺序', '或', '距离', '关系', '。'], ['例如', ',', '对于', '三个', '类别', '的', '情况', ',', '可以', '使用', '如下', '的', 'one', '-', 'hot', '编码', ':'], ['这是', 'K', '同学', '啊', '的', '“', '365', '天', '深度', '学习', '训练营', '”', '教案', '内容']]

文本序列:
[[56, 72, 91, 42, 1, 32, 95, 0, 91, 6, 74, 46], [15, 27, 23, 44, 80, 83, 99, 91, 9, 27, 24, 85, 60, 93, 94, 55, 17, 45, 20, 86, 83, 99, 46], [87, 27, 90, 42, 25, 44, 9, 27, 47, 58, 61, 67, 62, 31, 39, 8, 99, 49, 25, 48, 3, 36, 66, 71], [2, 59, 41, 71, 61, 1, 50, 25, 91, 37, 50, 51, 77, 91, 27, 34, 40, 90, 9, 27, 88, 28, 89, 68, 57, 10, 65, 84, 4, 12, 10, 98, 46], [89, 68, 57, 10, 91, 21, 73, 1, 26, 11, 99, 16, 29, 44, 22, 27, 76, 96, 44, 30, 91, 33, 43, 60, 27, 63, 30, 91, 33, 43, 92, 46], [69, 27, 11, 99, 49, 47, 70, 79, 91, 27, 50, 25, 3, 36, 66, 71, 46], [15, 27, 23, 83, 99, 91, 18, 27, 24, 52, 75, 91, 89, 68, 57, 10, 64], [14, 13, 97, 35, 91, 38, 81, 82, 53, 54, 5, 78, 19, 7]]

One-Hot编码:
tensor([[1., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         1., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 1., 0., 0., 0., 1., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 0., 1.,
         0., 0., 1., 0., 0., 1., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0.,
         0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 1., 0., 1., 1., 0., 0., 0.,
         0., 1., 0., 1., 1., 0., 0., 0., 0., 1.],
        [0., 0., 0., 1., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 1., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0.,
         1., 0., 0., 1., 0., 0., 1., 0., 1., 0., 0., 1., 1., 1., 0., 0., 0., 0.,
         0., 0., 0., 0., 1., 0., 0., 1., 1., 0., 0., 0., 1., 1., 0., 0., 0., 1.,
         0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.,
         1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
        [0., 1., 1., 0., 1., 0., 0., 0., 0., 1., 1., 0., 1., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 1., 0., 1., 1., 0., 0., 0., 0., 0., 1., 0.,
         0., 1., 0., 0., 1., 1., 0., 0., 0., 0., 1., 0., 0., 0., 1., 1., 0., 0.,
         0., 0., 0., 1., 0., 1., 0., 1., 0., 0., 0., 1., 0., 0., 1., 0., 0., 1.,
         0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 1.,
         1., 1., 0., 0., 0., 0., 0., 0., 1., 0.],
        [0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 1., 0.,
         0., 0., 0., 1., 1., 0., 0., 0., 1., 1., 0., 1., 1., 0., 0., 1., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 1., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 1., 0., 0., 1., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0.,
         0., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
         0., 1., 1., 0., 0., 0., 1., 0., 0., 1.],
        [0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 1., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.,
         1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 1., 1., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 1., 1., 1.,
         0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 1., 0., 0., 0., 0., 0., 0., 0., 1.],
        [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0.,
         1., 0., 0., 0., 0., 1., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
         0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0.,
         0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1.,
         0., 1., 0., 0., 0., 0., 0., 0., 0., 1.],
        [0., 0., 0., 0., 0., 1., 0., 1., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0.,
         0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
         0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
         1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 1., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0., 0.,
         0., 1., 0., 0., 0., 0., 0., 1., 0., 0.]])

Process finished with exit code 0

四、总结

        本周任务较为简单,不做多余总结


http://www.niftyadmin.cn/n/5689792.html

相关文章

(14)MATLAB莱斯(Rician)衰落信道仿真4

文章目录 前言一、改写莱斯分布概率密度函数的理论值二、仿真代码三、仿真结果总结 前言 本文通过将接收信号总功率设置为1,重写了莱斯衰落信道上接收信号幅度的理论PDF式。然后用MATLAB代码生成了在具有不同莱斯因子K的Ricean平坦衰落信道下接收到的信号样本&…

记录一次docker报错无法访问文件夹,权限错误问题

记录一次docker报错无法访问文件夹,权限错误问题 1. 背景 使用docker安装photoview,为其分配了一个cache目录,用户其缓存数据。在运行过程中,扫描文件后显示如下错误 could not make album image cache directory: mkdir /app/c…

Navicat Premium 12 for Mac中文永久版

目录 一、安装二、修改rpk文件三、获取请求码四、获取jh码 Tip:由于一些jy词,一直不让我发布🙄,所以只能用拼音简写代替,是不是很无语,我也很无语,各位自行体会一下😒 为了避免每次换…

虚拟机窗口顶部和底部出现白边(鸿蒙开发)

预览窗口顶部和底部出现白边 问题描述:预览窗口顶部和底部都有白边,导致无法全屏显示 解决方法: 官方文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-previewer-operating-6-V5 这里官方文档给了两种…

检索器--

2.1 R: 检索器模块 RAG技术中的“R”代表检索,其主要功能是在庞大的知识库中找出与用户查询最相关的前k个文档。这一过程至关重要,因为高质量的检索器能够显著提升整个系统的性能。然而,构建一个高质量的检索器并不容易,研究中通…

Android Studio | 无法识别Icons.Default.Spa中的Spa

编写底部导航栏&#xff0c;涉及到Spa部分出现报红&#xff1a; 解决办法&#xff1a;在build.gradle.kts中引入图标依赖 dependencies {implementation "androidx.compose.material:material-icons-extended:<version>" }

OSDU轻量化单机部署

首先更新系统 sudo apt update sudo apt upgrade -y安装docker sudo apt install -y docker.io sudo systemctl start docker sudo systemctl enable docker安装minikube curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 …

【2024】基于mysqldump的数据备份与恢复

基于mysqldump备份与恢复 mysqldump是一个用于备份 MySQL 数据库的实用工具。 它可以将数据库的结构&#xff08;如数据库、表、视图、存储过程等的定义&#xff09;和数据&#xff08;表中的记录&#xff09;导出为文本文件&#xff0c;这些文本文件可以包含 SQL 语句&#…