R机器学习:朴素贝叶斯算法的理解与实操

朴素贝叶斯的R实现 朴素贝叶斯分类器采用了“属性条件独立性假设”:对已知类别,假设属性独立。也就是说每个属性独立的对分类结果发生影响。 根据贝叶斯公式有: 又由于各个属性相互独立,所以有: 这样朴素贝叶斯的后验概率就可以写成: 由于对于所有的类别来说P(x)是相同的因此贝叶斯的判定准则是: 这是朴素贝叶斯分类器的表达式 令Dc表示训练集D中c类样本组成的集合,若有充足的独立同分布样本,则可容易地估计出类先验概... 阅读详情

最近又看了很多贝叶斯算法的一些文章,好多的文章对这个算法解释起来会放一大堆公式,对代数不好的人来说真的很头疼。本文尝试着用大白话写写这个算法,再做个例子,帮助大家理解和运用。

Naive Bayes is a probabilistic machine learning algorithm based on the Bayes Theorem, used in a wide variety of classification tasks.

贝叶斯算法是分类问题的重要解决方法,简单但是很强大,在文本分类、垃圾邮件识别等高维数据(特征超多的数据集)的机器学习领域有重要应用。基本逻辑就是很多的时候我们很容易知道在不同的因变量的水平上自变量的分布的怎样的,我们要解决的问题是知道了特征的情况然后去预测因变量,其实就是:from P(X|Y), known from the training dataset, to find P(Y|X).朴素贝叶斯算法架起了从from P(X|Y)to find P(Y|X)的桥梁。

要很好的理解朴素贝叶斯的整个过程首先要弄清楚两个东西,一个是条件概率、一个是贝叶斯理论。

条件概率和贝叶斯定理

我们什么理论都不要想,先做一个例子:100个人的数据如下表,按照身份可以分为教师、学生。按照性别又可以分为男性女性。现在我们尝试得到男性中教师的概率是多少(把性别当做特征,把身份当做结局,这个问题便是知道特征求结局的概率的一个问题)。

这个男性中教师的概率就是条件概率,我们不是单纯的求教师的概率而是先给了个条件(这个人首先得是男性)。这个时候计算概率的分母会变化。

when you say the conditional probability of A given B, it denotes the probability of A occurring given that B has already occurred.

这个问题你会怎么做?可以直接找到男教师有多少(看表应该是12),然后用这个数字除以男性(看表应该是60人),可以得到12/60=0.12。就得到男性中教师的概率是0.2。

上面的12比上100就是0.12为同时是男性又是教师的概率。60比上100就是0.6为数据中男性的概率,我们用0.12/0.6得到了0.2的结果其实我们就是在不自觉地运行下面的公式:

公式中,teacher和male可以互换位置。于是就有

图1

上面这两个公式就是两独立事件计算条件概率时天然满足的:

图2

我们将图1中的公式2带入公式1就得到贝叶斯定理了:

这个贝叶斯定理最最重要的作用就是打通了从P(X|Y), known from the training dataset, to find P(Y|X)的路径

贝叶斯与朴素贝叶斯

上面的例子我们知道了贝叶斯定理的公式,这个公式和实际问题联系到一起还需要拓展一下

我们把公式中的AB换成XY,于是就有下图:

我们把x当做自变量,y当做因变量。通过贝叶斯定理我们就把P(X|Y)到P(Y|X)的路径打通了。这个话要反复读。

现实中,我们收集来一波训练数据,我们是很容易知道在y的不同水平x是如何分布的(就像上面的例子中我们很容易知道教师中男性的比例是如何的,如果把性别当做自变量、身份当做因变量的话,很容易知道P(X|Y)),通过贝叶斯公式我们可以求得x分布确定的情况下,y取不同水平的概率(就像上面例子中我们知道了自变量性别是男性可以求的其为教师的概率为0.2,得到P(Y|X)).

也就是说贝叶斯定理成功的让我们可以从自变量的分布预测因变量。

The Bayes Rule is a way of going from P(X|Y), known from the training dataset, to find P(Y|X).

现实中我们会有很多的x,我们会想着直接将多个贝叶斯公式相乘来处理,这么做就暗含了一个朴素的假设就是所有的x都是独立的,这么一种朴素假设加持的贝叶斯就是朴素贝叶斯:

这个名字只是因为它有这么一个朴素的假设:

The name naive is used because it assumes the features that go into the model is independent of each other. That is changing the value of one feature, does not directly influence or change the value of any of the other features used in the algorithm.

就这么一个简单的假设,可以让这个算法可以处理很多个x的高维数据。很强大。

成为正规算法之后,就得有一些高大上的名词:

我们把特征理解为证据,因变量理解为结局,那么P(Y|X)就叫做后验概率posterior probability,意思是一组证据情况下结局是什么的概率,也是我们要预测的感兴趣的东西。

P(X|Y)叫做证据的似然概率,意思是某个结局存在的情况下相应证据出现的概率。

P(Y)叫做先验,意思是某个结局的相应概率。

P(X)叫做证据概率,意思是某些特征(证据),特征组合的相应概率。

总结一下:朴素贝叶斯就是后验概率等于证据似然概率乘以先验概率除以证据概率。

实例

我们现在想通过3个证据组合x1,x2,x3来预测水果种类,数据大概格式如下:

对这么个数据我们需要换个格式才能计算朴素贝叶斯算法对应的各种概率:

统共有3个、首先是先验概率:

Compute the ‘Prior’ probabilities for each of the class of fruits

首先就是计算先验,就是每个种类水果的概率,可以看到在1000个水果中有800个香蕉,300个橘子,200个其他,那么我们可以得到各种水果的先验分别为0.5,0.3,0.2.

P(Y=Banana) = 500 / 1000 = 0.50 P(Y=Orange) = 300 / 1000 = 0.30 P(Y=Other) = 200 / 1000 = 0.20

再是证据概率

Compute the probability of evidence that goes in the denominator.

第二步就是计算证据的概率,也就是所有特征出现的概率,我们的特征有3个,x1到x3的证据概率分别为0.5,0.65,0.8。

P(x1=Long) = 500 / 1000 = 0.50 P(x2=Sweet) = 650 / 1000 = 0.65 P(x3=Yellow) = 800 / 1000 = 0.80

Compute the probability of likelihood of evidences that goes in the numerator.

第三步是计算证据似然的概率,比如说香蕉long这个特征为真的概率就为P(Long | Banana) = 400/500 = 0.8。

Substitute all the 3 equations into the Naive Bayes formula, to get the probability that it is a banana.

最后一步就是将前三步的结果带入朴素贝叶斯公式就可以得到在某组特征下水果分别为香蕉,为橘子,为其他水果的概率。例如在特征long、sweet、yellow为真的情况下,水果为香蕉的概率为0.252,为橘子的概率为0,为其他水果的概率为0.01875.

那么这个时候算法就会告诉我们这个水果就是香蕉。

上面就是算法的整个过程,细心的同学估计会有疑问橘子的概率为0,只是因为所有训练数据中结局为橘子的个案long这个特征没有出现真(某一个证据似然概率为0),朴素贝叶斯算法涉及到相乘的话造成了结果为0。在这个只有3个特征的数据集中看起来这个结果无可厚非,长橘子本身好像现实中也不存在。但是想象一下我们面对一个陌生的数据集,特征很多,所有特征其实都有影响的,结局的某个类别中某个特征为0导致算法结果排除了该类别,这样肯定存在不合适,为0的特征影响实在太大了,相当于某一个特征有了一票否决。

所以有必要进行校正。校正的方法就叫做Laplace Correction,就是给每个为零的格子加一个数(通常为1),这样保证不出现概率为0的情况。

实操

只要理解了背后的逻辑,实操就很简单了,我们以iris数据集作为例子。原始数据长这样:

共有5个变量,4个是特征,最后一个是结局(花的种类,有3类)。对于上面的数据集我们按照7:3划分好训练集和测试集。

iris_split <- initial_split(iris, prop = 0.70)
iris_train <- training(iris_split)
iris_test  <-  testing(iris_split)

然后我们用klaR包进行贝叶斯算法训练,同时用训练好的模型预测测试集数据,代码如下:

nb_mod <- NaiveBayes(Species ~ ., data=training)
pred <- predict(nb_mod, test)

得到的pred对象就是预测的结果,对每一个个案预测模型都会输出的成为各个类别应变量的后验概率:

后验概率最大的类别就是最终的模型输出类别。

再得到混淆矩阵,代码如下:

tab <- table(pred$class, iris_test$Species)
caret::confusionMatrix(tab)  

可以看到我们的模型在测试集中表现还是很好的,只有2个个案分类错了。

【机器学习与R语言】1-机器学习简介 68-95-99.7规则(经验法则):正态分布中68%的值落在均值左右1个标准差的范围内,而95%和99.7%的值各自落在均值左右2个和3个标准差的范围内。数值落在均值的3个标准差以外是极端罕见事件。二元指示变量(哑变量):如汽车有9种颜色分为2组,一组保守色,一组非保守色,指示变量可分别设为1和0。最后编辑于:2024-09-09 20:06:12。著作权归作者所有,转载或内容合作请联系作者。 阅读详情

相关推荐

机械学习与R语言--Naive Bayes 朴素贝叶斯在R语言中的实现

为什么天气预报说70%概率下雨?为什么垃圾短信垃圾邮件被自动归类?这一切的基础算法便是朴素贝叶斯理论(算法有很多,这仅是其中之一)。 1.由贝叶斯理论到朴素贝叶斯(naive bayes) 理论的基础我就不讲了,我讲一下两个理论的区别。原本贝叶斯理论用来处理上述事件是很好的,但是由于贝叶斯理论在计算条件概率时,即在B发生的情况下A发生的概率,并不能简单的等同于A的概率而是. 除非A B互为独...

a blog out of timeline 4312

R语言实现 朴素贝叶斯分类

用R进行朴素贝叶斯分类Example: Filtering spam SMS messages ----Step 2: Exploring and preparing the data ----read the sms data into the sms data frameexamine the structure of the sms dataconvert spam/ham to facto...

Plum 6580

机器学习笔记26——朴素贝叶斯法

朴素贝叶斯前言1、概述2、原理3、算法4、朴素贝叶斯种类4.1高斯朴素贝叶斯(GaussianNB)4.2 多项式朴素贝叶斯(MultinomialNB)小结 前言 \quad \quad朴素贝叶斯算法是解决分类问题的监督学习算法,,如客户是否流失、是否值得投资、信用等级评定等多分类问题。该算法的优点在于简单易懂、学习效率高、在某些领域的分类问题中能够与决策树、神经网络相媲美。但由于该算法以自变量之间的独立(条件特征独立)性和连续变量的正态性假设为前提,就会导致算法精度在某种程度上受影响。 1、概述 \q

weixin_45666566的博客 950

R语言——朴素贝叶斯文本分类

朴素贝叶斯方法是最常见的使用贝叶斯思想进行分类的方法,它是目前所知文本分类算法中最有效的一类,常常应用于文本分类。

daitulin的博客 1300

R语言机器学习

机器学习起源于统计学、数据库科学和计算机科学的交互。机器学习涉及把数据抽象为结构化表示,并把这个结构化表示进行一般化,然后推广到行动中。具体而言,数据(样品,特征),概括为模型,用于预测或描述。用R包进行机器学习。机器学习提供了应用计算机并把数据转换成可行动的知识的工具集合。我们一直存在于大数据之中,只是现在我们更容易的获取数据了。如果我们理解了数据中存在的有规律的模式,我们就能做出有潜力的预测。

qq_52148382的博客 1166

R的贝叶斯计算

R的贝叶斯计算,好书一本,不要错过。。。。。。。。。

用于贝叶斯统计的R包

http://cran.r-project.org/web/views/Bayesian.html   ==========一般模型================== arm包: 包括使用lm,glm,mer,polr等对象进行贝叶斯推断的R函数 BACCO: 随机函数的贝叶斯分析. 包含3个子包: emulator, calibrator, and approximator, 进行贝叶

yugao1986的专栏 6741

实战教程:用DETR+超分辨率搞定红外小目标检测(附完整代码)

本文提供了一套完整的红外小目标检测实战方案,通过融合EDSR超分辨率技术与改进型DETR深度学习算法,有效解决了红外图像中小目标检测的难题。文章详细介绍了从环境搭建、数据预处理、模型定制(如引入EMA注意力与S2特征层)到训练调优的全流程,并附有完整代码,旨在帮助开发者将前沿算法高效落地于安防、自动驾驶等实际场景。

weixin_29057163的博客 532

利用R语言进行人工智能和机器学习项目实战

1.背景介绍 人工智能(Artificial Intelligence, AI)和机器学习(Machine Learning, ML)是当今最热门的技术领域之一,它们在各个行业中发挥着越来越重要的作用。随着数据量的增加,数据处理和分析的需求也越来越高,这就需要一种强大的数据分析和处理工具。R语言是一个非常流行的数据分析和处理工具,它具有强大的计算能力和丰富的图形化功能,可以帮助我们更好地理解和挖...

AI天才研究院 1816

独立游戏开发者的新武器:实测腾讯混元3D自动绑骨,搭配Mixamo让角色动画制作效率翻倍

本文实测腾讯混元3D自动绑骨功能与Mixamo动画库的协同使用,显著提升独立游戏开发者的角色动画制作效率。通过解决卡通角色绑骨偏差、优化骨骼权重及动画状态机配置,使原本两周的流程缩短至三天,并分享Unity中的性能优化与版权合规要点。

weixin_42662605的博客 500

吉比特-笔试

1. 题一:打雷后下雨的概率是80%,而打闪电后下雨的概率是70%,那么即打雷又打闪电后下雨的概率是多少?   答:打雷后下雨和打闪电后下雨都是独立事件,P=1-又打雷又闪电但没下雨的概率= 1 - 0.2 *0.3 = 94%        题二:打雷后下雨的概率是80%,但是没打闪电后下雨的概率是20%,那么打雷了但没打闪电后下雨的概率是多少?答:P=0.8 *0.2 / ( 0.8 *0

naturism的专栏 2497

机器学习算法介绍

前言 谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和机器人受到了许多媒体关注,但是这家公司真正的未来在于机器学习,一种让计算机更聪明、更个性化的技术。 也许我们生活在人类历史上最关键的时期:从使用大型计算机,到个人电脑,再到现在的云计算。关键的不是过去发生了什么,而是将来会有什么发生。 工具和技术的民主化,让像我这样的人对这个时期兴奋不已。计算的蓬勃发展也是一样。如今,作为一名数据科学家,...

wuxiaosi808的博客 5605

深度学习中 Internal Covariate Shift 问题以及 Batch Normalization 的作用

深度学习中 Internal Covariate Shift 问题以及 Batch Normalization 的作用前言一、Batch Normalization是什么?1.1 Internal Covariate Shift1.2 Internal Covariate Shift 带来的影响1.3 如何减缓 Internal Covariate Shift 问题带来的影响白化(Whitening)白化存在的问题二、Batch Normalization2.1 传统 Normalization2.2 改进

一扣解千愁的博客 4297

机器学习示例总结(线性回归、逻辑回归、KNN算法、朴素贝叶斯、SVM算法、决策树)

以下所有内容均为在华为云学习的总结 AI技术领域课程--机器学习_在线课程_华为云开发者学堂_云计算培训-华为云 (huaweicloud.com) 线性回归第三方库实现 # 导入sklearn下的LinearRegression 方法 from sklearn.linear_model import LinearRegression import numpy as np model = LinearRegression() # 构造用于训练的数据集 x_train = np.array([[..

qq_57099024的博客 3787

QGIS插件实战:用百度地图AOI数据做个城市公园分析,从下载到出图全记录

本文详细介绍了如何利用QGIS的百度地图AOI插件进行城市公园分析,从插件安装、数据获取到空间分析与可视化全流程。通过实战案例演示了公园面积统计、服务范围缓冲区分析及专题地图制作,帮助用户高效完成城市绿地评估工作。

weixin_30790841的博客 556

MOS管的体二极管在LLC中的作用

MOSFET是一个三端器件(G、D、S),在N沟道MOSFET的结构中,源极和漏极之间的N型材料中自然形成了一个寄生的PN结,这个PN结就是体二极管(Body Diode),它是不可避免的器件结构。📌 对于N沟MOSFET:体二极管是从漏极 D 到源极 S 的正向导通二极管,方向为 D → S。MOS管的体二极管在LLC中并不是主功率通道,但却是实现软开关(ZVS)和能量过渡的关键“临时路径”。用得好,它是你的朋友;忽略它,电路就可能烧毁。

weixin_43199439的博客 702

R 机器学习第二版(一)

机器学习的核心关注点是将信息转化为可操作的智能的算法。正是这一点使得机器学习非常适合当今大数据的时代。如果没有机器学习,几乎不可能跟上庞大的信息流。鉴于 R 语言——一种跨平台、零成本的统计编程环境——的日益流行,现在是开始使用机器学习的最佳时机。R 提供了一套功能强大且易于学习的工具,可以帮助你挖掘数据中的洞察。本书通过结合实际案例研究与必需的理论,帮助你理解事物在幕后是如何运作的,提供了所有你需要的知识,来开始将机器学习应用到你自己的项目中。第一章,机器学习简介。

龙哥盟 1223

电子硬件仿真:设计一个频率范围为10k—50k的带通滤波器

带通滤波器是一种常用的滤波器类型,具有选择特定频率范围内信号的能力,并在该范围内提供一定的增益。它允许通过一定范围内的频率信号,并在该范围内提供一定的增益,同时在该范围之外的频率上提供较高的衰减。这意味着在通带内(10kHz至50kHz),滤波器的增益应为10dB,而在每个十倍频的频率点上,滤波器的增益应降低40dB。设计滤波器:使用滤波器设计工具(如MATLAB、Python的scipy库、Tina软件等),根据选定的滤波器类型(例如巴特沃斯滤波器),中心频率和通带宽度,设计一个4阶带通滤波器。

走向CTO的路上... 581

先马后看!详解线性回归、朴素贝叶斯、随机森林在R和Python中的实现应用!(附代码)...

来源|analyticsvidhya编译| 火火酱,责编| Carol出品|AI科技大本营(ID:rgznai100)谷歌的自动驾驶汽车和机器人得到了媒体的广泛关注,但是公司真正的...

AI科技大本营 3607

【DRAM存储器七】SDRAM介绍-芯片引脚与功能框图详解

详解初代SDRAM芯片引脚定义与芯片功能框图中的各个模块

highman110的博客 2209

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ml.js入门指南:如何在浏览器中快速构建机器学习应用

ml.js是一个强大的JavaScript机器学习工具库,专为浏览器环境设计,让开发者无需深厚的机器学习背景也能轻松实现各种AI功能。本文将带你快速掌握ml.js的核心能力、安装方法和实战应用,开启浏览器端机器学习的新篇章。 ## 为什么选择ml.js?解锁浏览器端AI潜能 🚀 在前端开发中集成机器学习功能通常面临两大挑战:模型体积庞大和计算资源限制。ml.js通过以下特性完美解决这些问题:

gitblog_00843的博客 1092

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

机器学习实验-Experiment 4:Naive Bayes朴素贝叶斯

综述 主要是简略记录一下经过,当时做实验的时候,实验报告其实写的要详细很多:但是凡事要自己亲自实验才有发言权,所以这些部分写的都较为简略。 朴素贝叶斯在机器学习课程中还是很重要的。思想也很美妙。 看似简单、顺畅,但是一定要细心琢磨,理解 本文还简单介绍了我在实验中使用的混淆矩阵。一种更加直观的评价感受方案。回忆我在实验3中介绍的ROC曲线和AUC评价,希望可以打开新的思路。 使用朴素贝叶斯模型...

FrankDura的博客 1149

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: R数据分析:网状meta分析的理解与实操
下一篇: R机器学习:决策树算法的理解与实操
公众号Codewar原创作者
博客等级 码龄7年 2025粉丝 185原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公众号Codewar原创作者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值