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

贝叶斯法则

机器学习的任务:在给定训练数据D时,确定假设空间H中的最佳假设。

最佳假设:一种方法是把它定义为在给定数据D以及H中不同假设的先验概率的有关知识下的最可能假设

贝叶斯理论提供了一种计算假设概率的方法,基于假设的先验概率、给定假设下观察到不同数据的概率以及观察到的数据本身

先验概率和后验概率

用P(A)表示在没有训练数据前假设A拥有的初始概率。P(A)被称为A的先验概率。

先验概率反映了关于A是一正确假设的机会的背景知识

如果没有这一先验知识,可以简单地将每一候选假设赋予相同的先验概率

类似地,P(B)表示训练数据B的先验概率,P(A|B)表示假设B成立时A的概率

机器学习中,我们关心的是P(B|A),即给定A时B的成立的概率,称为B的后验概率

贝叶斯公式

贝叶斯公式提供了从先验概率P(A)、P(B)和P(A|B)计算后验概率P(B|A)的方法

贝叶斯定理便是基于下述贝叶斯公式:

P(A|B)随着P(A)和P(B|A)的增长而增长,随着P(B)的增长而减少,即如果B独立于A时被观察到的可能性越大,那么B对A的支持度越小

朴素贝叶斯 

朴素贝叶斯算法是假设各个特征之间相互独立,使用贝叶斯公式进行分类的。请参考:https://blog.csdn.net/amds123/article/details/70173402 

spark NavieBayes 官方示例代码如下:

import org.apache.spark.ml.classification.NaiveBayesimport org.apache.spark.ml.evaluation.MulticlassClassificationEvaluatorimport org.apache.spark.sql.SparkSession

object NavieBayesDemo {  def main(args: Array[String]): Unit = {    val spark = SparkSession      .builder      .appName("NavieBayesDemo").master("local")      .config("spark.sql.warehouse.dir", "C:\\study\\sparktest")      .getOrCreate()    // Load the data stored in LIBSVM format as a DataFrame.    val dataset=spark.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt")    // Split the data into training and test sets (30% held out for testing)    val Array(tranningData,testData)=dataset.randomSplit(Array(0.7,0.3),seed = 1234L)

    // Train a NavieBayes model    val model = new NaiveBayes().fit(tranningData)    // Select example rows to display.    val predictions=model.transform(testData)    predictions.show()

    // Select (prediction, true label) and compute test error    val evaluator = new MulticlassClassificationEvaluator()      .setLabelCol("label")      .setPredictionCol("prediction")      .setMetricName("accuracy")    val accuracy = evaluator.evaluate(predictions)    println(s"Test set accuracy = $accuracy")

    spark.stop()  }}

运行结果如下:

18/10/24 11:50:06 INFO SparkContext: Starting job: collectAsMap at MulticlassMetrics.scala:48

+-----+--------------------+--------------------+-----------+----------+

|label|            features|       rawPrediction|probability|prediction|

+-----+--------------------+--------------------+-----------+----------+

|  0.0|(692,[95,96,97,12...|[-173678.60946628...|  [1.0,0.0]|       0.0|

|  0.0|(692,[98,99,100,1...|[-178107.24302988...|  [1.0,0.0]|       0.0|

|  0.0|(692,[100,101,102...|[-100020.80519087...|  [1.0,0.0]|       0.0|

|  0.0|(692,[124,125,126...|[-183521.85526462...|  [1.0,0.0]|       0.0|

|  0.0|(692,[127,128,129...|[-183004.12461660...|  [1.0,0.0]|       0.0|

|  0.0|(692,[128,129,130...|[-246722.96394714...|  [1.0,0.0]|       0.0|

|  0.0|(692,[152,153,154...|[-208696.01108598...|  [1.0,0.0]|       0.0|

|  0.0|(692,[153,154,155...|[-261509.59951302...|  [1.0,0.0]|       0.0|

|  0.0|(692,[154,155,156...|[-217654.71748256...|  [1.0,0.0]|       0.0|

|  0.0|(692,[181,182,183...|[-155287.07585335...|  [1.0,0.0]|       0.0|

|  1.0|(692,[99,100,101,...|[-145981.83877498...|  [0.0,1.0]|       1.0|

|  1.0|(692,[100,101,102...|[-147685.13694275...|  [0.0,1.0]|       1.0|

|  1.0|(692,[123,124,125...|[-139521.98499849...|  [0.0,1.0]|       1.0|

|  1.0|(692,[124,125,126...|[-129375.46702012...|  [0.0,1.0]|       1.0|

|  1.0|(692,[126,127,128...|[-145809.08230799...|  [0.0,1.0]|       1.0|

|  1.0|(692,[127,128,129...|[-132670.15737290...|  [0.0,1.0]|       1.0|

|  1.0|(692,[128,129,130...|[-100206.72054749...|  [0.0,1.0]|       1.0|

|  1.0|(692,[129,130,131...|[-129639.09694930...|  [0.0,1.0]|       1.0|

|  1.0|(692,[129,130,131...|[-143628.65574273...|  [0.0,1.0]|       1.0|

|  1.0|(692,[129,130,131...|[-129238.74023248...|  [0.0,1.0]|       1.0|

+-----+--------------------+--------------------+-----------+----------+

only showing top 20 rows

18/10/24 11:50:06 INFO DAGScheduler: Job 6 finished: countByValue at MulticlassMetrics.scala:42, took 0.157446 s

Test set accuracy = 1.0

原文地址:https://www.cnblogs.com/abcdwxc/p/9842765.html

时间: 2024-11-07 03:05:51

贝叶斯、朴素贝叶斯及调用spark官网 mllib NavieBayes示例的相关文章

Spark-->combineByKey【请阅读Apache spark官网文档】

这篇文章,很有必要看,写的不错.但是看过后,不要忘记查看Apache spark官网.因为这篇文章理解还是和源码.官网文档 不一致.有一点错误![cnblogs的代码编辑器 不支持Scala,所以 语言的关键字 没有高亮显示] 在数据分析中,处理Key,Value的Pair数据是极为常见的场景,例如我们可以针对这样的数据进行分组.聚合或者将两个包含Pair数据的RDD根据key进行join.从函数的抽象层面看,这些操作具有共同的特征,都是将类型为RDD[(K,V)]的数据处理为RDD[(K,C)

模式识别之贝叶斯---朴素贝叶斯(naive bayes)算法及实现

处女文献给我最喜欢的算法了 ⊙▽⊙ ---------------------------------------------------我是机智的分割线---------------------------------------------------- [important] 阅读之前你需要了解:1.概率论与数理统计基础 2.基本的模式识别概念 [begin] 贝叶斯决策论是模式分类问题最基础的概念,其中朴素贝叶斯更是由于其简洁成为学习模式分类问题的基础. 朴素贝叶斯的理论基础:源于概率论

本地开发spark代码上传spark集群服务并运行(基于spark官网文档)

打开IDEA 在src下的main下的scala下右击创建一个scala类 名字为SimpleApp ,内容如下 import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ import org.apache.spark.SparkConf object SimpleApp { def main(args: Array[String]) { val logFile = "/home/spark/opt/s

Spark 官网提到的几点调优

1. 数据序列化 默认使用的是Java自带的序列化机制.优点是可以处理所有实现了java.io.Serializable 的类.但是Java 序列化比较慢. 可以使用Kryo序列化机制,通常比Java 序列化机制性能高10倍.但是并不支持所有实现了java.io.Serializable 的类.使用 conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer") 开启Kryo序列化

spark官网学习

1.foreachRDD设计模式 正确使用foreachRDD的方式,每一个分区创建一个单例connection对象. dstream.foreachRDD { rdd => rdd.foreachPartition { partitionOfRecords => //创建单例对象 val connection = createNewConnection() partitionOfRecords.foreach(record => connection.send(record)) con

[白话解析] 深入浅出朴素贝叶斯模型原理及应用

[白话解析] 深入浅出朴素贝叶斯模型原理及应用 0x00 摘要 朴素贝叶斯模型是机器学习中经常提到的概念.但是相信很多朋友都是知其然而不知其所以然.本文将尽量使用易懂的方式介绍朴素贝叶斯模型原理,并且通过具体应用场景和源码来帮助大家深入理解这个概念. 0x01 IT相关概念 1. 分类问题 已知m个样本 (x1,y1), ...... (xm,ym),x是特征变量,y是对应的类别.要求得一个模型函数或者映射规则h,对于新的样本 xt,能够尽量准确的预测出 yt = h(xt). 我们也可以从概率

斯坦福CS229机器学习课程笔记四:GDA、朴素贝叶斯、多项事件模型

生成学习与判别学习 像逻辑回归,用hθ(x) = g(θTx) 直接地来建模 p(y|x; θ) :或者像感知机,直接从输入空间映射到输出空间(0或1),它们都被称作判别学习(discriminative learning).与之相对的是生成学习(generative learning),先对 p(x|y) 与 p(y) 建模,然后通过贝叶斯法则导出后验条件概率分布分母的计算规则为全概率公式:p(x) = p(x|y = 1)p(y = 1) + p(x|y =0)p(y = 0).这一节介绍的

基于朴素贝叶斯算法的情感分类

环境 win8, python3.7, jupyter notebook 正文 什么是情感分析?(以下引用百度百科定义) 情感分析(Sentiment analysis),又称倾向性分析,意见抽取(Opinion extraction),意见挖掘(Opinion mining),情感挖掘(Sentiment mining),主观分析(Subjectivity analysis),它是对带有情感色彩的主观性文本进行分析.处理.归纳和推理的过程,如从评论文本中分析用户对"数码相机"的&qu

在Kaggle手写数字数据集上使用Spark MLlib的朴素贝叶斯模型进行手写数字识别

昨天我在Kaggle上下载了一份用于手写数字识别的数据集,想通过最近学习到的一些方法来训练一个模型进行手写数字识别.这些数据集是从28×28像素大小的手写数字灰度图像中得来,其中训练数据第一个元素是具体的手写数字,剩下的784个元素是手写数字灰度图像每个像素的灰度值,范围为[0,255],测试数据则没有训练数据中的第一个元素,只包含784个灰度值.现在我打算使用Spark MLlib中提供的朴素贝叶斯算法来训练模型. 首先来设定Spark上下文的一些参数: val conf = new Spar