Spark朴素贝叶斯(naiveBayes)
朴素贝叶斯(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)的更多相关文章
- [分类算法] :朴素贝叶斯 NaiveBayes
1. 原理和理论基础(参考) 2. Spark代码实例: 1)windows 单机 import org.apache.spark.mllib.classification.NaiveBayes im ...
- spark 朴素贝叶斯
训练代码(scala) import org.apache.spark.mllib.classification.{NaiveBayes,NaiveBayesModel} import org.apa ...
- 贝叶斯、朴素贝叶斯及调用spark官网 mllib NavieBayes示例
贝叶斯法则 机器学习的任务:在给定训练数据A时,确定假设空间B中的最佳假设. 最佳假设:一种方法是把它定义为在给定数据A以及B中不同假设的先验概率的有关知识下的最可能假设 贝叶斯理论提供了 ...
- 朴素贝叶斯算法原理及Spark MLlib实例(Scala/Java/Python)
朴素贝叶斯 算法介绍: 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,在没有其它可用信息下,我 ...
- spark 机器学习 朴素贝叶斯 实现(二)
已知10月份10-22日网球场地,会员打球情况通过朴素贝叶斯算法,预测23,24号是否适合打网球.结果,日期,天气 温度 风速结果(0否,1是)天气(0晴天,1阴天,2下雨)温度(0热,1舒适,2冷) ...
- 朴素贝叶斯算法源码分析及代码实战【python sklearn/spark ML】
一.简介 贝叶斯定理是关于随机事件A和事件B的条件概率的一个定理.通常在事件A发生的前提下事件B发生的概率,与在事件B发生的前提下事件A发生的概率是不一致的.然而,这两者之间有确定的关系,贝叶斯定理就 ...
- 【Spark机器学习速成宝典】模型篇04朴素贝叶斯【Naive Bayes】(Python版)
目录 朴素贝叶斯原理 朴素贝叶斯代码(Spark Python) 朴素贝叶斯原理 详见博文:http://www.cnblogs.com/itmorn/p/7905975.html 返回目录 朴素贝叶 ...
- spark(1.1) mllib 源码分析(三)-朴素贝叶斯
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4042467.html 本文主要以mllib 1.1版本为基础,分析朴素贝叶斯的基本原理与源码 一.基本原 ...
- spark 机器学习 朴素贝叶斯 原理(一)
朴素贝叶斯算法仍然是流行的挖掘算法之一,该算法是有监督的学习算法,解决的是分类问题,如客户是否流失.是否值得投资.信用等级评定等多分类问题.该算法的优点在于简单易懂.学习效率高.在某些领域的分类问题中 ...
随机推荐
- 插入图片<img>
格式: <img src="图片地址" alt="下载失败时的替换文本" title="提示文本"> src:图像的位置 alt ...
- memory_limit的一个bug | 风雪之隅
原文:memory_limit的一个bug | 风雪之隅 27 Nov 09 memory_limit的一个bug 作者: Laruence( ) 本文地址: http://www.laruence. ...
- MVC分页控件之二,为IQueryable定义一个扩展方法,直接反回PagedList<T>结果集(转)
namespace Entity { public interface IPagedList { /// <summary> /// 记录数 /// </summary> in ...
- [LeetCode]题解(python):081 - Search in Rotated Sorted Array II
题目来源 https://leetcode.com/problems/search-in-rotated-sorted-array-ii/ Follow up for "Search in ...
- JS判断对象类型
对于确定JS内置对象类型,JS提供了typeof运算符,该运算符得到的结果为以下6种:number,boolean,string,function,object,undefined.不过对绝大多数对象 ...
- SqlServer2008R2 修改表中列为自增列
选定列,修改列属性标识规范中(是标识)为是,标识增量为1,标识种子为1 SQL语句:alter table 表名 add 列名 int IDENTITY(1,1) NOT NULL
- html5头部说明
<!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --><html lang="zh-cmn-Hans"> ...
- 常用公共的css的样式
html{-webkit-text-size-adjust:none; /*解决chrome浏览器下字体不能小于12px*/} body{overflow-x: hidden; font-size:1 ...
- 使用nmcli创建网络连接
使用nmcli创建一个新的网络连接时,首先需要清楚几个概念 设备即接口 连接是供设备使用的配置,其由一组设置组成. 同一个设备可能存在多个连接,但是一次只能有一个保持活动状态 在创建新的连接时,参数的 ...
- 神奇的计算器dc和bc
神奇的计算器dc和bc Linux就这个范儿 P244http://baike.baidu.com/link?url=YlTtivBfc1tfzreeUQoe8D0C6yqwbZGqnmlObq1hj ...