Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 使用朴素贝叶斯(哈希术语频率)的文本分类_Apache Spark_Classification_Data Mining_Apache Spark Mllib_Naivebayes - Fatal编程技术网

Apache spark 使用朴素贝叶斯(哈希术语频率)的文本分类

Apache spark 使用朴素贝叶斯(哈希术语频率)的文本分类,apache-spark,classification,data-mining,apache-spark-mllib,naivebayes,Apache Spark,Classification,Data Mining,Apache Spark Mllib,Naivebayes,我正在尝试使用朴素贝叶斯算法构建一个文本分类模型 以下是我的示例数据(标签和功能): 下面是我的示例代码 import org.apache.spark.SparkContext 导入org.apache.spark.SparkConf 导入org.apache.spark.mllib.classification.{NaiveBayes,NaiveBayesModel} 导入org.apache.spark.mllib.linalg.Vectors 导入org.apache.spark.mll

我正在尝试使用朴素贝叶斯算法构建一个文本分类模型

以下是我的示例数据(标签和功能):

下面是我的示例代码

import org.apache.spark.SparkContext
导入org.apache.spark.SparkConf
导入org.apache.spark.mllib.classification.{NaiveBayes,NaiveBayesModel}
导入org.apache.spark.mllib.linalg.Vectors
导入org.apache.spark.mllib.regression.LabeledPoint
导入org.apache.spark.mllib.util.MLUtils
导入org.apache.spark.mllib.evaluation.MulticlassMetrics
导入org.apache.spark.mllib.feature.HashingTF
val rawData=sc.textFile(“~/data.csv”)
val rawData1=rawData.map(x=>x.replaceAll(“,”,“))
val htf=新哈希函数(1000)
val parsedData=rawData1.map{line=>
val值=(line.split(“|”)toSeq)
val featureVector=htf.transform(值(1).split(“”)
val label=值(0)。toDouble
标签点(标签,特征向量)
}
val splits=parsedData.randomspilt(数组(0.8,0.2),seed=11L)
val训练=分割(0)
val测试=拆分(1)
val model=NaiveBayes.train(training,lambda=2.0,modelType=“多项式”)
val predictionAndLabels=test.map{point=>
val分数=模型预测(点特征)
(分数、分数、标签)
}
val度量=新的多类度量(预测和标记)
metrics.labels.foreach(l=>println(metrics.fMeasure(l)))
val testData1=htf.transform(“salt”)
val predictionAndLabels1=model.predict(testData1)
我得到大约33%的准确率(非常少),测试数据预测错误的标签。我已经打印了parsedData,其中包含标签和功能,如下所示:

(1.0,(1000,[48],[1.0]))
(3.0,(1000,[49],[1.0]))
(1.0,(1000,[48],[1.0]))
(3.0,(1000,[49],[1.0]))
(1.0,(1000,[48],[1.0]))

我无法找到它缺少什么;散列项频率函数似乎生成重复的数据项频率。请建议我改进模型性能,提前感谢

在开始实施算法之前,您必须问自己很多问题:

  • 你的文本看起来很短,你的词汇量有多大,回答这个问题将帮助你调整HashingTF维度的值。在您的情况下,可能需要使用较低的值 您可能需要考虑对文本进行一些预处理。e、 g.使用StopWordsRemover、词干、标记器
  • 标记器将构造比您正在进行的特殊文本处理更好的文本
  • 更改参数,即HashingTF的numfeature和Naive Bayes的lambda
  • 基本上,在Machin Learning中,为了优化结果,您需要对一组参数进行交叉验证。检查示例并尝试通过如下方式调整HashingTF和lambda来执行类似操作:

一般来说,使用管道和交叉验证与朴素贝叶斯一起进行多类分类是可行的,因此,请看一看,而不是用手硬编码所有SEPT。

阅读本文。我认为你所做的一切都很好,除了散列部分。感谢你的回复,培训文本超过1000行,这就是我使用htf(1000)的原因。我将尝试tokenizer和stopwordremover方法来预处理文本。
1|combusting [chemical]
1|industrial purposes
1|
2|salt for preserving, 
2|other for foodstuffs
2|auxiliary 
2|fluids for use with abrasives
3|vulcanisation 
3|accelerators
3|anti-frothing solutions for batteries
4|anti-frothing solutions for accumulators
4|acetates 
4|[chemicals]*
4|acetate of cellulose, unprocessed
val paramGrid = new ParamGridBuilder()
 .addGrid(hashingTF.numFeatures, Array(10, 100, 1000))
 .addGrid(naiveBayes.lambda, Array(0.1, 0.01))
 .build()