scikit-learn में an implementation of multinomial naive Bayes है, जो इस स्थिति में बेवकूफ बेयस का सही संस्करण है। एक समर्थन वेक्टर मशीन (एसवीएम) शायद बेहतर काम करेगा, हालांकि।
जैसा कि केन ने टिप्पणियों में बताया, एनएलटीके में a nice wrapper for scikit-learn classifiers है। दस्तावेज़ों से संशोधित, यहां कुछ जटिल है जो टीएफ-आईडीएफ वेटिंग करता है, चीई 2 आंकड़े के आधार पर 1000 सर्वश्रेष्ठ सुविधाओं का चयन करता है, और उसके बाद इसे बहुराष्ट्रीय बेवकूफ बेयस वर्गीकृत में भेजता है। (। मुझे यकीन है यह कुछ हद तक अनाड़ी है, जैसा कि मैंने या तो NLTK या साथ सुपर परिचित नहीं हूँ scikit सीखने)
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]
classif.train(add_label(pos[:100], 'pos') + add_label(neg[:100], 'neg'))
l_pos = np.array(classif.classify_many(pos[100:]))
l_neg = np.array(classif.classify_many(neg[100:]))
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())
यह मेरे लिए मुद्रित:
Confusion matrix:
524 376
202 698
सही नहीं है, लेकिन सभ्य, पर विचार यह एक सुपर आसान समस्या नहीं है और यह केवल 100/100 पर प्रशिक्षित है।
दरअसल, वह शायद विज्ञान-सीखने वाले समर्थन वेक्टर मशीन मॉडल चाहता है। एनएलटीके में एक अच्छा रैपर 'nltk.classify.scikitlearn.SklearnClassifier' है जो इन क्लासिफायरों को अपने एपीआई में अच्छी तरह फिट करता है। –
@ केनब्लूम हाँ, एसवीएम शायद बेहतर होगा, लेकिन उन्होंने विशेष रूप से बेवकूफ बेयस के बारे में पूछा था।:) वह रैपर अच्छा है, और मुझे अभी एहसास हुआ कि विज्ञान-सीखने में एक बहुआयामी बेवकूफ बेय भी है, इसलिए मैं इसका उपयोग करने के लिए अपना जवाब बदल दूंगा। – Dougal
जो शानदार रूप से सरल दिखता है। काश मैं पाइथन सीखा था जब मैं अपना पीएचडी कर रहा था। इसमें। मैंने रूबी में बहुत से काम लपेटने वाले क्लासिफायरों को किया जो पूरी तरह से अनावश्यक थे। –