SparkMLlib之朴素贝叶斯分类算法

上传人:飞*** 文档编号:51024419 上传时间:2018-08-12 格式:PDF 页数:4 大小:109.90KB
返回 下载 相关 举报
SparkMLlib之朴素贝叶斯分类算法_第1页
第1页 / 共4页
SparkMLlib之朴素贝叶斯分类算法_第2页
第2页 / 共4页
SparkMLlib之朴素贝叶斯分类算法_第3页
第3页 / 共4页
SparkMLlib之朴素贝叶斯分类算法_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《SparkMLlib之朴素贝叶斯分类算法》由会员分享,可在线阅读,更多相关《SparkMLlib之朴素贝叶斯分类算法(4页珍藏版)》请在金锄头文库上搜索。

1、大数据 课程设计授课课题Spark 实现贝叶斯算法课时4 教学目的 与要求教学目的:SPARK 实现贝叶斯算法的具体实现及讲解能力要求: 掌握 SPARK 原理和用法教学重点Spark 实现贝叶斯算法的具体实现及讲解教学难点Spark 实现贝叶斯算法的具体实现及讲解教学准备Hadoop2.x 集群环境 ,spark 集群课程大纲1.分类算法2.贝斯叶公式3.朴素贝斯叶分类4.spark 实现贝斯叶算法教学过程结合上一节课讲的聚类算法,本节课对Spark MLlib之 K-Means 聚类算法做深入讲解和实例操作,见附录板书设计随堂作业1.归纳总结【分类算法】何为分类算法?简单来说,就是将具有某

2、些特性的物体归类对应到一个已知的类别集合中的某个类别上。 从数学角度来说,可以做如下定义: 已知集合: C=y 1 ,y 2 ,y n 和 I=x 1 ,x 2 ,x m , ,确定映射规则 y=f(x) ,使得任意x i I 有且仅有一个y j C 使得 y j =f(x i ) 成立。 其中, C为类别集合, I 为待分类的物体,f 则为分类器,分类算法的主要任务就是构造分类器f 。分类算法的构造通常需要一个已知类别的集合来进行训练,通常来说训练出来的分类算法不可能达到100% 的准确率。分类器的质量往往与训练数据、验证数据、训练数据样本大小等因素相关。举个例子,我们日常生活中看到一个陌生

3、人,要做的第一件事情就是判断其性别,判断性别的过程就是 一个分类的过程。根据以往的生活经验,通常经过头发长短、服饰和体型这三个要素就能判断出来一个 人的性别。这里的“生活经验”就是一个训练好的关于性别判断的模型,其训练数据是日常生活中遇到 的形形色色的人。突然有一天,一个娘炮走到了你面前,长发飘飘,穿着紧身的衣裤,可是体型却很man , 于是你就疑惑了,根据以往的经验也就是已经训练好的模型,无法判断这个人的性别。于是你学会 了通过喉结来判断其性别,这样你的模型被训练的质量更高了。但不可否认的是,永远会出现一个让你 无法判断性别的人。所以模型永远无法达到100% 的准确,只会随着训练数据的不断增

4、多而无限接近100% 的准确。【贝斯叶公式】贝叶斯公式,或者叫做贝叶斯定理,是贝叶斯分类的基础。而贝叶斯分类是一类分类算法的统称,这一 类算法的基础都是贝叶斯公式。目前研究较多的四种贝叶斯分类算法有:Naive Bayes 、TAN 、BAN和 GBN 。理工科的学生在大学应该都学过概率论,其中最重要的几个公式中就有贝叶斯公式用来描述两个条 件概率之间的关系,比如P(A|B) 和 P(B|A) 。如何在已知事件A和 B分别发生的概率,和事件B发生时事 件 A发生的概率,来求得事件A发生时事件B发生的概率,这就是贝叶斯公式的作用。其表述如下:【朴素贝叶斯分类】 朴素贝叶斯分类,Naive Bay

5、es ,你也可以叫它NB算法。其核心思想非常简单:对于某一预测项,分别计算该预测项为各个分类的概率,然后选择概率最大的分类为其预测分类。就好像你预测一个娘炮是女 人的可能性是40% ,是男人的可能性是41% ,那么就可以判断他是男人。Naive Bayes的数学定义如下: 1. 设 x=a 1 ,a 2 ,a m 为一个待分类项,而每个 a i 为 x 的一个特征属性2. 已知类别集合 C=y 1 ,y 2 ,y n 3. 计算 x 为各个类别的概率: P(y 1 |x),P(y 2 |x),P(y n |x) 4. 如果 P(y k |x)=maxP(y 1 |x),P(y 2 |x),P(

6、y n |x) ,则 x 的类别为 y k 如何获取第四步中的最大值,也就是如何计算第三步中的各个条件概率最为重要。可以采用如下做法: 1. 获取训练数据集,即分类已知的数据集 2. 统计得到在各类别下各个特征属性的条件概率估计,即: P(a 1 |y 1 ),P(a 2 |y 1 ),.,P(a m |y 1 );P(a 1 |y 2 ),P(a 2 |y 2 ),.,P(a m |y 2 );.;P(a 1 |y n ),P(a 2 |y n ),.,P(a m |y n ) ,其中的数据可以是离散的也可以是连续的 3. 如果各个特征属性是条件独立的,则根据贝叶斯定理有如下推导: P(y

7、i |x)=P(x|y i )P(y i )P(x) 对于某 x 来说,分母是固定的,所以只要找出分子最大的即为条件概率最大的。又因为各特征属性是条 件独立的,所以有: P(x|y i )P(y i )=P(a 1 |y i )P(a 2 |y i ).P(a m |y i )P(y i )=P(y i ) m j=1 P(a j |y i ) 【朴素贝叶斯分类】其中第一列代表类别,训练数据中有三种类别:0、1、2。第 2-4 列代表数据的三个维度,可以想象成前 文中性别分类算法中的头发长度、服饰和体型这三个要素。通常来说为了保证每个要素的权值相差不大, 需要取相对的数值,例如头发长度/ 最长

8、的头发长度。 0,1 0 0 0,2 0 0 0,1 0 0.1 0,2 0 0.2 0,1 0.1 0 0,2 0.2 0 1,0 1 0.1 1,0 2 0.2 1,0.1 1 0 1,0.2 2 0 1,0 1 0 1,0 2 0 2,0.1 0 1 2,0.2 0 2 2,0 0.1 1 2,0 0.2 2 2,0 0 1 2,0 0 2 public static void main(String args) SparkConf sparkConf = new SparkConf().setAppName(“Bayes“).setMaster(“local2“); JavaSpark

9、Context sc = new JavaSparkContext(sparkConf); JavaRDD data = sc.textFile(“/home/yurnom/data/sample_naive_bayes_data.txt“); RDD parsedData = data.map(line - String parts = line.split(“,“); double values = Arrays.stream(parts1.split(“ “) .mapToDouble(Double:parseDouble) .toArray(); /LabeledPoint代表一条训练

10、数据,即打过标签的数据return new LabeledPoint(Double.parseDouble(parts0), Vectors.dense(values); ).rdd(); /分隔为两个部分,60% 的数据用于训练,40% 的用于测试RDD splits = parsedData.randomSplit(new double0.6, 0.4, 11L); JavaRDD training = splits0.toJavaRDD(); JavaRDD test = splits1.toJavaRDD(); /训练模型, Additive smoothing的值为 1.0 (默认值

11、)final NaiveBayesModel model = NaiveBayes.train(training.rdd(), 1.0); JavaRDD prediction = test.map(p - model.predict(p.features(); JavaPairRDD predictionAndLabel = prediction.zip(test.map(LabeledPoint:label); /用测试数据来验证模型的精度double accuracy = 1.0 * predictionAndLabel.filter(pl - pl._1().equals(pl._2(

12、).count() / test.count(); System.out.println(“Accuracy=“ + accuracy); /预测类别System.out.println(“Prediction of (0.5, 3.0, 0.5):“ + model.predict(Vectors.dense(new double0.5, 3.0, 0.5); System.out.println(“Prediction of (1.5, 0.4, 0.6):“ + model.predict(Vectors.dense(new double1.5, 0.4, 0.6); System.ou

13、t.println(“Prediction of (0.3, 0.4, 2.6):“ + model.predict(Vectors.dense(new double0.3, 0.4, 2.6); 结果Accuracy=1.0 Prediction of (0.5, 3.0, 0.5):1.0 Prediction of (1.5, 0.4, 0.6):0.0 Prediction of (0.3, 0.4, 2.6):2.0 由于数据的人为捏造过度,可以看到此次训练的模型精度十分高为100% ,即测试数据的类别和用模型预 测出来的对于类别完全吻合,实际生产环境中是无法达到100% 的。后面又预测了3 个不在训练数据中的 数据,结果和大脑判断的类别完全相同Naive Bayes是最简单的分类算法之一。由于其简单的特性,使得训练数据的选取对于精确度的影响十分 大。在我们的生产环境中,通常将训练数据进行六四分,六分用来训练数据,四分用来测试精确度。但 即便如此,测试输出的精确度也往往高于实际生产环境中的精确度。不断的增加训练模型的数据量是一 个较为有效的提高精度的方法,但提高的范围也十分有限。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号