Можно ли вывести ошибку на тренировочных данных через модуль Experimenter? - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь построить кривую обучения, которая сравнивает точность обучения и тестирования с размером тренировочного набора в WEKA.Часть точности тестирования в зависимости от размера обучающего набора легко выполнить (с помощью LearningRateProducer), но я не могу понять, как автоматически получать результаты точности обучения с помощью модуля экспериментатора.Вот пример вывода, который я ищу.Этот результат получен из простого модуля CLI после запуска IBk.

=== Error on training data ===

Correctly Classified Instances        4175              100      %
Incorrectly Classified Instances         0                0      %
Kappa statistic                          1     
Mean absolute error                      0.0005
Root mean squared error                  0.0012
Relative absolute error                  0.717  %
Root relative squared error              0.6913 %
Total Number of Instances             4175     

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

Спасибо, B

1 Ответ

0 голосов
/ 20 сентября 2019

Мне удалось получить эту информацию, установив Groovy консоль и используя следующий скрипт:

data = (new weka.core.converters.ConverterUtils.DataSource("/Path/To/Arff")).getDataSet()
data.setClassIndex(data.numAttributes() - 1)

data.randomize(new Random(1))

classifier = new weka.classifiers.trees.J48()

println "|train|\t%acc_{train}\t%acc_{test}"

stepSize = data.numInstances() / 10
for (int i = stepSize; i < data.numInstances(); i += stepSize ) {
    subset = new weka.core.Instances(data, 1, i)
    classifier.buildClassifier(subset)
    evaluationObject = new weka.classifiers.evaluation.Evaluation(subset)
    evaluationObject.evaluateModel(classifier, subset)
    testSubset = new weka.core.Instances(data, i + 1, data.numInstances() - (i + 1))
    evaluationObjectTest = new weka.classifiers.evaluation.Evaluation(subset)
    evaluationObjectTest.evaluateModel(classifier, testSubset)

кредит Eibe Frank: https://weka.8497.n7.nabble.com/How-to-generating-learning-curve-for-training-set-td41654.html

Решение сравнимо с Experimenter,Вы можете напрямую вызывать классификаторы с помощью кода Groovy и пакетировать их, как вам нужно.

...