मुझे लगता है कि M0rkHaV का सही विचार है। Scikit सीखने की पाइप लाइन वर्ग एक वस्तु में एक आकलनकर्ता के साथ-साथ कई अलग अलग ट्रांसफार्मर encapsulating के लिए एक उपयोगी उपकरण है, आप केवल एक बार (अपने महत्वपूर्ण तरीकों कॉल करनी होगी ताकि fit()
, predict()
, आदि)। चलो दो प्रमुख घटकों को तोड़ते हैं:
ट्रांसफॉर्मर ऐसी कक्षाएं हैं जो दोनों को लागू करती हैं fit()
और transform()
। आप इस तरह के कुछ स्केलेर प्रीप्रोसेसिंग टूल से परिचित हो सकते हैं, जैसे TfidfVectorizer
और Binarizer
। यदि आप इन प्रीप्रोसेसिंग टूल के डॉक्स को देखते हैं, तो आप देखेंगे कि वे इन दोनों तरीकों को लागू करते हैं। जो मुझे बहुत अच्छा लगता है वह यह है कि कुछ अनुमानकों का उपयोग परिवर्तन के चरणों के रूप में भी किया जा सकता है, जैसे LinearSVC
!
अनुमानक ऐसी कक्षाएं हैं जो दोनों को लागू करती हैं fit()
और predict()
। आप पाएंगे कि कई क्लासिफायर और रिग्रेशन मॉडल इन दोनों तरीकों को लागू करते हैं, और जैसे कि आप आसानी से कई अलग-अलग मॉडलों का परीक्षण कर सकते हैं। अंतिम अनुमानक के रूप में एक और ट्रांसफार्मर का उपयोग करना संभव है (यानी, यह आवश्यक predict()
रूप से लागू नहीं होता है , लेकिन निश्चित रूप से लागू होता है fit()
)। इसका मतलब यह है कि आप कॉल नहीं कर पाएंगे predict()
।
अपने संपादन के लिए: आइए एक पाठ-आधारित उदाहरण पर जाएं। लेबलबिनाइज़र का उपयोग करके, हम लेबल की एक सूची को बाइनरी मानों की सूची में बदलना चाहते हैं।
bin = LabelBinarizer() #first we initialize
vec = ['cat', 'dog', 'dog', 'dog'] #we have our label list we want binarized
अब, जब कुछ डेटा पर बिनाराइज़र फिट किया जाता है, तो इसमें एक संरचना होगी, classes_
जिसमें अद्वितीय कक्षाएं होती हैं जिनके बारे में ट्रांसफार्मर को पता होता है। fit()
बिनलाइज़र को कॉल किए बिना कोई भी पता नहीं है कि डेटा कैसा दिखता है, इसलिए कॉल transform()
करने का कोई मतलब नहीं होगा। यह सही है यदि आप डेटा को फिट करने की कोशिश करने से पहले कक्षाओं की सूची का प्रिंट आउट लेते हैं।
print bin.classes_
इसे आज़माते समय मुझे निम्न त्रुटि मिलती है:
AttributeError: 'LabelBinarizer' object has no attribute 'classes_'
लेकिन जब आप vec
सूची में द्विनेत्र फिट बैठते हैं :
bin.fit(vec)
और फिर प्रयत्न करें
print bin.classes_
मुझे निम्नलिखित मिले:
['cat' 'dog']
print bin.transform(vec)
और अब, vec
ऑब्जेक्ट में परिवर्तन को कॉल करने के बाद , हमें निम्नलिखित मिलते हैं:
[[0]
[1]
[1]
[1]]
ट्रांसफार्मर के रूप में उपयोग किए जा रहे अनुमानकर्ताओं के लिए, आइए हम DecisionTree
क्लासिफायर को फीचर-एक्सट्रैक्टर के उदाहरण के रूप में उपयोग करें । निर्णय पेड़ बहुत सारे कारणों से महान हैं, लेकिन हमारे उद्देश्यों के लिए, यह महत्वपूर्ण है कि वे उन विशेषताओं को रैंक करने की क्षमता रखते हैं जो पेड़ भविष्यवाणी करने के लिए उपयोगी पाए गए थे। जब आप transform()
एक निर्णय ट्री पर कॉल करते हैं, तो यह आपके इनपुट डेटा को ले जाएगा और यह पता लगाएगा कि यह सबसे महत्वपूर्ण विशेषताएं क्या हैं। तो आप इसके बारे में सोच सकते हैं कि अपने डेटा मैट्रिक्स (m कॉलम द्वारा n पंक्तियों) को एक छोटे मैट्रिक्स (k कॉलम द्वारा n पंक्तियों) में बदल दें, जहाँ k कॉलम सबसे महत्वपूर्ण विशेषताएं हैं जो निर्णय ट्री को मिलीं।