数据挖掘算法之分类分析(一)贝叶斯分类器

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/45092519 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类对于分类问题,其实谁都不会陌生,每个人生活中无时不刻的在进行着分类。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/45092519

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类

对于分类问题,其实谁都不会陌生,每个人生活中无时不刻的在进行着分类。例如,走在大马路上看到女孩子,你会下意识的将她分为漂亮和不漂亮(漂亮当然就多看几眼啦)。在比如,在路上遇到一只狗,你会根据这只狗的毛发脏不脏,然后想到这是一只流浪狗还是家养的宠物狗。这些其实都是生活中的分类操作。

而贝叶斯分类是在生活中分类的基础上加以概率数学来规定定义的一种分类方式

其基本概率公式为:


怎么理解这个公式呢,这里假设你没有概率数学的基础,或者说学过概率只是很久没用已经忘得差不多了(比如我。。。重新拿起大二的概率统计课本翻了一遍)

首先解释什么是条件概率:

      表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。

求解这个概率的基本求解公式为:

假设AB两个事件是相互独立的(就是说AB两个事件谁发生都不影响谁,比如,同学A在北京感冒了,我在福建感冒了,两个事件是互不影响的)

事件B发生的前提下 A发生的概率=事件AB同时发生的概率/事件B发生的概率

一般在生活中,P(A|B)发生的概率我们很容易的就可以求得,但是要返回来求P(B|A)怎么办?

这就要用到贝叶斯公式了


根据这个公式我们可以再P(A|B)的基础上对P(B|A)进行计算,贝叶斯公式提供了人们一种可以根据结果来计算某个条件的前提下某个事件发生的概率

以上基础知识交代完毕,下面进入正题

 朴素贝叶斯分类是贝叶斯分类中的一种十分简单的分类算法,看到朴素两个字就知道这种贝叶斯分类肯定很乡村~,用通俗的话来讲就是:你在国外旅游,遇见一个说中文的黄种人,那么你肯定会想,老乡啊!中国人!为啥?因为在国外遇到讲中文的大概都是中国人吧,只有一部分人是华侨或者其他国籍的华人,因为是中国人的概率最高,所以我们会认为他就是中国人,这就是朴素贝叶斯的思想。

朴素贝叶斯的思想严格的定义是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。其中在求解某个待分类项出现的条件下,各个类别出现的概率时,一般是根据该待分类项的特征属性来求的。

怎么理解呢,比如在什么艺校或者空乘的招聘现场,那肯定有n多女孩子,这些女孩子就是待分类项,而女孩子在我们眼中一般只是分为漂亮和不漂亮两种,这两种就是类别,现在用朴素贝叶斯算法来对这n个女孩子进行分类。

女孩集合={x1,x2.....xn}----->此为待分类项

类别集合={漂亮,不漂亮}

首先我们要找出女孩子的一些特征属性,比如脸蛋,身材等(假设就根据这两个特征来判断)

对于女孩的特征属性={脸蛋,身材}

对于其中一个女孩子,求此项出现的条件下各个类别出现的概率,一般是根据该待分类项的特征属性来求的,意思就是说,要根据这个女孩子的脸蛋(好看或者不好看)分别求出 在此脸蛋出现的前提下 是漂亮和不漂亮的概率;根据这个女孩子的身材(高矮胖瘦)分别求出 在此身材的前提下 是漂亮和不漂亮的概率。

但是,就比如说,一个在深山野林总生活了几十年从未见过女人的野人来说,如果他出山碰到一个女人,这个女人是他这辈子见到的第一个女人,那他凭什么来说这个女人是漂亮还是不漂亮的呢?根据脸蛋和身材?但是注意前提:这个野人之前从未见过女人,可能发生的情况是就算这个女人很丑,由于野人没有见过女人,他也会觉得很漂亮很性感,有一种莫名的吸引力

如上所说,生活中许许多多的判断都是建立在有经验的基础之上,正是因为我们周围有很多女同志,而且我们能够通过网络来看到更多的漂亮女孩子,所以我们能够在路上判断一个女孩是否漂亮

而之前我们要计算的  :要根据这个女孩子的脸蛋(好看或者不好看)分别求出 在此脸蛋出现的前提下 是漂亮和不漂亮的概率;根据这个女孩子的身材(高矮胖瘦)分别求出 在此身材的前提下 是漂亮和不漂亮的概率。

我们首先要有“经验”才能计算,所以我们需要一个女孩集合,然后分别对其的脸蛋和身材进行判断,得出这个女孩是否漂亮。这个女孩集合称为训练样本,没有训练样本贝叶斯分类将无法工作,因为它不知道如何判断

那么假设:我们处理完训练样本之后得到以下数据(这个过程为人为处理的,也是贝叶斯分类中唯一一个人为处理的步骤)

P(漂亮|脸蛋好看)=0.9

P(漂亮|脸蛋不好看)=0.1

P(漂亮|身材高)=0.6

P(漂亮|身材矮)=0.4

P(漂亮|身材胖)=0.3

P(漂亮|身材瘦)=0.5

P(不漂亮|脸蛋好看)=0.1

P(不漂亮|脸蛋不好看)=0.9

P(不漂亮|身材高)=0.4

P(不漂亮|身材矮)=0.7

P(不漂亮|身材胖)=0.8

P(不漂亮|身材瘦)=0.3


P(漂亮)=0.6

P(不漂亮)=0.4

我们得到的数据为在各个类别的前提下,各个特征属性出现的概率

这时候,如果给出一个女孩x1,脸蛋好看,身材矮,瘦,贝叶斯分类就可以根据训练样本的数据来判断x1是否漂亮

根据贝叶斯定理:

P(漂亮|女孩x1)=P(女孩x1|漂亮)*P(漂亮)/P(女孩x1)

P(不漂亮|女孩x1)=P(女孩x1|不漂亮)*P(不漂亮)/P(女孩x1)

由于P(女孩x1)对于所有类别(漂亮,不漂亮)是个常数,所以将分子最大化即可,变形如下:

P(女孩x1|漂亮)*P(漂亮)=P(漂亮|女孩x1)=P(漂亮|脸蛋好看)*P(漂亮|身材矮)*P(漂亮|身材瘦)*P(漂亮)=0.9*0.4*0.5*0.6=0.018

P(女孩x1|不漂亮)*P(不漂亮)=P(不漂亮|女孩x1)=P(不漂亮|脸蛋好看)*P(漂亮|身材矮)*P(漂亮|身材瘦)*P(漂亮)=0.1*0.7*0.3*0.4=0.084

由于0.084>0.018

所以贝叶斯分类会将女孩x归入不漂亮的类别中


由于所有的数据都是假设的,所以结果不准确那是肯定的(因为我自己觉得脸蛋好看,身材矮,瘦应该是属于漂亮的。。最后计算出来竟然是相反的)

从这里面可以知道,训练样本和特征属性的划分对于贝叶斯分类是十分重要的!这将决定整个贝叶斯分类器计算结果的准确性


总结一下之前的例子中,贝叶斯分类的处理过程

      朴素贝叶斯分类的正式定义如下:

      1、设为一个待分类项,而每个a为x的一个特征属性。

      2、有类别集合

      3、计算

      4、如果,则

      那么现在的关键就是如何计算第3步中的各个条件概率。

      1、找到一个已知分类的待分类项集合,这个集合叫做训练样本集。

      2、统计得到在各类别下各个特征属性的条件概率估计。即

      3、如果各个特征属性是条件独立的,则根据贝叶斯定理有如下推导:

      

      因为分母对于所有类别为常数,因为我们只要将分子最大化皆可。又因为各特征属性是条件独立的,所以有:

      

      根据上述分析,朴素贝叶斯分类的流程可以由下图表示:

      可以看到,整个朴素贝叶斯分类分为三个阶段:

      第一阶段——准备工作阶段,这个阶段的任务是为朴素贝叶斯分类做必要的准备,主要工作是根据具体情况确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。这一阶段是整个朴素贝叶斯分类中唯一需要人工完成的阶段,其质量对整个过程将有重要影响,分类器的质量很大程度上由特征属性、特征属性划分及训练样本质量决定。

      第二阶段——分类器训练阶段,这个阶段的任务就是生成分类器,主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录。其输入是特征属性和训练样本,输出是分类器。这一阶段是机械性阶段,根据前面讨论的公式可以由程序自动计算完成。

      第三阶段——应用阶段。这个阶段的任务是使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系。这一阶段也是机械性阶段,由程序完成。

训练完毕之后的贝叶斯分类器就可以处理我们交给他的任何数据,并根据训练结果将其分类

以上有些段落摘选自算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)

作者写的比较有才华也比较深奥,建议去看看,本文仅作笔记之用

相关文章
|
3月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
98 3
|
5天前
|
移动开发 算法 计算机视觉
基于分块贝叶斯非局部均值优化(OBNLM)的图像去噪算法matlab仿真
本项目基于分块贝叶斯非局部均值优化(OBNLM)算法实现图像去噪,使用MATLAB2022A进行仿真。通过调整块大小和窗口大小等参数,研究其对去噪效果的影响。OBNLM结合了经典NLM算法与贝叶斯统计理论,利用块匹配和概率模型优化相似块的加权融合,提高去噪效率和保真度。实验展示了不同参数设置下的去噪结果,验证了算法的有效性。
|
11天前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
20天前
|
缓存 算法 搜索推荐
Java中的算法优化与复杂度分析
在Java开发中,理解和优化算法的时间复杂度和空间复杂度是提升程序性能的关键。通过合理选择数据结构、避免重复计算、应用分治法等策略,可以显著提高算法效率。在实际开发中,应该根据具体需求和场景,选择合适的优化方法,从而编写出高效、可靠的代码。
29 6
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-GRU网络的数据分类识别算法matlab仿真
本项目展示了使用MATLAB2022a实现的贝叶斯优化、CNN和GRU算法优化效果。优化前后对比显著,完整代码附带中文注释及操作视频。贝叶斯优化适用于黑盒函数,CNN用于时间序列特征提取,GRU改进了RNN的长序列处理能力。
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
74 1
|
3月前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
4月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
130 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
3月前
|
存储 缓存 分布式计算
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
这篇文章是关于数据结构与算法的学习指南,涵盖了数据结构的分类、数据结构与算法的关系、实际编程中遇到的问题以及几个经典的算法面试题。
45 0
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题

热门文章

最新文章