锋哥原创的Scikit-learn Python机器学习视频教程:

https://www.bilibili.com/video/BV11reUzEEPH

课程介绍

本课程主要讲解基于Scikit-learn的Python机器学习知识,包括机器学习概述,特征工程(数据集,特征抽取,特征预处理,特征降维等),分类算法(K-临近算法,朴素贝叶斯算法,决策树等),回归与聚类算法(线性回归,欠拟合,逻辑回归与二分类,K-means算法)等。

Scikit-learn Python机器学习 - 分类算法 - 朴素贝叶斯

什么是贝叶斯公式?

在学习朴素贝叶斯之前,我们必须先掌握贝叶斯公式

这个公式乍一看,你肯定很懵逼,不过不用怕,我们来解释和分解下,你就懂了。

这些符号是什么意思?

  • P(A|B):在 B 已经发生的情况下,A 发生的概率。这是我们想求的,叫做后验概率(更新后的信念)。

  • P(B|A):在 A 已经发生的情况下,B 发生的概率。这个通常我们从数据中能得到,叫做似然概率

  • P(A):在不知道任何证据(B)的情况下,A 发生的概率。这是我们最初的看法,叫做先验概率

  • P(B):B 发生的总概率,叫做证据标准化常量

我们来推导一下贝叶斯公式

P(AB)=P(A)*P(B|A) A和B同时发生的概率等于P(A)乘以P(B|A),这个大家应该能理解。

同理 P(AB)=P(B)*P(A|B) A和B同时发生的概率也等于P(B)乘以P(A|B),相信这个大家也应该能理解。

所以我们能推导出 P(A) * P(B|A) = P(B) * P(A|B) 把右边的P(B)放到 左边去 就推导出了 贝叶斯公式。相当大家彻底理解了贝叶斯公式。

贝叶斯公式经典实例-疾病的检测

这是一个非常著名且反直觉的例子,能完美展示贝叶斯思想的威力。

场景: 假设某种疾病在人群中的发病率是 1%(先验知识)。现在有一种检测方法:

  • 如果你确实有病,检测结果呈阳性(True Positive)的概率是 99%(非常准)。

  • 如果你没有病,检测结果呈阳性(False Positive)的概率是 5%(有5%的误诊率)。

问题: 如果一个人去做了检测,结果是阳性,那么他真正患病的概率到底是多少?

很多人会直觉地认为是99%或者95%,但贝叶斯定理会给我们一个出乎意料的答案。

首先,定义事件:

  • A: 真正患病

  • B: 检测结果为阳性

我们要求的是:在检测结果为阳性的情况下,真正患病的概率,即 P(患病 | 阳性),也就是 P(A|B)

根据公式,我们需要知道:

  1. P(A) - 先验概率: 在不知道检测结果时,一个人患病的概率 = 发病率 = 1% = 0.01

  2. P(B|A) - 似然概率: 如果一个人真有病,检测为阳性的概率 = 99% = 0.99

  3. P(B) - 证据: 检测结果为阳性的总概率。这个需要计算一下。

计算 P(B): 一个人检测为阳性有两种可能:

  • 他真有病,并且检测对了:(0.01 * 0.99)

  • 他其实没病,但被误诊了:((1 - 0.01) * 0.05)

所以,P(B) = (真有病且测出阳性) + (真没病但误诊为阳性) P(B) = (0.01 * 0.99) + (0.99 * 0.05) P(B) = 0.0099 + 0.0495 P(B) = 0.0594

现在,将所有值代入贝叶斯公式:

P(A|B) =0.99/0.0594*0.01=0.1667

结论: 即使检测结果是阳性,你真正患病的概率也只有大约 16.67%

什么是朴素贝叶斯算法?

朴素贝叶斯(Naive Bayes)算法 是一种基于贝叶斯定理的分类方法,广泛应用于文本分类(如垃圾邮件识别、情感分析等)和其他机器学习领域。它的核心假设是 特征与特征之间条件相互独立,即在给定类别的条件下,特征之间没有任何关系或依赖。

朴素贝叶斯公式

在给定数据集的条件下,朴素贝叶斯定理的公式可以用贝叶斯公式推导出来。假设我们有一个样本

,这些是特征(例如文本中的单词频率、图像的像素等)。目标是通过这些特征来预测一个类别 C 。

朴素贝叶斯的优缺点

优点:

  1. 简洁高效:朴素贝叶斯方法实现简单,训练和预测速度都非常快。

  2. 适合高维数据:对于特征维度很高的数据(如文本分类),朴素贝叶斯特别适用,因为它能有效处理大量的特征。

  3. 良好的性能:在许多实际问题中,朴素贝叶斯能够取得不错的分类效果,特别是在数据特征间独立性假设基本成立的情况下。

缺点:

  1. 条件独立假设过于简单:实际数据中,特征之间往往存在依赖关系,而朴素贝叶斯假设特征之间完全独立,这可能会影响其性能。

  2. 对稀疏数据敏感:如果某个类别中某个特征从未出现过,朴素贝叶斯会计算出零概率,导致预测失败。为了解决这个问题,通常采用平滑技术(如拉普拉斯平滑)来避免零概率的问题。

朴素贝叶斯算法 在实际应用中有着广泛的使用,尤其适用于文本分类、垃圾邮件检测、情感分析、推荐系统等任务。由于其计算简单、高效并且能够处理大规模数据,朴素贝叶斯常常成为一些领域中首选的算法之一。

朴素贝叶斯算法具体Scikit-learn实例-新闻文本分类预测

MultinomialNB 是 Scikit-learn 中用于多项式分布数据的朴素贝叶斯分类器,特别适合文本分类等离散特征计数的场景。下面我将详细解释其构造方法、参数、属性和方法。

构造方法:

MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)

参数详解:

  1. alpha : float, 默认=1.0

  • 含义:平滑参数(拉普拉斯平滑/Lidstone平滑)

  • 作用:防止概率计算中出现零值的问题

  • 详细解释

    • 当某个特征在某个类别中从未出现时,概率会变为0,导致整个后验概率为0

    • alpha=1 是拉普拉斯平滑(加1平滑)

    • 0 < alpha < 1 是Lidstone平滑

    • alpha=0 表示不使用平滑(可能导致过拟合和零概率问题)

  • 数学公式

    • 平滑后的条件概率:P(x_i|y) = (N_{yi} + α) / (N_y + α × n)

    • 其中 N_{yi} 是特征 i 在类别 y 中的出现次数,N_y 是类别 y 中所有特征的出现次数,n 是特征数量

  • 建议值:通常使用1.0,可以通过交叉验证调整

  1. fit_prior : bool, 默认=True

  • 含义:是否学习类别先验概率

  • 作用:控制是否使用训练数据中的类别分布

  • 详细解释

    • fit_prior=True:使用训练数据中的类别频率作为先验概率

    • fit_prior=False:使用均匀先验概率(所有类别概率相等)

  • 数学公式

    • fit_prior=True:P(y) = N_y / N

    • fit_prior=False:P(y) = 1 / k (k为类别数)

  • 适用场景

    • 当训练集类别分布能代表真实分布时,使用True

    • 当训练集类别不平衡或不能代表真实分布时,可考虑使用False

  1. class_prior : array-like of shape (n_classes,), 默认=None

  • 含义:类别的先验概率

  • 作用:手动指定各类别的先验概率

  • 详细解释

    • 如果指定了此参数,fit_prior参数将被忽略

    • 数组长度必须等于类别数量

    • 概率值应该总和为1(但算法会自动归一化)

  • 示例:对于二分类问题,可以设置class_prior=[0.7, 0.3]

我们来看下具体示例:

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import accuracy_score, classification_report
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB# 1,加载数据
news = fetch_20newsgroups(subset='all')# 2,数据预处理
X_train, X_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.2)  # 划分训练集和测试集tfidfVectorizer = TfidfVectorizer()  # 特征抽取 TF-IDF
X_train_scaled = tfidfVectorizer.fit_transform(X_train)  # fit计算生成模型
X_test_scaled = tfidfVectorizer.transform(X_test)  # # 使用训练集的参数转换测试集# 3,创建和训练LogisticRegression模型
model = MultinomialNB()
model.fit(X_train_scaled, y_train)  # 使用训练数据拟合(训练)模型# 4,进行预测并评估模型
y_pred = model.predict(X_test_scaled)  # 在测试集上进行预测
print('模型预测值:', y_pred)
print('正确值   :', y_test)accuracy = accuracy_score(y_test, y_pred)  # 计算准确率
print(f'测试集准确率:{accuracy:.2f}')
print('分类报告:\n', classification_report(y_test, y_pred, target_names=news.target_names))

运行结果:

模型预测值: [ 0 18 11 ...  5 15 10]
正确值   : [ 0 18 11 ...  5  2  9]
测试集准确率:0.85
分类报告:precision    recall  f1-score   supportalt.atheism       0.91      0.73      0.81       170comp.graphics       0.87      0.77      0.81       193comp.os.ms-windows.misc       0.87      0.80      0.83       192
comp.sys.ibm.pc.hardware       0.68      0.88      0.77       181comp.sys.mac.hardware       0.97      0.86      0.91       205comp.windows.x       0.95      0.86      0.90       205misc.forsale       0.90      0.70      0.79       185rec.autos       0.93      0.89      0.91       205rec.motorcycles       0.95      0.96      0.95       206rec.sport.baseball       0.95      0.94      0.94       194rec.sport.hockey       0.91      0.98      0.94       200sci.crypt       0.78      0.97      0.86       200sci.electronics       0.92      0.86      0.89       188sci.med       0.97      0.86      0.92       200sci.space       0.89      0.97      0.93       199soc.religion.christian       0.56      0.99      0.72       203talk.politics.guns       0.69      0.97      0.81       163talk.politics.mideast       0.95      0.97      0.96       205talk.politics.misc       1.00      0.53      0.69       158talk.religion.misc       1.00      0.21      0.35       118accuracy                           0.85      3770macro avg       0.88      0.84      0.84      3770weighted avg       0.88      0.85      0.85      3770Process finished with exit code 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/98931.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/98931.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/98931.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何免费股票数据API(第13期):沪深A股《最新分时交易》数据获取大全:附Python、Java等多语言实战教程与接口文档说明

在金融科技迅猛发展的今天&#xff0c;股票量化分析以其严谨的科学性和强大的系统性&#xff0c;正日益成为投资领域的主流方法论。任何卓越的量化模型的诞生&#xff0c;都离不开全面、精准、及时的数据支撑。无论是跃动着的实时交易数据、沉淀了历史规律的K线走势&#xff0c…

国标GB28181视频EasyGBS视频监控平台:一网联全城,交通道路可视化、视频巡检、应急指挥“三合一”。

一、方案背景​人车暴涨&#xff0c;路口告急&#xff1a;高峰堵、事故慢、取证难&#xff0c;老办法已拖不动城市交通。破局之道&#xff0c;先看摄像头——EasyGBS 严格遵循 GB28181 国标&#xff0c;一站式完成直播、存储、检索、转码&#xff0c;把万千路口秒级搬上云端&am…

单元测试(白盒测试方法)

一、单元测试1.单元测试是对软件的基本组成单元进行的测试&#xff0c;如函数、类或类的方法。单元测试是对软件的最小可测试单元&#xff08;即可独立编译或汇编的程序模块&#xff09;进行的测试活动&#xff0c;也称为模块测试二、白盒测试方法实例代码public static int te…

2010-2022 同等学力申硕国考:软件工程简答题真题汇总

2010年简答题 给出数据流图的定义&#xff0c;并举例说明数据流图的四个基本构成成份。 数据流图&#xff08;Data Flow Diagram, DFD&#xff09;是一种用于描述系统中数据流动和处理过程的图形工具。它通过直观的方式展示了系统的输入数据如何经过一系列处理变换为输出数据&a…

海外盲盒APP开发:如何用技术重构“惊喜经济”

当盲盒的神秘感遇上技术的确定性&#xff0c;一场关于消费体验的革命正在海外市场悄然发生。从概率算法的公平性到AR虚拟开箱的沉浸感&#xff0c;从跨境物流的实时追踪到多语言支持的无缝切换&#xff0c;海外盲盒APP的开发是一场技术、设计与商业逻辑的深度融合。概率算法&am…

Aosp13 手机sim卡信号格显示修改

工作中&#xff0c;客户要求对信号格显示偏弱不够友好为由&#xff0c;提出修改&#xff0c;要求使其显示信号强一些。在此记录 一问题&#xff1a;修改系统sim卡显示的信号格&#xff0c;在设备其他配置不变的情况下&#xff0c;使其信号格显示比原有的要优秀二 …

硬件开发2-汇编2(ARMv7-A)- 裸机开发

一、指令1、b&#xff08;Branch&#xff09;原型&#xff1a;B<c> <label>作用&#xff1a;实现无条件跳转&#xff0c;常用于不返回的跳转场景特点&#xff1a;仅跳转到目标地址&#xff0c;不保存返回地址示例&#xff1a;b reset ;跳转到reset标号处执…

清源 SCA 社区版更新(V4.2.0)|漏洞前置感知、精准修复、合规清晰,筑牢软件供应链安全防线!

随着数字化进程加速&#xff0c;软件供应链安全威胁日益复杂&#xff0c;公开漏洞响应滞后、0day 攻击防不胜防、组件升级编译失败、安全与合规风险混杂......这些痛点让企业安全团队、运维人员及研发团队疲于应对。自 2025 年 7 月 1 日安势清源 SCA 社区版首次正式发布以及在…

氚燃料增殖里程碑:MIT新型BABY包层技术实验验证

● 导语 5月20日&#xff0c;麻省理工学院&#xff08;MIT&#xff09;发文称&#xff0c;BABY实验首次获取了氚在装置内增殖的实测数据&#xff0c;验证了核心模型&#xff0c;并为未来核聚变电厂的燃料自循环奠定了重要基础。 原文&#x1f447;&#x1f3fb; https://m…

python+springboot+uniapp微信小程序题库系统 在线答题 题目分类 错题本管理 学习记录查询系统

目录技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xff0…

Office转PDF转换器v1.0.py

软件介绍 这是批量将word、Excel、PPT转换为PDF格式的软件&#xff0c;不过PPT转换为PDF需要电脑安装了office&#xff0c;目前这个我还没有解决没有office也可以安装的方法。 软件使用 软件使用是比较简单的&#xff0c;导入文件/文件夹&#xff0c;在自定义输出路径 点击这…

62_基于深度学习的海洋垃圾检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)

目录 项目介绍&#x1f3af; 功能展示&#x1f31f; 一、环境安装&#x1f386; 环境配置说明&#x1f4d8; 安装指南说明&#x1f3a5; 环境安装教学视频 &#x1f31f; 二、数据集介绍&#x1f31f; 三、系统环境&#xff08;框架/依赖库&#xff09;说明&#x1f9f1; 系统环…

深入浅出 全面剖析消息队列(Kafka,RabbitMQ,RocketMQ 等)

消息队列 一、概念 消息队列&#xff08;MQ&#xff09;&#xff1a;一种异步通信机制&#xff0c;通过“消息”的形式让不同系统或模块解耦核心思想&#xff1a;发送方&#xff08;生产者Producer&#xff09;只负责发送消息&#xff0c;接收方&#xff08;消费者Consumer&…

Flux Images Generation API 对接说明

本文将介绍一种 Flux Images Generation API 对接说明&#xff0c;它是可以通过输入自定义参数来生成Flux官方的图片。 接下来介绍下 Flux Images Generation API 的对接说明。 申请流程 要使用 API&#xff0c;需要先到 Flux Images Generation API 对应页面申请对应的服务…

CSS布局 - 网格布局 -- 笔记3

目录网格布局基础网格网格剖析CSS 提供了一些控制网页布局的几个重要工具&#xff0c;这里介绍网格布局。 网格布局 CSS 网格可以定义由行和列组成的二维布局&#xff0c;然后将元素放置到网格中。有些元素可能只占据网格的一个单元&#xff0c;另一些元素则可能占据多行或多…

合约开发完后部署测试

一 编译npx hardhat compile二 测试npx hardhat test三部署注意部署的时候2.0和3版本有所区别&#xff0c;3.0如下# 部署到本地网络&#xff08;如已运行 npx hardhat node&#xff09; npx hardhat ignition deploy ./ignition/modules/MyModule.ts --network localhost# 部署…

产品无法正确解析复杂表格和流程图,有什么替代方案或优化方法?

在真实办公场景中&#xff0c;文档内的元素往往不具备标准化和格式化特征&#xff0c;像双栏表格、无线图表等复杂元素十分常见。而传统 OCR 工具在面对这类复杂文档时&#xff0c;存在明显的能力短板&#xff1a;它无法准确判断复杂表格的结构逻辑以及内容的顺序逻辑&#xff…

《Html模板》HTML数学题目生成器 - 让数学练习更简单(附源码)

目录专栏导读&#x1f9ee; HTML数学题目生成器 - 让数学练习更简单项目简介✨ 核心功能&#x1f3af; 灵活的运算类型选择&#x1f4ca; 智能题目生成算法⚙️ 个性化参数设置&#x1f5a8;️ 专业打印优化&#x1f3a8; 用户体验设计现代化界面交互体验&#x1f6e0;️ 技术实…

Go语言设计模式(七)组合模式

组合模式是指将一组相似对象当做一个单一对象的设计模式.1.组成角色:1.1组件:组合中的对象声明接口,主要用于访问和管理其子组件.1.2叶子节点:定义组合中原始对象行为的类.叶子节点表示组合中的叶对象.1.3组合:又称为容器,存储子组件并在组件接口中实现与子组件有关的类.1.4客户…

AI 3D 生成工具知识库:当前产品格局与测评总结

聚焦于 AI 3D 生成领域的领军产品、功能比较及实测性能。内容分为产品格局、通用功能、测评系统与基准测试&#xff0c;以及单视图生成实测结果。所有信息基于脚本分析&#xff0c;并交叉验证了产品名称、团队背景&#xff08;如 VAST AI 的 TripoSR/Meshy 的 Meshy-1、影眸科技…