2013-07-04 15 views
5

Çok Noktalı Naif Bayes Sınıflandırıcısının nasıl çalıştırılacağı hakkında basit bir örnek arıyorum. Ben StackOverflow bu örnek geldi: Ben bu örneği çalıştırdıktan sonra bir uyarı almışMultinomial Naif Bayes Sınıflandırıcıyı Python ile Sınıflandırma Örnek

Implementing Bag-of-Words Naive-Bayes classifier in NLTK

import numpy as np 
from nltk.probability import FreqDist 
from nltk.classify import SklearnClassifier 
from sklearn.feature_extraction.text import TfidfTransformer 
from sklearn.feature_selection import SelectKBest, chi2 
from sklearn.naive_bayes import MultinomialNB 
from sklearn.pipeline import Pipeline 

pipeline = Pipeline([('tfidf', TfidfTransformer()), 
        ('chi2', SelectKBest(chi2, k=1000)), 
        ('nb', MultinomialNB())]) 
classif = SklearnClassifier(pipeline) 

from nltk.corpus import movie_reviews 
pos = [FreqDist(movie_reviews.words(i)) for i in movie_reviews.fileids('pos')] 
neg = [FreqDist(movie_reviews.words(i)) for i in movie_reviews.fileids('neg')] 
add_label = lambda lst, lab: [(x, lab) for x in lst] 
#Original code from thread: 
#classif.train(add_label(pos[:100], 'pos') + add_label(neg[:100], 'neg')) 
classif.train(add_label(pos, 'pos') + add_label(neg, 'neg'))#Made changes here 

#Original code from thread:  
#l_pos = np.array(classif.batch_classify(pos[100:])) 
#l_neg = np.array(classif.batch_classify(neg[100:])) 
l_pos = np.array(classif.batch_classify(pos))#Made changes here 
l_neg = np.array(classif.batch_classify(neg))#Made changes here 
print "Confusion matrix:\n%d\t%d\n%d\t%d" % (
      (l_pos == 'pos').sum(), (l_pos == 'neg').sum(), 
      (l_neg == 'pos').sum(), (l_neg == 'neg').sum()) 

.

C:\Python27\lib\site-packages\scikit_learn-0.13.1-py2.7-win32.egg\sklearn\feature_selection\univariate_selection.py:327: 
UserWarning: Duplicate scores. Result may depend on feature ordering.There are probably duplicate features, 
or you used a classification score for a regression task. 
warn("Duplicate scores. Result may depend on feature ordering." 

Confusion matrix: 
876 124 
63 937 

Yani, benim sorulardır ..

  1. herkes bu hata mesajı anlamına gelmez bana söyleyebilir?
  2. Orijinal kodda bazı değişiklikler yaptım, ancak karışıklık matrisi neden orijinal iş parçacığından çok daha yüksek sonuç veriyor?
  3. Bu sınıflandırıcıda bunun doğruluğunu nasıl test edebilirim?

cevap

2

Orijinal kod, ilk 100 örnek üzerinde pozitif ve negatif örnekler ve daha sonra kalanını sınıflandırır. Sınırı kaldırdınız ve her örneği hem eğitim hem de sınıflandırma aşamasında kullandınız, başka bir deyişle, çoğaltılan özelliklere sahipsiniz. Bunu düzeltmek için, veri kümesini iki gruba ayırın, eğitin ve test edin.

Karmaşıklık matrisi, farklı veriler üzerinde eğitim aldığınız için daha yüksektir (veya farklıdır).

karışıklık matris doğruluk ölçüsüdür ve vb burada Devamı yanlış pozitiflerin sayısını gösterir:

+0

[bir cevabı kabul] Lütfen (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235) yararlı olup olmadığını – Spaceghost

1

http://en.wikipedia.org/wiki/Confusion_matrix Ben eğitim seti için sadece ilk 100 girişli orijinal kodu kullanılmış ve hala o uyarıyı vardı . Benim çıkış oldu:

In [6]: %run testclassifier.py 
C:\Users\..\AppData\Local\Enthought\Canopy\User\lib\site-packages\sklearn\feature_selection\univariate_selecti 
on.py:319: UserWarning: Duplicate scores. Result may depend on feature ordering.There are probably duplicate features, o 
r you used a classification score for a regression task. 
    warn("Duplicate scores. Result may depend on feature ordering." 
Confusion matrix: 
427  473 
132  768 
İlgili konular