Java 朴素贝叶斯分类器评估

Posted

技术标签:

【中文标题】Java 朴素贝叶斯分类器评估【英文标题】:Java Naive Bayes Classifier evaluation 【发布时间】:2014-11-03 05:58:19 【问题描述】:

我是 weka 数据挖掘和评估的新手。到目前为止,我已经阅读了数据集。我想根据数据集预测我的数据。例如,我使用了 weka 工具提供的天气数据集。所以我使用过用于分类的朴素贝叶斯分类器。现在我得到了属性的概率值。现在我想使用数据集预测数据。例如,当我给出sunny,70,85,TRUE 时,我想获得类值的概率。到目前为止,我已经完成了这部分。谁能告诉我如何使用朴素贝叶斯分类器进行数据评估。

public static void ArfLoader()
         ArffLoader loader = new ArffLoader();
         try 
             loader.setFile(new File("sampleData.txt"));
             Instances structure = loader.getStructure();
             structure.setClassIndex(structure.numAttributes() - 1);

             NaiveBayesUpdateable nb = new NaiveBayesUpdateable();
             nb.buildClassifier(structure);
             Instance current;
             while ((current = loader.getNextInstance(structure)) != null)
                 nb.updateClassifier(current); 
             

             System.out.print(nb); 


         catch (IOException e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
         catch (Exception e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
        


    

那么这是我的数据集。

@relation weather

@attribute outlook sunny, overcast, rainy
@attribute temperature real
@attribute humidity real
@attribute windy TRUE, FALSE
@attribute play yes, no

@data
sunny,85,85,FALSE,no
sunny,80,90,TRUE,no
overcast,83,86,FALSE,yes
rainy,70,96,FALSE,yes
rainy,68,80,FALSE,yes
rainy,65,70,TRUE,no
overcast,64,65,TRUE,yes
sunny,72,95,FALSE,no
sunny,69,70,FALSE,yes
rainy,75,80,FALSE,yes
sunny,75,70,TRUE,yes
overcast,72,90,TRUE,yes
overcast,81,75,FALSE,yes
rainy,71,91,TRUE,no

【问题讨论】:

【参考方案1】:

您可以尝试如下所述的classifyInstance 方法,用于单独的测试集:

         ArffLoader testingData = new ArffLoader();
         testingData.setFile(new File("sample2.txt"));
         Instances testingStructure = testingData.getStructure();
         testingStructure.setClassIndex(structure.numAttributes() - 1);
         Instance test;
         while ((test = testingData.getNextInstance(testingStructure)) != null) 
            System.out.println(nb.classifyInstance(test));
         

希望对您有所帮助!

更新!

听起来您正在寻找每个测试用例的概率分布。也许您可以尝试以下方法:

         String[] options = new String[7];
         options[0] = "-t";
         options[1] = "sample.arff";
         options[2] = "-T";
         options[3] = "sample2.arff";
         options[4] = "-p";
         options[5] = "2";
         options[6] = "-distribution";

         System.out.println(Evaluation.evaluateModel(nb, options));

这将包含每个案例的概率分布列表(训练数据 = sample.arff,测试数据 = sample2.arff,输出带有概率分布的测试预测)

【讨论】:

感谢您的帮助。这部分我已经完成了。所以我想提出我的价值观并检查概率。我的意思是我想发送我的价值观 Sunny,70,85,TRUE 并获得回应。 我已修改我的答案以使用可以输出概率分布的 Evaluation.evaluateModel 类。 感谢您的帮助。我正在寻找不同的东西。我有训练数据集。根据这些数据,我需要预测我的属性集的类值。

以上是关于Java 朴素贝叶斯分类器评估的主要内容,如果未能解决你的问题,请参考以下文章

朴素贝叶斯-商品评论情感分析

朴素贝叶斯构建“饥饿站台”豆瓣短评情感分类器

贝叶斯分类器(3)朴素贝叶斯分类器

朴素贝叶斯分类器的准确性?

机器学习系列-朴素贝叶斯分类器

动态朴素贝叶斯分类器和朴素贝叶斯分类器有啥区别