0

我对机器学习完全陌生,所以在某些情况下我的理解可能是错误的。我正在尝试通过使用 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 进行训练,然后对剩余的折叠进行测试。

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

提前致谢。

4

1 回答 1

0

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

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

于 2017-12-25T13:44:49.313 回答