使用保存的模型通过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折,然后对K-1进行培训,然后在其余折叠上进行测试。p>因此,是否有一种方法仅使用此加载模型进行测试?

预先感谢。

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

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

最新更新