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

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

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

 

关键词: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月前
|
机器学习/深度学习 算法 知识图谱
【机器学习】逻辑回归原理(极大似然估计,逻辑函数Sigmod函数模型详解!!!)
【机器学习】逻辑回归原理(极大似然估计,逻辑函数Sigmod函数模型详解!!!)
|
1月前
|
机器学习/深度学习 算法
机器学习入门(三):K近邻算法原理 | KNN算法原理
机器学习入门(三):K近邻算法原理 | KNN算法原理
|
1月前
|
机器学习/深度学习 程序员
【机器学习】朴素贝叶斯原理------迅速了解常见概率的计算
【机器学习】朴素贝叶斯原理------迅速了解常见概率的计算
|
1月前
|
机器学习/深度学习 算法
【机器学习】逻辑回归介绍(逻辑回归应用场景,原理,损失及优化详解!!!)
【机器学习】逻辑回归介绍(逻辑回归应用场景,原理,损失及优化详解!!!)
|
1月前
|
机器学习/深度学习 API
机器学习入门(七):线性回归原理,损失函数和正规方程
机器学习入门(七):线性回归原理,损失函数和正规方程
|
2月前
|
机器学习/深度学习 数据采集 人工智能
使用Python实现简单的机器学习分类器
【8月更文挑战第37天】本文将引导读者了解如何利用Python编程语言构建一个简单的机器学习分类器。我们将从基础概念出发,通过代码示例逐步深入,探索数据预处理、模型选择、训练和评估过程。文章旨在为初学者提供一条清晰的学习路径,帮助他们理解并实现基本的机器学习任务。
|
3月前
|
机器学习/深度学习 人工智能 开发者
使用Python实现简单的机器学习分类器
【8月更文挑战第31天】在这篇文章中,我们将探索如何使用Python来创建一个简单的机器学习分类器。通过使用scikit-learn库,我们可以快速构建和训练模型,而无需深入了解复杂的数学原理。我们将从数据准备开始,逐步介绍如何选择合适的模型、训练模型以及评估模型的性能。最后,我们将展示如何将训练好的模型应用于新数据的预测。无论你是机器学习的初学者还是有一定经验的开发者,这篇文章都将为你提供一个实用的指南,帮助你入门并理解基本的机器学习概念。
|
3月前
|
机器学习/深度学习 算法 搜索推荐
【机器学习】机器学习的基本概念、算法的工作原理、实际应用案例
机器学习是人工智能的一个分支,它使计算机能够在没有明确编程的情况下从数据中学习并改进其性能。机器学习的目标是让计算机自动学习模式和规律,从而能够对未知数据做出预测或决策。
87 2
|
3月前
|
机器学习/深度学习 人工智能 算法
如何使用Scikit-learn在Python中构建一个机器学习分类器
如何使用Scikit-learn在Python中构建一个机器学习分类器
39 3
|
2月前
|
机器学习/深度学习 人工智能 算法
探索人工智能:机器学习的基本原理与Python代码实践
【9月更文挑战第6天】本文深入探讨了人工智能领域中的机器学习技术,旨在通过简明的语言和实际的编码示例,为初学者提供一条清晰的学习路径。文章不仅阐述了机器学习的基本概念、主要算法及其应用场景,还通过Python语言展示了如何实现一个简单的线性回归模型。此外,本文还讨论了机器学习面临的挑战和未来发展趋势,以期激发读者对这一前沿技术的兴趣和思考。

热门文章

最新文章

  • 1
    机器学习实战:房价预测项目
    201
  • 2
    强化学习(Reinforcement Learning, RL)** 是一种机器学习技术,其中智能体(Agent)通过与环境(Environment)交互来学习如何执行决策以最大化累积奖励。
    74
  • 3
    集成学习(Ensemble Learning)是一种机器学习技术,它通过将多个学习器(或称为“基学习器”、“弱学习器”)的预测结果结合起来,以提高整体预测性能。
    218
  • 4
    `sklearn.metrics`是scikit-learn库中用于评估机器学习模型性能的模块。它提供了多种评估指标,如准确率、精确率、召回率、F1分数、混淆矩阵等。这些指标可以帮助我们了解模型的性能,以便进行模型选择和调优。
    453
  • 5
    在机器学习和数据科学中,数据预处理是一个至关重要的步骤。数据规范化(或称为特征缩放)是预处理的一种常见技术,它可以帮助我们改进模型的性能。`sklearn.preprocessing`模块提供了多种数据规范化的方法,其中`StandardScaler`和`MinMaxScaler`是最常用的两种。
    88
  • 6
    在人工智能和机器学习的领域中,语音识别(Speech Recognition,SR)是一个重要的研究方向。它旨在将人类的语音转换为计算机可读的文本。
    103
  • 7
    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
    119
  • 8
    驾驭大数据洪流:Pandas与NumPy在高效数据处理与机器学习中的核心作用
    83
  • 9
    探索机器学习在图像识别中的应用
    52
  • 10
    智能化运维:机器学习在故障预测和自动化修复中的应用
    65