# 训练朴素贝叶斯模型 (3) vocab_list=create_vocab_list(doc_list) (4) train_set=list(range) 帮我补全代码
时间: 2024-02-20 22:02:02 浏览: 100
当训练数据准备好之后,我们可以使用以下代码来训练朴素贝叶斯模型:
```
# 导入需要的库
import numpy as np
# 创建函数 create_vocab_list,将所有词汇保存在一个列表中
def create_vocab_list(data_set):
vocab_set = set([])
for document in data_set:
vocab_set = vocab_set | set(document)
return list(vocab_set)
# 创建函数 set_of_words2vec,将文本转换为词向量
def set_of_words2vec(vocab_list, input_set):
return_vec = [0] * len(vocab_list)
for word in input_set:
if word in vocab_list:
return_vec[vocab_list.index(word)] = 1
else:
print("the word: {} is not in my Vocabulary!".format(word))
return return_vec
# 创建函数 train_naive_bayes,训练朴素贝叶斯模型
def train_naive_bayes(train_matrix, train_category):
num_train_docs = len(train_matrix)
num_words = len(train_matrix[0])
p_abusive = sum(train_category) / float(num_train_docs)
p0_num = np.ones(num_words)
p1_num = np.ones(num_words)
p0_denom = 2.0
p1_denom = 2.0
for i in range(num_train_docs):
if train_category[i] == 1:
p1_num += train_matrix[i]
p1_denom += sum(train_matrix[i])
else:
p0_num += train_matrix[i]
p0_denom += sum(train_matrix[i])
p1_vect = np.log(p1_num / p1_denom)
p0_vect = np.log(p0_num / p0_denom)
return p0_vect, p1_vect, p_abusive
# 创建函数 test_naive_bayes,使用训练好的模型进行分类
def test_naive_bayes():
# 创建训练数据
doc_list = [['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'],
['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'],
['my', 'dalmation', 'is', 'so', 'cute', 'I', 'love', 'him'],
['stop', 'posting', 'stupid', 'worthless', 'garbage'],
['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'],
['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']]
class_list = [0, 1, 0, 1, 0, 1] # 1 代表侮辱性词汇,0 代表正常言论
# 创建词汇表
vocab_list = create_vocab_list(doc_list)
# 将训练数据转换为词向量矩阵
train_matrix = []
for doc in doc_list:
train_matrix.append(set_of_words2vec(vocab_list, doc))
# 训练朴素贝叶斯模型
p0_vect, p1_vect, p_abusive = train_naive_bayes(np.array(train_matrix), np.array(class_list))
# 打印结果
print("p0_vect:", p0_vect)
print("p1_vect:", p1_vect)
print("p_abusive:", p_abusive)
test_naive_bayes()
```
在这段代码中,我们首先定义了一个训练数据集`doc_list`和对应的标签`class_list`。然后,我们使用`create_vocab_list`函数创建了一个包含所有词汇的列表`vocab_list`。接着,我们使用`set_of_words2vec`函数将训练数据集转换为词向量矩阵`train_matrix`。最后,我们使用`train_naive_bayes`函数训练朴素贝叶斯模型,并使用`test_naive_bayes`函数测试模型的性能。
阅读全文