当前位置: 首页 > news >正文

机器学习07(黑马)-朴素贝叶斯

朴素贝叶斯

朴素贝叶斯介绍

  1. 复习常见概率的计算
  2. 知道贝叶斯公式
  3. 了解朴素贝叶斯是什么
  4. 了解拉普拉斯平滑系数的作用

【知道】常见的概率公式


条件概率:表示事件A在另外一个事件B已经发生条件下的发生概率,P(A|B)

在女神喜欢的条件下,职业是程序员的概率?

  1. 女神喜欢条件下,有 2、3、4、7 共 4 个样本
  2. 4 个样本中,有程序员 3、4 共 2 个样本
  3. 则 P(程序员|喜欢) = 2/4 = 0.5

联合概率:表示多个条件同时成立的概率,P(AB) = P(A) P(B|A)
特征条件独立性假设:P(AB) = P(A) P(B)

职业是程序员并且体型匀称的概率?

  1. 数据集中,共有 7 个样本
  2. 职业是程序员有 1、3、4 共 3 个样本,则其概率为:3/7
  3. 在职业是程序员,体型是匀称有 3 共 1 个样本,则其概率为:1/3
  4. 则即是程序员又体型匀称的概率为:3/7 * 1/3 = 1/7

联合概率 + 条件概率:
在女神喜欢的条件下,职业是程序员、体重超重的概率? P(AB|C) = P(A|C) P(B|AC)

  1. 在女神喜欢的条件下,有 2、3、4、7 共 4 个样本
  2. 在这 4 个样本中,职业是程序员有 3、4 共 2 个样本,则其概率为:2/4=0.5
  3. 在在 2 个样本中,体型超重的有 4 共 1 个样本,则其概率为:1/2 = 0.5
  4. 则 P(程序员, 超重|喜欢) = 0.5 * 0.5 = 0.25
简言之: 条件概率:在去掉部分样本的情况下,计算某些样本的出现的概率,表示为:P(B|A) 联合概率:多个事件同时发生的概率是多少,表示为:P(AB) = P(B)*P(A|B)

【理解】贝叶斯公式


1.P(C )表示 C 出现的概率
2.P(W|C) 表示在C 条件下W 出现的概率
3.P(W) 表示 W 出现的概率

1.P(C|W) = P(喜欢|程序员,超重)
2.P(W|C) = P(程序员,超重|喜欢)
3.P(C ) = P(喜欢)
4.P(W) = P(程序员,超重)

1.根据训练样本估计先验概率P(C ):P(喜欢) = 4/7
2.根据条件概率P(W|C)调整先验概率:P(程序员,超重|喜欢) = 1/4
3.此时我们的后验概率P(C|W)为:P(程序员,超重|喜欢) * P(喜欢) = 4/7 * 1/4 = 1/7
4.那么该部分数据占所有既为程序员,又超重的人中的比例是多少呢?
(1).P(程序员,超重) = P(程序员) * P(超重|程序员) = 3/7 * 2/3 = 2/7
(2).P(喜欢|程序员, 超重) = 1/7 ➗ 2/7 = 0.5

【理解】朴素贝叶斯

我们发现,在前面的贝叶斯概率计算过程中,需要计算 P(程序员,超重|喜欢) 和 P(程序员, 超重) 等联合概率,为了简化联合概率的计算,朴素贝叶斯在贝叶斯基础上增加:特征条件独立假设,即:特征之间是互为独立的。

此时,联合概率的计算即可简化为:

  1. P(程序员,超重|喜欢) = P(程序员|喜欢) * P(超重|喜欢)
  2. P(程序员,超重) = P(程序员) * P(超重)

【知道】拉普拉斯平滑系数

由于训练样本的不足,导致概率计算时出现 0 的情况。为了解决这个问题,我们引入了拉普拉斯平滑系数。

  1. α 是拉普拉斯平滑系数,一般指定为 1
  2. Ni是 F1 中符合条件 C 的样本数量
  3. N 是在条件 C 下所有样本的总数
  4. m 表示所有独立样本的总数

我们只需要知道为了避免概率值为 0,我们在分子和分母分别加上一个数值,这就是拉普拉斯平滑系数的作用。

【案例】情感分析

学习目标:

1.知道朴素贝叶斯的API
2.能够应用朴素贝叶斯实现商品评论情感分析

【知道】api介绍

  • sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
    • 朴素贝叶斯分类
    • alpha:拉普拉斯平滑系数

【实践】商品评论情感分析

已知商品评论数据,根据数据进行情感分类(好评、差评

步骤分析
  • 1)获取数据
  • 2)数据基本处理
    • 2.1) 取出内容列,对数据进行分析
    • 2.2) 判定评判标准
    • 2.3) 选择停用词
    • 2.4) 把内容处理,转化成标准格式
    • 2.5) 统计词的个数
    • 2.6)准备训练集和测试集
  • 3)模型训练
  • 4)模型评估

代码实现

importpandasaspdimportnumpyasnpimportjiebaimportmatplotlib.pyplotaspltfromsklearn.feature_extraction.textimportCountVectorizerfromsklearn.naive_bayesimportMultinomialNB

1)获取数据

# 加载数据data=pd.read_csv("./data/书籍评价.csv",encoding="gbk")data

2)数据基本处理

# 2.1) 取出内容列,对数据进行分析content=data["内容"]content.head()# 2.2) 判定评判标准 -- 1好评;0差评data.loc[data.loc[:,'评价']=="好评","评论标号"]=1# 把好评修改为1data.loc[data.loc[:,'评价']=='差评','评论标号']=0# data.head()good_or_bad=data['评价'].values# 获取数据print(good_or_bad)# ['好评' '好评' '好评' '好评' '差评' '差评' '差评' '差评' '差评' '好评' '差评' '差评' '差评']# 2.3) 选择停用词# 加载停用词stopwords=[]withopen('./data/stopwords.txt','r',encoding='utf-8')asf:lines=f.readlines()print(lines)fortmpinlines:line=tmp.strip()print(line)stopwords.append(line)# stopwords # 查看新产生列表#对停用词表进行去重stopwords=list(set(stopwords))#去重 列表形式print(stopwords)# 2.4) 把“内容”处理,转化成标准格式comment_list=[]fortmpincontent:print(tmp)# 对文本数据进行切割# cut_all 参数默认为 False,所有使用 cut 方法时默认为精确模式seg_list=jieba.cut(tmp,cut_all=False)print(seg_list)# <generator object Tokenizer.cut at 0x0000000007CF7DB0>seg_str=','.join(seg_list)# 拼接字符串print(seg_str)comment_list.append(seg_str)# 目的是转化成列表形式# print(comment_list) # 查看comment_list列表。# 2.5) 统计词的个数# 进行统计词个数# 实例化对象# CountVectorizer 类会将文本中的词语转换为词频矩阵con=CountVectorizer(stop_words=stopwords)# 进行词数统计X=con.fit_transform(comment_list)# 它通过 fit_transform 函数计算各个词语出现的次数name=con.get_feature_names()# 通过 get_feature_names()可获取词袋中所有文本的关键字print(X.toarray())# 通过 toarray()可看到词频矩阵的结果print(name)# 2.6)准备训练集和测试集# 准备训练集 这里将文本前10行当做训练集 后3行当做测试集x_train=X.toarray()[:10,:]y_train=good_or_bad[:10]# 准备测试集x_text=X.toarray()[10:,:]y_text=good_or_bad[10:]

3)模型训练

# 构建贝叶斯算法分类器mb=MultinomialNB(alpha=1)# alpha 为可选项,默认 1.0,添加拉普拉修/Lidstone 平滑参数# 训练数据mb.fit(x_train,y_train)# 预测数据y_predict=mb.predict(x_text)#预测值与真实值展示print('预测值:',y_predict)print('真实值:',y_text)

4)模型评估

mb.score(x_text,y_text)
http://www.jsqmd.com/news/759365/

相关文章:

  • 《C++设计模式》学习之第1章 理论基础
  • DLSS Swapper智能优化革命:重新定义游戏性能调优新标准
  • 告别迷茫:手把手教你为STM32MP135制作EMMC启动盘(含TF-A/OP-TEE镜像整合)
  • 《图灵完备》迷宫机器人避坑指南:为什么‘右手扶墙’算法会失效?以及如何用汇编实现它
  • 企业内网系统集成AI能力时如何通过Taotoken解决访问与审计难题
  • Cadence IC617下tsmc18rf与tsmcN65工艺库安装避坑全记录(附转换失败备用包)
  • 给嵌入式新手的RISC-V入门课:手把手拆解蜂鸟E203 SoC的流水线设计
  • STL list与vector核心差异详解
  • 专业级无人机控制系统分析:PIDtoolbox黑盒日志诊断实战
  • 从一次线上故障复盘说起:我们是如何被一个‘静默’的ajax错误(status:0)坑惨的
  • 告别NeRF的慢渲染:用GS-IR实现实时场景分解与重打光(附效果对比)
  • 如何5分钟掌握FanControl:Windows风扇调速终极指南
  • 开源小说下载器:200+网站小说离线阅读的终极解决方案
  • NVIDIA Profile Inspector完全指南:解锁显卡隐藏功能,优化游戏性能
  • 使用Taotoken CLI工具一键生成多款AI工具配置提升团队效率
  • 对比直接使用厂商API体验Taotoken在路由容灾上的便利
  • SegmentTermsEnum#postings 和 IntersectTermsEnum#postings
  • 如何通过curl命令快速接入Taotoken并调用大模型API
  • 终极Windows和Office激活指南:3步实现永久免费激活的完整解决方案
  • 基于FastAPI与React构建Claude Code全栈管理工具:架构设计与核心实现
  • Excel批量导入图片避坑指南:为什么你的图片和名字总对不上?从排序到对齐的完整解决方案
  • 虚拟游戏手柄终极指南:用ViGEmBus解锁Windows游戏控制自由 [特殊字符]
  • 用AT32F437的QSPI给项目扩容:手把手实现华邦W25N01G NAND Flash的文件系统移植
  • 在MS-DOS上本地运行AI大模型:doschgpt项目技术解析与实践
  • 告别枯燥理论!手把手教你用CANoe的LIN Stress IG模块模拟真实总线错误
  • TranslucentTB:让Windows任务栏焕然一新的5个神奇效果
  • 从电路板到代码:逻辑图、波形图在FPGA/Verilog设计中的实战转换指南
  • JavaWeb开发踩坑记:阿里云OSS上传报错Access key id should not be null or empty?手把手教你配置Windows环境变量
  • Autovisor:重新定义智慧树课程自动化学习的智能助手
  • STM32电容触摸按键调试避坑指南:从原理到代码,解决灵敏度不稳和误触发问题