导航:首页 > 源码编译 > 朴素贝叶斯算法预测隐形眼镜

朴素贝叶斯算法预测隐形眼镜

发布时间:2022-12-19 19:37:04

⑴ 数据挖掘十大经典算法之朴素贝叶斯

朴素贝叶斯,它是一种简单但极为强大的预测建模算法。之所以称为朴素贝叶斯,**是因为它假设每个输入变量是独立的。**这个假设很硬,现实生活中根本不满足,但是这项技术对于绝大部分的复杂问题仍然非常有效。

贝叶斯原理、贝叶斯分类和朴素贝叶斯这三者之间是有区别的。

贝叶斯原理是最大的概念,它解决了概率论中“逆向概率”的问题,在这个理论基础上,人们设计出了贝叶斯分类器,朴素贝叶斯分类是贝叶斯分类器中的一种,也是最简单,最常用的分类器。朴素贝叶斯之所以朴素是因为它假设属性是相互独立的,因此对实际情况有所约束,**如果属性之间存在关联,分类准确率会降低。**不过好在对于大部分情况下,朴素贝叶斯的分类效果都不错。

朴素贝叶斯分类器依靠精确的自然概率模型,在有监督学习的样本集中能获取得非常好的分类效果。在许多实际应用中,朴素贝叶斯模型参数估计使用最大似然估计方法,换而言之朴素贝叶斯模型能工作并没有用到贝叶斯概率或者任何贝叶斯模型。

朴素贝叶斯分类 常用于文本分类 ,尤其是对于英文等语言来说,分类效果很好。它常用于垃圾文本过滤、情感预测、推荐系统等。

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

⑵ 第10天:NLP补充——朴素贝叶斯(Naive-Bayes)

1、引言
  贝叶斯方法是一个历史悠久,朴素贝叶斯中的朴素一词的来源就是假设各特征之间相互独立。这一假设使得朴素贝叶斯算法变得简单,但有时会牺牲一定的分类准确率。当然有着坚实的理论基础的方法,同时处理很多问题时直接而又高效,很多高级自然语言处理模型也可以从它演化而来。因此,学习贝叶斯方法,是研究自然语言处理问题的一个非常好的切入口。
2、贝叶斯公式
贝叶斯公式其实很简单,但是很常用,就一行:

  而我们二分类问题的最终目的就是要判断 P(“属于某类”|“具有某特征”) 是否大于1/2就够了。贝叶斯方法把计算“具有某特征的条件下属于某类”的概率转换成需要计算“属于某类的条件下具有某特征”的概率,而后者获取方法就简单多了,我们只需要找到一些包含已知特征标签的样本,即可进行训练。而样本的类别标签都是明确的,所以贝叶斯方法在机器学习里属于有监督学习方法。
  这里再补充一下,一般‘先验概率’、‘后验概率’是相对出现的,比如 P(Y)与 P(Y|X) 是关于 Y的先验概率与后验概率, P(X)与 P(X|Y)是关于 X的先验概率与后验概率。
4、垃圾邮件识别
  我们可以通过一个例子来对邮件进行分类,识别垃圾邮件和普通邮件,如果我们选择使用朴素贝叶斯分类器,那目标就是判断 P(“垃圾邮件”|“具有某特征”) 是否大于1/2。现在假设我们有垃圾邮件和正常邮件各1万封作为训练集。需要判断以下这个邮件是否属于垃圾邮件:

也就是判断概率 P(“垃圾邮件”|“我司可办理正规发票(保真)17%增值税发票点数优惠!”)是否大于1/2。我们不难发现:通过上述的理解,也就是将其转换成的这个概率,计算的方法:就是写个计数器,然后+1 +1 +1统计出所有垃圾邮件和正常邮件中出现这句话的次数啊。也就是:

  于是当我们接触到了中文NLP中,其中最为重要的技术之一:分词!!!也就是把一整句话拆分成更细粒度的词语来进行表示。另外,分词之后去除标点符号、数字甚至无关成分(停用词)是特征预处理中的一项技术。我们观察(“我”,“司”,“可”,“办理”,“正规发票”,“保真”,“增值税”,“发票”,“点数”,“优惠”),这可以理解成一个向量:向量的每一维度都表示着该特征词在文本中的特定位置存在。这种将特征拆分成更小的单元,依据这些更灵活、更细粒度的特征进行判断的思维方式,在自然语言处理与机器学习中都是非常常见又有效的。因此贝叶斯公式就变成了:

1、朴素贝叶斯(Naive Bayes),“Naive”在何处?
  加上条件独立假设的贝叶斯方法就是朴素贝叶斯方法(Naive Bayes)。将句子(“我”,“司”,“可”,“办理”,“正规发票”) 中的 (“我”,“司”)与(“正规发票”)调换一下顺序,就变成了一个新的句子(“正规发票”,“可”,“办理”, “我”, “司”)。新句子与旧句子的意思完全不同。但由于乘法交换律,朴素贝叶斯方法中算出来二者的条件概率完全一样!计算过程如下:

其中“发票”重复了三次。
3、处理重复词语的三种方式
(1)、多项式模型:
  如果我们考虑重复词语的情况,也就是说,重复的词语我们视为其出现多次,直接按条件独立假设的方式推导,则有:

统计计算 P(“词语”|S)时也是如此。

我们扫描一下训练集,发现“正规发票”这个词从出现过!!! ,于是 P(“正规发票”|S)=0 …问题严重了,整个概率都变成0了!!!朴素贝叶斯方法面对一堆0,很凄惨地失效了…更残酷的是这种情况其实很常见,因为哪怕训练集再大,也可能有覆盖不到的词语。本质上还是样本数量太少,不满足大数定律,计算出来的概率失真 *。为了解决这样的问题,一种分析思路就是直接不考虑这样的词语,但这种方法就相当于默认给P(“正规发票”|S)赋值为1。其实效果不太好,大量的统计信息给浪费掉了。我们进一步分析,既然可以默认赋值为1,为什么不能默认赋值为一个很小的数?这就是平滑技术的基本思路,依旧保持着一贯的作风,朴实/土但是直接而有效。对于伯努利模型,P(“正规发票”|S)的一种平滑算法是:

接下来的核心问题就是训练出一个靠谱的分类器。首先需要有打好标签的文本。这个好找,豆瓣影评上就有大量网友对之前电影的评价,并且对电影进行1星到5星的评价。我们可以认为3星以上的评论都是好评,3星以下的评论都是差评。这样就分别得到了好评差评两类的语料样本。剩下就可以用朴素贝叶斯方法进行训练了。基本思路如下:

但是由于自然语言的特点,在提取特征的过程当中,有一些tricks需要注意:

当然经过以上的处理,情感分析还是会有一部分误判。这里涉及到许多问题,都是情感分析的难点:

(2)、拼写纠错
  拼写纠错本质上也是一个分类问题。但按照错误类型不同,又分为两种情况:

真词错误复杂一些,我们将在接下来的文章中进行探讨。而对于非词错误,就可以直接采用贝叶斯方法,其基本思路如下:

训练样本1:该场景下的正常用词语料库,用于计算 P(候选词i)。

训练样本2:该场景下错误词与正确词对应关系的语料库,用于计算 P(错误词|候选词i)

当然,朴素贝叶斯也是有缺陷的。比如我们知道朴素贝叶斯的局限性来源于其条件独立假设,它将文本看成是词袋子模型,不考虑词语之间的顺序信息,例如:朴素贝叶斯会把“武松打死了老虎”与“老虎打死了武松”认作是一个意思。那么有没有一种方法提高其对词语顺序的识别能力呢?当然有,就是这里要提到的N-gram语言模型。接下来详细给大家介绍N-gram语言模型。

1、从假设性独立到联合概率链规则
 与我们之前我们垃圾邮件识别中的条件独立假设是一样的:

4、N-gram实际应用举例
(1)、词性标注
  词性标注是一个典型的多分类问题。常见的词性包括名词、动词、形容词、副词等。而一个词可能属于多种词性。如“爱”,可能是动词,可能是形容词,也可能是名词。但是一般来说,“爱”作为动词还是比较常见的。所以统一给“爱”分配为动词准确率也还足够高。这种最简单粗暴的思想非常好实现,如果准确率要求不高则也比较常用。它只需要基于词性标注语料库做一个统计就够了,连贝叶斯方法、最大似然法都不要用。词性标注语料库一般是由专业人员搜集好了的,长下面这个样子。其中斜线后面的字母表示一种词性,词性越多说明语料库分得越细;需要比较以下各概率的大小,选择概率最大的词性即可:

将公式进行以下改造,比较各概率的大小,选择概率最大的词性:

N-gram分类器是结合贝叶斯方法和语言模型的分类器。这里用 Y1,Y2分别表示这垃圾邮件和正常邮件,用 X表示被判断的邮件的句子。根据贝叶斯公式有:

比较这些概率的大小,找出使得 P(Yi|X)最大的 Yi即可得到 X 所属的分类(分词方案)了。Yi作为分词方案,其实就是个词串,比如(“我司”,“可”,“办理”,“正规发票”)(“我”,“司可办”,“理正规”,“发票”),也就是一个向量了。而上面贝叶斯公式中 P(X|Yi)项的意思就是在分类方案 Yi的前提下,其对应句子为 X的概率。而无论分词方案是(“我司”,“可”,“办理”,“正规发票”)还是(“我”,“司可办”,“理正规”,“发票”),或者其他什么方案,其对应的句子都是“我司可办理正规发票”。也就是说任意假想的一种分词方式之下生成的句子总是唯一的(只需把分词之间的分界符号扔掉剩下的内容都一样)。于是可以将 P(X|Yi)看作是恒等于1的。这样贝叶斯公式又进一步化简成为:

也就是说我们

⑶ 朴素贝叶斯(Naive Bayes)模型

贝叶斯为了解决一个叫“逆向概率”问题写了一篇文章,尝试解答在没有太多可靠证据的情况下,怎样做出更符合数学逻辑的推测

“逆向概率”是相对“正向概率”而言

正向概率,比较容易理解,比如我们已经知道袋子里面有N 个球,不是黑球就是白球,其中M个是黑球,那么把手伸进去摸一个球,就能知道摸出黑球的概率是多少 => 这种情况往往是 上帝视角 ,即了解了事情的全貌再做判断

逆向概率,贝叶斯则从实际场景出发,提了一个问题:如果我们事先不知道袋子里面黑球和白球的比例,而是通过我们摸出来的球的颜色,能判断出袋子里面黑白球的比例么?

贝叶斯原理:

影响了接下来近200年的统计学理论

建立在主观判断的基础上:在我们不了解所有客观事实的情况下,同样可以先估计一个值

先验概率 ,通过经验来判断事情发生的概率

后验概率 ,就是发生结果之后,推测原因的概率

条件概率 ,事件A 在另外一个事件B已经发生条件下的发生概率,表示为P(A|B)

似然函数 ,把概率模型的训练过程理解为求参数估计的过程

比如,一个硬币在10次抛落中正面均朝上 => 那么这个硬币是均匀的可能性是多少?这里硬币均匀就是个参数,似然函数就是用来衡量这个模型的参数

经过推导,贝叶斯推理告诉我们后验概率是与先验概率和似然函数成正比得,即

Thinking:假设有一种病叫做“贝叶死”,它的发病率是万分之一,即10000 人中会有1个人得病。现有一种测试可以检验一个人是否得病的准确率是99.9%,误报率(假阳)是0.1%

那么,如果一个人被查出来患有“叶贝死”,实际上患有的可能性有多大?

查出患有“贝叶死”的准确率是99.9%,是不是实际上患“贝叶死”的概率也是99.9%?)

在10000个人中,还存在0.1%的误查的情况,也就是10个人没有患病但是被诊断成阳性。当然10000个人中,也确实存在一个患有贝叶死的人,他有99.9%的概率被检查出来

可以粗算下,患病的这个人实际上是这11个人里面的一员,即实际患病比例是1/11≈9%

贝叶斯原理就是求解后验概率,假设:A 表示事件 “测出为阳性”, B1 表示“患有贝叶死”, B2 表示“没有患贝叶死”

患有贝叶死的情况下,测出为阳性的概率为 P(A|B1)=99.9%

没有患贝叶死,但测出为阳性的概率为 P(A|B2)=0.1%

患有贝叶死的概率为  P(B1)=0.01%

没有患贝叶死的概率 P(B2)=99.99%

那么我们检测出来为阳性,而且是贝叶死的概率P(B1,A)=P(B1)*P(A|B1)=0.01%*99.9%=0.00999% ≈0.01%

P(B1,A)代表的是联合概率,同样我们可以求得P(B2,A)=P(B2)*P(A|B2)=99.99%*0.1%=0.09999% ≈0.1%

检查为阳性的情况下,患有贝叶死的概率,即P(B1|A)

检查出是阳性的条件下,但没有患有贝叶死的概率为

0.01%+0.1%均出现在了P(B1|A)和P(B2|A)的计算中作为分母,称之为论据因子,也相当于一个权值因子

我们可以总结出贝叶斯公式

从而我们可以得到通用的贝叶斯公式

一种简单但极为强大的预测建模算法

假设每个输入变量是独立的。这是一个强硬的假设,实际情况并不一定,但是这项技术对于绝大部分的复杂问题仍然非常有效

朴素贝叶斯模型由两种类型的概率组成:

每个类别的概率P(Cj)

每个属性的条件概率P(Ai|Cj)

什么是类别概率:

假设我有7个棋子,其中3个是白色的,4个是黑色的

那么棋子是白色的概率就是3/7,黑色的概率就是4/7 => 这个是类别概率

什么是条件概率:

假设我把这7个棋子放到了两个盒子里,其中盒子A里面有2个白棋,2个黑棋;盒子B里面有1个白棋,2个黑棋

那么在盒子A中抓到白棋的概率就是1/2,抓到黑棋的概率也是1/2,这个就是条件概率,也就是在某个条件(比如在盒子A中)下的概率

在朴素贝叶斯中,我们要统计的是属性的条件概率,也就是假设取出来的是白色的棋子,那么它属于盒子A的概率是2/3

Step1:先给出训练数据,以及这些数据对应的分类

Step2,计算类别概率和条件概率

Step3,使用概率模型(基于贝叶斯原理)对新数据进行预测

朴素贝叶斯分类(离散值):

如何根据身高,体重,鞋码,判断是否为男女,比如一个新的数据:身高“高”、体重“中”,鞋码“中” => 男 or 女?

求在A1、A2、A3属性下,Cj的概率

因为一共有2个类别,所以我们只需要求得P(C1|A1A2A3)和P(C2|A1A2A3)的概率即可,然后比较下哪个分类的可能性大,就是哪个分类结果

分别求下这些条件下的概率:

P(A1|C1)=1/2, P(A2|C1)=1/2, P(A3|C1)=1/4

P(A1|C2)=0, P(A2|C2)=1/2, P(A3|C2)=1/2

所以P(A1A2A3|C1)=1/16, P(A1A2A3|C2)=0

因为P(A1A2A3|C1)P(C1)>P(A1A2A3|C2)P(C2),所以应该是C1类别,即男性

身高180、体重120,鞋码41,请问该人是男是女呢

可以假设男性和女性的身高、体重、鞋码都是 正态分布 ,通过样本计算出均值和方差,也就是得到 正态分布 的密度函数。有了密度函数,就可以把值代入,算出某一点的值

比如,男性的身高是 均值 179.5、 标准差 为3.697的正态分布。所以男性的身高为180的概率为0.1069

同理可以计算得出男性体重为120的概率为0.000382324,男性鞋码为41号的概率为0.120304111

P(A1A2A3|C1)=P(A1|C1)P(A2|C1)P(A3|C1)=0.1069*0.000382324*0.120304111=4.9169e-6

P(A1A2A3|C2)=P(A1|C2)P(A2|C2)P(A3|C2)=0.00000147489*0.015354144*0.120306074=2.7244e-9

很明显这组数据分类为男的概率大于分类为女的概率

NORMDIST(x,mean,standard_dev,cumulative)

x:正态分布中,需要计算的数值;

Mean:正态分布的平均值;

Standard_dev:正态分布的标准差;

Cumulative:取值为逻辑值,即False或True,决定了函数的形式当为True时,函数结果为累积分布

当为False时,函数结果为 概率密度

NORMDIST(180,179.5,3.697,0)=0.1069

stats.norm.pdf(x, mu, sigma)

返回参数为 和    的正态分布密度函数在x处的值

from scipy import stats

mu = 179.5

sigma = 3.697

x = 180

prob = stats.norm.pdf(x, mu, sigma)

print(prob)

常用于文本分类,文本过滤、情感预测、推荐系统等,尤其是对于英文等语言来说,分类效果很好

准备阶段,需要确定特征属性,属性值以及label => 训练集

训练阶段,输入是特征属性和训练样本,输出是分类器,主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率

应用阶段,使用分类器对新数据进行分类

sklearn工具使用:

高斯朴素贝叶斯:特征变量是连续变量,符合高斯分布(正太分布),比如说人的身高,物体的长度

GaussianNB(priors=None) #模型创建

priors,先验概率大小,如果没有给定,模型则根据样本数据自己计算(利用极大似然法)

查看模型对象的属性:

class_prior_:每个样本的概率

class_count_:每个类别的样本数量

theta_:每个类别中每个特征的均值

sigma_:每个类别中每个特征的方差

多项式朴素贝叶斯:特征变量是离散变量,符合多项分布,在文档分类中特征变量体现在一个单词出现的次数,或者是单词的TF-IDF值等

MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)

alpha:先验平滑因子,默认等于1,当等于1时表示拉普拉斯平滑

fit_prior:是否去学习类的先验概率,默认是True

class_prior:各个类别的先验概率,如果没有指定,则模型会根据数据自动学习, 每个类别的先验概率相同,即类别数N分之一

模型对象的属性:

class_count_: 训练样本中各类别对应的样本数

feature_count_: 每个类别中各个特征出现的次数

伯努利朴素贝叶斯:特征变量是布尔变量,符合0/1分布,在文档分类中特征是单词是否出现

BernoulliNB(alpha=1.0, fit_prior=True, class_prior=None)

alpha:平滑因子,与多项式中的alpha一致

fit_prior:是否去学习类的先验概率,默认是True

class_prior:各个类别的先验概率,如果没有指定,则模型会根据数据自动学习, 每个类别的先验概率相同,即类别数N分之一

模型对象的属性:

class_count_: 训练样本中各类别对应的样本数

feature_count_: 每个类别中各个特征出现的次数

# MNIST手写数字分类(多种分类方法)

# 分割数据,将25%的数据作为测试集,其余作为训练集

train_x, test_x, train_y, test_y = train_test_split(data, digits.target, test_size=0.25, random_state=33)

# 创建LR分类器

model = LogisticRegression()

model.fit(train_x, train_y)

predict_y=model.predict(test_x)

print('LR准确率: %0.4lf' % accuracy_score(predict_y, test_y))

# 创建GaussianNB分类器

model = GaussianNB()

model.fit(train_x, train_y)

predict_y=model.predict(test_x)

print('GaussianNB准确率: %0.4lf' % accuracy_score(predict_y, test_y))

# 创建MultinomialNB分类器

model = MultinomialNB()

model.fit(train_x, train_y)

predict_y=model.predict(test_x)

print('MultinomialNB准确率: %0.4lf' % accuracy_score(predict_y, test_y))

# 创建BernoulliNB分类器

model = BernoulliNB()

model.fit(train_x, train_y)

predict_y=model.predict(test_x)

print('BernoulliNB准确率: %0.4lf' % accuracy_score(predict_y, test_y))

根据训练的结果选择最接近的方案

⑷ 机器学习实战的作品目录

目录第一部分分类第1章机器学习基础21.1 何谓机器学习31.1.1 传感器和海量数据41.1.2 机器学习非常重要51.2 关键术语51.3 机器学习的主要任务71.4 如何选择合适的算法81.5 开发机器学习应用程序的步骤91.6 Python语言的优势101.6.1 可执行伪代码101.6.2 Python比较流行101.6.3 Python语言的特色111.6.4 Python语言的缺点111.7 NumPy函数库基础121.8 本章小结13第2章k-近邻算法 152.1 k-近邻算法概述152.1.1 准备:使用Python导入数据172.1.2 从文本文件中解析数据192.1.3 如何测试分类器202.2 示例:使用k-近邻算法改进约会网站的配对效果202.2.1 准备数据:从文本文件中解析数据212.2.2 分析数据:使用Matplotlib创建散点图232.2.3 准备数据:归一化数值252.2.4 测试算法:作为完整程序验证分类器262.2.5 使用算法:构建完整可用系统272.3 示例:手写识别系统282.3.1 准备数据:将图像转换为测试向量292.3.2 测试算法:使用k-近邻算法识别手写数字302.4 本章小结31第3章决策树 323.1 决策树的构造333.1.1 信息增益353.1.2 划分数据集373.1.3 递归构建决策树393.2 在Python中使用Matplotlib注解绘制树形图423.2.1 Matplotlib注解433.2.2 构造注解树443.3 测试和存储分类器483.3.1 测试算法:使用决策树执行分类493.3.2 使用算法:决策树的存储503.4 示例:使用决策树预测隐形眼镜类型503.5 本章小结52第4章基于概率论的分类方法:朴素贝叶斯 534.1 基于贝叶斯决策理论的分类方法534.2 条件概率554.3 使用条件概率来分类564.4 使用朴素贝叶斯进行文档分类574.5 使用Python进行文本分类584.5.1 准备数据:从文本中构建词向量584.5.2 训练算法:从词向量计算概率604.5.3 测试算法:根据现实情况修改分类器624.5.4 准备数据:文档词袋模型644.6 示例:使用朴素贝叶斯过滤垃圾邮件644.6.1 准备数据:切分文本654.6.2 测试算法:使用朴素贝叶斯进行交叉验证664.7 示例:使用朴素贝叶斯分类器从个人广告中获取区域倾向684.7.1 收集数据:导入RSS源684.7.2 分析数据:显示地域相关的用词714.8 本章小结72第5章Logistic回归 735.1 基于Logistic回归和Sigmoid函数的分类745.2 基于最优化方法的最佳回归系数确定755.2.1 梯度上升法755.2.2 训练算法:使用梯度上升找到最佳参数775.2.3 分析数据:画出决策边界795.2.4 训练算法:随机梯度上升805.3 示例:从疝气病症预测病马的死亡率855.3.1 准备数据:处理数据中的缺失值855.3.2 测试算法:用Logistic回归进行分类865.4 本章小结88第6章支持向量机896.1 基于最大间隔分隔数据896.2 寻找最大间隔916.2.1 分类器求解的优化问题926.2.2 SVM应用的一般框架936.3 SMO高效优化算法946.3.1 Platt的SMO算法946.3.2 应用简化版SMO算法处理小规模数据集946.4 利用完整Platt SMO算法加速优化996.5 在复杂数据上应用核函数1056.5.1 利用核函数将数据映射到高维空间1066.5.2 径向基核函数1066.5.3 在测试中使用核函数1086.6 示例:手写识别问题回顾1116.7 本章小结113第7章利用AdaBoost元算法提高分类性能 1157.1 基于数据集多重抽样的分类器1157.1.1 bagging:基于数据随机重抽样的分类器构建方法1167.1.2 boosting1167.2 训练算法:基于错误提升分类器的性能1177.3 基于单层决策树构建弱分类器1187.4 完整AdaBoost算法的实现1227.5 测试算法:基于AdaBoost的分类1247.6 示例:在一个难数据集上应用AdaBoost1257.7 非均衡分类问题1277.7.1 其他分类性能度量指标:正确率、召回率及ROC曲线1287.7.2 基于代价函数的分类器决策控制1317.7.3 处理非均衡问题的数据抽样方法1327.8 本章小结132第二部分利用回归预测数值型数据第8章预测数值型数据:回归 1368.1 用线性回归找到最佳拟合直线1368.2 局部加权线性回归1418.3 示例:预测鲍鱼的年龄1458.4 缩减系数来“理解”数据1468.4.1 岭回归1468.4.2 lasso1488.4.3 前向逐步回归1498.5 权衡偏差与方差1528.6 示例:预测乐高玩具套装的价格1538.6.1 收集数据:使用Google购物的API1538.6.2 训练算法:建立模型1558.7 本章小结158第9章树回归1599.1 复杂数据的局部性建模1599.2 连续和离散型特征的树的构建1609.3 将CART算法用于回归1639.3.1 构建树1639.3.2 运行代码1659.4 树剪枝1679.4.1 预剪枝1679.4.2 后剪枝1689.5 模型树1709.6 示例:树回归与标准回归的比较1739.7 使用Python的Tkinter库创建GUI1769.7.1 用Tkinter创建GUI1779.7.2 集成Matplotlib和Tkinter1799.8 本章小结182第三部分无监督学习第10章利用K-均值聚类算法对未标注数据分组18410.1 K-均值聚类算法18510.2 使用后处理来提高聚类性能18910.3 二分K-均值算法19010.4 示例:对地图上的点进行聚类19310.4.1 Yahoo! PlaceFinder API19410.4.2 对地理坐标进行聚类19610.5 本章小结198第11章使用Apriori算法进行关联分析20011.1 关联分析20111.2 Apriori原理20211.3 使用Apriori算法来发现频繁集20411.3.1 生成候选项集20411.3.2 组织完整的Apriori算法20711.4 从频繁项集中挖掘关联规则20911.5 示例:发现国会投票中的模式21211.5.1 收集数据:构建美国国会投票记录的事务数据集21311.5.2 测试算法:基于美国国会投票记录挖掘关联规则21911.6 示例:发现毒蘑菇的相似特征22011.7 本章小结221第12章使用FP-growth算法来高效发现频繁项集22312.1 FP树:用于编码数据集的有效方式22412.2 构建FP树22512.2.1 创建FP树的数据结构22612.2.2 构建FP树22712.3 从一棵FP树中挖掘频繁项集23112.3.1 抽取条件模式基23112.3.2 创建条件FP树23212.4 示例:在Twitter源中发现一些共现词23512.5 示例:从新闻网站点击流中挖掘23812.6 本章小结239第四部分其他工具第13章利用PCA来简化数据24213.1 降维技术24213.2 PCA24313.2.1 移动坐标轴24313.2.2 在NumPy中实现PCA24613.3 示例:利用PCA对半导体制造数据降维24813.4 本章小结251第14章利用SVD简化数据25214.1 SVD的应用25214.1.1 隐性语义索引25314.1.2 推荐系统25314.2 矩阵分解25414.3 利用Python实现SVD25514.4 基于协同过滤的推荐引擎25714.4.1 相似度计算25714.4.2 基于物品的相似度还是基于用户的相似度?26014.4.3 推荐引擎的评价26014.5 示例:餐馆菜肴推荐引擎26014.5.1 推荐未尝过的菜肴26114.5.2 利用SVD提高推荐的效果26314.5.3 构建推荐引擎面临的挑战26514.6 基于SVD的图像压缩26614.7 本章小结268第15章大数据与MapRece27015.1 MapRece:分布式计算的框架27115.2 Hadoop流27315.2.1 分布式计算均值和方差的mapper27315.2.2 分布式计算均值和方差的recer27415.3 在Amazon网络服务上运行Hadoop程序27515.3.1 AWS上的可用服务27615.3.2 开启Amazon网络服务之旅27615.3.3 在EMR上运行Hadoop作业27815.4 MapRece上的机器学习28215.5 在Python中使用mrjob来自动化MapRece28315.5.1 mrjob与EMR的无缝集成28315.5.2 mrjob的一个MapRece脚本剖析28415.6 示例:分布式SVM的Pegasos算法28615.6.1 Pegasos算法28715.6.2 训练算法:用mrjob实现MapRece版本的SVM28815.7 你真的需要MapRece吗?29215.8 本章小结292附录A Python入门294附录B 线性代数303附录C 概率论复习309附录D 资源312索引313版权声明316

⑸ 5.5.1朴素贝叶斯原理

它是一种预测建模算法。之所以称为朴素贝叶斯,是因为它假设每个输入
变量是独立的。这个假设现实生活中根本不满足,但对绝大部分复杂问题仍然非常有效。
朴素贝叶斯模型由两种类型的概率组成:
1、每个类别的概率P(Cj);
2、每个属性的条件概率P(Ai|Cj)。
比如:cj就表示男女,比如c0=男,c1=女,而Ai就表示影响预测为男女的因素(身高、
体重、鞋码),比如A0=身高,A1=体重,A2=鞋码

为了训练朴素贝叶斯分类器模型,我们需要先给出训练数据,以及这些数据对应的分
类。那么类别概率和条件概率。可从训练数据计算出来。
一旦计算出来,概率模型就可以使用贝叶斯原理对新数据进行预测。

预测的原理就是,加入我们是一个而分类问题,C0表示正样本,C1表示负样本,则预测的结果就是去比较 P(C0|A1A2A3) 与 P(C1|A1A2A3)的大小。那个样本的概率高,就被预测为哪一类。

1.贝叶斯原理是最大的概念,它解决了概率论中“逆向概率”的问题,在这个理论基础上,人们设计出了贝叶斯分类器

(1)实时预测 # 样本变化,概率变化
(2)多类预测,预测不同类别的可能性
(3)文本分类/垃圾邮件/情感分析 : 文本:变量类型多,更独立 朴素贝叶斯:执果索因,属于某个类别是某几个单词存在与否造成的
(4)推荐系统,朴素贝叶斯和协同过滤结合过滤用户想看到和不想看到的东西

(1) 高斯分布朴素贝叶斯GaussianNB
用处:解决连续数据分类问题。
如果数据集是连续型的,如身高,数据做正态分布,数据在分布的某个位置,对应一个概率,即根据正态分布的概率密度函数算出。 # 尽可能把数据集转换成标准正态分布(stand_scaler)。不过最好是做离散再做其他的概率模型。

(2) 多项式朴素⻉叶斯MultinomialNB
用处:处理离散数据建模,数据集尽可能离散。
离散数据集(可将连续数据做离散处理,如分箱处理)
计数,身高低,1,2,3.
(3) 伯努利朴素⻉叶斯BernoulliNB
用处:数据特征可以表达是或不是,可用。
离散数据集,数据是与否,0或1

互斥事件一定不独立(因为一件事的发生导致了另一件事不能发生);

独立事件一定不互斥(如果独立事件互斥, 那么根据互斥事件一定不独立,就会矛盾)

问题修改为:到达公司未迟到选择第1条路的概率是多
少?
在知道未迟到结果的基础上问选择第一条路的概率,并不是直接可得出的。 故有:

所以选择第一条路的概率为0.28
贝叶斯公式是当已知结果,问导致这个结果的第i原因的可能性是多少?执果索因!

例:
假设有一种病叫做“贝”,它的发病率是万分之一,现有一种测试可以检验一个人是否得病的准确率是 99.9%,它的误报率是 0.1%,那么现在的问题是,如果一个人被查出来患有“贝”,实际上患有的可能性有多大?

问题分析:
假设:A 表示事件 “测出为阳性”, 用 B1 表示“患有贝”, B2 表示“没有患贝”。
P(A|B1)=99.9%,P(A|B2)=0.1%。
患有贝叶死的概率为 P(B1)=0.01%,没有患贝叶死的概率 P(B2)=99.99%。
以上可以认为是先验概率。
想求 P(B1|A)

先验概率: 通过经验来判断事情发生的概率,就是先验概率。也就是能根据样本值估算出来的概率
后验概率: 就是发生结果之后,推测原因的概率。比如说你迟到了,那么原因可能是 A、B 或 C。其中迟到是因为原因A的概率就是后验概率。它是属于条件概率的一种。 # 及可根据先验概率求解出来的。

⑹ 朴素贝叶斯算法是什么

朴素贝叶斯方法是在贝叶斯算法的基础上进行了相应的简化,即假定给定目标值时属性之间相互条件独立。

也就是说没有哪个属性变量对于决策结果来说占有着较大的比重,也没有哪个属性变量对于决策结果占有着较小的比重。虽然这个简化方式在一定程度上降低了贝叶斯分类算法的分类效果,但是在实际的应用场景中,极大地简化了贝叶斯方法的复杂性。

朴素贝叶斯分类(NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入X求出使得后验概率最大的输出Y。

个人贡献:

贝叶斯在数学方面主要研究概率论。他首先将归纳推理法用于概率论基础理论,并创立了贝叶斯统计理论,对于统计决策函数、统计推断、统计的估算等做出了贡献。1763年发表了这方面的论着,对于现代概率论和数理统计都有很重要的作用。贝叶斯的另一着作《机会的学说概论》发表于1758年.贝叶斯所采用的许多术语被沿用至今。

他对统计推理的主要贡献是使用了"逆概率"这个概念,并把它作为一种普遍的推理方法提出来。贝叶斯定理原本是概率论中的一个定理,这一定理可用一个数学公式来表达,这个公式就是着名的贝叶斯公式。

⑺ 分类算法 - 朴素贝叶斯算法

相信很多同学在高中或者大学的时候都学过贝叶斯原理,即条件原理。

现分别有 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。

⑻ 数据挖掘-朴素贝叶斯算法

朴素贝叶斯算法,主要用于对相互独立的属性的类变量的分类预测。(各个属性/特征之间完全没有关系,叫做相互独立,事实上这很难存在,但是这个方法依然比较有效。)

大学的概率论里一般都学过这个贝叶斯定理,简单阐述如下:

若事件 , ,…构成一个事件且都有正概率,则对任意一个事件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 * 1.2e-1 = 0.
这样一比较,那么分类就是否。

看这个例子中,如果有一个特征的条件概率是0,那么整体的概率就是0,从而后验概率也一定是0,那么如果训练集样本太少,这种方法就不是很准确了。
如果当训练集样本个数比特征还少的时候,就无法分类某些测试集了,因此引入 m估计(m-estimate) 来估计条件概率,公式如下:

其中,n是类 中的样本总数, 是类 中取 的样本数, 是称为等价样本大小的参数, 是用户指定的参数,p可以看作在类 中观察特征值 的先验概率。等价样本大小决定先验概率 和观测概率 之间的平衡。

引入m估计的根本原因是样本数量过小。所以为了避免此问题,最好的方法是等效的扩大样本的数量,即在为观察样本添加m个等效的样本,所以要在该类别中增加的等效的类别的数量就是等效样本数m乘以先验估计p。

在之前的例子中,设m=3,p=1/3(m可以设置为特征数量,p则是倒数)。则:
从而可以重新计算 。从而解决了某个条件概率为0的问题。

面对相互独立的特征比较适用,如果有相关的特征,则会降低其性能。

⑼ 朴素贝叶斯算法

贝叶斯算法是由英国数学家托马斯·贝叶斯提出的,这个算法的提出是为了解决“逆向概率”的问题。首先我们先来解释下正向概率与逆向概率的含义:

正向概率 :假设一个箱子里有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,《机器学习实战》。

⑽ 数据挖掘十大经典算法(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) ,可以单独指定特征值之间的是否独立。这里就不展开了,有兴趣的同学们可以做进一步了解。

最后我们来对这个经典算法做个点评:

优点:

缺点:

好了,对于 朴素贝叶斯 的介绍就到这里,不知道各位看完之后是否会对数据挖掘这个领域产生了一点兴趣了呢?

阅读全文

与朴素贝叶斯算法预测隐形眼镜相关的资料

热点内容
php中括号定义数组 浏览:600
php打印堆栈 浏览:514
华为adb命令行刷机 浏览:963
人像摄影pdf 浏览:755
解压文件密码怎样重新设置手机 浏览:999
高考指南pdf 浏览:693
爬虫python数据存储 浏览:240
u盘怎么取消加密 浏览:429
567除以98的简便算法 浏览:340
pdf手机如何解压 浏览:15
python描述器 浏览:60
战地联盟3解压密码 浏览:805
s型命令 浏览:25
php年薪5年 浏览:71
如何上网上设个人加密账户 浏览:44
linux打开ssh服务 浏览:78
微信位置可以加密吗 浏览:470
算法蛮力法 浏览:438
随机排练命令 浏览:147
python多进程并发 浏览:41