【问题标题】:Mahout 0.9 classify document for Naive BayesMahout 0.9 为朴素贝叶斯分类文档
【发布时间】:2014-07-01 11:14:06
【问题描述】:

我是 Mahout 的新手,我正在对非结构化文本文档进行分类。

我在使用朴素贝叶斯模型时关注了this tutorial。我已经到了训练分类器的地步,但我不确定如何将新文档转换为 tfidf 向量进行分类。

我的数据存储为一个 TSV 文件,该文件有一个标签和与之对应的文本。我使用seq2parse 创建训练模型所需的 tfidf 向量。

然后我使用这些 tfidf 向量训练模型,得到朴素贝叶斯模型。

现在我有一个新的未标记文本文档,我希望使用这个经过训练的模型对其进行分类,但我不确定如何将其转换为 tfidf 向量。如果我再次使用seq2parse,那么它将创建一组新的字典文件等,我假设这与为训练集创建的字典不对应。

我在https://github.com/fredang/mahout-naive-bayes-example/blob/master/src/main/java/com/chimpler/example/bayes/Classifier.java 看到了基于已创建的字典文件和标签索引创建 tfidf 的手动实现,但我想知道 Mahout 是否已经提供了一些方法来执行此操作,就像他们提供 @987654325 的方式一样@。我宁愿使用支持的方法来完成它,而不是必须手动完成。

【问题讨论】:

  • 我不确定我是否理解正确,但是为什么不使用训练和测试文档创建词频矩阵,然后将训练向量与其标签合并?跨度>
  • @visakh 不是为了测试。假设我有一个新的未分类文档,我想给它加标签……我将如何为它创建 tfidf 向量?
  • 我的意思是我想使用分类器模型来标记它
  • 我猜你必须根据整个数据集创建文档术语矩阵,包括分类的(用于训练的)和未分类的。否则,术语矩阵的维度将不合适,因为分类文档和未分类文档中的单词可能不同。
  • 没错!所以我想知道 mahout 是否提供了一种方法来传递生成的字典文件以作为 tfidf 的基础。否则我将不得不按照 chimpler 的例子手动完成。

标签: java machine-learning mahout


【解决方案1】:

示例代码可以帮助你,也许:

org.apache.mahout.math.Vector vector = new RandomAccessSparseVector();
    Integer wordId = dictionary.get(word);  // use hashcode of word

    double tfIdfValue = tfidf.calculate(count, freq.intValue(),
            wordCount, documentCount); // calculate tf*idf

    vector.set(wordId,tfIdfValue);

// Model is a matrix (wordId, labelId) => probability score
NaiveBayesModel model = NaiveBayesModel.materialize(
        new Path(modelPath), configuration);
StandardNaiveBayesClassifier classifier = new StandardNaiveBayesClassifier(
        model);

// With the classifier, we get one score for each label.The label with
// the highest score is the one the tweet is more likely to be
// associated to
Vector resultVector = classifier.classifyFull(vector);

【讨论】:

    猜你喜欢
    • 2011-12-28
    • 2012-04-28
    • 2012-11-02
    • 2015-08-27
    • 2012-01-24
    • 2012-07-02
    • 2017-01-10
    • 2016-08-02
    相关资源
    最近更新 更多