最大熵(最大)分类器的可重现结果

时间:2018-11-20 12:04:19

标签: python nltk rte maxent

我正在尝试更新nltk.classify.rte_classify的基准代码以添加更多功能,以提高模型的准确性。它使用MaxentClassifier。我的问题是,每次执行代码时,我都会得到不同的精度结果(在代码后面提到)。通常,对于scikit-learn分类器,我们使用参数'random_state'以获得可重现的结果。在我的情况下,我想对MaxentClassifier做同样的事情。我检查了他们的文档,但是找不到与scikit分类器类似的random_state

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')
  • 第一次:准确度:0.5929
  • 第二次:准确度:0.5908
  • 第三次:准确度:0.5854
  • 第4次:准确度:0.5913

测试集准确性的差异可能看起来较小,但在我自己的具有大量特征的数据集中,差异有时会达到10%。

0 个答案:

没有答案