2016-04-16 3 views
-1

Что я делаю неправильно с использованием scikit-learn от nltk, чтобы проверить точность наивного классификатора заливов?Оценка точности прогноза модели NB

...readFile definition not needed 
#divide the data into training and testing sets 
data = readFile('Data_test/') 
training_set = list_nltk[:2000000] 
testing_set = list_nltk[2000000:] 

#applied Bag of words as a way to select and extract feature 
count_vect = CountVectorizer() 
X_train_counts = count_vect.fit_transform(training_set.split('\n')) 

#apply tfd 
tf_transformer = TfidfTransformer(use_idf=False).fit(X_train_counts) 
X_train_tf = tf_transformer.transform(X_train_counts) 

#Train the data 
clf = MultinomialNB().fit(X_train_tf, training_set.split('\n')) 

#now test the accuracy of the naive bayes classifier 
test_data_features = count_vect.transform(testing_set) 
X_new_tfidf = tf_transformer.transform(test_data_features) 

predicted = clf.predict(X_new_tfidf) 
print "%.3f" % nltk.classify.accuracy(clf, predicted) 

Проблема заключается в том, когда я напечатать nltk.classify.accuracy, она принимает навсегда, и я подозревал это, потому что я сделал что-то неправильно, но так как я не получаю ошибку, я не могу понять, что это это неправильно.

+0

Вы уверены, что это вызов метода точности? Что вы пытаетесь предсказать? Попытайтесь добавить какой-нибудь отпечаток, чтобы увидеть, где он остановился. Метод соответствия вашего классификатора кажется странным, он должен быть 'clf.fit (X, Y)' с X (векторизованным) текстом и Y ярлыками вашего набора тренировок. – dooms

ответ

1

Используйте вместо этого accuracy_scoresklearn metrics.

>>> from sklearn.metrics import accuracy_score 
>>> y_pred = [0, 2, 1, 3] 
>>> y_true = [0, 1, 2, 3] 
>>> accuracy_score(y_true, y_pred) 
0.5 

Я думаю, что вы смешаете некоторые вещи о Управленческом обучении.
Посмотрите answer и попытайтесь понять, что такое top of this page.

Ваши данные должны быть в такой форме (перед выполнением векторизации):

X = [["The cat is sleeping"], ..., ["The man is dead"]] 
Y = [1, ..., 0] 
+0

Я пробовал это: print precision_score (test_data_features.toarray(), предсказано) , но до сих пор не получил результатов – user200188

+1

Вы должны предоставить список истинных меток и список прогнозируемых ярлыков вашей моделью методу точности_score, чтобы судить производительность вашей модели. – dooms

+0

Хорошо, я не уверен, что я прав, но вы могли бы взять alook на мой код, вставленный выше, и сообщить мне, если я делаю что-то неправильно. Пока у меня нет ошибки и я не могу понять, что не так. Все работает отлично, за исключением части точности. У меня есть текстовый файл, который я разделил на testing_set и training_set. – user200188

0

Вы имеете ошибку по крайней мере, в этой строке

CLF = MultinomialNB() подходит (X_train_tf, training_set.. split ('\ n'))

Вы должны иметь свои обучающие наклейки и векторизованные данные там, но у вас есть оригинальные и векторизованные данные.

Он должен выглядеть следующим образом:.

CLF = MultinomialNB() подходит (X_train_tf, y_train)

Но вы даже не имеют данных лейбла y_train в любом месте вашего кода, насколько я могу сказать ,

+0

спасибо. Я позже заметил это, и я пытаюсь использовать np.array (training_set), но кажется, что это как-то вызов для векторизации моего текста. Когда я это сделаю, это == np.array (list_nltk.split()) Я получаю строки, но не столбцы, например (934567). Как я действительно векторизовать свой текстовый файл? Я пробовал это какое-то время. Итак, я думаю, мне просто нужно спросить, как получить учебные ярлыки, используя scikit learn? – user200188

+0

Тренировочные этикетки - это то, что вам нужно иметь в исходном наборе данных. Это не то, что вы можете создать (с sklearn) – Diego

+0

В этом случае мой учебный ярлык будет «шекспиром», поскольку я пытаюсь подготовить шекспировский текст. Любой полный пример того, как тренировать такой текст? Кажется, я не могу найти что-нибудь онлайн, чтобы учиться. – user200188

Смежные вопросы