导航:首页 > 源码编译 > MLlib封装了朴素贝叶斯算法

MLlib封装了朴素贝叶斯算法

发布时间:2022-11-06 18:19:37

1. spark mllib机器学习什么语言

1、机器学习概念

1.1机器学习的定义

在维基网络上对机器学习提出以下几种定义:

l“机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”。

l“机器学习是对能通过经验自动改进的计算机算法的研究”。

l“机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。”一种经常引用的英文定义是:A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E。

可以看出机器学习强调三个关键词:算法、经验、性能,其处理过程如下图所示。

3、Spark MLlib架构解析

2. 分类算法 - 朴素贝叶斯算法

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

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

3. Spark的机器学习库MLLib为什么没有实现高斯分布的朴素贝叶斯

include#include#defineMAX100structaddr{charname[30];charstreet[40];charcity[20];charstate[3];unsignedlongintzip;}addr_list[MAX];voidinit_list(void);intmenu_select(void);voidenter(void);intfind_free(void);voiddeleted(void);voidlist(void);intmain(void){charchoice;init_list();/*initializethestructurearray*/for(;;){choice=menu_select();switch(choice){case1:enter();break;case2:deleted();break;case3:list();break;case4:exit(0);}}return0;}/*initializethelist*/voidinit_list(void){registerintt;for(t=0;t4);returnc;}/*Inputaddressintothelist*/voidenter(void){intslot;chars[80];slot=find_free();if(slot==-1)

4. 朴素贝叶斯算法是什么

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

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

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

个人贡献:

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

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

5. 朴素贝叶斯的推理学习算法

朴素贝叶斯的推理学习算法
贝叶斯公式简易推导式:
朴素贝叶斯的朴素在于假设B特征的每个值相互独立,所以朴素贝叶斯的公式是这样的
学习与分类算法:
(1)计算先验概率和条件概率
拉普拉斯平滑:
(2)代入被测样本向量,得到不同类别P,再根据后验概率最大化,取P最大的类别作为该标签类别。
朴素贝叶斯优点在于对于小规模数据很好,适合多分类。缺点是数据输入形式敏感而且特征值之间的相互独立很难保证带来的影响。

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

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

优点:

缺点:

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

7. 有什么关于 Spark 的书推荐

《大数据Spark企业级实战》本书共包括14章,每章的主要内容如下。


第一章回答了为什么大型数据处理平台都要选择SPARK

。为什么spark如此之快?星火的理论基础是什么?spark如何使用专门的技术堆栈来解决大规模数据处理的需要?

第二章回答了如何从头构建Hadoop集群的问题。

如何构建基于Hadoop集群的星火集群?如何测试火星的质量?


附录从spark的角度解释了Scala,并详细解释了Scala函数编程和面向对象编程。

8. 朴素贝叶斯

        在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,但是朴素贝叶斯却是生成方法。

如何理解这句话,看例题:

        根据上述数据集,如果一对男女朋友,男生想女生求婚,男生的四个特点分别是不帅,性格不好,身高矮,不上进,请你判断一下女生是嫁还是不嫁?

这里我们联系到朴素贝叶斯公式:

p(不帅、性格不好、身高矮、不上进|嫁) = p(不帅|嫁)*p(性格不好|嫁)*p(身高矮|嫁)*p(不上进|嫁)---------->要使这个公式成立,需要各个特征之间相互独立。

而朴素贝叶斯算法就是假设各个特征之间相互独立。

1、假如没有这个假设,那么我们对右边这些概率的估计其实是不可做的,这么说,我们这个例子有4个特征,其中帅包括{帅,不帅},性格包括{不好,好,爆好},身高包括{高,矮,中},上进包括{不上进,上进},那么四个特征的联合概率分布总共是4维空间,总个数为2*3*3*2=36个。36个,计算机扫描统计还可以,但是现实生活中,往往有非常多的特征,每一个特征的取值也是非常之多,那么通过统计来估计后面概率的值,变得几乎不可做,这也是为什么需要假设特征之间独立的原因。

2、假如我们没有假设特征之间相互独立,那么我们统计的时候,就需要在整个特征空间中去找,比如统计p(不帅、性格不好、身高矮、不上进|嫁)。我们就需要在嫁的条件下,去找四种特征全满足分别是不帅,性格不好,身高矮,不上进的人的个数,这样的话,由于数据的稀疏性,很容易统计到0的情况。 这样是不合适的。

        根据上面俩个原因,朴素贝叶斯法对条件概率分布做了条件独立性的假设,由于这是一个较强的假设,朴素贝叶斯也由此得名!这一假设使得朴素贝叶斯法变得简单,但有时会牺牲一定的分类准确率。

所以公式整理以后变为:

整理训练数据中,嫁的样本数如下:

分别计算各个概率:

p(嫁) = 6/12(总样本数) = 1/2

p(不帅|嫁) = 3/6 = 1/2

p(性格不好|嫁)= 1/6

p(矮|嫁) = 1/6

p(不上进|嫁) = 1/6

总样本为:

p(不帅) = 4/12 = 1/3

p(性格不好) = 4/12 = 1/3

p(身高矮) = 7/12

p(不上进) = 4/12 = 1/3

将以上概率带入公式,就能得出嫁的概率。

总结:理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。

而在属性相关性较小时,朴素贝叶斯性能最 为良好。

9. Spark的机器学习库MLLib为什么没有实现高斯分布的朴素贝叶斯

所谓的大数据平台不是独立存在的,比如网络是依赖搜索引擎获得大数据并开展业务的,阿里是通过电子商务交易获得大数据并开展业务的,腾讯是通过社交获得大数据并开始业务的,所以说大数据平台不是独立存在的,重点是如何搜集和沉淀数据,如何分析数据并挖掘数据的价值。

10. 朴素贝叶斯分类器原理

朴素贝叶斯分类器,实际上也是对人们常识做的一个算法的完善。其以一种更为精准的量化来判断分类,使用的方法是后验概率。本文从与决策树的比较出发,介绍先验概率和后验概率的关系,再详细介绍一下朴素贝叶斯算法的流程。

朴素贝叶斯算法比较简单,所以此文多是留以面试前复习之用。理清各个问题之间的关系是重点。

与决策树的比较

我们在学习完经典的决策树算法之后,可以有这样一个认识:决策树的特点是它总是在沿着特征做切分。随着层层递进,这个划分会越来越细。大体上就像这样:

对于决策树不是很了解的朋友们可以看我这篇文章《经典决策树算法》

我今天在此基础上,在介绍一种在概率框架下实施决策的基本方法。同样的,这也很符合我们人类的经验思维。这就是贝叶斯分类器。相比于决策树,其分类示意如下:

此处的的蓝色与红色交织,就代表着概率的大小。贝叶斯分类器的名字很高大上,其实背后的原理非常简单。就是根据概率来选择我们要将某一个个体分在哪一类中。

我们可以这样去理解贝叶斯分类器。西瓜藤新鲜的瓜甜的概率为0.7,若只看瓜藤,我们就将瓜藤新鲜的瓜判定为甜瓜。我们引入西瓜纹理这一个第二个特征,假设纹理整齐的瓜甜的概率为0.8。则这时候我们要算出瓜藤新鲜且纹理整齐的瓜甜的概率,比如为0.9(为什么要大于前两个概率大家可以思考一下),这样我们看到纹理和瓜藤这两个特征的时候就可以有概率的判断瓜是否甜了。

这里我们可以类比一下分类决策树。对于决策树不是很了解的朋友们可以看我这篇文章《经典决策树算法》相比于决策树将瓜藤新鲜的瓜甜的概率直接转化成瓜藤新鲜我们就判断成瓜甜,我们的贝叶斯更是有了一种概率性的容错性,使得结果更加准确可靠一点。但是贝叶斯分类器对数据有着比决策树更高的要求,其需要一个比较容易解释,而且不同维度之间相关性较小的模型。这个我们在之后会细细提及。

先验概率与后验概率

我们来看贝叶斯公式:

可见,先验概率,后验概率和似然概率关系密切的很。值得注意的是,A和B的顺序和这个先验后验是有关系的。A和B反了,先验与后验也需要反过来。举个例子来说: 桌子上如果有一块肉和一瓶醋,你如果吃了一块肉,然后你觉得是酸的,那你觉得肉里加了醋的概率有多大?

对于这个问题,在吃起来是酸的条件下肉里面放了醋的概率,便是后验概率。肉加了醋的前提下吃起来是酸的概率便是似然概率,肉里面加了醋的概率和吃起来是酸的概率便是先验概率。

我们可以总结一下,A事件是导致的结果,B事件是导致的原因之一。这里我们吃到肉是酸的,则是各种原因的结果,而肉里面放了醋则是导致这个A结果的诸多原因之一。为什么说是之一呢,因为除了放了醋,也有可能是肉变质了等等。

朴素贝叶斯分类算法

先通过一个经典例子来解释朴素贝叶斯分类的算法。由如下表格中的数据学习一个朴素贝叶斯的分类器并确定 的w类标记 ,表格中 , 为特征,取值的集合分别为 , , 为类标记,

此时我们对于给定的 可以如下计算:

可见 时候后验概率更大一些。所以

通过以上例子,我们会发现朴素贝叶斯的方法其实就是一种常规做法,拉普拉斯曾经说过,概率论就是将人们的常识使用数学公式表达。接下来我们来看看最完整的朴素贝叶斯分类算法的数学表达。

阅读全文

与MLlib封装了朴素贝叶斯算法相关的资料

热点内容
java读取list 浏览:701
iis7gzip压缩 浏览:39
有什么安卓机打吃鸡好 浏览:597
三星u盘加密狗 浏览:473
php函数的返回值吗 浏览:586
国企稳定程序员 浏览:325
编程猫如何使用教程视频 浏览:218
安卓远端网页如何打日志 浏览:218
压缩flash大小 浏览:993
解压的玩具教程可爱版 浏览:366
哪个求职app比较靠谱 浏览:888
java的读法 浏览:59
nod32局域网服务器地址 浏览:1002
数码科技解压 浏览:235
新网的云服务器管理界面复杂吗 浏览:367
无人声解压强迫症视频 浏览:571
计算机编译运行 浏览:639
单片机嵌套 浏览:988
python字符串中符号 浏览:787
python正则表达式贪婪模式 浏览:650