我是机器学习的新手,所以在某些情况下我的理解可能是错误的。我正在尝试通过使用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进行训练,然后测试剩余的折叠。
那么有没有办法只使用这个加载的模型进行测试?
提前致谢。
尝试在火车数据上创建eval
。 Evaluation eval = new Evaluation(train);
如果您没有列车数据,请使用:
Evaluation eval = new Evaluation(test);
eval.useNoPriors();
创建eval
后,使用eval.evaluateModel(classifier, test);
对测试数据进行分类。