首页 > 编程语言 >【机器学习】朴素贝叶斯算法

【机器学习】朴素贝叶斯算法

时间:2024-11-17 16:43:04浏览次数:3  
标签:ci 概率 情书 贝叶斯 算法 朴素

目录

什么是朴素贝叶斯算法?

算法引入 

贝叶斯定理

朴素贝叶斯分类器

工作原理

优缺点

应用场景

实现示例

基本步骤:


在机器学习的世界里,朴素贝叶斯算法以其简单性和高效性而著称。尽管它的名字听起来有点复杂,但实际上它是一种基于概率论的简单分类算法。今天,我们就来深入了解一下朴素贝叶斯算法的工作原理、优缺点以及如何应用它。 

什么是朴素贝叶斯算法?

朴素贝叶斯算法(Naive Bayes Algorithm)是一种基于贝叶斯定理的简单概率分类器。它假设所有特征之间相互独立,这个假设虽然在现实中往往不成立,但在很多情况下,朴素贝叶斯分类器仍然能够表现得非常好。

朴素贝叶斯算法是基于贝叶斯定理的分类算法。贝叶斯定理是一种描述随机事件A和B的条件概率的公式。在朴素贝叶斯中,我们假设特征之间相互独立,即一个特征的出现不影响其他特征的出现。这个假设被称为“朴素”的假设,也是算法名称的由来。


算法引入 

有一天,老师布置了一个非常困难的作业,于是小明向班级内其他30人发送群发消息,“今天的作业怎么做,能不能借我抄一抄,谢谢!”。然后班级内30人分别给出了回复,其内容分为答案与情书。其中回复是作业答案的为16份。同时小明也收到了意外且深情的告白,其中情书数量是13份。但是唯独小明的白月光发来的信息没有看懂,于是小明就想能不能按照关键词给白月光的回复进行分类呢,看看到底是作业答案还是情书。

于是小明从其他的29份中选取了一些关键词,从作业和情书中选取了4个关键词,分别是喜欢、明天、红豆、辛苦。然后从这16份答案与13份情书中分别统计出现的次数,并且计算概率。

得到概率之后,我们就可以进行计算:

回复是作业的概率=P(作业)* P(红豆|作业)*P(喜欢|作业)=0.0183

回复是作业的概率=P(情书)* P(红豆|情书)*P(喜欢|情书)=0.0506

小明发现回复是情书的概率大于回复是作业的概率,0.0506>0.0183,所以得出结论,白月光给小明发的内容是情书。


拉普拉斯平滑: 

我们再接着看这样的一个例子:“好喜欢你,好喜欢你”、“好喜欢你,辛苦你了”,我们选取“喜欢”与“辛苦”为关键词,我们根据上面的的例子,我们进行计算概率:

P(作业)* P(喜欢|作业)^3*P(辛苦|作业)=0.000177

P(情书)* P(喜欢|情书)^3*P(辛苦|情书)=0.000000

但是我们发现第二句话是很明显的告白,但是因为在情书中“辛苦”关键字没有出现,所以会导致P(辛苦|情书) =0,通过这样的算法,这很明显得到了错误的预测,那么我们如何去解决这个问题呢,我们可以利用拉普拉斯平滑技巧,也就是在每一个关键词上人为增加一个出现的次数(如图:黄色部分)。这样会保证每一项都不为0,按照通过拉普拉斯平滑技巧处理过的次数,进行重新计算关键词的概率,再此概率基础上再进行计算会得到正确的结果了。


贝叶斯定理

贝叶斯定理描述了给定事件B发生的条件下,事件A发生的概率,公式如下:

P(A|B)=\frac{P(B)*P(B|A)}{P(A)}\frac{P(B)*P(B|A)}{P(A)}

其中:

  • P(A∣B) 是在事件B发生的条件下事件A发生的概率。
  • P(B∣A) 是在事件A发生的条件下事件B发生的概率。
  • P(A) 是事件A发生的概率。
  • P(B) 是事件B发生的概率。

朴素贝叶斯分类器

在分类问题中,朴素贝叶斯分类器的目标是找出给定输入特征下,哪个类别的概率最高。假设我们有特征集合 X={x1​,x2​,...,xn​} 和类别集合 C={c1​,c2​,...,ck​},朴素贝叶斯分类器会计算:

P(ci​∣X)=P(X)P(X∣ci​)P(ci​)​

其中:

  • P(ci​∣X) 是给定特征集合X的条件下,类别 ci​ 发生的概率。
  • P(X∣ci​) 是给定类别 ci​ 的条件下,特征集合X发生的概率。
  • P(ci​) 是类别 ci​ 的先验概率。
  • P(X) 是特征集合X的先验概率,通常可以忽略,因为它对所有类别都是相同的。

由于特征之间是条件独立的,我们可以将P(X∣ci​) 展开为:

P(X∣ci​)=P(x1​∣ci​)P(x2​∣ci​)...P(xn​∣ci​)


工作原理

朴素贝叶斯算法的核心是计算给定输入特征下,每个类别的概率,然后选择概率最高的类别作为预测结果。具体步骤如下:

  1. 数据预处理:将数据转换为算法可以处理的格式,如文本数据需要进行分词、去除停用词等。

  2. 计算先验概率:先验概率是指在没有观察到任何特征的情况下,每个类别的概率。

  3. 计算条件概率:对于每个类别,计算在该类别下观察到每个特征的概率。

  4. 应用贝叶斯定理:结合先验概率和条件概率,计算后验概率,即在观察到特征的情况下,每个类别的概率。

  5. 分类决策:选择后验概率最高的类别作为预测结果。


优缺点

优点

  • 简单高效:算法实现简单,计算效率高,适合处理大量数据。
  • 对小规模数据表现良好:在数据量不大的情况下,朴素贝叶斯往往能取得不错的效果。
  • 需要的样本量较少:与其他机器学习算法相比,朴素贝叶斯需要的训练样本量较少。

缺点

  • 特征独立性假设:特征独立性假设在实际应用中往往不成立,这可能会影响分类的准确性。
  • 对输入数据的表达形式敏感:算法对输入数据的表达形式非常敏感,如文本数据的分词方式等。

应用场景

  1. 文本分类:通过计算文档中每个词属于某个类别的概率,来确定文档的分类。
  2. 垃圾邮件检测:通过分析邮件内容,判断邮件是否为垃圾邮件。
  3. 情感分析:通过分析用户评论,判断用户的情感倾向。


实现示例

基本步骤:

  1. 数据准备:收集数据并将其分为训练集和测试集。
  2. 特征提取:从数据中提取特征。
  3. 计算先验概率:计算每个类别的概率。
  4. 计算条件概率:计算每个特征在每个类别下的条件概率。
  5. 应用贝叶斯定理:使用贝叶斯定理计算后验概率。
  6. 分类决策:选择具有最高后验概率的类别作为预测类别。

以下是使用Python的scikit-learn库实现朴素贝叶斯分类器的简单示例:

from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

# 创建并训练模型
model = GaussianNB()
model.fit(X_train, y_train)

# 进行预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

在这个示例中,我们使用了sklearn库中的GaussianNB类,它假设特征遵循高斯分布。load_iris函数用于加载鸢尾花数据集,这是一个常用的分类数据集。然后,我们将数据集分为训练集和测试集,并使用GaussianNB模型进行训练和预测。

请注意,这个例子是一个简化的版本,实际应用中可能需要进行更多的数据预处理步骤,比如特征缩放、缺失值处理等。此外,根据数据的特性,可能需要选择不同的朴素贝叶斯模型,如多项式朴素贝叶斯或伯努利朴素贝叶斯。


朴素贝叶斯算法虽然简单,但在很多实际应用中都能取得不错的效果。理解其工作原理和适用场景,可以帮助我们在适当的问题上选择合适的工具。希望这篇文章能帮助大家更好地理解和应用朴素贝叶斯算法。

:算法引入及图片来源于[5分钟学算法] #02 朴素贝叶斯 写作业还得看小明_哔哩哔哩_bilibili

标签:ci,概率,情书,贝叶斯,算法,朴素
From: https://blog.csdn.net/m0_73633807/article/details/143291975

相关文章

  • R语言贝叶斯分析:INLA 、MCMC混合模型、生存分析肿瘤临床试验、间歇泉喷发时间数据应用
    全文链接:https://tecdat.cn/?p=38273原文出处:拓端数据部落公众号多模态数据在统计学中并不罕见,常出现在观测数据来自两个或多个潜在群体或总体的情况。混合模型常用于分析这类数据,它利用不同的组件来对数据中的不同群体或总体进行建模。本质上,混合模型是几个代表不同潜在总体的......
  • 深入理解 JVM 垃圾回收算法
    前言上一篇我们对JVM的垃圾回收进行了探讨,知道了什么样的对象是垃圾对象,以及JVM虚拟机是如何判断一个对象垃圾对象的,本篇我们来探讨一下JVM垃圾回收算法。JVM系列文章传送门初识JVM(Java虚拟机)深入理解JVM(Java虚拟机)一文搞懂JVM垃圾回收(JVMGC)JVM有哪些垃......
  • BFS 算法专题(三):BFS 解决边权为 1 的最短路问题
    目录1.迷宫中离入口最近的出口 1.1算法原理1.2算法代码2.最小基因变化★★★2.1算法原理2.2算法代码3.单词接龙3.1算法原理3.2算法代码4.为高尔夫比赛砍树(hard)4.1算法原理 4.2算法代码1.迷宫中离入口最近的出口 .-力扣(LeetCode)1.1算......
  • 2024华为OD算法真题目录
    文章目录一、什么是华为OD,什么是华为OD机试?二、华为OD面试流程?三、华为OD机试通过率高吗?四、华为OD薪资待遇?五、大家比较关注问题的FAQ......
  • 控制算法之二:LQR控制
    1.前言线性二次调节(LinearQuadraticRegulator,LQR)是一种经典的现代控制理论方法,用于构造线性系统的最优控制器,它的目标是在控制系统的动态过程中,尽可能减少误差和能耗。LQR的目标是通过最优控制输入,使系统状态最小化某一代价函数(即性能指标),以实现最佳控制。2.应用场景LQR......
  • 控制算法之一:PID控制
    PID控制广泛应用于温度控制、速度控制、位置控制等领域,其优势在于简单、鲁棒且易于实现。PID控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制......
  • GESP4级考试语法知识(贪心算法(六))
    寻找平面上的极大点代码#include<iostream>#include<algorithm>usingnamespacestd;structnode{ intx,y;}a[101];boolvis[101];boolcmp(nodeA,nodeB){ if(A.x!=B.x)returnA.x<B.x; returnA.y<B.y;}intmain(){ intn; cin>>n; for(i......
  • GESP4级考试语法知识(贪心算法(五))
    装箱问题1代码:#include<iostream>usingnamespacestd;intmain(){inta,b,c,d,e,f;while(true) {intN=0;//计算需要的包裹数cin>>a>>b>>c>>d>>e>>f;if(a==0&&b==0&&......
  • AI在智能生产中的应用与算法研究
    摘要在工业4.0背景下,人工智能(AI)技术正在加速生产过程的智能化转型,推动制造业向数字化、自动化和智能化方向发展。本文延续庹忠曜所提出的《工业4.0时代下的人工智能新发展》的思想,从AI在智能生产中的主要应用场景入手,包括生产优化、质量控制、设备维护、智能供应链管理等,探讨......
  • AI在智能物流中的应用与算法研究
    摘要        随着人工智能(AI)技术的迅猛发展,智能物流系统在提升效率、降低成本和优化供应链管理方面展现出巨大的潜力。本文延续庹忠曜所提出的《工业4.0时代下的人工智能新发展》的思想,综述了AI在智能物流中的应用,重点介绍了需求预测、路径优化、仓储管理、分拣与配送......