📜  用 WEKA 构建朴素贝叶斯分类器

📅  最后修改于: 2022-05-13 01:58:09.160000             🧑  作者: Mango

用 WEKA 构建朴素贝叶斯分类器

本文演示了在 Weka 中使用朴素贝叶斯分类器。本实验中使用的“天气标称”数据集以 ARFF 格式提供。本文假设数据已经过适当的预处理。

贝叶斯定理用于构建一组称为朴素贝叶斯分类器的分类算法。它是一系列算法,它们共享一个共同的概念,即被分类的每对特征都相互独立。

应遵循的步骤:

  • 最初,我们必须使用选择文件选项在 weka 工具中加载所需的数据集。在这里,我们选择要执行的天气名义数据集。

  • 现在我们必须转到左上角的分类选项卡,然后单击选择按钮并在其中选择朴素贝叶斯算法。



  • 现在要更改参数,请单击右侧的选择按钮,我们接受本示例中的默认值。

  • 我们从主面板的“测试”选项中选择百分比分割作为我们的测量方法。由于我们没有单独的测试数据集合,我们将使用 66% 的百分比拆分来很好地了解模型的准确性。我们的数据集包含 14 个示例,其中 h9 用于训练,5 个用于测试。

  • 要生成模型,我们现在单击“开始”。模型完成后,评估统计量将出现在右侧面板中。

以下是相同的Java代码

Java
import java.io.BufferedReader;
import java.io.FileReader;
import weka.classifiers.bayes.NaiveBayes;
import weka.classifiers.Evaluation;
import weka.core.Instances;
 
public class WeatherNominal {
    public static void main(String args[]) {
        try {
            // Create naivebayes classifier //
            NaiveBayes naivebayes = new NaiveBayes();
             
            // Dataset path //
            String weatherNominalDataset = "/home/droid/Tools/weka-3-8-5/data/weather.nominal.arff";
            // Create bufferedreader to read the dataset //
            BufferedReader bufferedReader = new BufferedReader(new FileReader(weatherNominalDataset));
             
            // Create dataset instances //
            Instances datasetInstances = new Instances(bufferedReader);
             
            // Randomize the dataset //
            datasetInstances.randomize(new java.util.Random(0));
             
            // Divide dataset into training and test data //
            int trainingDataSize = (int) Math.round(datasetInstances.numInstances() * 0.66);
            int testDataSize = (int) datasetInstances.numInstances() - trainingDataSize;
             
            // Create training data //
            Instances trainingInstances = new Instances(datasetInstances,0,trainingDataSize);
            // Create test data //
            Instances testInstances = new Instances(datasetInstances,trainingDataSize,testDataSize);
             
            // Set Target class //
            trainingInstances.setClassIndex(trainingInstances.numAttributes()-1);
            testInstances.setClassIndex(testInstances.numAttributes()-1);
             
            // Close BufferedReader //
            bufferedReader.close();
             
            // Build Classifier //
            naivebayes.buildClassifier(trainingInstances);
             
            // Evaluation //
            Evaluation evaluation = new Evaluation(trainingInstances);
            evaluation.evaluateModel(naivebayes,testInstances);
            System.out.println(evaluation.toSummaryString("\nResults",false));
        }
        catch (Exception e) {
                    System.out.println("Error Occured!!!! \n" + e.getMessage());
        }
 
    }
}


您可以通过键入以下命令来运行该程序

$ javac -cp /weka-3-8-5/weka.jar WeatherNominal.Java

$ Java -cp .:/weka-3-8-5/weka.jar WeatherNominal

注意:'/weka-3-8-5/weka.jar'是weka jar的路径,可以在weka的安装文件中找到

值得注意的是,该模型的分类准确率约为 60%。这表明我们将能够通过执行一些修改来优化准确性。 (无论是在预处理中还是在现有分类参数的选择中)

此外,为了识别新实例,我们可以使用我们自己的模型。单击主面板“测试选项”中的“提供的测试包”单选按钮,然后单击“设置”按钮。

这将打开一个弹出窗口,允许我们打开测试实例文件。它可以通过使用不同的测试集来进一步提高模块的准确性。