Я тестирую модель анализа настроений с использованием NLTK и SKlearn.
Данные Movie_reviews имеют метки «pos» и «neg». Для обучения классификатора я использую «наборы функций». Я использую перекрестную проверку данных обучения и точность данных тестирования. Однако перекрестная проверка всегда намного выше точности. В приведенном ниже примере для алгоритма логистической регрессии CV = 97 (среднее), точность = 70. Я тестировал также с другими алгоритмами, но перекрестная проверка все еще очень высока.
Я почти уверен, что код для перекрестной проверки неправильный.
import nltk
import random
from nltk.corpus import movie_reviews
from sklearn import cross_validation
from nltk.classify.scikitlearn import SklearnClassifier
from sklearn.linear_model import LogisticRegression, SGDClassifier
documents = [(list(movie_reviews.words(fileid)), category)
for category in movie_reviews.categories()
for fileid in movie_reviews.fileids(category)]
random.shuffle(documents)
all_words = []
for w in movie_reviews.words():
all_words.append(w.lower())
all_words = nltk.FreqDist(all_words)
word_features = list(all_words.keys())[:3000]
def find_features(document):
words = set(document)
features = {}
for w in word_features:
features[w] = (w in words)
return features
featuresets = [(find_features(rev), category) for (rev, category) in documents]
training_set = featuresets[:1500]
testing_set = featuresets[1500:]
cv = cross_validation.KFold(len(training_set), n_folds=10, shuffle=True, random_state=None)
LogisticRegression_classifier = SklearnClassifier(LogisticRegression())
for traincv, testcv in cv:
classifier = LogisticRegression_classifier.train(training_set[traincv[0]:traincv[len(traincv)-1]])
print ('CV_accuracy:', nltk.classify.util.accuracy(classifier, training_set[testcv[0]:testcv[len(testcv)-1]]))
print("LogisticRegression_classifier accuracy percent:", (nltk.classify.accuracy(LogisticRegression_classifier, testing_set))*100)