朴素贝叶斯(Naïve Bayes)

介绍

Byesian算法是统计学的分类方法,它是一种利用概率统计知识进行分类的算法。在许多场合,朴素贝叶斯分类算法可以与决策树和神经网络分类算法想媲美,该算法能运用到大型数据库中,且方法简单,分类准确率高,速度快,这个算法是从贝叶斯定理的基础上发展而来的,贝叶斯定理假设不同属性值之间是不相关联的。但是现实说中的很多时候,这种假设是不成立的,从而导致该算法的准确性会有所下降。

运用场景

1.医生对病人进行诊断就是一个典型的分类过程,任何一个医生都无法直接看到病人的病情,只能观察病人表现出的症状和各种化验检测数据来推断病情,这时医生就好比一个分类器,而这个医生诊断的准确率,与他当初受到的教育方式(构造方法)、病人的症状是否突出(待分类数据的特性)以及医生的经验多少(训练样本数量)都有密切关系。

2.根据各种天气状况判断一个人是否会去踢球,下面的例子就是。

3.各种分类场景

贝叶斯定理

已知某条件概率,如何得到两个事件交换后的概率,也就是在已知P(A|B)的情况下如何求得P(B|A)。这里先解释什么是条件概率:

表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。其基本求解公式为:

贝叶斯定理之所以有用,是因为我们在生活中经常遇到这种情况:我们可以很容易直接得出P(A|B),P(B|A)则很难直接得出,但我们更关心P(B|A),贝叶斯定理就为我们打通从P(A|B)获得P(B|A)的道路。

下面直接给出贝叶斯定理:

输入数据说明

数据:天气情况和每天是否踢足球的记录表

日期

踢足球

天气

温度

湿度

风速

1号

否(0)

晴天(0)

热(0)

高(0)

低(0)

2号

否(0)

晴天(0)

热(0)

高(0)

高(1)

3号

是(1)

多云(1)

热(0)

高(0)

低(0)

4号

是(1)

下雨(2)

舒适(1)

高(0)

低(0)

5号

是(1)

下雨(2)

凉爽(2)

正常(1)

低(0)

6号

否(0)

下雨(2)

凉爽(2)

正常(1)

高(1)

7号

是(1)

多云(1)

凉爽(2)

正常(1)

高(1)

8号

否(0)

晴天(0)

舒适(1)

高(0)

低(0)

9号

是(1)

晴天(0)

凉爽(2)

正常(1)

低(0)

10号

是(1)

下雨(2)

舒适(1)

正常(1)

低(0)

11号

是(1)

晴天(0)

舒适(1)

正常(1)

高(1)

12号

是(1)

多云(1)

舒适(1)

高(0)

高(1)

13号

是(1)

多云(1)

热(0)

正常(1)

低(0)

14号

否(0)

下雨(2)

舒适(1)

高(0)

高(1)

15号

晴天(0)

凉爽(2)

高(0)

高(1)

数据抽象为如下,含义为是否会去踢球,天气,温度,湿度,风速

如果15号的天气为(晴天,凉爽,湿度高,风速高,预测他是否会踢足球)

计算过程

假设小明15号去踢球,踢球概率为:

P(踢)=9/14

P(晴天|踢)=2/9

P(凉爽|踢)=3/9

P(湿度高|踢)=3/9

P(风速高|踢)=3/9

P(踢)由踢的天数除以总天数得到,P(晴天|踢)为踢球的同事是晴天除以踢的天数得到,其他以此类推。

P(踢|晴天,凉爽,湿度高,风速高)=

P(踢)* P(晴天|踢)* P(凉爽|踢)* P(湿度高|踢) *P(风速高|踢)=

9/14*2/9*3/9*3/9*3/9=0.00529

假设小明15号不去踢球,概率为:

P(不踢)=5/14

P(晴天|不踢)=3/5

P(凉爽|不踢)=1/5

P(湿度高|不踢)=4/5

P(风速高|不踢)=3/5

P(不踢|晴天,凉爽,湿度高,风速高)=

P(不踢)* P(晴天|不踢)* P(凉爽|不踢)* P(湿度高|不踢) *P(风速高|不踢)=

5/14*3/5*1/5*4/5*3/5=0.02057

可以看到小明不去踢足球的概率比去踢足球的概率高。

流程图

测试代码

importorg.apache.spark.mllib.classification.NaiveBayes

import org.apache.spark.mllib.linalg.Vectors

import org.apache.spark.mllib.regression.LabeledPoint

import org.apache.spark.{SparkContext,SparkConf}



object naiveBayes {

  def main(args: Array[String]) {

    val conf =new
SparkConf()

    val sc =new
SparkContext(conf)



    //读入数据

    ))

    val parsedData =data.map { line =>

      val parts =line.split(',')

      LabeledPoint(parts().split('
').map(_.toDouble)))

    }

    // 把数据的60%作为训练集,40%作为测试集.

    val splits = parsedData.randomSplit(Array(0.6,0.4),seed
= 11L)

    )

    )

//获得训练模型,第一个参数为数据,第二个参数为平滑参数,默认为1,可改

    val model =NaiveBayes.train(training,lambda =
1.0)



    //对模型进行准确度分析

    val predictionAndLabel= test.map(p => (model.predict(p.features),p.label))

    val accuracy =1.0
*predictionAndLabel.filter(x => x._1 == x._2).count() / test.count()



    println("accuracy-->"+accuracy)

    println("Predictionof (0.0, 2.0, 0.0, 1.0):"+model.predict(Vectors.dense(0.0,2.0,0.0,1.0)))

  }

}

提交代码脚本(standalone模式):

./bin/spark-submit

--name nb                            (项目名)

--class naiveBayes                       (主类名)

--master spark://master:7077            (使用集群管理器)

~/Desktop/naiveBayes.jar                       (代码包位置)

Hdfs://master:9000/NB.data             (args(0)的参数值)

输出结果说明

准确度为75%,这里是因为测试集数据量比较小的原因,所以偏差较大。

可以从结果看到对15号的预测为不会踢球,和我们数学计算的结果一致。

Spark朴素贝叶斯(naiveBayes)的更多相关文章

  1. [分类算法] :朴素贝叶斯 NaiveBayes

    1. 原理和理论基础(参考) 2. Spark代码实例: 1)windows 单机 import org.apache.spark.mllib.classification.NaiveBayes im ...

  2. spark 朴素贝叶斯

    训练代码(scala) import org.apache.spark.mllib.classification.{NaiveBayes,NaiveBayesModel} import org.apa ...

  3. 贝叶斯、朴素贝叶斯及调用spark官网 mllib NavieBayes示例

    贝叶斯法则   机器学习的任务:在给定训练数据A时,确定假设空间B中的最佳假设.   最佳假设:一种方法是把它定义为在给定数据A以及B中不同假设的先验概率的有关知识下的最可能假设   贝叶斯理论提供了 ...

  4. 朴素贝叶斯算法原理及Spark MLlib实例(Scala/Java/Python)

    朴素贝叶斯 算法介绍: 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,在没有其它可用信息下,我 ...

  5. spark 机器学习 朴素贝叶斯 实现(二)

    已知10月份10-22日网球场地,会员打球情况通过朴素贝叶斯算法,预测23,24号是否适合打网球.结果,日期,天气 温度 风速结果(0否,1是)天气(0晴天,1阴天,2下雨)温度(0热,1舒适,2冷) ...

  6. 朴素贝叶斯算法源码分析及代码实战【python sklearn/spark ML】

    一.简介 贝叶斯定理是关于随机事件A和事件B的条件概率的一个定理.通常在事件A发生的前提下事件B发生的概率,与在事件B发生的前提下事件A发生的概率是不一致的.然而,这两者之间有确定的关系,贝叶斯定理就 ...

  7. 【Spark机器学习速成宝典】模型篇04朴素贝叶斯【Naive Bayes】(Python版)

    目录 朴素贝叶斯原理 朴素贝叶斯代码(Spark Python) 朴素贝叶斯原理 详见博文:http://www.cnblogs.com/itmorn/p/7905975.html 返回目录 朴素贝叶 ...

  8. spark(1.1) mllib 源码分析(三)-朴素贝叶斯

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4042467.html 本文主要以mllib 1.1版本为基础,分析朴素贝叶斯的基本原理与源码 一.基本原 ...

  9. spark 机器学习 朴素贝叶斯 原理(一)

    朴素贝叶斯算法仍然是流行的挖掘算法之一,该算法是有监督的学习算法,解决的是分类问题,如客户是否流失.是否值得投资.信用等级评定等多分类问题.该算法的优点在于简单易懂.学习效率高.在某些领域的分类问题中 ...

随机推荐

  1. DevExpress的所有功能介绍

    https://www.devexpress.com/Subscriptions/New-2016-2.xml?utm_source=AnnounceTry&utm_medium=WhatsN ...

  2. 【Java 基础篇】【第二课】基本数组类型

    就像第一章所说一样,这次学习为了快,因此说明性的文字就不想写太多了,直接帖代码吧,代码当中尽量加一些注释: package a.b; public class test { static void B ...

  3. C/C++ 判断主机字节存储序列

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0oAAADFCAIAAADltpUqAAAgAElEQVR4nOyd65XyvA6FqYASKIEWqI

  4. 兼容IE的CSS的”引入方式“

    1.给IE浏览器的7版本来提供需要引用的样式(如果把7去掉则给所有的IE浏览器提供样式) <!--[if IE 7]> <Link type="text/css" ...

  5. Partial Tree---hdu5534(完全背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534 题意:有n个节点,让这n个节点形成一棵树,这棵树的种类有很多种,现在告诉n-1个f[i],表示度 ...

  6. linux命令之tee

    功能说明:读取标准输入的数据,并将其内容输出成文件.语 法:tee [-ai][--help][--version][文件...]补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设 ...

  7. html5向左滑动删除特效

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. ELK-Python(三)

    不具有通用性,留作纪念. [root@GXB-CTRLCENTER python]# cat insert_uv.py #!/usr/bin/env python # -*- coding:utf-8 ...

  9. Android Mina框架的学习笔记

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络 ...

  10. 判断远程图片是否存在【适用于windows服务器】

    <?php function file_exists2($url) { if(@file_get_contents($url,0,null,0,1)) return 1; else return ...