朴素贝叶斯
- 贝叶斯
-
- [1. 朴素贝叶斯](#1. 朴素贝叶斯)
- [2. 开发流程](#2. 开发流程)
贝叶斯
python
"""
贝叶斯公式
P(C) 表示C出现的概率, 一般是目标值
P(W|C) 表示C条件下 W出现的概率
P(W) 表示W出现的概率
"""
1. 朴素贝叶斯
python
"""
朴素贝叶斯
在贝叶斯基础上增加: 特征条件独立的假设
特征之间是互为独立的
拉普拉斯平滑系数
为了避免概率值为0, 在分子和分母分别加上一个数值
公式
α是拉普拉斯平滑系数, 一般指定为1
N¡ 是 F1 符合条件 C 的样本数量
N 是在条件C下所有样本的总数
m 表示所有独立样本的总数
API
sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
alpha:拉普拉斯平滑系数
"""
拉普拉斯平滑系数公式
2. 开发流程
python
"""
开发流程分析
1. 获取数据
2. 数据基本处理
2.1 处理数据y
2.2 加载停用词
2.3 处理数据x 把文档分词
2.4 统计词频矩阵 作为句子特征
2.5 准备训练集 测试集
3. 模型训练
3.1 实例化贝叶斯 添加拉普拉斯平滑参数
4. 模型预测
5. 模型评估
"""
# 1.导入依赖包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import jieba
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB # 多项分布朴素贝叶斯
def MultinomialDemo():
# 2.获取数据
data_df = pd.read_csv('./data/书籍评价.csv', encoding ='gbk')
print('data_df -->\n', data_df)
# 3.数据基本处理
# 3-1 处理数据y
data_df['评论标号'] = np.where(data_df['评价'] == '好评', 1, 0)
y = data_df['评论标号']
print('data_df -->\n', data_df)
# 3-2 加载停用词
stopwords = []
with open('./data/stopwords.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
stopwords = [line.strip() for line in lines]
stopwords = list(set(stopwords)) # 去重
# 3-3 处理数据x 把文档分词
comment_list = [','.join(jieba.lcut(line)) for line in data_df['内容']]
# print('comment_list-->\n', comment_list)
# 3-4 统计词频矩阵 作为句子特征
transfer = CountVectorizer(stop_words=stopwords)
x = transfer.fit_transform(comment_list)
mynames = transfer.get_feature_names_out()
x = x.toarray()
# 3-5 准备训练集测试集
x_train = x[:10, :] # 准备训练集
y_train = y.values[0:10]
x_test = x[10:, :] # 准备测试集
y_test = y.values[10:]
print('x_train.shape-->', x_train.shape)
print('y_train.shape-->', y_train.shape)
# 4.模型训练
# 4-1 实例化贝叶斯 # 添加拉普拉修正平滑参数
mymultinomialnb = MultinomialNB()
mymultinomialnb.fit(x_train, y_train)
# 5.模型预测
y_pred = mymultinomialnb.predict(x_test)
print('预测值-->', y_pred)
print('真实值-->', y_test)
# 6.模型评估
myscore = mymultinomialnb.score(x_test, y_test)
print('myscore-->', myscore)