मैं एक डेटासेट पर नैवे बेयस करने की कोशिश कर रहा हूं जिसमें 6,000,000 से अधिक प्रविष्टियां हैं और प्रत्येक प्रविष्टि 150k फीचर्स है। मैं नीचे दिए गए लिंक से कोड लागू करने के लिए कोशिश की है: Implementing Bag-of-Words Naive-Bayes classifier in NLTKनाइव बेयस (पायथन, विज्ञान) में स्पैर मैट्रिस/ऑनलाइन सीखने का उपयोग
समस्या है (जैसा कि मैं समझता हूँ), कि जब मैं के रूप में यह पैरामीटर है एक dok_matrix साथ ट्रेन की विधि चलाने का प्रयास है, यह नहीं iterkeys पा सकते हैं (मैं लेबल के रूप में OrderedDict साथ पंक्तियों युग्मित कर लेंगे):
Traceback (most recent call last):
File "skitest.py", line 96, in <module>
classif.train(add_label(matr, labels))
File "/usr/lib/pymodules/python2.6/nltk/classify/scikitlearn.py", line 92, in train
for f in fs.iterkeys():
File "/usr/lib/python2.6/dist-packages/scipy/sparse/csr.py", line 88, in __getattr__
return _cs_matrix.__getattr__(self, attr)
File "/usr/lib/python2.6/dist-packages/scipy/sparse/base.py", line 429, in __getattr__
raise AttributeError, attr + " not found"
AttributeError: iterkeys not found
मेरा प्रश्न है, वहाँ एक रास्ता या तो प्रवेश (ऑनलाइन द्वारा वर्गीकारक प्रविष्टि शिक्षण द्वारा एक विरल मैट्रिक्स का उपयोग कर से बचने के लिए है), या वहाँ एक विरल है मैट्रिक्स प्रारूप मैं इस मामले में dok_matrix की बजाय कुशलतापूर्वक उपयोग कर सकता हूं? या क्या मुझे कुछ याद आ रही है?
किसी के भी समय के लिए धन्यवाद। :)
संपादित करें, 6 सितं,:
मिले iterkeys, तो कम से कम कोड चलाता है। यह अभी भी बहुत धीमी है, क्योंकि इसमें 32k के आकार के डेटासेट के साथ कई घंटे लग गए हैं, और अभी भी समाप्त नहीं हुआ है। यहाँ है कि मैं क्या इस समय मिल गया है:
matr = dok_matrix((6000000, 150000), dtype=float32)
labels = OrderedDict()
#collect the data into the matrix
pipeline = Pipeline([('nb', MultinomialNB())])
classif = SklearnClassifier(pipeline)
add_label = lambda lst, lab: [(lst.getrow(x).todok(), lab[x])
for x in xrange(lentweets-foldsize)]
classif.train(add_label(matr[:(lentweets-foldsize),0], labels))
readrow = [matr.getrow(x + foldsize).todok() for x in xrange(lentweets-foldsize)]
data = np.array(classif.batch_classify(readrow))
समस्या हो सकती है कि प्रत्येक पंक्ति है कि लिया जाता है वेक्टर काफी विरल का उपयोग नहीं है, लेकिन 150k प्रविष्टि में से प्रत्येक के माध्यम से चला जाता है। इस मुद्दे के लिए निरंतरता के रूप में, क्या किसी को पता है कि इस बेवकूफ बेयस को स्पैर मैट्रिस के साथ कैसे उपयोग किया जाए, या उपरोक्त कोड को अनुकूलित करने का कोई और तरीका है?
शायद आप अपनी सुविधाओं को अधिक कुशलता से एन्कोड कर सकते हैं, या उनके आकार को कम कर सकते हैं? – piokuc
सच है, लेकिन जो कुछ भी मुझे डरता है, मुझे अभी भी मैट्रिक्स के आकार को प्रबंधित करने की आवश्यकता होगी। डेटासेट में ट्वीट्स के शब्द होते हैं। – user1638859
कम से कम iterkeys मिला, अब समस्या यह है कि कोड बहुत धीमा है। – user1638859