Воспроизводимый результат для классификатора максимальной энтропии (максимума)
Я пытаюсь обновить базовый код 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% .