zoukankan      html  css  js  c++  java
  • 基于RDD的朴素贝叶斯的Spark API

    朴素贝叶斯是基于每个特征都是相互独立的这个假设而成立的。朴素贝叶斯算法常常用于多分类的任务中。在spark mllib中支持多项式朴素贝叶斯和伯努利朴素贝叶斯模型。这些模型常常用于文档分类。在文档分类的任务中,每一个样本就是一个文档,每一个特征就是一个单词,单词的数值为该词的评率。而输入特征为稀疏向量。由于训练数据只使用一次所以在Spark中没有对其进行缓存。


    在Spark MLlib中使用NaiveBayes来调用朴素贝叶斯的模型。它的参数有:带有标签的LabeledPoint的RDD,可选的平滑参数(lambda)(默认值为1.0),可选的模型的类型(比如多项式朴素贝叶斯和伯努利朴素贝叶斯)。NaiveBayes被训练后输出NaiveBayesModel对象,用于评估和预测。


    下面是一个使用朴素贝叶斯的例子:

    • 数据格式
    1 159:121 160:254 161:136 186:13 187:230 188:253 
    0 155:53 156:255 157:253 158:253 159:253
    
    • 代码
    package com.naivebeys.test
    
    
    import org.apache.spark.mllib.classification.{NaiveBayes, NaiveBayesModel}
    import org.apache.spark.mllib.regression.LabeledPoint
    import org.apache.spark.mllib.util.MLUtils
    import org.apache.spark.rdd.RDD
    import org.apache.spark.{SparkConf, SparkContext}
    
    
    object Main {
      def main(args: Array[String]): Unit = {
        //TODO 创建环境
        val conf: SparkConf = new SparkConf().setAppName("NaiveBayesTest").setMaster("local[*]")
        val sc = new SparkContext(conf)
        //TODO 数据操作
        //读取数据
        val dataPath = "src/main/resources/Data/data/mllib/sample_libsvm_data.txt"
        val data: RDD[LabeledPoint] = MLUtils.loadLibSVMFile(sc, dataPath)
    
        //划分数据集和测试集(6:4)
        val dataArr: Array[RDD[LabeledPoint]] = data.randomSplit(Array(0.6, 0.4))
    
        //训练数据
        val model: NaiveBayesModel = NaiveBayes.train(dataArr(0), lambda = 1.0, modelType = "multinomial")
    
        //预测结果
        val predictionAndLabel: RDD[(Double, Double)] = dataArr(1).map(p => (model.predict(p.features), p.label))
        //计算准确率
        val acc: Double = 1.0 * predictionAndLabel.filter(x => x._1 == x._2).count() / dataArr(1).count()
    
        println(acc)
        //保存模型
        //model.save(sc, "path")
        //拿出模型使用
        //val sameModel: NaiveBayesModel = NaiveBayesModel.load(sc, "path")
        //TODO 关闭环境
        sc.stop()
      }
    }
    
    
  • 相关阅读:
    使用python内置模块os和openpyxl搜索指定文件夹下Excel中的内容
    python实现DNA序列字符串转换,互补链,反向链,反向互补链
    PandaSeq安装报错ltld required, install libtool library
    使用MySQL客户端登录Ensemble数据库查询相关信息
    第118天:移动端开发——视口
    第117天:Ajax实现省市区三级联动
    第116天: Ajax运用artTemplate实现菜谱
    第115天:Ajax 中artTemplate模板引擎(一)
    第114天:Ajax跨域请求解决方法(二)
    第113天:Ajax跨域请求解决方法
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/15054053.html
Copyright © 2011-2022 走看看