सुपरवाइज़्ड लर्निंग: प्रेडिक्टर वैरिएबल्स से टार्गेट वैरिएबल का अनुमान लगाने का कार्य। उदाहरण के लिए, टार्गेट वैरिएबल ‘हृदय रोग की उपस्थिति’ का अनुमान ‘आयु’, ‘लिंग’ और ‘धूम्रपान स्थिति’ जैसे प्रेडिक्टर वैरिएबल्स से लगाना।
वर्गीकरण कार्य: यदि सुपरवाइज़्ड लर्निंग कार्य में टार्गेट वैरिएबल श्रेणियों से बना हो (जैसे ‘क्लिक’ या ‘नहीं’, ‘घातक’ या ‘सौम्य’ ट्यूमर), तो वह वर्गीकरण कार्य है।
रिग्रेशन कार्य: यदि सुपरवाइज़्ड लर्निंग कार्य में टार्गेट वैरिएबल निरंतर रूप से बदलने वाला वैरिएबल हो (जैसे घर की कीमत) या क्रमबद्ध श्रेणीबद्ध वैरिएबल, जैसे ‘वाइन की गुणवत्ता रेटिंग’, तो वह रिग्रेशन कार्य है।
k-Nearest Neighbors: वर्गीकरण कार्यों के लिए एक एल्गोरिद्म, जिसमें किसी डेटा बिंदु को उसके k निकटतम पड़ोसियों के बहुमत वोट से तय लेबल दिया जाता है।
प्रीप्रोसेसिंग: वे सभी क्रियाएँ जिनका उपयोग डेटा वैज्ञानिक अपना डेटा उस रूप में लाने के लिए करते हैं जो उनके इच्छित कार्य के लिए अधिक उपयुक्त हो। उदाहरण के लिए, ट्विटर डेटा पर सेंटिमेंट विश्लेषण करने से पहले आप HTML टैग, अतिरिक्त खाली जगहें हटाना, संक्षेपों का विस्तार करना और ट्वीट्स को उनके शब्दों की सूचियों में बाँटना चाहेंगे।
सेंट्रिंग और स्केलिंग: ये दोनों संख्यात्मक डेटा के प्रीप्रोसेसिंग के रूप हैं—यानी ऐसा डेटा जो संख्याओं से बना हो, न कि श्रेणियों या स्ट्रिंग्स से, उदाहरण के लिए; किसी वैरिएबल को सेंटर करना मतलब उसके हर डेटा बिंदु से उस वैरिएबल का औसत घटाना ताकि नए वैरिएबल का औसत 0 हो; किसी वैरिएबल को स्केल करना मतलब हर डेटा बिंदु को किसी स्थिरांक से गुणा करना ताकि डेटा की रेंज बदली जा सके। इनके महत्व और उदाहरणों के लिए लेख के मुख्य भाग देखें।
इस लेख में, मैं संख्यात्मक डेटा के स्केलिंग के उदाहरण का उपयोग करूँगा (संख्यात्मक डेटा: ऐसे डेटा जो संख्याओं से बने हों, श्रेणियों/स्ट्रिंग्स के विपरीत; स्केलिंग: डेटा की रेंज बदलने के लिए बुनियादी अंकगणित का उपयोग; आगे विवरण आएगा) ताकि यह दिखाया जा सके कि प्रीप्रोसेसिंग को एक बड़े ढाँचे, यानी मशीन लर्निंग (ML) पाइपलाइन, का हिस्सा मानना क्यों महत्वपूर्ण है। इसी उद्देश्य से, हम एक वास्तविक उदाहरण देखेंगे जिसमें स्केलिंग मॉडल के प्रदर्शन में सुधार कर सकती है।
मैं पहले ML में वर्गीकरण समस्याओं और k-Nearest Neighbors, जो ऐसे परिदृश्यों में उपयोग होने वाले सबसे सरल एल्गोरिद्म में से एक है, का परिचय दूँगा। ऐसे परिदृश्य में संख्यात्मक डेटा के स्केलिंग के महत्व को समझने के लिए, मुझे मॉडल प्रदर्शन के मापदंडों और ट्रेनिंग व टेस्ट सेट की अवधारणाएँ पेश करनी होंगी। आप इन सभी अवधारणाओं और प्रथाओं को उस डेटा सेट के साथ क्रियान्वित होते देखेंगे जिसमें मैं लाल वाइन की गुणवत्ता का वर्गीकरण करने का प्रयास करता हूँ। मैं यह भी सुनिश्चित करूँगा कि प्रीप्रोसेसिंग को उसके सबसे उपयोगी स्थान पर रखा जाए—एक पुनरावृत्त डेटा साइंस पाइपलाइन की शुरुआत के पास। यहाँ सभी उदाहरण Python में होंगे। यदि आप Python से परिचित नहीं हैं, तो हमारे DataCamp कोर्सेज यहाँ देख सकते हैं। मैं pandas लाइब्रेरी का उपयोग डेटा फ्रेम के लिए और scikit-learn का उपयोग मशीन लर्निंग के लिए करूँगा।
यह तीन-भाग की ट्यूटोरियल शृंखला का भाग एक है:
भाग 2: सेंट्रिंग, स्केलिंग और लॉजिस्टिक रिग्रेशन
भाग 3: सिंथेसाइज़्ड डेटा का स्केलिंग
मशीन लर्निंग में वर्गीकरण समस्याओं का संक्षिप्त परिचय
प्रकृति की दुनिया में चीजों को वर्गीकृत व नामित करना प्राचीन कला है। चौथी सदी ईसा पूर्व में, अरस्तू ने जीवित प्राणियों की एक वर्गीकरण प्रणाली बनाई थी जिसका 2,000 वर्षों तक उपयोग हुआ। आधुनिक दुनिया में, वर्गीकरण को सामान्यतः एक मशीन लर्निंग कार्य, विशेषकर सुपरवाइज़्ड लर्निंग कार्य, के रूप में परिभाषित किया जाता है। सुपरवाइज़्ड लर्निंग का मूल सिद्धांत सीधा है: हमारे पास प्रेडिक्टर वैरिएबल्स और एक टार्गेट वैरिएबल से बना डेटा होता है। सुपरवाइज़्ड लर्निंग का उद्देश्य ऐसा मॉडल बनाना है जो प्रेडिक्टर वैरिएबल्स के आधार पर टार्गेट वैरिएबल का सही अनुमान लगाने में “अच्छा” हो। यदि टार्गेट वैरिएबल श्रेणियों से बना हो (जैसे ‘क्लिक’ या ‘नहीं’, ‘घातक’ या ‘सौम्य’ ट्यूमर), तो हम इस लर्निंग कार्य को वर्गीकरण कहते हैं। इसके विपरीत, यदि टार्गेट निरंतर रूप से बदलने वाला वैरिएबल हो (जैसे घर की कीमत), तो यह रिग्रेशन कार्य है।
एक उदाहरण यहाँ बहुत उपयोगी होगा: हृदय रोग डेटा सेट पर विचार करें, जिसमें 75 प्रेडिक्टर वैरिएबल्स हैं, जैसे ‘आयु’, ‘लिंग’ और ‘धूम्रपान करता है या नहीं’, और टार्गेट वैरिएबल हृदय रोग की उपस्थिति को दर्शाता है जो 0 (कोई हृदय रोग नहीं) से 4 तक के मान लेता है। इस डेटा सेट पर काफी काम हृदय रोग की उपस्थिति और अनुपस्थिति में भेद करने के प्रयास पर केंद्रित रहा है। यह एक वर्गीकरण कार्य है। यदि आप टार्गेट वैरिएबल का वास्तविक मान (0 से 4) भविष्यवाणी करने की कोशिश करें, तो यह रिग्रेशन समस्या होगी (क्योंकि टार्गेट वैरिएबल क्रमबद्ध है)। रिग्रेशन पर मैं अगले पोस्ट में चर्चा करूँगा। यहाँ मैं वर्गीकरण कार्यों के लिए सबसे सरल एल्गोरिद्म में से एक, k-Nearest Neighbors एल्गोरिद्म, पर नज़र डालूँगा।
मशीन लर्निंग में वर्गीकरण के लिए k-Nearest Neighbors
मान लीजिए हमारे पास कुछ लेबलयुक्त डेटा है; उदाहरण के लिए, लाल वाइन की विशेषताओं (जैसे अल्कोहल कंटेंट, घनत्व, साइट्रिक एसिड की मात्रा, pH, आदि; ये प्रेडिक्टर वैरिएबल्स हैं) के साथ टार्गेट वैरिएबल ‘Quality’ और लेबल ‘good’ व ‘bad’। तब, किसी नई, बिना लेबल वाली वाइन की विशेषताएँ दी होने पर, वर्गीकरण कार्य उसकी ‘Quality’ का पूर्वानुमान लगाना है। जब सभी प्रेडिक्टर वैरिएबल्स संख्यात्मक हों (श्रेणीबद्ध मामले से निपटने के अन्य तरीके भी हैं), तो हम प्रत्येक पंक्ति/वाइन को n-आयामी स्थान में एक बिंदु मान सकते हैं, और ऐसे में k-Nearest Neighbors (k-NN) वैचारिक और कम्प्यूटेशनल रूप से एक सरल वर्गीकरण विधि है: हर नई, बिना लेबल वाली वाइन के लिए, किसी पूर्णांक k के लिए, हम उसके n-आयामी प्रेडिक्टर वैरिएबल स्पेस में k निकटतम पड़ोसी निकालते हैं। फिर हम इन k पड़ोसियों के लेबल देखते हैं (जैसे ‘good’ या ‘bad’) और सबसे अधिक वोट वाले लेबल को नई वाइन को सौंप देते हैं (उदाहरण: यदि k = 5, 3 पड़ोसी ‘good’ और 2 ‘bad’ वोट दें, तो हमारा मॉडल नई वाइन को ‘good’ लेबल देगा)। ध्यान दें कि यहाँ मॉडल का प्रशिक्षण मात्र डेटा बिंदुओं को संग्रहीत करने तक सीमित है: कोई पैरामीटर फिट नहीं किए जाते!
k-Nearest Neighbors का दृश्य वर्णन
नीचे दी गई छवि में 2D में k-NN का एक उदाहरण है: बीच में मौजूद डेटा बिंदु को आप कैसे वर्गीकृत करेंगे? यदि k=3 है, तो आप इसे लाल के रूप में वर्गीकृत करेंगे और यदि k=5 है, तो हरे के रूप में।
Python (scikit-learn) में k-NN का इम्प्लिमेंटेशन
पहले प्रेडिक्टर वैरिएबल्स की रेंज पर ध्यान दें: ‘free sulfur dioxide’ 0 से ~70 तक और ‘volatile acidity’ ~0 से ~1.2 तक है। विशेष रूप से, पहले वाले की रेंज दूसरे की तुलना में 2 आर्डर ऑफ मैग्नीट्यूड अधिक है। कोई भी एल्गोरिद्म, जैसे k-NN, जो डेटा बिंदुओं के बीच दूरी पर ध्यान देता है, वह बड़ी रेंज वाले वैरिएबल्स, जैसे ‘free sulfur dioxide’, पर अनावश्यक रूप से और अनुचित रूप से फोकस कर सकता है—जो कि, क्या पता, केवल शोर ही हो। यही हमारे डेटा को स्केल करने की प्रेरणा देता है, जिस पर हम जल्द ही आएँगे।
अब टार्गेट वैरिएबल वाइन की ‘Quality’ रेटिंग है जो 3 से 8 तक जाती है। व्याख्या में सरलता के लिए, इसे दो-श्रेणी वाले वैरिएबल में बदलते हैं: ‘good’ (रेटिंग > 5) और ‘bad’ (रेटिंग <= 5)। हम टार्गेट वैरिएबल की दोनों परिभाषाओं के हिस्टोग्राम भी प्लॉट करेंगे ताकि स्थिति का आभास हो।
k-Nearest Neighbors: यह कितना अच्छा प्रदर्शन करता है?
ध्यान दें: एक्यूरेसी को कन्फ्यूज़न मैट्रिक्स के संदर्भ में भी परिभाषित किया जा सकता है और इसे प्रायः बाइनरी वर्गीकरण समस्याओं के लिए ट्रू पॉज़िटिव्स और फॉल्स नेगेटिव्स के संदर्भ में परिभाषित किया जाता है; कन्फ्यूज़न मैट्रिक्स से निकाले जाने वाले अन्य आम प्रदर्शन माप हैं प्रिसिशन—ट्रू पॉज़िटिव्स की संख्या को ट्रू व फॉल्स पॉज़िटिव्स की कुल संख्या से भाग; और रीकॉल—ट्रू पॉज़िटिव्स की संख्या को ट्रू पॉज़िटिव्स और फॉल्स नेगेटिव्स की कुल संख्या से भाग। एक और माप, F1-स्कोर, प्रिसिशन और रीकॉल का हार्मोनिक मीन है। इन मापों की अच्छी व्याख्या के लिए machine learning mastery देखें; साथ ही कन्फ्यूज़न मैट्रिक्स और F1 स्कोर के विकिपीडिया प्रविष्टियाँ भी देखें।
k-Nearest Neighbors: व्यवहार में प्रदर्शन और ट्रेन-टेस्ट स्प्लिट
अब हम स्केलिंग और सेंट्रिंग—संख्यात्मक डेटा के प्रीप्रोसेसिंग की सबसे बुनियादी विधियाँ—को पेश करने जा रहे हैं और देखेंगे कि वे हमारे मॉडल के प्रदर्शन को कैसे और कितना प्रभावित करती हैं।
प्रीप्रोसेसिंग की यांत्रिकी: स्केलिंग और सेंट्रिंग
किसी मॉडल—जैसे रिग्रेशन (निरंतर वैरिएबल की भविष्यवाणी) या वर्गीकरण (विच्छिन्न वैरिएबल की भविष्यवाणी)—को चलाने से पहले, आप लगभग हमेशा कुछ न कुछ प्रीप्रोसेसिंग करना चाहेंगे। संख्यात्मक वैरिएबल्स के लिए, अपने डेटा को या तो नॉर्मलाइज़ या स्टैंडर्डाइज़ करना आम है। इन शब्दों का क्या अर्थ है?
नॉर्मलाइज़ेशन का आशय बस इतना है कि डेटा सेट को इस तरह स्केल करना कि उसका न्यूनतम 0 और अधिकतम 1 हो। इसे प्राप्त करने के लिए हम प्रत्येक डेटा बिंदु x को इस रूप में बदलते हैं
$$x_{normalized} = \frac{x-x_{min}}{x_{max}-x_{min}}.$$स्टैंडर्डाइज़ेशन थोड़ा भिन्न है; इसका काम डेटा को 0 के आसपास केंद्रित करना और मानक विचलन के संदर्भ में स्केल करना है:
$$x_{standardized} = \frac{x-\mu}{\sigma},$$जहाँ \mu और \sigma क्रमशः डेटा सेट का औसत और मानक विचलन हैं। पहले ध्यान दें कि ये रूपांतरण केवल डेटा की रेंज बदलते हैं, वितरण नहीं। आगे चलकर आप लॉग ट्रांसफॉर्म या बॉक्स-कॉक्स ट्रांसफॉर्म जैसे कई अन्य रूपांतरण भी इस्तेमाल करना चाह सकते हैं ताकि आपका डेटा अधिक Gaussian (घंटी-आकार) जैसा दिखे। पर आगे बढ़ने से पहले, यह पूछना महत्वपूर्ण है: हम अपना डेटा स्केल क्यों करते हैं? क्या कुछ स्थितियों में यह अधिक उपयुक्त होता है? उदाहरण के लिए, क्या यह वर्गीकरण समस्याओं में रिग्रेशन की तुलना में अधिक महत्वपूर्ण है?
पहले वर्गीकरण चुनौतियों में उतरते हैं और देखते हैं कि स्केलिंग k-Nearest Neighbors के प्रदर्शन को कैसे प्रभावित करती है:
प्रीप्रोसेसिंग: व्यवहार में स्केलिंग
नीचे मैं (i) डेटा को स्केल करता हूँ, (ii) k-Nearest Neighbors का उपयोग करता हूँ, और (iii) मॉडल प्रदर्शन जाँचता हूँ। मैं scikit-learn के scale फंक्शन का उपयोग करूँगा, जो पास की गई array में सभी फीचर्स (कॉलम) को स्टैंडर्डाइज़ करता है।
ये सभी माप 0.1 से बेहतर हुए हैं, जो 16% का सुधार है और महत्वपूर्ण है! जैसा कि ऊपर संकेत किया गया था, स्केलिंग से पहले कई प्रेडिक्टर वैरिएबल्स की रेंज में आर्डर ऑफ मैग्नीट्यूड का अंतर था, जिसका मतलब है कि k-NN जैसे एल्गोरिद्म के संदर्भ में एक-दो वैरिएबल्स हावी हो सकते थे। अपने डेटा को स्केल करने के दो मुख्य कारण हैं
हमने देखा कि डेटा साइंस पाइपलाइन में, स्केलिंग और सेंट्रिंग के रूप में, प्रीप्रोसेसिंग का स्थान कितना केंद्रीय है—और हमने यह मशीन लर्निंग की चुनौतियों के लिए समग्र दृष्टिकोण को बढ़ावा देने के लिए किया। आने वाले लेखों में, मैं इस चर्चा का विस्तार अन्य प्रकार की प्रीप्रोसेसिंग तक करना चाहता हूँ, जैसे संख्यात्मक डेटा के रूपांतरण और श्रेणीबद्ध डेटा का प्रीप्रोसेसिंग—जो किसी भी डेटा वैज्ञानिक के टूलकिट के आवश्यक पहलू हैं। इससे पहले, अगले लेख में मैं वर्गीकरण के रिग्रेशन दृष्टिकोणों में स्केलिंग की भूमिका का अन्वेषण करूँगा। विशेष रूप से, मैं लॉजिस्टिक रिग्रेशन देखूँगा और आप पाएँगे कि परिणाम k-Nearest Neighbors के संदर्भ में अभी जो आपने देखा उससे बहुत भिन्न है।
नीचे दिए गए इंटरैक्टिव विंडो में, आप स्वयं डेटा के साथ खेल सकते हैं। शुरुआत में n_neig वैरिएबल बदलें, जो k-NN एल्गोरिद्म में उपयोग होने वाले पड़ोसियों की संख्या है। यदि आप चाहें, तो sc = True सेट करके डेटा को स्केल भी कर सकते हैं। फिर पूरे स्क्रिप्ट को चलाएँ ताकि मॉडल की एक्यूरेसी और क्लासिफिकेशन रिपोर्ट प्राप्त हो सके।
शब्दावली
सुपरवाइज़्ड लर्निंग: प्रेडिक्टर वैरिएबल्स से टार्गेट वैरिएबल का अनुमान लगाने का कार्य। उदाहरण के लिए, टार्गेट वैरिएबल ‘हृदय रोग की उपस्थिति’ का अनुमान ‘आयु’, ‘लिंग’ और ‘धूम्रपान स्थिति’ जैसे प्रेडिक्टर वैरिएबल्स से लगाना।
वर्गीकरण कार्य: यदि सुपरवाइज़्ड लर्निंग कार्य में टार्गेट वैरिएबल श्रेणियों से बना हो (जैसे ‘क्लिक’ या ‘नहीं’, ‘घातक’ या ‘सौम्य’ ट्यूमर), तो वह वर्गीकरण कार्य है।
रिग्रेशन कार्य: यदि सुपरवाइज़्ड लर्निंग कार्य में टार्गेट वैरिएबल निरंतर रूप से बदलने वाला वैरिएबल हो (जैसे घर की कीमत) या क्रमबद्ध श्रेणीबद्ध वैरिएबल, जैसे ‘वाइन की गुणवत्ता रेटिंग’, तो वह रिग्रेशन कार्य है।
k-Nearest Neighbors: वर्गीकरण कार्यों के लिए एक एल्गोरिद्म, जिसमें किसी डेटा बिंदु को उसके k निकटतम पड़ोसियों के बहुमत वोट से तय लेबल दिया जाता है।
प्रीप्रोसेसिंग: वे सभी क्रियाएँ जिनका उपयोग डेटा वैज्ञानिक अपना डेटा उस रूप में लाने के लिए करते हैं जो उनके इच्छित कार्य के लिए अधिक उपयुक्त हो। उदाहरण के लिए, ट्विटर डेटा पर सेंटिमेंट विश्लेषण करने से पहले आप HTML टैग, अतिरिक्त खाली जगहें हटाना, संक्षेपों का विस्तार करना और ट्वीट्स को उनके शब्दों की सूचियों में बाँटना चाहेंगे।
सेंट्रिंग और स्केलिंग: ये दोनों संख्यात्मक डेटा के प्रीप्रोसेसिंग के रूप हैं—यानी ऐसा डेटा जो संख्याओं से बना हो, न कि श्रेणियों या स्ट्रिंग्स से, उदाहरण के लिए; किसी वैरिएबल को सेंटर करना मतलब उसके हर डेटा बिंदु से उस वैरिएबल का औसत घटाना ताकि नए वैरिएबल का औसत 0 हो; किसी वैरिएबल को स्केल करना मतलब हर डेटा बिंदु को किसी स्थिरांक से गुणा करना ताकि डेटा की रेंज बदली जा सके। इनके महत्व और उदाहरणों के लिए लेख के मुख्य भाग देखें।
यह लेख एक Jupyter नोटबुक से जनरेट किया गया है। आप नोटबुक यहाँ डाउनलोड कर सकते हैं।