machine-learning - Java 中的 Weka UI 和 API 代码给出了不同的结果

标签 machine-learning weka

我是 Weka 新手。

我尝试使用 API 运行 WEKA,但发现 WEKA GUI 的结果与 Java 代码生成的结果不匹配。

我正在尝试通过提供训练集和测试集来运行随机森林算法。

这是代码片段:

            DataSource ds = new DataSource(trainingFile);

            Instances insts = ds.getDataSet();

            insts.setClassIndex(insts.numAttributes() - 1);

            Classifier cl = new RandomForest();
            RandomForest rf = (RandomForest)cl;
       //     rf.setOptions(options);
         //   rf.setNumExecutionSlots(1);
            rf.setNumFeatures(5);
            rf.setSeed(1);
            rf.setNumExecutionSlots(1);                  

            Remove remove = new Remove();
            int[] attrs = WekaCustomisation.convertIntegers(attrList);

            remove.setAttributeIndicesArray(attrs);
            remove.setInvertSelection(true);                

            remove.setInputFormat(insts);
            insts = weka.filters.Filter.useFilter(insts, remove);

            insts.setClassIndex(insts.numAttributes() - 1);            


            weka.core.Instances train = new weka.core.Instances(insts, 0, insts.numInstances());          


            cl.buildClassifier(train);

         weka.core.converters.ConverterUtils.DataSource ds2 = new weka.core.converters.ConverterUtils.DataSource(testFile);

            weka.core.Instances instsTest = ds2.getDataSet();
            remove.setInputFormat(instsTest);
            instsTest = weka.filters.Filter.useFilter(instsTest, remove);
            instsTest.setClassIndex(instsTest.numAttributes() - 1);                

            Instances testInstances = new Instances(instsTest);
            int numCorrect = 0;

            weka.classifiers.Evaluation eval = new weka.classifiers.Evaluation(train);
            eval.evaluateModel(cl, testInstances);
            System.out.println(eval.toSummaryString());
            out.write(eval.toSummaryString());
            double roc = eval.areaUnderROC(0);

WEKA GUI 生成的混淆矩阵与此代码不同。我在这里缺少什么。

最佳答案

首先检查Weka GUI中执行的参数和过滤是否与您在代码中执行的相同。 (查看GUI中生成的日志)

第二种可能性是随机森林模型在其创建结构中具有的随机组件(为每个决策树选择数据集中的随机特征,请参阅 here )。因此,在训练阶段,同一训练数据集会生成不同的模型,当您使用测试进行评估时,您会得到不同的结果。

关于machine-learning - Java 中的 Weka UI 和 API 代码给出了不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11872974/

相关文章:

linux - 如何在 Linux 中通过命令行运行 Auto-Weka

machine-learning - 如果嵌套模型在相同数据上进行训练,是否会过度拟合

python - 使用Sklearn加载本地文件,尝试显示任何图像返回空

python - 支持向量-/Logistic-回归 : do you have benchmark results for the boston housing data?

machine-learning - Weka机器学习:how to interprete Naive Bayes classifier?

machine-learning - WEKA:如何过滤多个属性范围?

machine-learning - WEKA GUI 中没有包管理器

sql-server - Weka如何连接到MSSQL服务器

python - 使用PyMC3的指数函数时出错

python - NLTK最大熵分类器原始分数