воспроизводимый результат для классификатора максимальной энтропии (максимума) - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь обновить базовый код nltk.classify.rte_classify, чтобы добавить больше функций для повышения точности модели.Он использует MaxentClassifier.Моя проблема в том, что каждый раз, когда я выполняю свой код, я получаю разные результаты точности (упомянутые после кода.).Обычно для классификаторов scikit-learn у нас есть параметр 'random_state', чтобы получить воспроизводимый результат.Я хочу сделать то же самое для MaxentClassifier в моем случае.Я проверил в их документации, но не смог найти ничего похожего на random_state, как у нас для классификатора scikit.

from nltk.classify.util import accuracy
import nltk.classify.rte_classify as classify
def rte_classifier(algorithm):
    from nltk.corpus import rte as rte_corpus
    train_set = rte_corpus.pairs(['rte1_dev.xml', 'rte2_dev.xml', 'rte3_dev.xml'])        
    test_set = rte_corpus.pairs(['rte1_test.xml'])
    featurized_train_set = classify.rte_featurize(train_set)
    featurized_test_set = classify.rte_featurize(test_set)
    # Train the classifier
    print('Training classifier...')
    if algorithm in ['GIS', 'IIS']:  # Use default GIS/IIS MaxEnt algorithm
       clf = nltk.MaxentClassifier.train(featurized_train_set, algorithm)
    else:
        err_msg = str(
        "RTEClassifier only supports these algorithms:\n "
        " 'GIS', 'IIS'.\n")
        raise Exception(err_msg)
    print('Testing classifier...')
    acc = accuracy(clf, featurized_test_set)
    print('Accuracy: %6.4f' % acc)
    return clf
rte_classifier('GIS')
  • 1-й раз: Точность: 0,5929
  • 2-й раз:Точность: 0,5908
  • 3-й раз: Точность: 0,5854
  • 4-й раз: Точность: 0,5913

Разница в точности для тестового набора может выглядеть меньше, но в моемсобственный набор данных с большим количеством функций, разница иногда достигает 10%.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...