06_机器学习算法_朴素贝叶斯

在这里插入图片描述

1. 朴素贝叶斯的介绍与应用

1.1 朴素贝叶斯的介绍

朴素贝叶斯算法(Naive Bayes, NB)是应用最为广泛的分类算法之一。它是基于贝叶斯定义和特征条件独立假设的分类方法。由于朴素贝叶斯法基于贝叶斯公式计算得到,有着坚实的数学基础,以及稳定的分类效率。NB模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。当年的垃圾邮件分类都是基于朴素贝叶斯分类器识别的。

什么是条件概率,我们从一个摸球的例子来理解。我们有两个桶:灰色桶和绿色桶,一共有7个小球,4个蓝色和3个紫色,分布如下图:

在这里插入图片描述

从这7个球中,随机选择1个球是紫色的概率p是多少?选择过程如下:

  • 先选择桶
  • 再从选择的桶中选择一个球

p ( 球 = 紫色 ) = p ( 选择桶 ) ∗ p ( 从灰桶中选择紫色 ) + p ( 选择绿桶 ) ∗ p ( 从绿桶中选择紫色 ) = 1 2 ∗ 2 4 + 1 2 ∗ 1 3 p(球 = 紫色)=p(选择桶) * p(从灰桶中选择紫色)+p(选择绿桶)*p(从绿桶中选择紫色)=\frac{1}{2}*\frac{2}{4}+\frac{1}{2}*\frac{1}{3} p(=紫色)=p(选择桶)p(从灰桶中选择紫色)+p(选择绿桶)p(从绿桶中选择紫色)=2142+2131

上述我们选择小球的过程就是条件概率的过程,在选择桶的颜色的情况下是紫色的概率,另一种计算条件概率的方法是贝叶斯准则。

贝叶斯公式是英国数学家提出的一个数据公式:

p ( A ∣ B ) = p ( A , B ) p ( B ) = p ( B ∣ A ) ∗ p ( A ) ∑ a ∈ ℑ A p ( B ∣ a ) ∗ p ( a ) p(A|B)=\frac{p(A,B)}{p(B)}=\frac{p(B|A)*p(A)}{\sum_{a\in\Im_{A}}p(B|a)*p(a)} p(AB)=p(B)p(A,B)=aAp(Ba)p(a)p(BA)p(A)

p ( A , B ) : p(A,B): p(A,B) 表示事件A和事件B同时发生的概率。

p ( B ) : p(B): p(B) 表示事件B发生的概率,叫做先验概率; p ( A ) : p(A): p(A) 表示事件A发生的概率。

p ( A ∣ B ) : p(A|B): p(AB) 表示当事件B发生的条件下,事件A发生的概率叫做后验概率。

我们用一句话理解贝叶斯:世间很多事都存在某种联系,假设事件A和事件B。人们常常使用已经发生的某个事件去推断我们想要知道的之间的概率。例如,医生在确诊的时候,会根据病人的舌苔、心跳等来判断病人得了什么病。对病人来说,只会关注得了什么并病,医生会通过已经发生的事件来确诊具体的情况。这里就用到了贝叶斯思想,A是已经发生的病人症状,在A发生的条件下是B_i的概率。

1.2 朴素贝叶斯的应用

朴素贝叶斯算法假设所有特征的出现相互独立互不影响,每一特征同等重要,又因为其简单,而且具有很好的可解释性。一般相对于其他精心设计的更复杂的分类算法,朴素贝叶斯分类算法是学习效率和分类效果较好的分类器之一。朴素贝叶斯算法一般应用在文本分类,垃圾邮件的分类,信用评估,钓鱼网站检测等

2. 贝叶斯分类算法实践

2.1 鸢尾花数据集

2.1.1 库函数导入

import warnings
warnings.filterwarnings('ignore')
import numpy as np# 加载鸢尾花数据集
from sklearn import datasets# 导入高斯朴素贝叶斯分类器
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split

2.1.2 数据导入&分析

X, y = datasets.load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

我们需要计算两个概率分别是:条件概率: P ( X ( i ) = x i ∣ Y = c k ) P(X^{(i)}=x^{i}|Y=c_k) P(X(i)=xiY=ck) 和类目 c k c_k ck 的先验概率: P ( Y = c k ) P(Y=c_k) P(Y=ck)

通过分析发现训练数据是数值类型的数据,这里假设每个特征服从高斯分布,因此我们选择高斯朴素贝叶斯来进行分类计算。

2.1.3 模型训练

# 使用高斯朴素贝叶斯进行计算
clf = GaussianNB(var_smoothing=1e-8)
clf.fit(X_train, y_train)
GaussianNB(var_smoothing=1e-08)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
GaussianNB(var_smoothing=1e-08)

2.1.4 模型评估和预测

# 评估
y_pred= clf.predict(X_test)
acc = np.sum(y_test == y_pred) / X_test.shape[0]
print("Test Acc :%.3f" % acc)# 预测
y_proda = clf.predict_proba(X_test[:1])
print(clf.predict(X_test[:1]))
print("预计的概率值:", y_proda)
Test Acc :0.967
[2]
预计的概率值: [[1.63542393e-232 2.18880483e-006 9.99997811e-001]]

2.1.5 原理简析

高斯朴素贝叶斯假设每个特征都服从高斯分布,我们把一个随机变量X服从数学期望为μ,方差为σ2的数据分布称为高斯分布。对于每个特征我们一般使用平均值来估计μ和使用所有特征的方差估计σ2。

P ( X ( i ) = x ( i ) ∣ Y = c k ) = 1 2 π σ y 2 e x p ( − ( x ( i ) − μ c k ) 2 2 σ c k 2 ) P(X^{(i)}=x^{(i)}|Y=c_k)=\frac{1}{\sqrt{2\pi\sigma_{y}^{2}}}exp(-\frac{(x^{(i)}-\mu_{c_k})^{2}}{2\sigma_{c_k}^{2}}) P(X(i)=x(i)Y=ck)=2πσ

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

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

相关文章

【Linux】线程周边001之多线程

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.线程的理解 2.地址…

狙击策略专用术语以及含义,WeTrade3秒讲解

想必各位交易高手对狙击策略不会陌生吧!但你想必不知道狙击策略的开发者为了推广狙击策略,在狙击策略基础的经典技术分析理论引入了自己的术语。今天WeTrade众汇和各位投资者继续了解狙击策略专用术语以及含义。 一.BL 银行级别(BL)是前一日线收盘的级别。时间是格…

外贸业务中的12个“坑”,你踩到了吗?

在竞争激烈的外贸领域,企业在拓展市场的同时,也面临着各种潜在的陷阱和风险。对于外贸公司而言,如何在复杂的交易过程中识破陷阱,防范潜在风险,成为确保企业长远发展的关键一环。 以下是一些外贸企业可能遇到的陷阱&a…

栈和队列的相互实现(C)

目录 1.[用栈实现队列]<https://leetcode.cn/problems/implement-queue-using-stacks/description/>2.全套代码3.[用队列实现栈]<https://leetcode.cn/problems/implement-stack-using-queues/description/>4.全套代码 1.[用栈实现队列]https://leetcode.cn/proble…

【Linux系统编程】第十九弹---进程状态(下)

​​​​​​​ ✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、僵尸进程 2、孤儿进程 3、运行状态 4、阻塞状态 5、挂起状态 6、进程切换 总结 1、僵尸进程 上一弹…

AIGC文生视频:Sora模型报告总结

作为世界模拟器的视频生成模型 我们探索视频数据生成模型的大规模训练。具体来说&#xff0c;我们在可变持续时间、分辨率和宽高比的视频和图像上联合训练文本条件扩散模型。我们利用对视频和图像潜在代码的时空补丁进行操作的变压器架构。我们最大的模型 Sora 能够生成一分钟…

利用宝塔面板搭建nodejs网站(不使用pm2)

利用宝塔面板搭建nodejs网站&#xff08;不使用pm2&#xff09; 1. 准备代码文件2. 将代码上传至云主机3. 云主机配置3.1 绑定域名3.2 利用面板配置node环境3.3 利用面板增加node项目 4. 打开端口 暂时只演示http的。https类似&#xff0c;需要添加证书。 1. 准备代码文件 清单…

淘宝评论api接口的探索与实践

一、淘宝评论api接口简介 淘宝评论api接口是淘宝开放平台提供的一种数据接口&#xff0c;通过该接口&#xff0c;开发者可以获取淘宝商品的评论信息&#xff0c;包括评论内容、评论评分、评论时间等。此接口为开发者提供了丰富的评论数据&#xff0c;便于进行商品评价分析、营…

一竞技LOL:JKL被管泽元一语成谶 创造LPL选手耻辱记录

北京时间5月15日&#xff0c;昨天MSI是迎来了TES和G2的关键对决&#xff0c;一场是关乎LEC和LPL赛区荣誉的对决&#xff0c;两个战队在上一轮都是面对LCK赛区的队伍惜败&#xff0c;本以为双方会打的难分难舍&#xff0c;但是没有想到本场比赛不到两个小时就结束了&#xff0c;…

【Spring】AOP中的核心概念:通知(Advice)和切点(Pointcut)

目录 1、通知(Advice) 1.1、前置通知 1.2、后置通知 1.3、返回通知 1.4、异常通知 1.5、通知的执行顺序 2、切点(Pointcut) 2.1、切点表达式的抽取 2.2、切点标识符 2.2.1、execution 2.2.2、within 2.2.3、annotation 1、通知(Advice) 通知(Advice)&#xff1a;在…

牛客热题:合并二叉树

牛客热题&#xff1a;二叉树与双向链表> &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题…

WAL-G完美支持IvorySQL的备份恢复

WAL-G是一款基于Go语言精心打造的备份恢复工具&#xff0c;以其简洁的操作流程、卓越的性能表现以及安全高效而著称。它主要为PostgreSQL、MySQL/MariaDB以及MS SQL Server等数据库系统提供全量备份与增量备份的恢复解决方案。此外&#xff0c;在其Beta版本中&#xff0c;WAL-G…