【机器学习】朴素贝叶斯分类器原理(理论+图解)

简介: 【机器学习】朴素贝叶斯分类器原理(理论+图解)

简 介:下面是我在学习时候的记录并加上自己的理解。本文意在记录自己近期学习过程中的所学所得,如有错误,欢迎大家指正。

 

关键词:Python、机器学习、贝叶斯分类器

一、贝叶斯网络

我们都学过贝叶斯公式,就是 p ( b ∣ a ) = p ( a ∣ b ) p ( b ) p ( a ) p(b|a)=\frac{p(a|b)p(b)}{p(a)}p(ba)=p(a)p(ab)p(b),它表明了两个随机变量之间的概率关系,意思是在a条件发生的前提下,b发生的概率为多大。所以我们可以将这个性质利用到我们的建模之中。

我们现在有训练数据和分类标签,那我们进行预测某一样本的类别就是在该样本的特征为x时,对应某一类别的概率为多大,最终预测概率最大的类别就是预测结果。

举个例子,我们现在要判断某个人是不是坏人,那么参考的因素有外貌、性格、行为三个特征,根据贝叶斯公式,我们预测是不是坏人就是利用公式 p ( 坏 人 ∣ 外 貌 、 性 格 、 特 征 ) p(坏人|外貌、性格、特征)p(),来进行计算概率。最终的分类器的判别函数为 a r g m a x y p ( y ) p ( x ∣ y ) arg max_yp(y)p(x|y)argmaxyp(y)p(xy)

我们要实现对类别概率的预测就需要知道判别函数中的各个参数值,p ( y ) p(y)p(y) 就是某个类别在数据中出现的概率,p ( x ∣ y ) p(x|y)p(xy) 就是在某一分类的前提下,特征为x的概率,对于上面计算条件概率还有个地方需要注意,就是如果我们的特征分量是类别特征可以利用古典概型进行计算概率,如果是连续性那么就需要得知该特征分量的概率分布,和概率密度函数。

计算 p ( x ∣ y ) p(x|y)p(xy) 在实际中是很难计算的,因为我们的特征分量很多都是有关联的,要计算对于x的所有属性的联合概率,这是很难计算的,你比如说我们有5个类别,每个类别下的分类数有3个分类,那么我们的数据就会产生 5 3 5^353 种可能的取值,而且这个数往往是大于我们的样本数的,又由于现实中我们的训练集不可能存在所有的样本可能,所以就会导致某些样本的概率为0,这会对结果产生很大的影响,因为某些样本未被录入和出现的概率为0是两个概念,很可能我们是存在该类别的,只是我们在数据采集的过程中没有采集到,这就会对之后计算公式造成误差。

二、朴素贝叶斯分类器

上面我们说到如果我们没有采集到所有的样本组合,那么就会对计算概率有影响,所以有人提出了一种假设,就是假设我们所有的特征分量是相互独立的,没有任何影响。

在概率论中学过,如果两个随机变量独立,那么 p ( A B ) = p ( A ) ∗ p ( B ) p(AB)=p(A)*p(B)p(AB)=p(A)p(B) ,那么我们上面的公式 p ( x ∣ y ) p(x|y)p(xy) ,就可以转化为 p ( x ∣ y ) = ∏ i = 1 n p ( x i ∣ y ) p(x|y)=\prod_{i=1}^np(x_i|y)p(xy)=i=1np(xiy) ,这样就可以分别计算在每个特征分量下的概率然后进行乘积即可。

这样就大大简化了求解的难度,特征向量为x,类别用c进行表示。

1.分类型特征分量

分类型特征分量就是数据特征为分类型特征,就是有类别的,对于这种的我们可以采用古典概型进行计算,因为类别可数,能够用类别比计算出概率。

p ( y = c i ∣ x ) = p ( y = c i ) p ( x ∣ c i ) p ( x ) p(y=c_i|x)=\frac{p(y=c_i)p(x|c_i)}{p(x)}p(y=cix)=p(x)p(y=ci)p(xci)

上面公式的意思就是某一样本的特征为x时,计算各个该样本数据属于某一分类下的概率。

我们可以进行进一步化简,

p ( y = c i ∣ x ) = p ( y = c i ) ∏ i = 1 n p ( x i ∣ y ) p ( x ) p(y=c_i|x)=\frac{p(y=c_i)\prod_{i=1}^np(x_i|y)}{p(x)}p(y=cix)=p(x)p(y=ci)i=1np(xiy)

我们的目的就是要求属于某一类别最大概率的类别,对于分母p(x),计算所有分类是相同的,所以只需要使分子最大即可,不用考虑分母,也就是a r g m a x y p ( y = c i ) ∏ i = 1 n p ( x i ∣ y ) argmax_yp(y=c_i)\prod_{i=1}^np(x_i|y)argmaxyp(y=ci)i=1np(xiy)

对于上述的每个因式解释一下如何计算, p ( y = c i ) p(y=c_i)p(y=ci) ,就是计算该类别在所有样本中的比例,即 p ( y = c i ) = N y = c i N p(y=c_i)=\frac{N_y=ci}{N}p(y=ci)=NNy=ci ,N为总的样本数,N y = c i N_{y=ci}Ny=ci就是某一类别的样本个数。

这里存在一个问题就是?如果某一个类别中某一特征分量中不存在这个特征值,这是我们的 p ( x i ∣ y ) p(x_i|y)p(xiy) 就会等于0,具体说一下就是我们的标签类别有很多个类,而且某一特征分量下也有很多类别,那么很有可能造成在某一标签分类的样本中存在该特征类别,有的不存在,那么就会造成概率为0,此时我们的其它特征分量就算再符合这个分类的特征,也会造成最终计算的概率为0,这显然是不合理的。

此时有人提出了解决办法就是”拉普拉斯修正法“,就是分别对分子和分母同时加入限制常数,但是同时不改变概率之和,最终的概率之和仍为1。

p ( x i ∣ y = c i ) = N x i , y = c + 1 N y = c i + k p(x_i|y=c_i)=\frac{N_{x_i,y=c}+1}{N_{y=c_i}+k}p(xiy=ci)=Ny=ci+kNxi,y=c+1

此式子中的k就是对应某一特征分量下的全部类别数,这是就算某一分类下的数目为0,也还是会存在概率不为0,同时又可以保证在某一分类下的某一特征分量下的概率和仍然为1。

同时对于标签类别同样也可以采用该方式进行修正,有可能数据采用时,没有把全部的标签样本都采集到

p ( y = c i ) = D c + 1 D + N p(y=c_i)=\frac{D_c+1}{D+N}p(y=ci)=D+NDc+1

2.连续性特征分量

对于连续性特征分量我们是不能够计算出概率的,因为它不像分类型的那种可以用数值之比进行计算。因为对于连续性的变量来说,某一点的概率是为0的,这是不能够用于计算贝叶斯公式的,但是我们可以采用概率密度进行代替。

一般来说,我们假设特征分量都符合一维正态分布,此时我们根据样本数据的就可以计算出每个特征列的均值和方差,这样就可以求出每个特征分量符合的概率密度函数。

f = 1 2 π σ e − ( x − μ ) 2 2 σ 2 f=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}}f=2πσ1e2σ2(xμ)2

那么此时我们的条件概率公式就变为了f ( x = x i ∣ y = c ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 f(x=x_i|y=c)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}}f(x=xiy=c)=2πσ1e2σ2(xμ)2

所以我们现在的目标就是:

a r g m a x y p ( y = c ) ∏ i n f ( x i ∣ y = c ) argmax_yp(y=c)\prod_i^nf(x_i|y=c)argmaxyp(y=c)inf(xiy=c)

由于该参数存在e所以计算概率时较为麻烦,可以采取取对数的方式进行计算某个分类情况下的概率,最终最大的概率的类别就是我们预测的类别。

最终可以化简为

l n p ( y = c ∣ x ) = ∑ i = 1 n c i ( x i − μ i ) 2 + c lnp(y=c|x)=\sum_{i=1}^nc_i(x_i-\mu_i)^2+clnp(y=cx)=i=1nci(xiμi)2+c

然后对比每个类别下的对数概率,判断所属的类别。


目录
相关文章
|
1月前
|
机器学习/深度学习 存储 运维
分布式机器学习系统:设计原理、优化策略与实践经验
本文详细探讨了分布式机器学习系统的发展现状与挑战,重点分析了数据并行、模型并行等核心训练范式,以及参数服务器、优化器等关键组件的设计与实现。文章还深入讨论了混合精度训练、梯度累积、ZeRO优化器等高级特性,旨在提供一套全面的技术解决方案,以应对超大规模模型训练中的计算、存储及通信挑战。
69 4
|
2月前
|
机器学习/深度学习 数据采集
机器学习入门——使用Scikit-Learn构建分类器
机器学习入门——使用Scikit-Learn构建分类器
|
2月前
|
机器学习/深度学习 自然语言处理 语音技术
探索机器学习中的深度学习模型:原理与应用
探索机器学习中的深度学习模型:原理与应用
46 0
|
3月前
|
机器学习/深度学习 算法 知识图谱
【机器学习】逻辑回归原理(极大似然估计,逻辑函数Sigmod函数模型详解!!!)
【机器学习】逻辑回归原理(极大似然估计,逻辑函数Sigmod函数模型详解!!!)
|
3月前
|
机器学习/深度学习 算法
机器学习入门(三):K近邻算法原理 | KNN算法原理
机器学习入门(三):K近邻算法原理 | KNN算法原理
|
3月前
|
机器学习/深度学习 API
机器学习入门(七):线性回归原理,损失函数和正规方程
机器学习入门(七):线性回归原理,损失函数和正规方程
|
3月前
|
机器学习/深度学习 程序员
【机器学习】朴素贝叶斯原理------迅速了解常见概率的计算
【机器学习】朴素贝叶斯原理------迅速了解常见概率的计算
|
3月前
|
机器学习/深度学习 算法
【机器学习】逻辑回归介绍(逻辑回归应用场景,原理,损失及优化详解!!!)
【机器学习】逻辑回归介绍(逻辑回归应用场景,原理,损失及优化详解!!!)
|
4月前
|
机器学习/深度学习 数据采集 人工智能
使用Python实现简单的机器学习分类器
【8月更文挑战第37天】本文将引导读者了解如何利用Python编程语言构建一个简单的机器学习分类器。我们将从基础概念出发,通过代码示例逐步深入,探索数据预处理、模型选择、训练和评估过程。文章旨在为初学者提供一条清晰的学习路径,帮助他们理解并实现基本的机器学习任务。
|
5月前
|
机器学习/深度学习 人工智能 开发者
使用Python实现简单的机器学习分类器
【8月更文挑战第31天】在这篇文章中,我们将探索如何使用Python来创建一个简单的机器学习分类器。通过使用scikit-learn库,我们可以快速构建和训练模型,而无需深入了解复杂的数学原理。我们将从数据准备开始,逐步介绍如何选择合适的模型、训练模型以及评估模型的性能。最后,我们将展示如何将训练好的模型应用于新数据的预测。无论你是机器学习的初学者还是有一定经验的开发者,这篇文章都将为你提供一个实用的指南,帮助你入门并理解基本的机器学习概念。