使用LingPipe进行朴素贝叶斯数据分类

我想根据内容将某些数据分类到不同的类别中。我使用了朴素贝叶斯分类器进行分类,并得到了最佳类别的输出。但现在我想将训练集之外的新闻归类到“其他”类中。由于其他类别的数量庞大,我无法手动将训练数据之外的每条数据添加到某个类别中。那么,有没有办法对其他数据进行分类呢?

private static File TRAINING_DIR = new File("4news-train");private static File TESTING_DIR = new File("4news-test");private static String[] CATEGORIES = { "c1", "c2", "c3", "others" };private static int NGRAM_SIZE = 6;public static void main(String[] args) throws ClassNotFoundException, IOException {    DynamicLMClassifier<NGramProcessLM> classifier = DynamicLMClassifier.createNGramProcess(CATEGORIES, NGRAM_SIZE);    for (int i = 0; i < CATEGORIES.length; ++i) {        File classDir = new File(TRAINING_DIR, CATEGORIES[i]);        if (!classDir.isDirectory()) {            String msg = "Could not find training directory=" + classDir + "\nTraining directory not found";            System.out.println(msg); // in case exception gets lost in shell            throw new IllegalArgumentException(msg);        }        String[] trainingFiles = classDir.list();        for (int j = 0; j < trainingFiles.length; ++j) {            File file = new File(classDir, trainingFiles[j]);            String text = Files.readFromFile(file, "ISO-8859-1");            System.out.println("Training on " + CATEGORIES[i] + "/" + trainingFiles[j]);            Classification classification = new Classification(CATEGORIES[i]);            Classified<CharSequence> classified = new Classified<CharSequence>(text, classification);            classifier.handle(classified);        }    }}

回答:

只需序列化对象…这意味着将中间对象写入文件,这就是你的模型…

然后在测试时,只需将数据传入模型中,不需要每次都进行训练…这对你来说会相当容易

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注