机器学习---朴素贝叶斯分类器(Machine Learning Naive Bayes Classifier)

朴素贝叶斯分类器是一组简单快速的分类算法。网上已经有很多文章介绍,比如这篇写得比较好:https://blog.csdn.net/sinat_36246371/article/details/60140664。在这里,我按自己的理解再整理一遍。

在机器学习中,我们有时需要解决分类问题。也就是说,给定一个样本的特征值(feature1,feature2,...feauren),我们想知道该样本属于哪个分类标签(label1,label2,...labeln)。即:我们想要知道该样本各个标签的条件概率P(label|features)是多少,这样我们就可以知道该样本属于哪个分类。例如:假设数据集一共有2个分类(标签),如果现在出现一个新的样本,其P(label1|features)>P(label2|features),那么我们就可以判定该样本的标签为label1。

那么P(label|features)该如何计算呢?如果数据是离散值,那么P(label|features)可以计算出来。但是如果总体数据非常之多,我们不可能一个一个去观测记录下来,只能随机取样,通过样本来对总体进行估计。又或者如果数据是连续值呢?因此我们可以通过学习训练集数据{(feature1,label1), (feature2,label2), ...(featuren,labeln)}的分布,对P(label|features)进行估计。

有以下三种估计方法,分别是:极大似然估计法(MLE),贝叶斯估计法(Bayesian),极大后验概率估计法(MAP)。(图片摘自:https://www.cnblogs.com/little-YTMM/p/5399532.html

(一)极大似然估计法(MLE, maximum likelihood estimation)

属于频率学派,认为存在唯一真值θ。

如果我们对总体进行取样,我们假设取样出的数据符合某一种分布(比如说正态分布),但是我们不知道这个分布的参数θ(比如说平均值,标准差),极大似然估计法就是去找到能使模型产生出样本数据的概率最大的参数θ,也就是找到。由于有连乘运算,通常对似然函数取对数计算,就可以把连乘变成求和,然后求导,取导数为0的极值点,就是想找的参数值。

(注:这也就是说,虽然朴素贝叶斯有贝叶斯这三个字在里面,但是我们完全可以使用朴素贝叶斯模型而不使用贝叶斯方法。)

但是极大似然估计只适用于数据量大的情况。如果数据量较小,结果很可能会产生偏差。举个简单的例子,假如把一个均匀的硬币抛10次,有7次正面朝上,3次反面朝上(假设P(Head)服从beta分布)。那么这个beta分布函数就是,函数在x=0.7时达到最大。那么我们能说P(Head)=0.7吗?这个结果肯定不准,因为我们都知道P(Head)=P(Tail)=0.5。但是如果我们把这个硬币抛1000次,得出的结果就会较准确了。但是很多时候,我们无法做那么多次试验。对此,解决的办法就是贝叶斯估计法。

(二)贝叶斯估计法(Bayesian estimation)

属于贝叶斯学派,认为θ是一个随机变量,符合一定的概率分布。

还是对总体进行取样,我们假设取样出的数据符合某一种分布,而且根据以往的经验,我们知道参数θ的概率分布(P(θ)也即先验概率),我们根据贝叶斯定理得到,这样通过学习条件概率P(D|θ)的分布,可以计算出后验概率P(θ|D)的分布。对新样本预测时考虑所有可能的θ,所以可以得到最优的预测结果。

还是用上面抛硬币的例子,我们仍然假设P(Head)服从beta分布,而且我们知道每次抛硬币服从二次分布(硬币不是正面朝上就是反面朝上,因此P(θ)=0.5),通过计算,我们可以得到P(Head)分布在0.2-1之间(具体请见这篇文章: http://www.360doc.com/content/17/1002/23/31429017_691875200.shtml),此时beta函数在x=0.6时达到峰值。通过加入先验概率,我们得出的预测结果要更准确。这说明,贝叶斯估计可以用于数据量较少或者比较稀疏的情况。

然而,我们发现贝叶斯估计法虽然解决了数据量较少的问题,但是又带来了新的问题。因为在用贝叶斯估计法解决问题的时候,我们让参数θ服从某种概率密度函数分布,这就会导致计算过程高度复杂。人们为了计算上的方便,就提出不再把所有的后验概率p(θ|D)都找出来,而是仍然采用类似于极大似然估计的思想,找到极大后验概率,这种简单有效的方法叫做极大后验概率估计法。

(三)极大后验概率估计法(MAP, maximum a posterior probability estimation)

极大后验概率估计法与极大似然估计法类似,只是加入了先验概率P(θ),相当于增加一种惩罚(正则化),以减少偏差。

(注:如果先验概率P(θ)是均匀分布的,那么极大后验概率估计法等价于极大似然估计法。)

下面,我来推导一下极大后验概率估计法的整个过程:

根据贝叶斯定理:,我们把数据集的特征(features)和标签(label)代入其中得到: 

由于是常量(constant),该公式可改写成:。(∝表示成正比)

朴素贝叶斯假设各特征之间相互独立,于是就有。(注:朴素贝叶斯之所以被称为“朴素”,是因为它假设各个特征之间相互独立。)

此时,公式可写成:

也即:

这就是说:我们需要学习先验概率P(label)和条件概率P(features|label)的分布,得到P(features,label)的联合分布,然后推导出后验概率P(label|features)的分布。

(注:

学习意味着对其分布进行估计。这时,可以用极大似然估计法对P(label)和P(features|label)的分布进行估计,然后得到对P(label|features)的最好估计就是:

也就是说,朴素贝叶斯分类器把样本分到后验概率P(label|featurees)最大的分类当中。

(需要注意的是:某个新样本的某一特征可能在训练集中从未出现过,其条件概率P(features|label)会变为0,这样就会导致P(label|features)也为0,这显然是不对的。解决办法是引入拉普拉斯平滑(Laplace Smoothing)。例如在对文本进行分类时,我们将某个字出现的频率视为一个特征,用极大似然估计法估计其条件概率P(features|label)就是:在某个分类(label)里,这个字出现的频率/所有字出现的频率。而引入拉普拉斯平滑(Laplace Smoothing)后,对其条件概率P(features|label)的估计就变为:(在某个分类(label)里,这个字出现的频率+1)/(所有字出现的频率+类别数量)。这样,当训练集数据量充分大时,并不会对结果产生影响,并且解决了频率为0的问题。)

根据对数据集P(features|label)分布的不同假设,朴素贝叶斯分类器可分为不同的类型,以下是三种常见的类型:

1. 高斯朴素贝叶斯(Gaussian Naive Bayes)   ---  假设特征是连续值,且符合高斯分布。公式: 

2. 多项式朴素贝叶斯(Multinomial Naive Bayes)   ---   假设特征向量由多项式分布生成。公式:

3. 伯努利朴素贝叶斯(Bernoulli Naive Bayes)   ---   假设特征是独立的布尔(二进制变量)类型。公式:

优点:1. 训练和预测的速度非常快(由于每个特征相互独立,因此每个条件概率P(feature|label)的分布可以独立地被一维分布估计出来)

2. 容易解释

3. 可调参数少

4. 尽管朴素贝叶斯模型对特征之间相互独立这一假设在实际应用中往往不成立,但其分类效果仍然不错

缺点:1. 由于朴素贝叶斯分类器对数据分布有严格的假设,因此它的预测效果通常比复杂模型差

适用于:1. 各个类别的区分度很高

2. 维度非常高的数据集

3. 为分类问题提供快速粗糙的基本方案

经典应用:文档分类(document classification),垃圾邮件过滤(spam filtering)

原文地址:https://www.cnblogs.com/HuZihu/p/9549479.html

时间: 2024-10-13 03:04:20

机器学习---朴素贝叶斯分类器(Machine Learning Naive Bayes Classifier)的相关文章

朴素贝叶斯分类器的应用 Naive Bayes classifier

一.病人分类的例子 让我从一个例子开始讲起,你会看到贝叶斯分类器很好懂,一点都不难. 某个医院早上收了六个门诊病人,如下表. 症状 职业 疾病 打喷嚏 护士 感冒  打喷嚏 农夫 过敏  头痛 建筑工人 脑震荡  头痛 建筑工人 感冒  打喷嚏 教师 感冒  头痛 教师 脑震荡 现在又来了第七个病人,是一个打喷嚏的建筑工人.请问他患上感冒的概率有多大? 根据贝叶斯定理: P(A|B) = P(B|A) P(A) / P(B) 可得 P(感冒|打喷嚏x建筑工人)  = P(打喷嚏x建筑工人|感冒)

从朴素贝叶斯分类器到贝叶斯网络(上)

一.贝叶斯公式(一些必备的数学基础) 贝叶斯(Thomas Bayes)是生活在十八世纪的一名英国牧师和数学家.因为历史久远,加之他没有太多的著述留存,今天的人们对贝叶斯的研究所知甚少.唯一知道的是,他提出了概率论中的贝叶斯公式.但从他曾经当选英国皇家科学学会会员(类似于院士)来看,他的研究工作在当时的英国学术界已然受到了普遍的认可. 事实上,在很长一段时间里,人们都没有注意到贝叶斯公式所潜藏的巨大价值.直到二十世纪人工智能.机器学习等崭新学术领域的出现,人们才从一堆早已蒙灰的数学公式中发现了贝

【资源分享】今日学习打卡--朴素贝叶斯法 (naive bayes classifier)

今日学习打卡,是一个非常简单的模型,朴素贝叶斯法(naive bayes classifier) 总得来说就是贝叶斯 + naive 通过,贝叶斯来计算事件发生概率: 然后,naive就是假设各个因素之间相互独立,互不影响. 在现实生活中,因素经常是有内在联系的.如:是否今天下雨,考虑因素有:气压,湿度,温度.实际上这些因素是有内在联系的,但是模型中假设它们相互独立,所以称为naive.这样,在计算中相当简单,且往往预测结果还算不错的. 链接: https://pan.baidu.com/s/1

数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes

贝叶斯分类器 贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类.眼下研究较多的贝叶斯分类器主要有四种,各自是:Naive Bayes.TAN.BAN和GBN. 贝叶斯网络是一个带有概率凝视的有向无环图,图中的每个结点均表示一个随机变量,图中两结点 间若存在着一条弧,则表示这两结点相相应的随机变量是概率相依的,反之则说明这两个随机变量是条件独立的.网络中随意一个结点X 均有一个对应的条件概率表(Con

PGM学习之三 朴素贝叶斯分类器(Naive Bayes Classifier)

介绍朴素贝叶斯分类器的文章已经很多了.本文的目的是通过基本概念和微小实例的复述,巩固对于朴素贝叶斯分类器的理解. 一 朴素贝叶斯分类器基础回顾 朴素贝叶斯分类器基于贝叶斯定义,特别适用于输入数据维数较高的情况.虽然朴素贝叶斯分类器很简单,但是它确经常比一些复杂的方法表现还好. 为了简单阐述贝叶斯分类的基本原理,我们使用上图所示的例子来说明.作为先验,我们知道一个球要么是红球要么是绿球.我们的任务是当有新的输入(New Cases)时,我们给出新输入的物体的类别(红或者绿).这是贝叶斯分类器的典型

[Machine Learning] 朴素贝叶斯算法(Naive Bayes)

生活中很多场合需要用到分类,比如新闻分类.病人分类等等. 本文介绍朴素贝叶斯分类器(Naive Bayes classifier),它是一种简单有效的常用分类算法. 一.病人分类的例子 让我从一个例子开始讲起,你会看到贝叶斯分类器很好懂,一点都不难. 某个医院早上收了六个门诊病人,如下表. 症状 职业 疾病 打喷嚏 护士 感冒  打喷嚏 农夫 过敏  头痛 建筑工人 脑震荡  头痛 建筑工人 感冒  打喷嚏 教师 感冒  头痛 教师 脑震荡 现在又来了第七个病人,是一个打喷嚏的建筑工人.请问他患

十大经典数据挖掘算法(9) 朴素贝叶斯分类器 Naive Bayes

贝叶斯分类器 贝叶斯分类分类原则是一个对象的通过先验概率.贝叶斯后验概率公式后计算.也就是说,该对象属于一类的概率.选择具有最大后验概率的类作为对象的类属.现在更多的研究贝叶斯分类器,有四个,每间:Naive Bayes.TAN.BAN和GBN. 贝叶斯网络是一个带有概率凝视的有向无环图.图中的每个结点均表示一个随机变量,图中两结点 间若存在着一条弧.则表示这两结点相相应的随机变量是概率相依的,反之则说明这两个随机变量是条件独立的.网络中随意一个结点X 均有一个对应的条件概率表(Conditio

Machine Learning—Naive Bayesian classification(朴素贝叶斯分类)

印象笔记同步分享:Machine Learning-Naive Bayesian classification(朴素贝叶斯分类)

【机器学习算法-python实现】扫黄神器-朴素贝叶斯分类器的实现

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 以前我在外面公司实习的时候,一个大神跟我说过,学计算机就是要一个一个贝叶斯公式的套用来套用去.嗯,现在终于用到了.朴素贝叶斯分类器据说是好多扫黄软件使用的算法,贝叶斯公式也比较简单,大学做概率题经常会用到.核心思想就是找出特征值对结果影响概率最大的项.公式如下: 什么是朴素贝叶斯,就是特征值相互独立互不影响的情况.贝叶斯可以有很多变形,这里先搞一个简单的,以后遇到复杂的再写. 2.数据集 摘自机器学