2017-04-11 140 views
1

虽然我想运行下面的代码的最后一位,但我得到一个错误,我无法弄清楚为什么。Python培训和测试错误

import random 
combined_list = h_sub_text + s_sub_text 
print(len(combined_list)) 
random.shuffle(combined_list) 

training_part = int(len(combined_list) * .7) 
print(len(combined_list)) 
training_set = combined_list[:training_part] 
test_set = combined_list[training_part:] 
print (len(train_set)) 
print (len(test_set)) 

import nltk.classify.util 
from nltk.classify import NaiveBayesClassifier 

classifier = NaiveBayesClassifier.train(train_set) 

accuracy = nltk.classify.util.accuracy(classifier, test_set) 

print("Accuracy is: ", accuracy * 100) 

我得到这个错误:

ValueError    Traceback (most recent call last) 
<ipython-input-57-151936e75238> in <module>() 
    2 from nltk.classify import NaiveBayesClassifier 

----> 4 classifier = NaiveBayesClassifier.train(training_set) 

    C:\Program Files (x86)\Anaconda3\lib\site-packages\nltk\classify\naivebayes.py in train(cls, labeled_featuresets, estimator) 

--> 194   for featureset, label in labeled_featuresets: 
195    label_freqdist[label] += 1 
196    for fname, fval in featureset.items(): 

ValueError: too many values to unpack (expected 2) 

在此先感谢。

+0

将'train_set'替换为' training_set'? 'train_set'在您提供的代码中没有定义。 – MervS

+0

对不起,它的“NaiveBayesClassifier.train(training_set)”。在错误中它显示了正确的对象。 – metalmks

回答

0

问题的根源是train_set的传入NaiveBayesClassifier.train()的值。要真正知道我们会知道这是怎么回事。 无论它是什么导致“nltk”模块出现错误。

从NLTK源代码在http://www.nltk.org/_modules/nltk/classify/naivebayes.html

@classmethod 
def train(cls, labeled_featuresets, estimator=ELEProbDist): 
    """ 
    :param labeled_featuresets: A list of classified featuresets, 
     i.e., a list of tuples ``(featureset, label)``. 

列车参数()是元组的列表。因此,如果在预期只有2个值时尝试解开太多的值,那么这不是您要传入的值。无论是普通数组还是大于2的数组阵列。

+0

也许NLTK方法不适用于此。我如何在代码中应用sklearn-train-test-split? – metalmks

+0

我不熟悉NLTK。首先,您可以打印training_set以查看传入的内容。还要阅读文档以了解应该是什么。 – MrJLP