2013-07-29 6 views
9

के साथ partial_fit का उपयोग करके आप () के अंदर लिपटे एक विज्ञान-सीखने वाले क्लासिफायर पर partial_fit() पर कैसे कॉल करते हैं?साइकिट पाइपलाइन

मैं एक संवर्द्धित trainable पाठ वर्गीकारक SGDClassifier तरह का उपयोग कर निर्माण करने के लिए कोशिश कर रहा हूँ:

from sklearn.linear_model import SGDClassifier 
from sklearn.pipeline import Pipeline 
from sklearn.feature_extraction.text import HashingVectorizer 
from sklearn.feature_extraction.text import TfidfTransformer 
from sklearn.multiclass import OneVsRestClassifier 

classifier = Pipeline([ 
    ('vectorizer', HashingVectorizer(ngram_range=(1,4), non_negative=True)), 
    ('tfidf', TfidfTransformer()), 
    ('clf', OneVsRestClassifier(SGDClassifier())), 
]) 

लेकिन मैं एक AttributeErrorclassifier.partial_fit(x,y) कॉल करने के लिए कोशिश कर रहा हो।

यह fit() का समर्थन करता है, इसलिए मुझे नहीं लगता कि partial_fit() क्यों उपलब्ध नहीं है। क्या पाइपलाइन का निरीक्षण करना, डेटा ट्रांसफार्मर को कॉल करना संभव है, और उसके बाद मेरे क्लासिफायरफायर पर सीधे partial_fit() पर कॉल करना संभव होगा?

+0

आप अंततः एक समाधान के साथ आने के लिए सक्षम बनाता है क्या इसके लिए टयन? – GreenGodot

उत्तर

5

पाइपलाइन partial_fit का उपयोग नहीं करता है, इसलिए इसका खुलासा नहीं होता है। हमें शायद कोर-गणना के लिए एक समर्पित पाइपलाइनिंग योजना की आवश्यकता होगी, लेकिन यह पिछले मॉडलों की क्षमताओं पर भी निर्भर करता है।

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

इस बीच में आपकी आवश्यकताओं के अनुरूप अपना स्वयं का रैपर कोड रोल करना संभवतः आसान है।

+1

क्या आप सिफारिश कर सकते हैं कि मैं अपना खुद का रोल कैसे कर सकता हूं? मैंने पाइपलाइन की ट्रांसफॉर्म() विधि का उपयोग करने की कोशिश की, और उसके बाद क्लासिफायर निकालने और परिवर्तित डेटा को इसके partial_fit() में खिलाया, लेकिन मुझे टीडीएफ वेक्टर को अपरिभाषित होने में त्रुटि मिली। – Cerin

+3

[पाइपलाइन वर्ग का स्रोत कोड] पढ़ें (https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/pipeline.py#L26) और [यह उदाहरण] (http: // scikit-learn.org/dev/auto_examples/applications/plot_out_of_core_classification.html)। फिर [टेक्स्ट फीचर निष्कर्षण और हैशिंग ट्रिक] के लिए प्रलेखन पढ़ें (http://scikit-learn.org/dev/modules/feature_extraction.html#vectorizing-a-large-text-corpus-with-the-hashing-trick) यह सुनिश्चित करने के लिए कि आप राज्य भर में फीचर निष्कर्षण के साथ इस मुद्दे को पूरी तरह से समझें। कार्यान्वयन इस बात पर निर्भर करेगा कि आप किस समस्या को हल करने की कोशिश कर रहे हैं। – ogrisel

+0

विशेष रूप से यदि आप राज्यव्यापी ट्रांसफार्मर का उपयोग 'TfidfTransformer' के रूप में करते हैं तो आपको अपने डेटा पर कई पास करने की आवश्यकता होगी। – ogrisel

6

यह वही है जो मैं कर रहा हूं - जहां 'पाइपलाइन ओबीजे' में 'मैपर' और 'क्लफ' 2 कदम हैं।

def partial_pipe_fit(pipeline_obj, df): 
    X = pipeline_obj.named_steps['mapper'].fit_transform(df) 
    Y = df['class'] 
    pipeline_obj.named_steps['clf'].partial_fit(X,Y) 

आप शायद प्रदर्शन पर नज़र रखने के रूप में आप का समायोजन/अपने वर्गीकारक को अद्यतन करने के रखना चाहते हैं - लेकिन यह है कि एक माध्यमिक बिंदु

इतना अधिक विशेष रूप से है - मूल पाइपलाइन (रों) के रूप में निर्माण किया गया

इस प्रकार है
to_vect = Pipeline([('vect', CountVectorizer(min_df=2, max_df=.9, ngram_range=(1, 1), max_features = 100)), 
          ('tfidf', TfidfTransformer())]) 
full_mapper = DataFrameMapper([ 
      ('norm_text', to_vect), 
      ('norm_fname', to_vect), ]) 

full_pipe = Pipeline([('mapper', full_mapper), ('clf', SGDClassifier(n_iter=15, warm_start=True, 
                   n_jobs=-1, random_state=self.random_state))]) 

गूगल DataFrameMapper इसके बारे में अधिक जानने के लिए - लेकिन यहाँ यह सिर्फ एक परिवर्तन कदम है कि पांडा के साथ अच्छा खेलता है

संबंधित मुद्दे