FEATURED · 精选文章

一篇文章讲清楚:朴素贝叶斯

发布时间 / 2026/9/6 6:18:21
来源 / 创域科博编辑部
栏目 / 资讯中心
一篇文章讲清楚:朴素贝叶斯 通过这篇文章我们要复习常见概率的计算知道贝叶斯公式了解朴素贝叶斯是什么了解拉普拉斯平滑系数的作用知道朴素贝叶斯的API能够应用朴素贝叶斯实现商品评论情感分析。一、朴素贝叶斯算法-利用概率值进行分类的一种机器学习算法举个例子计算条件概率和联合概率。联合概率P(A,B)A 事件并且 B 事件同时发生的概率条件概率P(A|B)在 B 已经发生的前提下A 发生的概率公式P(A|B)P(A,B)/{P(B)P(A,B)P(B) P(A|B)班级一共 10 人男生女生戴眼镜3 人2 人不戴眼镜2 人3 人总人数 10事件定义A是男生B戴眼镜1️⃣ 联合概率 P(A,B)既是男生并且戴眼镜男生且戴眼镜一共 3 人P(A,B)3/100.32️⃣ 边缘概率 P(B)戴眼镜不管男女戴眼镜总人数 325P(B)5/100.53️⃣ 条件概率 P(A|B)已知这个人戴眼镜求他是男生的概率套用公式P(A|B)P(A,B)P(B)0.3*0.50.6直观理解限定只看戴眼镜 5 个人其中男生 3 人\(3/50.6\)。反过来算 P(B|A)已知是男生求戴眼镜概率男生一共325人 男生且戴眼镜 3 人P(B|A)P(A,B)/{P(A)}0.3/{5/10} 0.3/0.50.6区分记忆联合概率 P (A,B)两件事同时发生分母是全部总样本。条件概率 P (A|B)B 已经确定发生样本空间缩小分母变成 B 的数量。和贝叶斯挂钩P(A|B)P(B|A)P(A)/P(B)二、朴素贝叶斯Naive Bayes1、核心基础基于贝叶斯公式加一个朴素假设所有特征条件相互独立。贝叶斯公式三、拉普拉斯平滑系数为了避免概率值为0我们在分子和分母分别加上一个数值这就是拉普拉斯平滑系数的作用α是拉普拉斯平滑系数一般指定为1Ni是F1中符合条件C的样本数量N是在条件C下所有样本的总数m表示所有独立样本的总数为了避免概率值为0我们在分子和分母分别加上一个数值这就是拉普拉斯平滑系数的作用四、朴素贝叶斯APIsklearn.naive_bayes.MultinomialNB(alpha 1.0-朴素贝叶斯分类-alpha拉普拉斯平滑系数五、商品评论情感分析已知商品评论数据根据数据进行情感分类好评、差评# 1获取数据# 2数据基本处理#2-1处理数据y# 2-2加载停用词# 2-3处理数据x把文档分词# 2-4统计词频矩阵 作为句子特征# 3准备训练集测试集# 4模型训练# 4-1实例化贝叶斯 添加拉普拉斯平滑参数# 4-2模型预测# 5模型评估 案例 演示通过 朴素贝叶斯算法 实现 商品评论情感分析即好评差评…… 朴素贝叶斯介绍 概述 贝叶斯仅仅依赖概率 就可以进行分类的一种机器学习算法 朴素不考虑特征之间的关联性即特征间都是相互独立的。 原始P(AB) P(A)*P(B/A) * P(B) * P(A/B) 加入朴素之后P(AB) P(A)*P(B) 细节 因为我们分词用到jieba分词器记得先装一下例如pip install jieba # 导包 import numpy as np # 数学计算包 import pandas as pd # 数据处理包 import matplotlib.pyplot as plt # 画图包 import jieba # 分词包 from nltk import accuracy from nltk.corpus import stopwords from sklearn.feature_extraction.text import CountVectorizer # 词频统计包把评论内容 转成 词频矩阵 from sklearn.metrics import accuracy_score from sklearn.naive_bayes import MultinomialNB # 朴素贝叶斯对象 # 1. 读取文件获取原始数据。 df pd.read_csv(./data/书籍评价.csv,encodinggbk) # df.info() # 2. 数据预处理。 # 2.1 添加labels列充当标签列好评-1差评-0 df[label] np.where(df[评价] 好评, 1, 0) # print(df) # 2.2 抽取labels列作为标签。 y df[label] # 2.3 演示 jieba 分词 # print(jieba.lcut(好好学习天天向上我爱你你爱我蜜雪冰城甜蜜蜜小明骑车一把把把把住了。)) # 2.4 对用户的评论信息做切词 # 数据格式[[第1条评论切词1切词2切词3……][第2条评论切词1切词2切词3……]] comment_list [,.join(jieba.lcut(line)) for line in df[内容]] # 数据格式[[第1条评论切词1切词2切词3……[第2条评论切词1切词2切词3……]] print(comment_list) # 2.5 加载 停用词列表即里边记录的词不需要参与模型训练预测要被删除的词例如的啊哈从都…… with open(./data/stopwords.txt,r,encodingutf-8) as src_f: # 2.5.1 依次读取所有的行 stopwords_list src_f.readlines() # 2.5.2 删除最后的\n stopwords_list [line.strip() for line in stopwords_list] # 2.5.3 对 停用词列表去重 stopwords_list list(set(stopwords_list)) # print(stopwords_list) # 2.6 创建向量化对象从 评论切词列表comment_list中 删除 停用词并且统计词频单词矩阵。 transfer CountVectorizer(stop_wordsstopwords_list) # 参数停用词列表。 # 2.7 统计词频矩阵先训练后转换再转数组。 transfer.fit(comment_list) x transfer.transform(comment_list).toarray() print(x) # 2.8 看一下 我们13条评论切词且删除 停用词后一共剩下多少个词了。 print(transfer.get_feature_names_out()) print(len(transfer.get_feature_names_out())) # 37个词 # 2.9 应为就 13条数据我们把前10条当训练集后3条当测试集 x_train x[:10] y_train y[:10] x_test x[10:] y_test y[10:] # 3. 特征工程此处略 # 4.模型训练 estimator MultinomialNB() # 创建朴素贝叶斯模型 estimator.fit(x_train,y_train) # 5.模型预测 y_pred estimator.predict(x_test) print(模型预测结果是,y_pred) # 6.模型评估 print(f准确率{accuracy_score(y_test, y_pred)*100}%)
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻