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