朴素贝叶斯文本分类算法

惠在那里! 我只需要在Java中实现朴素贝叶斯文本分类算法的帮助来测试我的数据集用于研究目的。 在Java中实现算法是强制性的; 而是使用Weka或Rapid Miner工具来获得结果!


我的数据集具有以下类型的数据:

    Doc  Words   Category

意味着我有预先知道的每项训练(字符串)的训练单词和类别。 一些数据集如下:

             Doc      Words                                                              Category        
    Training
               1      Integration Communities Process Oriented Structures...(more string)       A
               2      Integration Communities Process Oriented Structures...(more string)       A
               3      Theory Upper Bound Routing Estimate global routing...(more string)        B
               4      Hardware Design Functional Programming Perfect Match...(more string)      C
               .
               .
               .
    Test
               5      Methodology Toolkit Integrate Technological  Organisational
               6      This test contain string naive bayes test text text test

所以数据集来自MySQL数据库,它可能包含多个训练字符串和测试字符串! 事情是我只需要在Java中实现朴素贝叶斯文本分类算法。

该算法应该遵循下面在表13.1中提到的例子

来源:请阅读


问题是我可以在Java Code中自己实现算法,但我只需要知道是否有可能存在某种带有源代码文档的Java库,以便我可以测试结果。

问题是我只需要一次结果只意味着它只是一个测试结果。

所以,有人可以告诉我任何好的Java库,它可以帮助我在Java中编写这个算法,并且可以使我的数据集可以处理结果,或者有人可以给我任何好的想法,以便如何轻松完成。有些东西可以帮助我。

我会感谢你的帮助。 提前致谢


按照您的要求,您可以使用apache的机器学习库MLlib。 MLlib是Spark的可扩展机器学习库,由常用的学习算法和实用程序组成。 还有一个Java代码模板来实现使用该库的算法。 所以首先,你可以:

如下所示,为其网站上提供的朴素贝叶斯实现java骨架。

import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.mllib.classification.NaiveBayes;
import org.apache.spark.mllib.classification.NaiveBayesModel;
import org.apache.spark.mllib.regression.LabeledPoint;
import scala.Tuple2;

JavaRDD<LabeledPoint> training = ... // training set
JavaRDD<LabeledPoint> test = ... // test set

final NaiveBayesModel model = NaiveBayes.train(training.rdd(), 1.0);

JavaPairRDD<Double, Double> predictionAndLabel = 
  test.mapToPair(new PairFunction<LabeledPoint, Double, Double>() {
    @Override public Tuple2<Double, Double> call(LabeledPoint p) {
      return new Tuple2<Double, Double>(model.predict(p.features()), p.label());
    }
  });
double accuracy = predictionAndLabel.filter(new Function<Tuple2<Double, Double>, Boolean>() {
    @Override public Boolean call(Tuple2<Double, Double> pl) {
      return pl._1().equals(pl._2());
    }
  }).count() / (double) test.count();

为了测试你的数据集,这里没有比使用Spark SQL更好的解决方案。 MLlib完美适合Spark的API。 要开始使用它,我建议您首先通过MLlib API,根据您的需要实施算法。 使用库很容易。 为了让下一步可以处理数据集,只需使用Spark SQL即可。 我会建议你坚持这一点。 在安置这个易于使用的库之前,我也搜寻了多个选项,并且它与其他一些技术间的操作无缝支持。 我会在这里发布完整的代码以完全适合您的答案。 但我认为你很好走。


如果您不想使用GUI,您可以使用Weka Java API并将其包含在您的项目中。

以下是指向您的代码中包含分类的文档的链接:https://weka.wikispaces.com/Use+WEKA+in+your+Java+code


请看Bow工具包。

它有一个Gnu许可证和源代码。 其中的一些代码包括

根据朴素贝叶斯,TFIDF和其他几种方法设置单词矢量权重。

执行测试/列车拆分,以及自动分类测试。

它不是Java库,但是您可以编译C代码以确保Java对于给定的语料库具有相似的结果。

我还发现了一个体面的博士Dobbs文章,用Perl实现。 再次,不是所需的Java,但会给你一次性的结果,你所要求的。

链接地址: http://www.djcxy.com/p/40159.html

上一篇: Naive Bayes Text Classification Algorithm

下一篇: Basic concepts: Naive Bayes algorithm for classification