Java Mahout 0.9朴素贝叶斯分类文档

Java Mahout 0.9朴素贝叶斯分类文档,java,machine-learning,mahout,Java,Machine Learning,Mahout,我对Mahout非常陌生,我正在对非结构化文本文档进行分类 我使用了朴素的贝叶斯模型。我已经开始训练分类器,但我不知道如何将新文档转换为tfidf向量进行分类 我的数据存储为一个TSV文件,该文件有一个标签和与之对应的文本。我使用seq2parse创建训练模型所需的tfidf向量 然后,我使用这些tfidf向量对模型进行训练,得到一个朴素的贝叶斯模型 现在我有了一个新的未标记文本文档,我希望使用这个经过训练的模型对其进行分类,但我不确定如何将其转换为tfidf向量。如果我再次使用seq2pars

我对Mahout非常陌生,我正在对非结构化文本文档进行分类

我使用了朴素的贝叶斯模型。我已经开始训练分类器,但我不知道如何将新文档转换为tfidf向量进行分类

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

然后,我使用这些tfidf向量对模型进行训练,得到一个朴素的贝叶斯模型

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


我已经看到了一个基于已创建的字典文件和标签索引手动创建tfidf的实现,但我想知道Mahout是否已经提供了一些方法来实现这一点,就像他们提供的
seq2parse
一样。我宁愿使用支持性的方法来完成,也不必手动完成。

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

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);

我不确定我是否正确理解您的意思,但为什么不使用培训和测试文档创建术语频率矩阵,然后将培训向量与其标签合并?@visakh这不是用于测试的。假设我有一个新的非机密文档,我想给它贴上标签。。。如何为它创建tfidf向量?我的意思是我想使用分类器模型对其进行标记。我想您必须基于整个数据集创建文档术语矩阵,包括已分类的数据集(用于培训)和未分类的数据集。否则,术语矩阵的维度就不合适了,因为机密文档和非机密文档中的单词可能不同。没错!所以我想知道mahout是否提供了一种方法来传入生成的字典文件,该文件是基于tfidf的。否则,我将不得不遵循黑猩猩的例子,手动执行。