Использование сохраненной модели для проверки данных с помощью кода Java (Weka)

Я совершенно новичок в машинном обучении, поэтому в некоторых случаях мое понимание может быть неправильным. Я пытаюсь проверить данные, загрузив сохраненную модель через Java-код, используя weka.

    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, а затем проверяет оставшуюся кратность.

Итак, есть ли способ выполнить тестирование только с использованием этой загруженной модели?

Заранее спасибо.


person user1340852    schedule 23.12.2017    source источник


Ответы (1)


Попробуйте создать eval в данных поезда. Evaluation eval = new Evaluation(train);

Если у вас нет данных поезда, используйте: Evaluation eval = new Evaluation(test); eval.useNoPriors(); После создания eval используйте eval.evaluateModel(classifier, test); для классификации тестовых данных.

person hkn    schedule 25.12.2017