美文网首页
一个简单的spark贝叶斯分类程序

一个简单的spark贝叶斯分类程序

作者: snow_14b5 | 来源:发表于2018-08-21 15:05 被阅读0次

在笔记本跑了一个简单的贝叶斯分类示例,工程级的代码原理类似,只不过有些细节需要修改。

主要代码如下:

import org.apache.spark.sql.{DataFrame, Row, SparkSession}
import org.apache.spark.ml.feature.{HashingTF, }
import org.apache.hadoop.fs.Path
import org.apache.spark.ml.classification.NaiveBayes
import org.apache.spark.ml.feature.

object bayes {
def main(args: Array[String]) {
val spark = SparkSession
.builder
.appName("bayes")
.getOrCreate()

import spark.implicits._

val sentenceDataFrame = spark.createDataFrame(Seq(    //比较简单的样本数据 0分类 水果; 1分类 粮食
  (0,"水果","苹果 橘子 香蕉"),
  (1, "粮食","大米 小米 土豆")
)).toDF("label","category", "text")

val tokenizer = new Tokenizer().setInputCol("text").setOutputCol("words")
var wordData = tokenizer.transform(sentenceDataFrame)

val stopwordFile: String = "/applications/stopWords"        //引入停用词

val customizedStopWords: Array[String] = if (stopwordFile.isEmpty()) {
  Array.empty[String]
} else {
  val stopWordText = spark.read.text(stopwordFile).as[String].collect()
  stopWordText.flatMap(_.stripMargin.split("\\s+"))
}

val stopWordsRemover = new StopWordsRemover()
  .setInputCol("words")
  .setOutputCol("token")
stopWordsRemover.setStopWords(stopWordsRemover.getStopWords ++ customizedStopWords)
var wordDataWithOutStopWord = stopWordsRemover.transform(wordData)

var hashingTF = new HashingTF()
  .setInputCol("token").setOutputCol("tf")
val tf= hashingTF.transform(wordDataWithOutStopWord)
tf.cache()
tf.show(false)

val idf=new IDF().setInputCol("tf").setOutputCol("features").fit(tf)  //根据以上数据训练的idf模型,实际需要根据大量数据训练
val tfidf =idf.transform(tf)
tfidf.show(false)


val naiveBayesModel = new NaiveBayes()  //创建贝叶斯模型,用上面数据训练
  .setSmoothing(1)
  .fit(tfidf)

val training = spark.createDataFrame(List(  //待预测的测试数据
  (0, "大米")
)).toDF("id", "text")


var tokenfeature = tokenizer.transform(training)
wordDataWithOutStopWord = stopWordsRemover.transform(tokenfeature)

var trainRescaledData = hashingTF.transform(wordDataWithOutStopWord)
val tfidf1 = idf.transform(trainRescaledData)
val predictions = naiveBayesModel
  .transform(tfidf1)
predictions.printSchema()
val predict = predictions.first().getAs[Double]("prediction")   //预测结果 输出label 为1 粮食分类

println("predict aaaaa:")
println(predict)


spark.stop()

}

}

相关文章

  • 一个简单的spark贝叶斯分类程序

    在笔记本跑了一个简单的贝叶斯分类示例,工程级的代码原理类似,只不过有些细节需要修改。 主要代码如下: import...

  • Spark 分布式实现贝叶斯判别

    Spark 分布式实现贝叶斯判别 贝叶斯公式 一个小案例 大家都知道狼来了的故事,我们就有贝叶斯的思想来解释一下这...

  • 《机器学习(周志华)》学习笔记(七)

    Q:什么是贝叶斯分类器? A:一句话:以贝叶斯方法为核心原理构造出来的分类程序统称为贝叶斯分类器,主要包括朴素贝叶...

  • 朴素贝叶斯算法介绍及优化

    朴素贝叶斯(Naive Bayes) 贝叶斯公式 朴素贝叶斯算法其实原理很简单,要理解朴素贝叶斯算法我们首先得知道...

  • Flink实现高斯朴素贝叶斯

    Flink实现高斯朴素贝叶斯 在之前的文章中提到了多项式的朴素贝叶斯,在spark的ML里也实现了多项式的朴素贝叶...

  • 数据算法 Hadoop/Spark大数据处理---第十四章

    本章为朴素贝叶斯算法 朴素贝叶斯算法的思想 本章实现方式 1.基于spark来实现 2.基于传统Scala来实现 ...

  • 朴素贝叶斯

    朴素贝叶斯 用处:朴素贝叶斯主要解决的是而分类的问题。 为什么叫朴素贝叶斯: 因为贝叶斯分类只做最原始,最简单的假...

  • 朴素贝叶斯概述

    朴素贝叶斯本质上是一种简单的概率图模型 朴素贝叶斯与LR的区别?简单来说:朴素贝叶斯是生成模型,根据已有样本进行贝...

  • 机器学习-贝叶斯

    贝叶斯概述: 贝叶斯分类算法是统计学中的一种概率分类方法,朴素贝叶斯分类是贝叶斯分类中最简单的一种。其分类原理就是...

  • 实战:垃圾短信分类器

    上次我们讲到朴素贝叶斯分类,忘记的同学参考一文搞懂朴素贝叶斯分类,今天就通过朴素贝叶斯分来来实现一个简单的垃圾短信...

网友评论

      本文标题:一个简单的spark贝叶斯分类程序

      本文链接:https://www.haomeiwen.com/subject/dicjiftx.html