使用保存的模型通过Java代码测试数据(Weka)

我是机器学习的新手,所以在某些情况下我的理解可能是错误的 . 我正在尝试通过使用weka通过Java代码加载已保存的模型来测试数据 .

Instances testingData = readArffFile(testFile);
            try
            {
                LibSVM cls = (LibSVM) weka.core.SerializationHelper.read(model);

                Evaluation eval = new Evaluation(testingData);
                eval.crossValidateModel(cls, testingData, 10, new Random(1));
              //eval.evaluateModel(cls, testingData);
}

当我保存模型时,我使用了交叉验证 . 现在我有点困惑,是否使用 eval.crossValidateModel()eval.evaluateModel() .

如果我使用 evaluateModel() ,它会给我错误的准确性(远高于它应该) . 我认为这是因为行 <Evaluation eval = new Evaluation(testingData);> 在同一数据上训练它,然后在相同数据上进行测试 . 这不是我想要的 . 我想在没有训练的情况下测试模型上的数据(我认为模型在训练后保存)

如果我使用 eval.crossValidateModel() ,我认为它仍在训练模型,因为据我所知,交叉验证将数据集拆分为k-folds然后对k-1进行训练,然后测试剩余的折叠 .

那么有没有办法只使用这个加载的模型进行测试?

提前致谢 .

回答(1)

2 years ago

尝试在列车数据上创建 eval . Evaluation eval = new Evaluation(train);

如果您没有列车数据,请使用: Evaluation eval = new Evaluation(test); eval.useNoPriors(); 创建 eval 后,使用 eval.evaluateModel(classifier, test); 对测试数据进行分类 .