Ⅰ 朴素贝叶斯以及三种常见模型推导
朴素贝叶斯算法Naive Bayes定义中有两个关键定义:特征之间强假设独立和贝叶斯定理.这两个定义就是朴素贝叶斯的关键.接下来先了解一下这两个定义.
贝叶斯定义是概率论中的一个定理,它跟随机变量的条件概率以及边缘概率分布有关.
通常,事件A在事件B(发生)的条件下的概率,与事件B在事件A(发生)的条件下的概率是不一样的,然而,这两者之间是有确定的关系的,贝叶斯定理就是这种关系的陈述。贝叶斯公式的一个用途在于通过已知的三个概率函数推出第四个.
直接给出公式:
其中,P(A|B)是指事件B发生的情况下事件A发生的概率(条件概率).在贝叶斯定理中,每个名词都有约定俗成的名称:
按这些术语,贝叶斯定理可以表述为:
后验概率 = (似然性 * 先验概率)/标准化常量
也就是说,后验概率与先验概率和相似度的乘积成正比.
同时,分母P(B),可以根据全概率公式分解为:
如果P(X,Y|Z)=P(X|Z)P(Y|Z),或等价地P(X|Y,Z)=P(X|Z),则称事件X,Y对于给定事件Z是条件独立的,也就是说,当Z发生时,X发生与否与Y发生与否是无关的。
应用在自然语言处理中,就是说在文章类别确定的条件下,文章的各个特征(单词)在类别确定的条件下是独立的,并不相关,用通俗的话说,在文章类别确定的条件下,文章各个词之间出现与否没有相关性(事实上,并不成立).这是一个非常强的假设,但对问题的求解来说变得更加简单.
设输入空间 为n为向量的集合,输出空间为类标记集合 .输入为特征向量 ,输出为类标记 . X是定义在输入空间X上的随机变量,Y是定义在输出空间Y上的随机变量.P(X,Y)是X和Y的联合概率分布.训练数据集:
由P(X,Y)独立同分布产生.因此朴素贝叶斯模型也是一个生成模型.
朴素贝叶斯算法通过训练集学习联合概率分布P(X,Y),具体地,学习先验概率分布以及条件概率分布.其中先验概率分布
条件概率分布
, k=1,2,...,K
通过两个概率得到联合概率分布P(X,Y) = P(X|Y)P(Y).
条件概率分布P(X=x|Y=c_k)有指数级数量的参数,其估计实际上不可行的.假设 有 个取值,j=1,2,...,n,Y有K个取值,那么参数个数为 .
指数级的参数估计事实上并不可行,因此朴素贝叶斯算法针对各个特征之间做了假设,也就是对条件概率分布作了条件独立性假设,这是一个很强的假设,通过这个假设,我们的参数求解变得可行,这也就是朴素贝叶斯的"朴素"的由来.这种情况下,我们同样假设 有 个取值,j=1,2,...,n,Y有K个取值,那么参数个数为 ,需要估计的参数量大大减少.条件独立性假设是
朴素贝叶斯算法分类时,对给定输入x,通过学习到的模型计算后验概率分布 ,将后验概率最大的类作为输入x的类输出.后验概率根据贝叶斯定理计算:
上面的公式是后验概率分布中的一项,由于对于相同输入x下不同类别的后验概率的分母都相同,而最终的类输出是后验概率分布中概率最大对应的类别,所以我们可以简化为只比较分子的大小就可以确定最终的结果,也就是说,最终类输出为:
.
如果我们对右边的乘积概率取log,连乘积就可以转换成为和,计算更简单(加法总比乘法简单),上诉公式存在一种变种:
.
同时这种形式,也可以看做是一种线性回归,权重系数为1.
介绍完,朴素贝叶斯的概率模型之后,我们目前的主要问题就集中在如何估计这个模型的 个参数: ,估算出参数,我们就可以对输入向量x做预测.针对这些参数的求解方法不同,存在不同的朴素贝叶斯类型,具体介绍三种:伯努利朴素贝叶斯,多项式朴素贝叶斯和高斯朴素贝叶斯.不同类型的朴素贝叶斯对参数的求法不同,而根源在于对P条件概率(X=x|Y=c_k)的假设分布不同,也就是说在给定类别的情况下,对X假设的分布不同:伯努利假设是伯努利分布(其实应该是多变量伯努利分布),多项式假设是多项式分布,而高斯也就是假设是高斯分布(其实是多变量高斯分布).然后,我们细化到三种不同类型的朴素贝叶斯理论中.
伯努利朴素贝叶斯,其实应该叫"Multi-variate Naive Bayes",假设P(X=x|Y=c_k)是多变量伯努利分布.在了解多变量伯努利分布之前,先介绍一下什么是(单变量的)伯努利分布.
伯努利分布,又叫做两点分布或0-1分布,是一个离散型概率分布.称随机变量X有伯努利分布,参数为p(0< p <1),它分别以概率p和1-p取1和0为值.
最简单的例子就是抛硬币,硬币结果为正或反.
幂次运算变成乘法运算,更简单.当x=1时,概率是P(X=1)=p,当x=0时,概率P(X=0)=1-p,这样就可以将两种情况合在一起.
了解了什么是伯努利分布之后,我们再看什么是多元伯努利分布(多变量 multi-variate Bernoulli).
多元伯努利分布,通俗的讲就是同时进行多个不同的伯努利实验, ,其中x是一个向量, 也是一个向量,表示不同伯努利实验的参数.
伯努利多项式将文档的生成模型P(X=x|Y=c_k)假设服从为多元伯努利分布,由于我们之前做的特征独立性假设, 是一个向量形式,而其中 ,也就是说x向量是onehot形式的向量(每个维度值是0或1),表示这个维度的特征是否出现.特征集 有n个特征,特征集的维度决定了输入空间X的维度,而且特征集的维度可以对应到输入空间的各个维度上.
因为特征之间的独立性,所以多元伯努利变成各个伯努利分布的连乘积,需要注意的一点是 因为是伯努利分布,0-1,特征出现有一个概率p,特征不出现也有一个概率1-p .最终模型的参数估计完成之后,对新样本进行预测时,如果某个特征不出现,需要 乘上这个特征不出现的概率 ,不能只计算特征出现的概率!!!两个向量直接相乘,并不能得到最终的结果.
对应的伯努利朴素贝叶斯模型为:
为了简化运算,我们可以将分母忽略,虽然对应的结果不是真正的概率,但是相同样本的各个后验概率之间的大小关系保持不变,同时如果两边同时做log运算,后验概率之间的大小关系同样保持不变.因此,
.
了解了多元伯努利分布之后,接下来的工作就是对参数进行估计,计算 , .
参数估计的过程也是朴素贝叶斯分类器学习的过程.而参数估计可以使用极大似然估计.先验概率 的极大似然估计是
, k=1,2,...,K
其中,I(x)是一个指示函数,如果x为真,I(x)结果为1,如果x为假,I(x)=0.用语言描述来说, 这个概率等于在N个样本的数据集中,类别为 的样本所占的比例.
条件概率 的极大似然估计是:
用语言描述来说,条件概率 等于在类别为 的样本集合(数据集的子集)中,第i个特征等于 的概率, 是0或1,而且 服从伯努利分布,所以只需要计算一个,比如P , ,因为两个概率和为1(这是 同一个变量 ).
这些参数估计完之后,朴素贝叶斯就完成了学习过程,接下来就可以使用它去进行预测了(应用才是最终的目的).
由于 是伯努利分布,参数p在[0,1]之间,有可能存在 ,也就是存在0概率.
举例来说,在当前类别下的所有样本中特征i都出现了(=1),根据上面的条件概率极大似然估计,可以知道 ,那么对应的, ,那么当新样本来的时候,加入存在一条记录x,它很巧地没有第i个特征(这不巧了吗?不是),由于0概率的存在,那么使用上面的贝叶斯公式,就会出现属于某个列别的概率为0, .但这种情况是应该避免的,那么如何避免呢?
我们在对条件概率进行极大似然估计时,针对分子和分母做一些小变动,
其中, 表示第i个特征不同取值的个数,由于这里是one-hot,取值为2,所以 , 乘以 是保证 个不同取值对应的条件概率之和为1,不偏袒任意一种情况,一视同仁.
To Be Continued.
多项式朴素贝叶斯,假设P(X=x|Y=c_k)是多项式分布.在了解多项式朴素贝叶斯之前,先介绍一下什么是多项式分布?
将伯努利分布的单变量扩展到d维向量 ,其中 ,且 ,假设 的概率是 ,并且 ,则将得到离散分布:
.
其中x, 都是d维向量形式.在此的基础上扩展二项分布到多项式分布(Multinomial distribution),该分布描述的是在n次独立实验中有 词 的概率,其密度函数可以表达为如下形式:
多项式分布的期望,方差如下:
多项式分布应用到朴素贝叶斯上,对于文档分类问题来说,假设给定文档类型的基础上文档生成模型 是一个多项式分布.这样对应关系就是:
需要注意的是,应用在文本分类的多项式朴素贝叶斯模型之前,一般多项式条件概率如下:
我们的多项式朴素贝叶斯概率模型为:
这里为了方便,首先我们假设文章长度和文章的类别之间没有相关性(事实上也并不成立,比如说相对较长的邮件,相比垃圾邮件而言,正常邮件的概率更大),也就是说P(|x|)的分布与文章所属类别无关.另一方面,由于最终所属类别是后验概率最大对应的类别,所以,我们可以将文章长度P(|x|)建模的概率,忽略掉,就像我们之前忽略伯努利分布中的分母一样.
再者,为了更加方便,我们通常对两边取log运算,将幂次运算转换成线性运算:
我们也可以将文章长度阶乘省略,然后变成:
.
这样就变成线性运算,就和线性回归一样,运算高效而简单.
将文档模型对应到多项式分布上得到多项式朴素贝叶斯,在我们对其做出假设分布之后,剩下的工作就是对假设分布下每个类别下的d个条件概率以及先验分布进行估计.此外,还需要说明的一点是:多项式朴素贝叶斯模型采用词袋模型,每个 表示第i个特征出现的次数,也就是词频term-frequency,有时候也可以使用tf-idf作为值.
参数估计的过程也是朴素贝叶斯分类器学习的过程.而参数估计可以使用极大似然估计.先验概率 的极大似然估计是
, k=1,2,...,K
其中,I(x)是一个指示函数,如果x为真,I(x)结果为1,如果x为假,I(x)=0.用语言描述来说, 这个概率等于在N个样本的数据集中,类别为 的样本所占的比例.
条件概率 的极大似然估计是:
用语言描述来说,条件概率 等于在类别为 的样本集合(数据集的子集)中,第t个特征出现的概率等于 类样本第t个特征出现的总次数(考虑词频,不再是0,1)占 类样本的总词数(文章长度之和,文章单词特征是固定的,考虑了词频)的比例.
为了方便理解,将 表示为第k类样本集合中第t个特征出现的总次数, 表示为在所有样本中第k类样本的总词数(第k类样本长度之和,考虑频数),简写成:
和伯努利朴素贝叶斯模型类似,有可能存在某一维度,数据集在这一维度上都是0,对应到文档分类上,就是这个词在所有文章中都没有出现过(词典选的不好,特征选择不好),这种情况就会出现0概率.所以我们需要对条件概率做一点小改动:
其中,d表示数据维度为d(有d个特征,每个特征都加 ,保证概率和为1, 需要乘d).当 时,叫做Laplace Smoonthing拉普拉斯平滑,当然 也可以小于1.
To Be Continued
高斯朴素贝叶斯,假设P(X=x|Y=c_k)是多元高斯分布.在了解高斯朴素贝叶斯之前,先介绍一下什么是高斯分布,什么是多元高斯分布?
高斯分布又称正态分布,在实际应用中最为广泛。对于单变量 ,高斯分布的参数有两个,分别是均值 和方差 ,其概率密度函数为
其中, 是D维均值向量, 是DxD的协方差矩阵, 是 的行列式.多元高斯分布的期望是 ,方差是
特殊的, 如果D个维度之间相互独立,那么多元高斯分布就可以表示成单元高斯分布概率密度函数的连乘积 .
高斯朴素贝叶斯模型是假设条件概率P(X=x|Y=c_k)是多元高斯分布,另一方面,由之前的特征的条件独立性假设,我们就可以通过对每个特征的条件概率建模, 每个特征的条件概率 也服从高斯分布 .
在 类下第i个词对应的高斯分布为:
其中, , 表示c类下第i个特征的均值和方差.
由于特征之间的独立性假设,我们可以得到条件概率:
一共有d个特征.
高斯朴素贝叶斯变成:
.
了解了多元高斯分布分布之后,接下来的工作就是对参数进行估计,计算 和 .
先验概率和之前的估算方法相同,不再描述.主要是对高斯分布的均值和方差的估计,采用的方法仍然是极大似然估计.
均值的估计 是在样本类别 中,所有 的平均值;
方差的估计 为样本类别 中所有 的方差.
对于一个连续的样本值,带入高斯分布,就可以求出它的概率分布了.
所有参数估计完成之后,就可以计算给定样本的条件概率 ,进而可以计算 ,之后就可以确定样本类别,完成模型预测.
Ⅱ 数据挖掘十大经典算法之朴素贝叶斯
朴素贝叶斯,它是一种简单但极为强大的预测建模算法。之所以称为朴素贝叶斯,**是因为它假设每个输入变量是独立的。**这个假设很硬,现实生活中根本不满足,但是这项技术对于绝大部分的复杂问题仍然非常有效。
贝叶斯原理、贝叶斯分类和朴素贝叶斯这三者之间是有区别的。
贝叶斯原理是最大的概念,它解决了概率论中“逆向概率”的问题,在这个理论基础上,人们设计出了贝叶斯分类器,朴素贝叶斯分类是贝叶斯分类器中的一种,也是最简单,最常用的分类器。朴素贝叶斯之所以朴素是因为它假设属性是相互独立的,因此对实际情况有所约束,**如果属性之间存在关联,分类准确率会降低。**不过好在对于大部分情况下,朴素贝叶斯的分类效果都不错。
朴素贝叶斯分类器依靠精确的自然概率模型,在有监督学习的样本集中能获取得非常好的分类效果。在许多实际应用中,朴素贝叶斯模型参数估计使用最大似然估计方法,换而言之朴素贝叶斯模型能工作并没有用到贝叶斯概率或者任何贝叶斯模型。
朴素贝叶斯分类 常用于文本分类 ,尤其是对于英文等语言来说,分类效果很好。它常用于垃圾文本过滤、情感预测、推荐系统等。
1、 需要知道先验概率
先验概率是计算后验概率的基础。在传统的概率理论中,先验概率可以由大量的重复实验所获得的各类样本出现的频率来近似获得,其基础是“大数定律”,这一思想称为“频率主义”。而在称为“贝叶斯主义”的数理统计学派中,他们认为时间是单向的,许多事件的发生不具有可重复性,因此先验概率只能根据对置信度的主观判定来给出,也可以说由“信仰”来确定。
2、按照获得的信息对先验概率进行修正
在没有获得任何信息的时候,如果要进行分类判别,只能依据各类存在的先验概率,将样本划分到先验概率大的一类中。而在获得了更多关于样本特征的信息后,可以依照贝叶斯公式对先验概率进行修正,得到后验概率,提高分类决策的准确性和置信度。
3、分类决策存在错误率
由于贝叶斯分类是在样本取得某特征值时对它属于各类的概率进行推测,并无法获得样本真实的类别归属情况,所以分类决策一定存在错误率,即使错误率很低,分类错误的情况也可能发生。
第一阶段:准备阶段
在这个阶段我们需要确定特征属性,同时明确预测值是什么。并对每个特征属性进行适当划分,然后由人工对一部分数据进行分类,形成训练样本。
第二阶段:训练阶段
这个阶段就是生成分类器,主要工作是 计算每个类别在训练样本中的出现频率 及 每个特征属性划分对每个类别的条件概率。
第三阶段:应用阶段
这个阶段是使用分类器对新数据进行分类。
优点:
(1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
(2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。
(3)对缺失数据不太敏感,算法也比较简单,常用于文本分类。
缺点:
(1)理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
(2)需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
(3)由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
(4)对输入数据的表达形式很敏感。
参考:
https://blog.csdn.net/qiu__liao/article/details/90671932
https://blog.csdn.net/u011067360/article/details/24368085
Ⅲ 2019-03-28
基于模型的协同过滤算法是源自于推荐过程可以被视为分类或预测问题的这一思想,它将评分矩阵作为训练数据和测试数据,使用统计学、机器学习、数据挖掘等方法构建出用户与物品之间的关系模型,然后据此产生合理的推荐。
它是基于用户观看或者或者评分等历史行为数据,从中挖掘出用户隐含的兴趣,即隐因子,然后将用户或视频用隐因子来分类,最后通过这些隐因子进行推荐,用户会对某些特定的隐因子有一定的喜好度,这样便可以利用这种用户或视频与隐因子的关系来做出推荐。
用SVD分解技术来从用户评分数据中确定出隐因子,以及确定出如何计算用户或视频与隐因子的关系,SVD将U-V矩阵所表示的用户评分数据分解为用户与隐因子的关系矩阵U、视频与隐因子的关系矩阵V,以及表示隐因子的矩阵(求和符号)。
在计算用户对视频的喜好程度时,公式中包含了用户和某一个隐类的关系,也包含了视频和隐类的关系,要计算这两个参数,需要一个训练集,对于每个用户,训练集都包含了用户喜欢的物品和不感兴趣的物品,通过学习这个数据集,就可以获得上面的模型参数。
推荐系统的用户行为分为显性反馈和隐性反馈,显性反馈就是用户对视频的打分,隐性反馈就是用户的观看浏览行为。隐因子模型在显性反馈数据上解决评分预测问题得到了很好的精度。但是对于隐性反馈数据集,这种数据集只有正样本(用户观看了什么视频),而没有负样本(用户对什么视频不感兴趣),因而存在一个负样本采样过程。根据以往的经验总结,负样本采样需要遵循以下原则:
(1)对每个用户,要保证正负样本的平衡。
(2)对每个用户采负样本时,要选取那些很热门,而用户却没有行为的视频。
基于隐因子模型的推荐算法流程如下:
访问用户行为数据——构造训练数据集——迭代求解目标函数的参数——当收敛时——输出用户兴趣向量和视频的类别向量—
获取用户U的兴趣向量P(u)——获取视频i的类别向量q(i)——计算用户对视频的喜好度——根据喜好度进行排序——输出Top-k视频列表。
算法输入:用户行为日志,用户兴趣向量、视频类别向量。
算法输出:初始推荐结果。
1.从用户行为日志中获取最近浏览过视频的用户集合U.
2.针对集合U中的每个用户u(可并行处理):
2.1从用户行为日志中获取该用户近期观看的视频集合M(u);
2.2访问“基于隐因子的视频相似矩阵”获取与M(u)相似的视频集合N(u);
2.3针对视频集合N(u)中的每个视频,计算用户对该视频的偏好值;
2.4依据用户偏好值,对N(u)的视频进行排序;
2.5取Top-k个视频,为每个视频赋予解释,如“您近期浏览过与之近似的视频”;
2.6保存Top-k个视频到“初始推荐结果”中。
它主要适用于缺少用户兴趣信息和视频类别信息,但是具有大量的用户行为的系统,它一般适用于离线推荐,不适用于实时推荐。
算法原理:由于推荐问题可以被看成分类问题,因此可以使用一些机器学习领域中的分类算法对推荐问题加以解决,朴素贝叶斯的基本思想是:对于给出的待分类物品和既定的类别,计算该物品在各个类别中出现的概率,哪个类别计算出的概率最大就将带分类物品分到那个类别。
朴素贝叶斯分类在推荐系统中有着一定程度的应用,它能用于在已知某些评分的情况下通过计算概率预测出未知评分。
算法输入:已知目标用户对视频Vx之外的视频评分情况,以及其他用户对各视频的评分情况。
算法输出:确定目标用户对视频Vx的评分。
朴素贝叶斯实现起来比较简单,准确率较高,但是分类的时候需要学习全部样本的信息。因此,朴素贝叶斯分类更适用于数据量不大,类别较少的分类问题。
他以物品的内容描述信息为依据来做出推荐,本质上是基于对物品和用户自身的特征或属性的直接分析与计算。CB推荐方法是依赖于用户过去时的数据对现在时的用户进行推荐,所以不能像CF那样实现实现用户潜在兴趣的挖掘。
在CB推荐系统中,需要为每个物品创建一个物品画像用于记录该物品的内容固有属性,也需要为每个用户创建一个用户画像用于记录用户的特定偏好,物品/用户画像的本质是由一些表示特征的向量组成的。我们尝试使用向量来表示物品的所有属性,例如,由于演员是电影的一个属性,那么就假设每个演员都是这个属性的一个向量分量,其中,若向量中相应位置的演员有出演这部电影,则该向量中的对应位置值设为1,否则为0.同样的电影的导演、类型等其他固有属性也可以用0、1来表示。
我们用效用矩阵代表用户和物品之间的联系。对于用户喜欢的物品,我们可以做的最好预测是聚合这些物品画像。如果效用矩阵只有1这个取值,那么,最简单的聚合就是将效用矩阵中各个值为1的位置对应的物品画像中的向量取值求平均值得到结果。
例如,假设用户对电影的效用矩阵只有0和1两种取值,代表用户是否看过电影,若用户U看过的电影中由百分之30的电影都有演员王俊凯,那么用户U的用户画像中对应王俊凯的分量取值就是0.3.
如果效用矩阵不是布尔型,比如评分取值1~5,那么我们就可以通过数值来衡量物品相似度。将每个元素减去这个用户评分的平均值进行正则化是很有必要的。通过正则化,当用户物品评分低于均值时就会得到一个负值,当用户对物品评分高于均值时我们能得到一个正数。例如,考虑和上例相同的电影信息,但是现在效用矩阵的元素取值为1~5.假设用户U对于所有电影的平均分为3,其中4部电影有王俊凯参演,对应电影评分分别是3、4、5、4.那么在用户U的画像中,对应王俊凯的分量取值就是0、1、2、1的平均值,即为1.
该方法不考虑非结构化特征,不考虑反馈,单纯基于视频的内容固有属性来进行相似度计算及视频推荐。在内容过滤视频推荐系统中,最基础的就是抽取出特征,以及如何通过这些特征计算视频间的相似度。每个视频可以用特征向量矩阵来表示,通过该向量和用户偏好内容偏好进行加权内积,则可以得到该视频和用户喜好的相关程度,进而用相关程度排序就可以进行视频推荐了。
利用视频的基本信息和用户偏好内容的相似性进行视频推荐。通过分析用户已经观看过的电影的内容,如演员、导演、风格等,生成用户的偏好内容,然后推荐与用户感兴趣的电影内容相似度高的其他电影
视频信息(类型、演员、上映时间等)——内容分析器——视频特征矩阵(1)
用户行为(评价、分享、收藏、浏览的视频)——概要学习器——用户内容偏好(2)
(1)和(2)相似度计算——根据相似度排序——输出Top-k视频列表
算法输入:视频信息,用户行为日志。
算法输出:初始推荐结果。
1.视频表示:每个视频使用特征向量表示,分量为视频的特征属性,如视频名称、导演、主演等。
2.从“用户行为日志中”,获取该用户所浏览、收藏、评价、分享的视频集合M,根据视频集合M中视频的特征数据,可以学习得到用户的内容偏好。用户的喜好模型包括如下内容:
2.1视频的导演列表:每个导演之间用$符号隔开;
2.2视频的演员列表:每个演员之间用$符号隔开;
2.3通过计算用户喜好模型与每个视频特征向量间的相似度;
2.4对相似度进行排序,取Top-k个视频,为每个视频赋予解释。
3.保存Top-k个视频到“初始推荐结果中”。
这种方法尤其对新上线视频会马上被推荐非常有效,被推荐的机会与老的视频时相同的。
该方法重点考虑非结构化的处理
1.算法背景:
在实际的视频推荐中,上线视频往往还会结合用户给予的评论信息进行实时推荐。用户的评论一般分为评分与文字评论两种,前者通过分数直接反应用户对视频的喜恶,后者则需要我们从冗长的文字中提取关键信息。TF-IDF等技术被引入。
TF指的是某一个给定的词语在该文件中出现的次数,这个数字通常会被正则化,以防止它偏向长的文件(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否)。IDF是一个词语普遍重要性的度量,某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。
TF-IDF算法基于这样一个假设:若一个词语在目标文档中出现的频率高而在其他文档中出现的频率低,那么这个词语就可以用来区分出目标目标文档。这个假设需要掌握的由两点:
1.在本文档出现的频率高;
2.在其他文档出现的频率低。
因此,TF-IDF算法的计算可以分为词频TF和逆转文档频率IDF两部分,由TF和IDF的乘积来设置文档词语的权重。
TF指的是一个词语在文档中的出现频率。假设文档集包含的文档数为N,文档集中包含关键词Ki的文档数为Ni,Fij表示关键词Ki在文档Dj中出现的次数,Fdj表示文档Dj中出现的词语总数,Ki在文档Dj中的词频TFij定义为
TFij=Fij/Fdj
这个数字通常会被正则化,以防止它偏向长的文件(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否)。
IDF是一个词语普遍重要性的度量。ni/N表示某一词语在整个文档集中出现的频率,由它计算的结果取对数得到关键词ki的逆文档频率IDFi
IDFi=logN/ni
由TF和IDF计算词语的权重为TFij*IDFi=Fij/Fdj*logN/ni
可以看出,TF-IDF与词语在文档中的出现次数成正比,与该词在整个文档集中的出现次数成反比。在目标文档中,提取关键词的方法就是将该文档所有词语的TF-IDF计算出来并进行对比,取其中TF-IDF值最大的K个数组成目标文档的特征向量用以表示文档。在此,注意一点,文档中存在的停用词,如‘是’、‘的’之类的,对于文档的中心思想表达没有意义的词,在分词时需要先过滤掉再计算其他词语的TF-IDF值。
对于计算影评的TF-IDF,以电影“加勒比海盗:黑珍珠号的诅咒”为例,假设它总共由1000篇影评,其中一篇影评的总词语数为200,其中出现最频繁的词语为“海盗”、“船长”、“自由”出现最频繁,分别时20、15、10次,并且这三个词在所有影评中被提及的次数分别为1000、800、100就这三个词语作为关键词的顺序计算如下。
1.将影评中出现的停用词过滤掉,计算其他词语的词频,以出现最多的三个词为例进行计算如下。“海盗”出现的词频为20/200=0.1、“船长”出现的词频为0.075,“自由”出现的词频为0。05;
2.计算词语的逆文档频率如下。海盗的IDF为IDF=log1000/1000=0、船长出现的IDF为log(1000/800)=0.3,自由的IDF为log(1000/100)=1.
3.由1和2的计算的结果求出词语的TF-IDF结果,海盗为0、船长为00225,自由为0.05.通过对比可得,该篇影评的关键词排序应为:自由、船长、海盗。把这些词语的TF-IDF值作为它们的权重按照对应的顺序依次排列,就得到这篇影评的向量,我们就用这个向量来代表这篇影评,向量中每一个维度的大小对应这个属性的重要性。将总的影评集中所有的影评向量与特定的系数相乘求和,得到这部电影的综合影评向量,与电影的基本属性结合构建视频的物品画像,同理构建用户画像,可采用多种方法计算视频的物品画像和用户画像之间的相似度,为用户做出推荐。
该方法其实是一种接近无反馈的方法。
KNN算法基于这样的假设,如果在特征空间中,一个样本的K个最邻近样本中的大多数样本属于某一个类别,则该样本也属于这个类别,KNN算法通过计算样本个体间的距离或相似度来确定最近邻,算法的时间复杂度跟样本的个数直接相关。应用在推荐系统中时,KNN算法能够将与目标物品的内容的k个最相似物品推荐给用户。由于内容固有属性一旦创建就基本保持不变,所以基于内容固有属性的KNN最近邻计算不需要频繁的重复刷新。
由于KNN算法依赖于周围有限的已正确分类的邻居样本来对待分类样本进行分类,所以它更适合类域的交叉或重叠较多的待分类样本集的分类问题。同时,KNN算法的主要不足是当分类的各样本容量不平衡时,会出现计算结果不准确的问题,为了克服这个问题,就需要采用一些赋权值的方法来加以改进。
KNN在CB推荐算法中的应用与在CF推荐算法中的应用极为相似,它们都是要首先找到与目标物品相似的且已经被用户u评价过的k个物品,然后根据用户U对这K个物品的评价来预测其对目标物品的评价。它们的差别在于,CF推荐算法中的KNN时根据用户对物品的评分来计算物品间相似度的,而CB推荐算法中KNN是根据物品画像来计算物品间相似度的,所以对于后者来说,如何通过物品画像来计算物品间的相似度是算法中的关键步骤,相似度的计算可以使用杰卡德距离(对于结构化的数据)、余弦相似度(对于用向量空间模型表示的物品)或者Pearson相关系数的计算方法。KNN算法流程如下:
算法输入:用户已评分视频、目标视频i.
算法输出:用户对目标视频i的评分。
由于用户对视频的评分趋势各有不同,如有的用户评分严格,有的用户评分宽松,这种趋势被称为全局作用,所以也需要在KNN的基本模型中考虑到全局作用的影响。常用的全局作用有1.全局评分的平均值2.电影的被评分倾向、用户的评分倾向、以及用户第一次评分后相距当前的用时。将全局作用纳入在KNN模型的目标是为该全局作用计算出一个特定的参数,在计算这样的参数时,每次只考虑一个全局作用,并使用前一次计算全局作用时的预测评分与真实评分之差作为本次计算的真实评分。
该方法是一种侧重考虑反馈的方法
1.算法背景
Rocchio是从用户观看历史中抽取用户喜好的视频特征构建用户画像常用的一种算法是信息检索领域处理相关反馈的一个着名算法,它提供了如何通过用户观看视频的反馈计算用户特征向量中属性值的方法。举例来说,假如用户观看过星球大战和加勒比海盗并给予高分,那么根据用户的历史行为数据构建用户画像时,用户的特征向量可表示为{“动作”:1、“欧美”:1,“科幻”:0.5,“冒险”:0.5},当该用户观看电影“2012”并为其打了个低分时,用户特征向量更新为{“动作”:1、“欧美”:0.8,“科幻”:0.3,“冒险”:0.5}
在视频推荐系统中,Rocchio算法根据用户的历史数据对用户的原始特征向量不断地进行修改,实现实时更新用户画像的功能。Rocchio算法基于这样的假设:如果我们需要计算出最精确用户特征向量Uc,那么这个用户特征向量应该与用户喜欢的视频特征最相似,与用户讨厌的视频特征最不同。若V1表示用户喜欢的视频,Vh表示用户讨厌的视频,那么根据Rocchio算法的思想,定义最优的用户特征向量为:用户特征向量与用户喜欢的视频的相似度减去用户特征向量与用户讨厌的视频的相似度的最大值。在基于内容的视频推荐中,根据用户的历史行为数据建立用户画像,我们可以采用Rocchio算法不断地调整用户的特征向量Uc.
1.算法背景
构建基于内容的推荐系统的另外一个学习算法是基于决策树的推荐算法,不同于其他算法,该算法在训练阶段会生成一个显式的决策模型。决策树可以通过训练数据集构建并有效判断一个新的视频是否可能受用户喜欢,当视频的特征属性较少时采用决策树算法能够取得不错的效果,另外,决策树学习的思想也比较容易被人理解,在视频推荐理由的可解释方面较好。
2.算法原理
在视频推荐系统中,决策树的内部节点通常表示视频的特征属性,这些节点用于区分视频集合,例如,通过视频中是否包含这个特征将其进行分类。在只有两个分类的简单数据集中,用户是否对视频感兴趣一般出现在决策树的叶子节点上。
如当系统为用户A做推荐时,首先根据用户的历史观看记录和对视频的评分构建用户画像并得出一个结论:当视频是奇幻或冒险类型的喜剧片,该用户很可能会喜欢它,当系统为用户推荐一部新的视频,首先判断视频是否时喜剧,若视频不是喜剧,系统直接判定该用户不会喜欢这部视频并寻找新的视频继续进行决策判断:若视频时喜剧,那么系统接着判断视频是否属于奇幻或冒险题材,当视频满足其中一个条件时,系统将做出决策:该视频时该用户可能喜欢的视频:否则判定为用户不喜欢的类型。
1.算法背景:
将基于内容的视频推荐问题视为分类问题时,多种机器学习的方法都可以被采用。从一个更抽象的角度上看,大部分学习方法致力于找到一个可以准确区分用户喜欢和不喜欢的视频的线性分类模型系数。
将视频数据用n维特征向量进行表示,那么视频可用点在n维空间表示,线性分类器试图在给定的视频数据空间中找出一个能够将视频正确分类的平面,一类点尽可能在平面的某一边,另一类则在平面的另一边,在视频推荐中,就是将视频分为用户喜欢和不喜欢两类。例如,用户A只喜欢看喜剧电影,那么划分用户A观看视频类别的分界条件就是视频是否为喜剧。
2.算法原理
基于线性分类器的CB推荐算法通过视频特征的线性组合进行分类,若输入的视频特征向量为V,输出的结果y表示用户是否喜欢视频,则线性分类器可以表示为视频特征向量对应的权重和V向量的内积,然后根据输入的视频特征属性做出决定输出结果。
二维的分类器扩展为在多维中划分类别界限的超平面。
使用线性分类器的另一个挑战是处理数据的噪声。数据集上的视频向量若存在噪声分量则可能会导致错误的分类结果。另外,也有可能存在噪声视频,由于不知名的原因错误的分类或者处于分类的边缘地带,这种噪声在数据中的识别并不容易,这些问题在使用线性分类器时需要注意。
1.算法背景
贝叶斯定理描述在一个随机事件发生下另一个随机事件发生的条件概率的定理。朴素贝叶斯算法是一种常用的分类方法,基于朴素贝叶斯的推荐系统判断用户是否对某个视频有兴趣的方法是将这个问题转化为分类问题,例如,将其分为两类,一类是喜欢,另一类是不喜欢,朴素贝叶斯算法假设用户和视频的特征向量中的各个分量相互之间独立并成功的应用在基于内容的视频推荐系统中。
2.计算原理
视频推荐系统中,分类C下的一个视频的特征属性Vi的条件概率用Vi在分类C下所有视频中出现的频率近似表示。即它等于Vi在标记为C的视频中出现的次数(即频度),除以在这些视频中出现的所有特征属性的个数,为了预防计算概率为0的情况,对式子进行平滑论,即分子加1,分母加所有视频中的出现的不同特征属性数(类似文章的词汇量)。
基于知识的推荐方法,是区别基于CB和基于CF的常见推荐方法。知识表示是一组为实现知识形式化描述而做的约定,是把知识客体中的知识因子与知识关联起来,便于人们的识别和对知识的理解,它是知识组织的前提和基础,任何知识组织方法都是建立在知识表示的基础上。
基于知识的推荐方法是针对该领域的特殊需求和更为精细的结构化内容,包括专业性的优质特征,帮助提高搜索引擎在特定领域的服务。以视频推荐为例,一部电影的上映时间和档期热度,哪些导演指导的一定是大片,变形金刚和指环王系列口碑肯定不会差到多少等,都是非常有价值的推荐信息。因此,推荐系统需要利用特定领域相关的或者常识相关的额外的因果知识生成推荐或者辅助推荐决策。
此外,基于知识的推荐,也是更加容易满足主观个性化需求的方法。例如,只要是VIP付费用户,如果配置了偏好类型,就可以为其提供更加专注、精准和深入的推荐服务。这里主要是面向两种常见的知识展开基于知识的推荐方法描述:一种是约束知识,主要面向人工知识库,构建if-then推荐规则;另一种是关联知识,利用数据挖掘理论构建基于数据规律的自动学习的推荐规则。
Ⅳ 朴素贝叶斯分类原理
贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算法。在许多场合,朴素贝叶斯(Naïve Bayes,NB)分类算法可以与决策树和神经网络分类算法相媲美,该算法能运用到大型数据库中,而且方法简单、分类准确率高、速度快。
由于贝叶斯定理假设一个属性值对给定类的影响独立于其它属性的值,而此假设在实际情况中经常是不成立的,因此其分类准确率可能会下降。
Ⅳ 朴素贝叶斯的应用
和决策树模型相比,朴素贝叶斯分类器(Naive Bayes Classifier,或 NBC)发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。
解决这个问题的方法一般是建立一个属性模型,对于不相互独立的属性,把他们单独处理。例如中文文本分类识别的时候,我们可以建立一个字典来处理一些词组。如果发现特定的问题中存在特殊的模式属性,那么就单独处理。
这样做也符合贝叶斯概率原理,因为我们把一个词组看作一个单独的模式,例如英文文本处理一些长度不等的单词,也都作为单独独立的模式进行处理,这是自然语言与其他分类识别问题的不同点。
实际计算先验概率时候,因为这些模式都是作为概率被程序计算,而不是自然语言被人来理解,所以结果是一样的。
在属性个数比较多或者属性之间相关性较大时,NBC模型的分类效率比不上决策树模型。但这点有待验证,因为具体的问题不同,算法得出的结果不同,同一个算法对于同一个问题,只要模式发生变化,也存在不同的识别性能。这点在很多国外论文中已经得到公认,在机器学习一书中也提到过算法对于属性的识别情况决定于很多因素,例如训练样本和测试样本的比例影响算法的性能。
决策树对于文本分类识别,要看具体情况。在属性相关性较小时,NBC模型的性能稍微良好。属性相关性较小的时候,其他的算法性能也很好,这是由于信息熵理论决定的。
Ⅵ 数据挖掘十大经典算法(1)——朴素贝叶斯(Naive Bayes)
在此推出一个算法系列的科普文章。我们大家在平时埋头工程类工作之余,也可以抽身对一些常见算法进行了解,这不仅可以帮助我们拓宽思路,从另一个维度加深对计算机技术领域的理解,做到触类旁通,同时也可以让我们搞清楚一些既熟悉又陌生的领域——比如数据挖掘、大数据、机器学习——的基本原理,揭开它们的神秘面纱,了解到其实很多看似高深的领域,其实背后依据的基础和原理也并不复杂。而且,掌握各类算法的特点、优劣和适用场景,是真正从事数据挖掘工作的重中之重。只有熟悉算法,才可能对纷繁复杂的现实问题合理建模,达到最佳预期效果。
本系列文章的目的是力求用最干练而生动的讲述方式,为大家讲解由国际权威的学术组织the IEEE International Conference on Data Mining (ICDM) 于2006年12月评选出的数据挖掘领域的十大经典算法。它们包括:
本文作为本系列的第一篇,在介绍具体算法之前,先简单为大家铺垫几个数据挖掘领域的常见概念:
在数据挖掘领域,按照算法本身的行为模式和使用目的,主要可以分为分类(classification),聚类(clustering)和回归(regression)几种,其中:
打几个不恰当的比方 :
另外,还有一个经常有人问起的问题,就是 数据挖掘 和 机器学习 这两个概念的区别,这里一句话阐明我自己的认识:机器学习是基础,数据挖掘是应用。机器学习研制出各种各样的算法,数据挖掘根据应用场景把这些算法合理运用起来,目的是达到最好的挖掘效果。
当然,以上的简单总结一定不够准确和严谨,更多的是为了方便大家理解打的比方。如果大家有更精当的理解,欢迎补充和交流。
好了,铺垫了这么多,现在终于进入正题!
作为本系列入门的第一篇,先为大家介绍一个容易理解又很有趣的算法—— 朴素贝叶斯 。
先站好队,朴素贝叶斯是一个典型的 有监督的分类算法 。
光从名字也可以想到,要想了解朴素贝叶斯,先要从 贝叶斯定理 说起。
贝叶斯定理是我们高中时代学过的一条概率学基础定理,它描述了条件概率的计算方式。不要怕已经把这些知识还给了体育老师,相信你一看公式就能想起来。
P(A|B)表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。其基本求解公式为:
其中,P(AB)表示A和B同时发生的概率,P(B)标识B事件本身的概率。
贝叶斯定理之所以有用,是因为我们在生活中经常遇到这种情况:我们可以很容易直接得出P(A|B),P(B|A)则很难直接得出,但我们更关心P(B|A)。
而贝叶斯定理就为我们打通从P(A|B)获得P(B|A)的道路。
下面不加证明地直接给出贝叶斯定理:
有了贝叶斯定理这个基础,下面来看看朴素贝叶斯算法的基本思路。
你看,其思想就是这么的朴素。那么,属于每个分类的概率该怎么计算呢?下面我们先祭出形式化语言!
那么现在的关键就是如何计算第3步中的各个条件概率。我们可以这么做:
因为分母对于所有类别为常数,因为我们只要将分子最大化皆可。又因为各特征属性是条件独立的,所以有:
如果你也跟我一样,对形式化语言有严重生理反应,不要怕,直接跳过前面这一坨,我们通过一个鲜活的例子,用人类的语言再解释一遍这个过程。
某个医院早上收了六个门诊病人,如下表。
现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他最有可能患有何种疾病?
本质上,这就是一个典型的分类问题, 症状 和 职业 是特征属性, 疾病种类 是目标类别
根据 贝叶斯定理
可得
假定"打喷嚏"和"建筑工人"这两个特征是独立的,因此,上面的等式就变成了
这是可以计算的。
因此,这个打喷嚏的建筑工人,有66%的概率是得了感冒。同理,可以计算这个病人患上过敏或脑震荡的概率。比较这几个概率,就可以知道他最可能得什么病。
接下来,我们再举一个朴素贝叶斯算法在实际中经常被使用的场景的例子—— 文本分类器 ,通常会用来识别垃圾邮件。
首先,我们可以把一封邮件的内容抽象为由若干关键词组成的集合,这样是否包含每种关键词就成了一封邮件的特征值,而目标类别就是 属于垃圾邮件 或 不属于垃圾邮件
假设每个关键词在一封邮件里出现与否的概率相互之间是独立的,那么只要我们有若干已经标记为垃圾邮件和非垃圾邮件的样本作为训练集,那么就可以得出,在全部垃圾邮件(记为Trash)出现某个关键词Wi的概率,即 P(Wi|Trash)
而我们最重要回答的问题是,给定一封邮件内容M,它属于垃圾邮件的概率是多大,即 P(Trash|M)
根据贝叶斯定理,有
我们先来看分子:
P(M|Trash) 可以理解为在垃圾邮件这个范畴中遇见邮件M的概率,而一封邮件M是由若干单词Wi独立汇聚组成的,只要我们所掌握的单词样本足够多,因此就可以得到
这些值我们之前已经可以得到了。
再来看分子里的另一部分 P(Trash) ,这个值也就是垃圾邮件的总体概率,这个值显然很容易得到,用训练集中垃圾邮件数除以总数即可。
而对于分母来说,我们虽然也可以去计算它,但实际上已经没有必要了,因为我们要比较的 P(Trash|M) 和 P(non-Trash|M) 的分母都是一样的,因此只需要比较分子大小即可。
这样一来,我们就可以通过简单的计算,比较邮件M属于垃圾还是非垃圾二者谁的概率更大了。
朴素贝叶斯的英文叫做 Naive Bayes ,直译过来其实是 天真的贝叶斯 ,那么他到底天真在哪了呢?
这主要是因为朴素贝叶斯的基本假设是所有特征值之间都是相互独立的,这才使得概率直接相乘这种简单计算方式得以实现。然而在现实生活中,各个特征值之间往往存在一些关联,比如上面的例子,一篇文章中不同单词之间一定是有关联的,比如有些词总是容易同时出现。
因此,在经典朴素贝叶斯的基础上,还有更为灵活的建模方式—— 贝叶斯网络(Bayesian Belief Networks, BBN) ,可以单独指定特征值之间的是否独立。这里就不展开了,有兴趣的同学们可以做进一步了解。
最后我们来对这个经典算法做个点评:
优点:
缺点:
好了,对于 朴素贝叶斯 的介绍就到这里,不知道各位看完之后是否会对数据挖掘这个领域产生了一点兴趣了呢?
Ⅶ 朴素贝叶斯的推理学习算法
朴素贝叶斯的推理学习算法
贝叶斯公式简易推导式:
朴素贝叶斯的朴素在于假设B特征的每个值相互独立,所以朴素贝叶斯的公式是这样的
学习与分类算法:
(1)计算先验概率和条件概率
拉普拉斯平滑:
(2)代入被测样本向量,得到不同类别P,再根据后验概率最大化,取P最大的类别作为该标签类别。
朴素贝叶斯优点在于对于小规模数据很好,适合多分类。缺点是数据输入形式敏感而且特征值之间的相互独立很难保证带来的影响。
Ⅷ 朴素贝叶斯算法
贝叶斯算法是由英国数学家托马斯·贝叶斯提出的,这个算法的提出是为了解决“逆向概率”的问题。首先我们先来解释下正向概率与逆向概率的含义:
正向概率 :假设一个箱子里有5个黄色球和5个白色球,随机从箱子里拿出一个球,请问取出的是黄球的概率是多少?很容易计算P(黄球)= N(黄球)/N(黄球)+ N(白球) = 5/5+5 = 1/2。
逆向概率 :起初我们并不知道箱子里有多少个球,我们依次从箱子里取出10个球,发现这个10个球中有7个白球,3个黄球,那么我们会根据我们观察到的结果去推测箱子里白球与黄球的分布比例大概是7:3,但是我们无法推测出箱子里的球的个数。
贝叶斯算法是一种基于概率统计的机器学习算法,它会计算出每种情况发生的概率,然后对其进行分类,贝叶斯算法经常用于文本分类问题和垃圾邮件过滤问题。假设有一篇新闻报道news report,我们使用贝叶斯算法来判断它们的类别,结果如下:
p(politics|news) = 0.2
p(entertainment|news) = 0.4
p(sports|news) = 0.7
因为p(sports|news)的概率最大,所以我们判断这篇新闻报道为体育类报道。“|”左边为要判断的类别,右边是我们给定的文章。
贝叶斯公式推导
接下来,我们将通过一个例子来推导贝叶斯公式。在一所学校里,男生和女生的比例分别是60%和40%,男生全部穿长裤,女生一半穿长裤,一半穿裙子。现迎面走来一个同学,你只能看清他(她)穿的是长裤,而无法分辨出他(她)的性别,请问他(她)是女生的概率?
下面我们逐步计算这个问题:
假设学校里的学生总数为N。
男生人数:N * P(boys),女生人数:N * P(girls)。
穿长裤的男生人数:N * P(boys) * P(pants|boys),其中P(pants|boys)是条件概率的表达形式,意思是男生中穿长裤的概率。因为男生都穿长裤,所以N * P(boys) * P(pants|boys) = 60% * N。
穿长裤的女生的人数:N * P(girs) * P(pants|girls) = 0.2 * N。
穿长裤的总人数:N * P(boys) * P(pants|boys) + N * P(girs) * P(pants|girls)
穿长裤的同学是女生的概率:P(girl|pants) = N * P(girs) * P(pants|girls) / N * P(boys) * P(pants|boys) + N * P(girs) * P(pants|girls) = P(girs)*P(pants|girls) / P(pants),分母用P(pants)表示穿长裤的概率。
最终结果:P(girl | pants) = P(pants | girl) * P(girl) / P(pants)
其中:P(girl)我们称为先验概率,是已知值,在这个例子中P(girl) = 40%。先验概率:根据以往的经验和分析得到的结果,先验概率和其他条件的影响不受样本影响。
P(girl | pants)我们称为后验概率,根据观察到的结果,去反推是女生的概率。
贝叶斯数学表达式
贝叶斯算法在垃圾邮件过滤中的应用
给定一封邮件,判定它是否属于垃圾邮件?用D 来表示这封邮件,注意D 由N 个单词组成。我们用h+ 来表示垃圾邮件,h-表示正常邮件。
有贝叶斯公式可得:
P(h+ | D) = P(D | h+) * P(h+) / P(D)
P(h- | D) = P(D | h-) * P(h-) / P(D)
其中P(h+),P(h-)为先验概率,假如我们有1000封邮件,其中有50封是垃圾邮件,其他都是正常邮件,那么P(h+),P(h-)的概率就是已知的。两个式子的分母都是P(D),所以P(D)对于最终结果的比较是没有影响的。接下来就是要求P(D | h+),P(D | h-)垃圾邮件中或正常邮件中是邮件D的概率。
我们都知道一封邮件是由许多词构成的,所以我们将P(D | h+)的表达式转化为P(d1,d2,d3......dn | h+),就是看垃圾邮件中出现d1,d2...dn这些词的概率是多少。
P(d1,d2,d3......dn | h+) = P(d1 | h+) * P(d2 |d1,h+) * P(d3 |d1,d2,h+) ...
这个式子计算起来非常困难,所以在这里我们做一个假设,假设每个词都是独立的并且互不影响,那么这个式子就可以表示为:
P(d1,d2,d3......dn | h+) = P(d1 | h+) * P(d2 | h+) * P(d3 | h+) ...P(dn | h+)
P(h+ | D) = {P(d1 | h+) * P(d2 | h+) * P(d3 | h+) ...P(dn | h+)}* P(h+) / P(D)
上述这个式子我们就称为朴素贝叶斯公式,朴素贝叶斯公式是对贝叶斯公式的简化,它建立在每个条子互相独立的基础上。
在现实生活中,我们写的每一句话中词与词之间肯定是有相互联系,如果没有联系,那么这句话是读不通的。那么为什么朴素贝叶斯能够在计算中使用,首先是计算简单,其次对最终结果的影响非常小。
参考资料
1.唐宇迪,《机器学习与数据分析实战》课程。
2.Peter,《机器学习实战》。
Ⅸ 分类算法 - 朴素贝叶斯算法
相信很多同学在高中或者大学的时候都学过贝叶斯原理,即条件原理。
现分别有 A、B 两个容器,在容器 A 里分别有 7 个红球和 3 个白球,在容器 B 里有 1 个红球和 9 个白球,现已知从这两个容器里任意抽出了一个红球,问这个球来自容器 A 的概率是多少?
假设已经抽出红球为事件 B,选中容器 A 为事件 A,则有:P(B) = 8/20,P(A) = 1/2,P(B|A) = 7/10,按照公式,则有:P(A|B) = (7/10)*(1/2) / (8/20) = 0.875
之所以称为朴素贝叶斯, 是因为它假设每个输入变量是独立的。 现实生活中这种情况基本不满足,但是这项技术对于绝大部分的复杂问题仍然非常有效。
朴素贝叶斯模型由两种类型的概率组成:
1、每个类别的概率P(Cj);
2、每个属性的条件概率P(Ai|Cj)。
为了训练朴素贝叶斯模型,我们需要先给出训练数据,以及这些数据对应的分类。那么上面这两个概率,也就是类别概率和条件概率。他们都可以从给出的训练数据中计算出来。一旦计算出来,概率模型就可以使用贝叶斯原理对新数据进行预测。
贝叶斯原理、贝叶斯分类和朴素贝叶斯这三者之间是有区别的
贝叶斯原理是最大的概念,它解决了概率论中“逆向概率”的问题,在这个理论基础上,人们设计出了贝叶斯分类器,朴素贝叶斯分类是贝叶斯分类器中的一种,也是最简单,最常用的分类器。朴素贝叶斯之所以朴素是因为它假设属性是相互独立的,因此对实际情况有所约束, 如果属性之间存在关联,分类准确率会降低。
(1) 算法逻辑简单,易于实现
(2)分类过程中时空开销小(假设特征相互独立,只会涉及到二维存储)
(1)理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。
(2)在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
库有3种算法:GaussianNB、MultinomialNB和BernoulliNB。
这三个类适用的分类场景各不相同,主要根据数据类型来进行模型的选择。一般来说,如果样本特征的分布大部分是连续值,使用GaussianNB会比较好。如果如果样本特征的分大部分是多元离散值,使用MultinomialNB比较合适。而如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB。
Ⅹ 朴素贝叶斯算法是什么
朴素贝叶斯方法是在贝叶斯算法的基础上进行了相应的简化,即假定给定目标值时属性之间相互条件独立。
也就是说没有哪个属性变量对于决策结果来说占有着较大的比重,也没有哪个属性变量对于决策结果占有着较小的比重。虽然这个简化方式在一定程度上降低了贝叶斯分类算法的分类效果,但是在实际的应用场景中,极大地简化了贝叶斯方法的复杂性。
朴素贝叶斯分类(NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入X求出使得后验概率最大的输出Y。
个人贡献:
贝叶斯在数学方面主要研究概率论。他首先将归纳推理法用于概率论基础理论,并创立了贝叶斯统计理论,对于统计决策函数、统计推断、统计的估算等做出了贡献。1763年发表了这方面的论着,对于现代概率论和数理统计都有很重要的作用。贝叶斯的另一着作《机会的学说概论》发表于1758年.贝叶斯所采用的许多术语被沿用至今。
他对统计推理的主要贡献是使用了"逆概率"这个概念,并把它作为一种普遍的推理方法提出来。贝叶斯定理原本是概率论中的一个定理,这一定理可用一个数学公式来表达,这个公式就是着名的贝叶斯公式。