Java朴素贝叶斯分类器评估

时间:2014-09-09 17:53:33

标签: java classification weka

我是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 个答案:

答案 0 :(得分: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));

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