基于NaiveBayes的文本分类之Spark实现
来源:互联网 发布:redflag linux 8 编辑:程序博客网 时间:2024/05/16 10:36
在尝试了python下面用sklearn进行文本分类(http://blog.csdn.net/a_step_further/article/details/50189727)后,我们再来看下用spark如何实现文本分类的工作,采用的算法同样是朴素贝叶斯。
此前,我们已经实现了hadoop集群环境下使用mapreduce进行中文分词(http://blog.csdn.net/a_step_further/article/details/50333961),那么文本分类的过程也使用集群环境操作,相对于python的单机版本实现,无疑更方便一些。
上代码:
import org.apache.spark.mllib.classification.NaiveBayesimport org.apache.spark.mllib.feature.{IDFModel, HashingTF, IDF}import org.apache.spark.mllib.linalg.Vectorimport org.apache.spark.mllib.regression.LabeledPointimport org.apache.spark.rdd.RDDimport org.apache.spark.{SparkContext, SparkConf}object textClassify { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("text_classify").set("spark.akka.frameSize","20") val sc = new SparkContext(conf) if(args.length != 2){ println("Usage: textClassify <inputLoc> <idfSaveLoc> <modelSaveLoc> ") System.exit(-1) } val inputLoc = args(0) val inputData = sc.textFile(inputLoc).map(line => line.split("\t")).filter(_.length == 2).cache() val features = inputData.map(x => x(1).split(" ").toSeq).cache() val hashingTF = new HashingTF() val tf = hashingTF.transform(features) val idf: IDFModel = new IDF(minDocFreq = 2).fit(tf) val tfIdf = idf.transform(tf) val zippedData = inputData.map(x => x(0)).zip(tfIdf).map{case (label, tfIdf) => LabeledPoint(label.toDouble, tfIdf) }.cache() val randomSplitData = zippedData.randomSplit(Array(0.6, 0.4), seed=10L) zippedData.unpersist() val trainData = randomSplitData(0).cache() val testData = randomSplitData(1) val model = NaiveBayes.train(trainData, lambda = 0.1) trainData.unpersist() //预测 val predictTestData = testData.map{case x => (model.predict(x.features), x.label)} val totalTrueNum = predictTestData.filter(x => x._2 == 1.0).count() val predictTrueNum = predictTestData.filter(x => x._1 == 1.0).count() val predictRealTrue = predictTestData.filter(x => x._1 == x._2 && x._2 == 1.0).count() println("results------------------------------------------------") println("准确率:", 1.0*predictRealTrue/predictTrueNum) println("召回率:",1.0*predictRealTrue/totalTrueNum) println("------------------------------------------------") val modelSaveLoc = args(1) model.save(sc,modelSaveLoc) sc.stop() }}
0 0
- 基于NaiveBayes的文本分类之Spark实现
- Spark ML下实现的多分类adaboost+naivebayes算法在文本分类上的应用
- Spark MLlib源代码解读之朴素贝叶斯分类器,NaiveBayes
- Spark MLlib源代码解读之朴素贝叶斯分类器,NaiveBayes
- 文本分类——NaiveBayes
- 基于Spark Mllib的文本分类
- Spark 实现 朴素贝叶斯(naiveBayes)
- Spark MLlib NaiveBayes 贝叶斯分类器
- 基于tensorflow 的cnn实现文本分类
- Spark下实现LDA+SVM的文本分类处理
- Spark MLlib实现的中文文本分类–Naive Bayes
- Spark MLlib实现的中文文本分类–Naive Bayes
- Spark MLlib实现的中文文本分类–Native Bayes
- Spark MLlib实现的中文文本分类–Naive Bayes
- Spark 实战,第 6 部分: 基于 Spark ML 的文本分类
- 基于支持向量机SVM的文本分类的实现
- 基于kNN的文本分类原理以及实现
- 文本分类的python实现-基于SVM算法
- hiho一下 第九十三周 数论二·Eular质数筛法
- Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled.
- sql语法:inner join on, left join on, right join on详细使用方法
- IOS NSTimer 定时器用法总结
- openstack网络节点中neutron-openvswitch错误
- 基于NaiveBayes的文本分类之Spark实现
- 标记姿态估计
- 初试主题模型LDA-基于python的gensim包
- Java并发性和多线程介绍目录
- Simple tutorial for using TensorFlow to compute polynomial regression
- RunTime机制详解(四)
- 复杂网络节点重要性评价方法初探
- 方法
- 安卓新闻客户端实战(一):项目简介