朴素贝叶斯(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. Window上装PHP开发环境 (XAMPP)

    原作者:http://www.cnblogs.com/martin1009/archive/2011/11/11/2245794.html 1. 从www.apachefriends.org 上下载X ...

  2. java的Random

    首先,Point类 public class Point { int x, y; public Point(int x, int y) { this.x = x; this.y = y; } bool ...

  3. [LeetCode] Sudoku Solver(迭代)

    Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...

  4. Sass和Compass制作雪碧图

    1.安装好了sass与compass之后设置一个配置文件 2.新增一个雪碧图文件夹用来存放将要合并的图片例如color文件夹 3.@import命令引用 .Compass看到@import指令的参数为 ...

  5. 面向对象世界里转转七(Liskov替换原则)

    前言:Liskov替换原则是关于继承机制的应用原则,是实现开放封闭原则的具体规范,违反了Liskov原则必然意味着违反了开放封闭原则.因此,有必要对面向对象的继承机制及其基本原则做以探索,来进一步了解 ...

  6. Asset Store

    Asset Store 是用来供Unity开发者将自己的插件拿出来供大家有偿使用的一个平台. 报错信息: failed to import package with error cannot impo ...

  7. Java学习-008-判断文件类型实例

    此文源码主要为应用 Java 如何判断文件类型的源码及其测试源码.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-2-2 23:02:00,请知悉. Java 判断文件类型源码如 ...

  8. 1.后台如何获取 jquery get方式的ajax的参数

    1. update.jsp 1.2 默认是dataType是json getJSON: function( url, data, callback ) { return jQuery.get(url, ...

  9. oracle 循环语句

    1.基本循环(至少会执行一次) DECLARE I ; BEGIN LOOP --循环开始 DBMS_OUTPUT.PUT_LINE('VALUE:'||I); ; --退出循环条件: I:; --循 ...

  10. .net变量判断

    <div class="AccountLevel" style="margin-top: 15px;">                <sp ...