使用 Apache Spark MLlib 的朴素贝叶斯

Posted

技术标签:

【中文标题】使用 Apache Spark MLlib 的朴素贝叶斯【英文标题】:Naive Bayes with Apache Spark MLlib 【发布时间】:2016-01-10 20:10:29 【问题描述】:

我正在使用朴素贝叶斯和 Apache Spark MLlib 进行文本分类遵循教程:http://avulanov.blogspot.com/2014/08/text-classification-with-apache-spark.html

 /* instantiate Spark context (not needed for running inside Spark shell */
val sc = new SparkContext("local", "test")
/* word to vector space converter, limit to 10000 words */
val htf = new HashingTF(10000)
/* load positive and negative sentences from the dataset */
/* let 1 - positive class, 0 - negative class */
/* tokenize sentences and transform them into vector space model */
val positiveData = sc.textFile("/data/rt-polaritydata/rt-polarity.pos")
  .map  text => new LabeledPoint(1, htf.transform(text.split(" ")))
val negativeData = sc.textFile("/data/rt-polaritydata/rt-polarity.neg")
  .map  text => new LabeledPoint(0, htf.transform(text.split(" ")))
/* split the data 60% for training, 40% for testing */
val posSplits = positiveData.randomSplit(Array(0.6, 0.4), seed = 11L)
val negSplits = negativeData.randomSplit(Array(0.6, 0.4), seed = 11L)
/* union train data with positive and negative sentences */
val training = posSplits(0).union(negSplits(0))
/* union test data with positive and negative sentences */
val test = posSplits(1).union(negSplits(1))
/* Multinomial Naive Bayesian classifier */
val model = NaiveBayes.train(training)
/* predict */
val predictionAndLabels = test.map  point =>
  val score = model.predict(point.features)
  (score, point.label)

/* metrics */
val metrics = new MulticlassMetrics(predictionAndLabels)
/* output F1-measure for all labels (0 and 1, negative and positive) */
metrics.labels.foreach( l => println(metrics.fMeasure(l)))

但是,在训练数据之后。如果我想知道句子“Have a nice day”是积极的还是消极的,我该怎么办? 谢谢。

【问题讨论】:

【参考方案1】:

一般来说,您需要两件事来对原始数据进行预测:

    应用您用于训练数据的相同转换。如果某些转换器需要拟合(如 IDF、归一化、编码),则必须使用适合训练数据的转换器。由于您的方法非常简单,因此您需要的是这样的:

    val testData = htf.transform("Have a nice day".split(" "))
    

    使用训练好的模型的predict方法:

    model.predict(testData)
    

【讨论】:

以上是关于使用 Apache Spark MLlib 的朴素贝叶斯的主要内容,如果未能解决你的问题,请参考以下文章

apache spark mllib naive bayes LabeledPoint 用法

Spark MLlib 中的朴素贝叶斯

Spark MLlib 源码学习---朴素贝叶斯模型(Naive Bayes)

Spark MLlib 源码学习---朴素贝叶斯模型(Naive Bayes)

Spark MLlib 源码学习---朴素贝叶斯模型(Naive Bayes)

Spark MLlib 源码学习---朴素贝叶斯模型(Naive Bayes)