2013-07-04 5 views
5

के साथ बहुराष्ट्रीय बेवकूफ बेयस क्लासिफायर वर्गीकृत करना मैं बहुराष्ट्रीय बेवकूफ बेयस क्लासिफायर चलाने के तरीके पर एक साधारण उदाहरण की तलाश में हूं। मैं StackOverflow से इस उदाहरण में आए:पाइथन उदाहरण

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 

तो, मेरे सवाल कर रहे हैं ..

  1. किसी को भी मुझे बता सकते हैं कि इस त्रुटि संदेश का अर्थ है?
  2. मैंने मूल कोड में कुछ बदलाव किए हैं लेकिन मूल धागे में भ्रम मैट्रिक्स का परिणाम इतना अधिक क्यों है?
  3. मैं इस वर्गीकृत की इस सटीकता का परीक्षण कैसे कर सकता हूं?

उत्तर

2

मूल कोड ट्रेन सकारात्मक और नकारात्मक के पहले 100 उदाहरणों पर ट्रेन करता है और फिर शेष को वर्गीकृत करता है। आपने सीमा को हटा दिया है और प्रशिक्षण और वर्गीकरण चरण दोनों में प्रत्येक उदाहरण का उपयोग किया है, दूसरे शब्दों में, आपके पास डुप्लीकेट विशेषताएं हैं। इसे ठीक करने के लिए, डेटा सेट को दो सेट, ट्रेन और टेस्ट में विभाजित करें।

भ्रम मैट्रिक्स उच्च (या अलग) है क्योंकि आप विभिन्न डेटा पर प्रशिक्षण दे रहे हैं।

भ्रम मैट्रिक्स सटीकता का एक उपाय है और झूठे सकारात्मक की संख्या से पता चलता आदि यहाँ और अधिक पढ़ें: http://en.wikipedia.org/wiki/Confusion_matrix

+0

[एक जवाब को स्वीकार] कृपया (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235) अगर यह मददगार था – Spaceghost

1

मैं प्रशिक्षण सेट के लिए केवल पहले 100 प्रविष्टियों के साथ मूल कोड का इस्तेमाल किया है और अभी भी है कि चेतावनी था । मेरे उत्पादन किया गया था:

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 
संबंधित मुद्दे