朴素贝叶斯分类器,实际上也是对人们常识做的一个算法的完善。其以一种更为精准的量化来判断分类,使用的方法是后验概率。本文从与决策树的比较出发,介绍先验概率和后验概率的关系,再详细介绍一下朴素贝叶斯算法的流程。
朴素贝叶斯算法比较简单,所以此文多是留以面试前复习之用。理清各个问题之间的关系是重点。
与决策树的比较
我们在学习完经典的决策树算法之后,可以有这样一个认识:决策树的特点是它总是在沿着特征做切分。随着层层递进,这个划分会越来越细。大体上就像这样:
对于决策树不是很了解的朋友们可以看我这篇文章《经典决策树算法》
我今天在此基础上,在介绍一种在概率框架下实施决策的基本方法。同样的,这也很符合我们人类的经验思维。这就是贝叶斯分类器。相比于决策树,其分类示意如下:
此处的的蓝色与红色交织,就代表着概率的大小。贝叶斯分类器的名字很高大上,其实背后的原理非常简单。就是根据概率来选择我们要将某一个个体分在哪一类中。
我们可以这样去理解贝叶斯分类器。西瓜藤新鲜的瓜甜的概率为07,若只看瓜藤,我们就将瓜藤新鲜的瓜判定为甜瓜。我们引入西瓜纹理这一个第二个特征,假设纹理整齐的瓜甜的概率为08。则这时候我们要算出瓜藤新鲜且纹理整齐的瓜甜的概率,比如为09(为什么要大于前两个概率大家可以思考一下),这样我们看到纹理和瓜藤这两个特征的时候就可以有概率的判断瓜是否甜了。
这里我们可以类比一下分类决策树。对于决策树不是很了解的朋友们可以看我这篇文章《经典决策树算法》相比于决策树将瓜藤新鲜的瓜甜的概率直接转化成瓜藤新鲜我们就判断成瓜甜,我们的贝叶斯更是有了一种概率性的容错性,使得结果更加准确可靠一点。但是贝叶斯分类器对数据有着比决策树更高的要求,其需要一个比较容易解释,而且不同维度之间相关性较小的模型。这个我们在之后会细细提及。
先验概率与后验概率
我们来看贝叶斯公式:
可见,先验概率,后验概率和似然概率关系密切的很。值得注意的是,A和B的顺序和这个先验后验是有关系的。A和B反了,先验与后验也需要反过来。举个例子来说: 桌子上如果有一块肉和一瓶醋,你如果吃了一块肉,然后你觉得是酸的,那你觉得肉里加了醋的概率有多大
对于这个问题,在吃起来是酸的条件下肉里面放了醋的概率,便是后验概率。肉加了醋的前提下吃起来是酸的概率便是似然概率,肉里面加了醋的概率和吃起来是酸的概率便是先验概率。
我们可以总结一下,A事件是导致的结果,B事件是导致的原因之一。这里我们吃到肉是酸的,则是各种原因的结果,而肉里面放了醋则是导致这个A结果的诸多原因之一。为什么说是之一呢,因为除了放了醋,也有可能是肉变质了等等。
朴素贝叶斯分类算法
先通过一个经典例子来解释朴素贝叶斯分类的算法。由如下表格中的数据学习一个朴素贝叶斯的分类器并确定 的w类标记 ,表格中 , 为特征,取值的集合分别为 , , 为类标记,
此时我们对于给定的 可以如下计算:
可见 时候后验概率更大一些。所以
通过以上例子,我们会发现朴素贝叶斯的方法其实就是一种常规做法,拉普拉斯曾经说过,概率论就是将人们的常识使用数学公式表达。接下来我们来看看最完整的朴素贝叶斯分类算法的数学表达。
1、背景
《机器学习实战》当中,用python根据贝叶斯公式实现了基本的分类算法。现在来看看用sklearn,如何实现。还拿之前的例子,对帖子的分类。数据如下:
补充:题目的值左边是几个人的评论,右边是评论属于侮辱类(1)、正常类(0),需要进行文本分类,且再有新的文本过来时能自动划分至0或1。
2、分类
(1)算法的准备
通过查看sklearn的训练模型函数,fit(X, Y),发现只需要准备两个参数。一个是数据的矩阵,另一个是数据的分类数组。首先就是将以上的文本转化成矩阵。
在前一章其实已经讲解过如何将文本转化成矩阵。这里将示意的再补充下。
a首先选取所有的单词,形成列,也可理解为属性。例如:
b其次将遍历每个文本,填满上述列的值。文本出现过列的次,填一。没有出现过填0。比如第一句就是:my dog has flea problems help please,可表示为:
同理所有的文本都可如此表示,所以就形成了一个数字的矩阵。
(2)beyes模型的选择
在完成数据的准备以后,就可以直接调用sklearn的模型和函数完成模型的训练啦。但在beyes模型的选择的时候发现,beyes下有多个模型可选择,所以这个会让人纠结。接下来共同了解下这些模型:
a高斯模型(GaussianNB)
高斯模型是对于每个属性的值是连续的,且服从高斯分布时可使用:
比如人的身高,比如花的高度等等。当然你也可将这些数据离散化,比如按等距划分、等频划分成离散的值,但可能效果都没有直接用高斯模型来计算的好。
用法:class sklearnnaive_bayesGaussianNB
参数:无
b多项式模型(MultinominalNB)
如果大部分是多元离散值,则采用多项式模型要好些。多项式模型,通常就是构造参数向量,然后通过极大似然估计来寻求参数的最有值。
这里只简单的略列一些公式,具体可查询更多资料。从这个计算过程中可得出,这里引入啦一个平滑先验值alpha,这个值在模型训练的时候也会用到。通常alpha>0,可引入不在训练集的特征,尤其当alpha=1,成为拉普拉丝平滑。具体alpha取值对模型的影响可附件的图。
用法:class sklearnnaive_bayesMultinomialNB(alpha=10,fit_prior=True,class_prior=None)
参数:
alpha:浮点数,就是上述说的引入平滑的值;
fit_prior:bool值,如果为Ture,则不用去学习P(y=ck),以均匀分布替代,否则则去学习P(y=ck)(不懂)
class_prior:一个数组。它指定了每个分类的先验概率P(y=c1),P(y=c2)…,若指定了该参数
则每个分类的先验概率无需学习 (不懂)
c伯努利模型(BernoulliNB)
如果特征值为二元离散值或是稀疏的多元离散值,则可采用伯努利模型。
公式:class sklearnnaive_bayesBernoulliNB(alpha=10,binarize=00,fit_prior=Ture,
class_prior=None)
参数:
binarize:一个浮点数或者None,如果为浮点数则以该数值为界,特征值大于它的取1,小于的为0 。如果为None,假定原始数据已经二值化
其它参数同上。
通过以上的模型对比和分析,由于文本分析转化后是很多二项取值的稀疏矩阵,因此选取伯努利模型效果会更佳。
补充:alpha、binarize值对模型效果的影响
朴素贝叶斯算法,主要用于对相互独立的属性的类变量的分类预测。(各个属性/特征之间完全没有关系,叫做相互独立,事实上这很难存在,但是这个方法依然比较有效。)
大学的概率论里一般都学过这个贝叶斯定理,简单阐述如下:
若事件 , ,…构成一个事件且都有正概率,则对任意一个事件Y,有如下公式成立:则有
如果X表示特征/属性,Y表示类变量,如果类变量和属性之间的关系不确定,那么X和Y可以视作随机变量,则 为Y的后验概率, 为Y的先验概率。
以图为例:
我们需要根据身高、体重、鞋码判断是男是女,则Y就是性别,X就是(身高、体重、鞋码)这一组特征。如果我们要先算是男的概率,则先验概率就是 ,而后验概率则是我们未来将要输入的一组特征已知的情况下,Y=男的概率(要预测的分类的概率),这样的话,根据贝叶斯定理,我们就可以用 来求出 ,这就是贝叶斯定理在预测中的应用。
假设Y变量取y值时概率为P(Y=y),X中的各个特征相互独立,则有公式如下:
其中每个特征集X包含d个特征。
根据公式,对比上面的图来说,如果性别是男的时候,身高是高,体重是重,鞋码为大的概率就等于
有了这个公式,结合之前的贝叶斯公式,就能得到给定一组特征值的情况下, 这组特征属于什么样的类别的概率公式:
其中的X代表一组特征, 代表一组中的一个。
对于所有的Y来说,P(X)时固定的,因此只要找出使分子 最大的类别就可以判断预测的类别了。
的概率分为两种情况来区别,一种是对分类特征的概率确定,一种是连续特征的概率确定。
接下来借用《数据挖掘导论》上的例子来说明概率确定的方式。
对于分类的特征,可以首先找到训练集中为y值的个数,然后根据不同的特征类型占这些个数中的比例作为分类特征的概率。
例如上表中求不拖欠贷款的情况下,有房的人数就是 ,不拖欠贷款的有7个,其中有房的是3个。以此类推可以求出婚姻状况的条件概率。
年收入是连续特征,需要区分对待。
根据上述算法,如果要求没有拖欠贷款情况下,年收入是120K的概率,就是
如果要预测测试记录 X =(有房=否,婚姻状况=已婚,年收入=120K)这个样本是否可能拖欠贷款,则需要计算两个概率: 和
则有:
由于 是不变的(对于Y=是和Y=否),则只考虑上面的分子即可,那么抛开P(X)不看,则有:
其中7/10就是P(Y=否),α是P(X)
同理可得P(Y=是|X) = 1 0 12e-1 = 0
这样一比较,那么分类就是否。
看这个例子中,如果有一个特征的条件概率是0,那么整体的概率就是0,从而后验概率也一定是0,那么如果训练集样本太少,这种方法就不是很准确了。
如果当训练集样本个数比特征还少的时候,就无法分类某些测试集了,因此引入 m估计(m-estimate) 来估计条件概率,公式如下:
其中,n是类 中的样本总数, 是类 中取 的样本数, 是称为等价样本大小的参数, 是用户指定的参数,p可以看作在类 中观察特征值 的先验概率。等价样本大小决定先验概率 和观测概率 之间的平衡。
引入m估计的根本原因是样本数量过小。所以为了避免此问题,最好的方法是等效的扩大样本的数量,即在为观察样本添加m个等效的样本,所以要在该类别中增加的等效的类别的数量就是等效样本数m乘以先验估计p。
在之前的例子中,设m=3,p=1/3(m可以设置为特征数量,p则是倒数)。则:
从而可以重新计算 。从而解决了某个条件概率为0的问题。
面对相互独立的特征比较适用,如果有相关的特征,则会降低其性能。
以上就是关于贝叶斯分类器(10X单细胞和10X空间转录组的基础算法)全部的内容,包括:贝叶斯分类器(10X单细胞和10X空间转录组的基础算法)、贝叶斯规则、朴素贝叶斯分类器原理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)