इस पाठ्यक्रम में, आप जानेंगे कि मशीन लर्निंग हमारे दैनिक जीवन को कैसे प्रभावित कर रही है। आज भी, सिस्टम और मॉडल स्वास्थ्य देखभाल निदान, ऋण स्वीकृति, या धोखाधड़ी का पता लगाने जैसे दैनिक निर्णय लेने के कार्यों में शामिल हैं। इसलिए यह महत्वपूर्ण है कि ये मॉडल भरोसेमंद परिणाम प्रदान करने के लिए अच्छी तरह से काम करें। जैसे किसी भी सॉफ़्टवेयर एप्लिकेशन में, AI सिस्टम भी अपेक्षाओं से चूक सकते हैं या अवांछनीय परिणाम दे सकते हैं। यही कारण है कि AI मॉडल के व्यवहार को समझना और समझाना आवश्यक है।
इस पाठ्यक्रम में, आप खोज शुरू करेंगे कि मशीन लर्निंग हमारे दैनिक जीवन को कैसे प्रभावित कर रही है और कर सकती है। अभी भी, प्रणालियाँ और मॉडल रोज़मर्रा के निर्णय लेने के कार्यों में शामिल हैं, जैसे स्वास्थ्य देखभाल निदान, ऋण स्वीकृतियां या धोखाधड़ी का पता लगाना। इसलिए, यह महत्वपूर्ण है कि ये मॉडल विश्वसनीय परिणाम प्रदान करने के लिए अच्छी तरह से काम करें। किसी भी सॉफ़्टवेयर एप्लिकेशन की तरह, AI सिस्टम अपेक्षाओं पर खरे नहीं उतर सकते या अवांछित परिणामों का कारण बन सकते हैं। इसलिए, AI मॉडल के व्यवहार को समझना और समझाना आवश्यक है।
कल्पना करें कि जब आप इन मॉडलों को बनाने के लिए उपयोग किए जा रहे डेटा में कुछ जनसांख्यिकी, जैसे जाति, लिंग, राजनीतिक दृष्टिकोण, धर्म, या असमान रूप से प्रतिनिधित्व करने वाले जनसांख्यिकी की कमी हो, तो क्या हो सकता है। अगर मॉडल का आउटपुट किसी विशेष जनसांख्यिकी को प्राथमिकता देता है, तो इसका एप्लिकेशन पर क्या प्रभाव पड़ेगा? इसके अलावा, जब मॉडल का परिणाम हानिकारक हो और लोगों को नुकसान पहुंचाए, तो क्या होगा? AI सिस्टम के व्यवहार के लिए कौन जिम्मेदार होगा? ये कुछ सवाल हैं जिनकी हम इस पाठ्यक्रम में जांच करेंगे।
कल्पना कीजिए कि जब आप जिन डेटा का उपयोग इन मॉडलों के निर्माण के लिए कर रहे हैं, उनमें कुछ जनसांख्यिकी जैसे जाति, लिंग, राजनीतिक दृष्टिकोण, धर्म की कमी हो, या वे असंतुलित रूप से कुछ जनसांख्यिकीय समूहों का प्रतिनिधित्व करते हों। जब मॉडल का आउटपुट किसी जनसांख्यिकीय पक्षपात को प्रोत्साहित करता है तो क्या होता है? आवेदन के लिए इसका क्या परिणाम है? इसके अलावा, जब मॉडल का परिणाम प्रतिकूल होता है और लोगों के लिए हानिकारक होता है, तो क्या होता है? AI सिस्टम के व्यवहार के लिए कौन जिम्मेदार है? ये कुछ प्रश्न हैं जिनका हम इस पाठ्यक्रम में पता लगाएंगे।
इस पाठ में, आप:
- मशीन लर्निंग में निष्पक्षता और इससे संबंधित हानियों के महत्व के बारे में जागरूकता बढ़ाएंगे।
- असामान्य परिदृश्यों और बाहरी मूल्यों की जांच करने की प्रक्रिया से परिचित होंगे ताकि विश्वसनीयता और सुरक्षा सुनिश्चित की जा सके।
- समावेशी सिस्टम डिज़ाइन करके सभी को सशक्त बनाने की आवश्यकता को समझेंगे।
- डेटा और लोगों की गोपनीयता और सुरक्षा की रक्षा करने के महत्व का पता लगाएंगे।
- AI मॉडल के व्यवहार को समझाने के लिए एक पारदर्शी दृष्टिकोण अपनाने के महत्व को देखेंगे।
- यह समझेंगे कि AI सिस्टम में विश्वास बनाने के लिए जवाबदेही क्यों आवश्यक है।
- मशीन लर्निंग में निष्पक्षता के महत्व और निष्पक्षता-संबंधी हानियों के बारे में जागरूकता बढ़ाएंगे।
- विश्वसनीयता और सुरक्षा सुनिश्चित करने के लिए अपवादों और असामान्य परिदृश्यों की खोज के अभ्यास से परिचित होंगे।
- समावेशी सिस्टम डिजाइन करके सभी को सशक्त बनाने की आवश्यकता को समझेंगे।
- डेटा और लोगों की गोपनीयता और सुरक्षा की रक्षा के महत्व की जांच करेंगे।
- AI मॉडलों के व्यवहार को समझाने के लिए ग्लास बॉक्स दृष्टिकोण की आवश्यकता को देखेंगे।
- AI सिस्टमों में भरोसा बनाने के लिए जवाबदेही के महत्व के प्रति सावधान रहना सीखेंगे।
## पूर्वापेक्षा
इस पाठ से पहले, कृपया "जिम्मेदार AI सिद्धांत" सीखने का पथ पूरा करें और नीचे दिए गए वीडियो को देखें:
पूर्वापेक्षा के रूप में, कृपया "Responsible AI Principles" लर्न पाथ लें और नीचे दिए गए वीडियो को देखें:
जिम्मेदार AI के बारे में अधिक जानने के लिए इस [लर्निंग पाथ](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) का अनुसरण करें।
जिम्मेदार AI के बारे में अधिक जानने के लिए इस [लर्निंग पाथ](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) का अनुसरण करें
[](https://youtu.be/dnC8-uUZXSc "Microsoft का जिम्मेदार AI के प्रति दृष्टिकोण")
[](https://youtu.be/dnC8-uUZXSc "Microsoft का Responsible AI के प्रति दृष्टिकोण")
> 🎥 ऊपर दी गई छवि पर क्लिक करें: Microsoft का जिम्मेदार AI के प्रति दृष्टिकोण
> 🎥 ऊपर छवि पर क्लिक करें वीडियो के लिए: Microsoft का Responsible AI के प्रति दृष्टिकोण
## निष्पक्षता
AI सिस्टम को सभी के साथ निष्पक्ष व्यवहार करना चाहिए और समान समूहों के लोगों को अलग-अलग तरीके से प्रभावित करने से बचना चाहिए। उदाहरण के लिए, जब AI सिस्टम चिकित्सा उपचार, ऋण आवेदन, या रोजगार पर मार्गदर्शन प्रदान करते हैं, तो उन्हें समान लक्षण, वित्तीय परिस्थितियों, या पेशेवर योग्यताओं वाले सभी लोगों को समान सिफारिशें देनी चाहिए। हम सभी मनुष्य अपनी निर्णय लेने की प्रक्रिया में अंतर्निहित पूर्वाग्रह रखते हैं। ये पूर्वाग्रह उस डेटा में भी दिखाई दे सकते हैं जिसका उपयोग हम AI सिस्टम को प्रशिक्षित करने के लिए करते हैं। कभी-कभी यह हेरफेर अनजाने में हो सकता है। यह जानबूझकर पहचानना कठिन हो सकता है कि आप डेटा में पूर्वाग्रह कब पेश कर रहे हैं।
AI सिस्टम सभी के साथ निष्पक्ष व्यवहार करें और समान समूहों के लोगों के साथ भिन्न तरीकों से प्रभाव न डालें। उदाहरण के लिए, जब AI सिस्टम चिकित्सा उपचार, ऋण आवेदन या रोजगार पर मार्गदर्शन प्रदान करते हैं, तो वे समान लक्षण, वित्तीय परिस्थितियाँ या व्यावसायिक योग्यताओं वाले सभी को समान सिफारिशें करें। हममें से प्रत्येक मनुष्य विरासत में मिली पूर्वाग्रह लेकर चलता है, जो हमारे निर्णयों और कार्यों को प्रभावित करता है। ये पूर्वाग्रह उस डेटा में स्पष्ट हो सकते हैं जिसका हम AI सिस्टम के प्रशिक्षण के लिए उपयोग करते हैं। कभी-कभी ऐसा अनजाने में होता है। यह जानना अक्सर कठिन होता है कि आप डेटा में कब पूर्वाग्रह लाकर उसे प्रभावित कर रहे हैं।
**"असमानता"** का मतलब है किसी समूह के लिए नकारात्मक प्रभाव या "हानियां", जैसे कि जाति, लिंग, आयु, या विकलांगता की स्थिति के संदर्भ में परिभाषित समूह। मुख्य निष्पक्षता-संबंधी हानियों को निम्नलिखित श्रेणियों में वर्गीकृत किया जा सकता है:
**"अन्याय"** नकारात्मक प्रभावों या "हानियों" को दर्शाता है, जो किसी समूह के लिए हो सकती हैं, जैसे जाति, लिंग, उम्र या विकलांगता स्थिति के संदर्भ में परिभाषित। मुख्य निष्पक्षता-संबंधी हानियाँ निम्नलिखित प्रकार से वर्गीकृत की जा सकती हैं:
- **आवंटन**: यदि किसी लिंग या जातीयता को दूसरे पर प्राथमिकता दी जाती है।
- **सेवा की गुणवत्ता**: यदि आप डेटा को केवल एक विशिष्ट परिदृश्य के लिए प्रशिक्षित करते हैं, लेकिन वास्तविकता अधिक जटिल होती है, तो यह खराब प्रदर्शन वाली सेवा की ओर ले जाता है। उदाहरण के लिए, एक साबुन डिस्पेंसर जो गहरे रंग की त्वचा वाले लोगों को पहचानने में असमर्थ था। [संदर्भ](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **अपमान**: किसी चीज़ या व्यक्ति की अनुचित आलोचना और लेबलिंग। उदाहरण के लिए, एक छवि लेबलिंग तकनीक ने काले रंग की त्वचा वाले लोगों की छवियों को गोरिल्ला के रूप में गलत लेबल किया।
- **अधिक या कम प्रतिनिधित्व**: यह विचार कि एक निश्चित समूह को किसी पेशे में नहीं देखा जाता है, और कोई भी सेवा या कार्य जो इसे बढ़ावा देता है, वह नुकसान में योगदान देता है।
- **रूढ़िबद्धता**: किसी दिए गए समूह को पूर्व-निर्धारित विशेषताओं के साथ जोड़ना। उदाहरण के लिए, अंग्रेजी और तुर्की के बीच एक भाषा अनुवाद प्रणाली में लिंग से संबंधित रूढ़ियों के कारण गलतियां हो सकती हैं।
- **आवंटन**, यदि उदाहरण के लिए कोई लिंग या जातीयता दूसरे की तुलना में अधिक पसंद की जाए।
- **सेवा की गुणवत्ता**। अगर आप किसी विशेष परिदृश्य के लिए डेटा का प्रशिक्षण करते हैं लेकिन वास्तविकता अधिक जटिल है, तो यह खराब प्रदर्शन वाली सेवा को जन्म देता है। उदाहरण के लिए, एक हाथ धोने का साबुन डिस्पेंसर जो गहरे रंग की त्वचा वाले लोगों को महसूस नहीं कर पाता। [संदर्भ](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **अपमानजनक टिप्पणी**। किसी चीज़ या किसी के प्रति अन्यायपूर्ण आलोचना और लेबल लगाना। उदाहरण के लिए, एक इमेज लेबलिंग तकनीक ने कुख्यात रूप से गहरे रंग की त्वचा वाले लोगों की तस्वीरों को गोरिल्ला के रूप में गलत लेबल किया।
- **अधिप्रतिनिधित्व या अतिप्रतिनिधित्व**। धारणा यह है कि किसी निश्चित समूह को किसी पेशे में नहीं देखा जाता, और कोई भी सेवा या फ़ंक्शन जो इसे बढ़ावा देता है वह हानि का योगदान देता है।
- **स्टीरियोटाइपिंग**। किसी निर्दिष्ट समूह का पूर्व निर्धारित विशेषताओं के साथ जुड़ाव। उदाहरण के लिए, अंग्रेज़ी और तुर्की भाषा के बीच अनुवाद प्रणाली में ऐसे शब्दों के कारण गलतियां हो सकती हैं, जिनके लिंग से जुड़े पूर्वाग्रह होते हैं।


> तुर्की में अनुवाद

> फिर से अंग्रेजी में अनुवाद

> अंग्रेज़ी में वापस अनुवाद
AI सिस्टम को डिज़ाइन और परीक्षण करते समय, हमें यह सुनिश्चित करना चाहिए कि AI निष्पक्ष हो और इसे पूर्वाग्रही या भेदभावपूर्ण निर्णय लेने के लिए प्रोग्राम न किया गया हो, जो मनुष्यों के लिए भी निषिद्ध हैं। AI और मशीन लर्निंग में निष्पक्षता सुनिश्चित करना एक जटिल सामाजिक-तकनीकी चुनौती बनी हुई है।
AI सिस्टम डिजाइन और परीक्षण करते समय, हमें यह सुनिश्चित करना चाहिए कि AI निष्पक्ष हो और पक्षपातपूर्ण या भेदभावपूर्ण निर्णय लेने के लिए प्रोग्राम न किया गया हो, जो मनुष्यों को भी निषिद्ध है। AI और मशीन लर्निंग में निष्पक्षता को गारंटीकृत करना एक जटिल सामाजिक-तकनीकी चुनौती है।
### विश्वसनीयता और सुरक्षा
विश्वास बनाने के लिए, AI सिस्टम को सामान्य और अप्रत्याशित परिस्थितियों में विश्वसनीय, सुरक्षित और सुसंगत होना चाहिए। यह जानना महत्वपूर्ण है कि AI सिस्टम विभिन्न परिस्थितियों में कैसा व्यवहार करेगा, विशेष रूप से जब वे असामान्य हों। AI समाधान बनाते समय, उन सभी संभावित परिस्थितियों को संभालने पर ध्यान केंद्रित करना आवश्यक है जिनका सामना AI समाधान कर सकता है। उदाहरण के लिए, एक स्वचालित कार को लोगों की सुरक्षा को सर्वोच्च प्राथमिकता देनी चाहिए। इसलिए, कार को चलाने वाले AI को सभी संभावित परिदृश्यों पर विचार करना चाहिए, जैसे रात, तूफान, बर्फ़ीला तूफ़ान, सड़क पर दौड़ते बच्चे, पालतू जानवर, सड़क निर्माण आदि। AI सिस्टम कितनी अच्छी तरह से विभिन्न परिस्थितियों को विश्वसनीय और सुरक्षित रूप से संभाल सकता है, यह डेटा वैज्ञानिक या AI डेवलपर द्वारा डिज़ाइन या परीक्षण के दौरान विचार किए गए पूर्वानुमान के स्तर को दर्शाता है।
भरोसा बनाने के लिए, AI सिस्टम विश्वसनीय, सुरक्षित और सामान्य तथा अप्रत्याशित परिस्थितियों में स्थिर होने चाहिए। यह जानना महत्वपूर्ण है कि AI सिस्टम विभिन्न परिस्थितियों में कैसे व्यवहार करेंगे, विशेषकर जब वे अपवाद(आउटलेयर) हों। AI समाधान बनाते समय, विभिन्न प्रकार की परिस्थितियों का सामना करने के तरीके पर पर्याप्त ध्यान देना आवश्यक है। उदाहरण के लिए, स्वचालित चलने वाली कार को लोगों की सुरक्षा सर्वोच्च प्राथमिकता देनी चाहिए। इसलिए, उस कार को चलाने वाले AI को सभी संभावित परिदृश्यों पर विचार करना चाहिए, जैसे रात, तूफान या हिमपात, सड़क पार करते बच्चे, पालतू जानवर, सड़क निर्माण आदि। AI सिस्टम कितनी अच्छी तरह से इन विभिन्न परिस्थितियों को विश्वसनीय और सुरक्षित तरीके से हैंडल कर सकता है, यह इस बात पर निर्भर करता है कि डेटा वैज्ञानिक या AI डेवलपर ने डिजाइन या परीक्षण के दौरान कितनी अच्छी तरह से पूर्वानुमान लगाया।
> [🎥 वीडियो के लिए यहां क्लिक करें: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
> [🎥 वीडियो के लिए यहाँ क्लिक करें: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
### समावेशिता
### समावेशन
AI सिस्टम को सभी को शामिल करने और सशक्त बनाने के लिए डिज़ाइन किया जाना चाहिए। AI सिस्टम को डिज़ाइन और लागू करते समय, डेटा वैज्ञानिक और AI डेवलपर सिस्टम में संभावित बाधाओं की पहचान करते हैं और उन्हें संबोधित करते हैं जो अनजाने में लोगों को बाहर कर सकती हैं। उदाहरण के लिए, दुनिया भर में 1 बिलियन लोग विकलांग हैं। AI की प्रगति के साथ, वे अपने दैनिक जीवन में अधिक आसानी से जानकारी और अवसरों तक पहुंच सकते हैं। बाधाओं को दूर करके, यह नवाचार के अवसर पैदा करता है और बेहतर अनुभवों के साथ AI उत्पादों को विकसित करता है जो सभी को लाभान्वित करते हैं।
AI सिस्टम को इस तरह डिजाइन किया जाना चाहिए कि वे सभी को शामिल करें और सशक्त बनाएं। AI सिस्टम डिजाइन और क्रियान्वयन करते समय डेटा वैज्ञानिक और AI डेवलपर संभावित बाधाओं की पहचान कर उन्हें दूर करते हैं, जो अनजाने में लोगों को बाहर कर सकती हैं। उदाहरण के लिए, दुनिया भर में 1 अरब से अधिक लोग विकलांग हैं। AI के विकास के साथ, वे अपने दैनिक जीवन में आसानी से सूचना और अवसरों तक पहुंच सकते हैं। बाधाओं को दूर करके, बेहतर अनुभव के साथ AI उत्पाद विकसित करने और नवाचार के अवसर पैदा किए जा सकते हैं जो सभी के लिए लाभकारी हों।
> [🎥 वीडियो के लिए यहां क्लिक करें: AI में समावेशिता](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
> [🎥 AI में समावेशन के लिए यहाँ क्लिक करें वीडियो पर](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
### सुरक्षा और गोपनीयता
AI सिस्टम को सुरक्षित होना चाहिए और लोगों की गोपनीयता का सम्मान करना चाहिए। लोग उन सिस्टमों पर कम विश्वास करते हैं जो उनकी गोपनीयता, जानकारी, या जीवन को जोखिम में डालते हैं। मशीन लर्निंग मॉडल को प्रशिक्षित करते समय, हम सर्वोत्तम परिणाम प्राप्त करने के लिए डेटा पर निर्भर करते हैं। ऐसा करते समय, डेटा की उत्पत्ति और अखंडता पर विचार करना आवश्यक है। उदाहरण के लिए, क्या डेटा उपयोगकर्ता द्वारा प्रस्तुत किया गया था या सार्वजनिक रूप से उपलब्ध था? इसके बाद, डेटा के साथ काम करते समय, यह महत्वपूर्ण है कि AI सिस्टम गोपनीय जानकारी की रक्षा कर सके और हमलों का विरोध कर सके। जैसे-जैसे AI अधिक प्रचलित होता जा रहा है, गोपनीयता की रक्षा करना और महत्वपूर्ण व्यक्तिगत और व्यावसायिक जानकारी को सुरक्षित रखना अधिक महत्वपूर्ण और जटिल होता जा रहा है। गोपनीयता और डेटा सुरक्षा के मुद्दों को AI के लिए विशेष रूप से ध्यान देने की आवश्यकता है क्योंकि डेटा तक पहुंच AI सिस्टम को लोगों के बारे में सटीक और सूचित भविष्यवाणियां और निर्णय लेने के लिए आवश्यक है।
AI सिस्टम सुरक्षित होने चाहिए और लोगों की गोपनीयता का सम्मान करना चाहिए। लोग ऐसे सिस्टम पर कम भरोसा करते हैं जो उनकी गोपनीयता, जानकारी या जीवन को खतरे में डालते हैं। मशीन लर्निंग मॉडल को प्रशिक्षित करते समय, हम सर्वोत्तम परिणाम पाने के लिए डेटा पर निर्भर करते हैं। ऐसा करते समय, डेटा की उत्पत्ति और अखंडता पर विचार करना आवश्यक है। उदाहरण के लिए, क्या डेटा उपयोगकर्ता द्वारा प्रस्तुत किया गया था या सार्वजनिक रूप से उपलब्ध था? अगला, डेटा के साथ काम करते समय, ऐसे AI सिस्टम विकसित करना महत्वपूर्ण है जो गोपनीय जानकारी की रक्षा कर सके और हमलों का सामना कर सके। जैसे-जैसे AI अधिक प्रचलित हो रहा है, गोपनीयता की सुरक्षा और महत्वपूर्ण व्यक्तिगत और व्यावसायिक जानकारी की सुरक्षा अधिक महत्वपूर्ण और जटिल होती जा रही है। गोपनीयता और डेटा सुरक्षा के मुद्दे AI के लिए विशेष रूप से ध्यान देने योग्य हैं क्योंकि AI सिस्टमों को लोगों के बारे में सटीक और सूचित पूर्वानुमान और निर्णय लेने के लिए डेटा तक पहुंच आवश्यक है।
> [🎥 वीडियो के लिए यहां क्लिक करें: AI में सुरक्षा](https://www.microsoft.com/videoplayer/embed/RE4voJF)
> [🎥 AI में सुरक्षा के लिए यहाँ क्लिक करें वीडियो पर](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- उद्योग के रूप में हमने गोपनीयता और सुरक्षा में महत्वपूर्ण प्रगति की है, जो मुख्य रूप से GDPR (जनरल डेटा प्रोटेक्शन रेगुलेशन) जैसे नियमों द्वारा संचालित है।
- फिर भी AI सिस्टम के साथ हमें यह स्वीकार करना होगा कि सिस्टम को अधिक व्यक्तिगत और प्रभावी बनाने के लिए अधिक व्यक्तिगत डेटा की आवश्यकता और गोपनीयता के बीच तनाव है।
- जैसे इंटरनेट के साथ जुड़े कंप्यूटरों के जन्म के साथ, हम AI से संबंधित सुरक्षा मुद्दों की संख्या में भारी वृद्धि देख रहे हैं।
- साथ ही, हमने सुरक्षा में सुधार के लिए AI का उपयोग होते देखा है। उदाहरण के लिए, अधिकांश आधुनिक एंटी-वायरस स्कैनर आज AI ह्यूरिस्टिक्स द्वारा संचालित हैं।
- हमें यह सुनिश्चित करने की आवश्यकता है कि हमारे डेटा विज्ञान प्रक्रियाएं नवीनतम गोपनीयता और सुरक्षा प्रथाओं के साथ सामंजस्यपूर्ण रूप से मिश्रित हों।
- एक उद्योग के रूप में, हमने GDPR (General Data Protection Regulation) जैसे नियमों के चलते गोपनीयता और सुरक्षा में उल्लेखनीय प्रगति की है।
- फिर भी AI सिस्टमों के साथ हमें अधिक व्यक्तिगत डेटा की आवश्यकता और गोपनीयता के बीच टकराव को स्वीकार करना होगा।
- ठीक वैसे ही जैसे इंटरनेट के साथ जुड़े कंप्यूटरों के जन्म के दौरान, AI से संबंधित सुरक्षा मुद्दों की संख्या में भी भारी वृद्धि देखी जा रही है।
- साथ ही, हमने देखा है कि सुरक्षा सुधारने के लिए AI का उपयोग किया जा रहा है। उदाहरण के लिए, अधिकांश आधुनिक एंटी-वायरस स्कैनर आज AI ह्यूरिस्टिक्स द्वारा संचालित हैं।
- हमें सुनिश्चित करना होगा कि हमारा डेटा साइंस प्रक्रियाएँ नवीनतम गोपनीयता और सुरक्षा प्रथाओं के साथ तालमेल में हों।
### पारदर्शिता
AI सिस्टम को समझने योग्य होना चाहिए। पारदर्शिता का एक महत्वपूर्ण हिस्सा AI सिस्टम और उनके घटकों के व्यवहार को समझाना है। AI सिस्टम की समझ में सुधार के लिए यह आवश्यक है कि हितधारक यह समझें कि वे कैसे और क्यों कार्य करते हैं ताकि वे संभावित प्रदर्शन मुद्दों, सुरक्षा और गोपनीयता चिंताओं, पूर्वाग्रहों, बहिष्करण प्रथाओं, या अनपेक्षित परिणामों की पहचान कर सकें। हम यह भी मानते हैं कि जो लोग AI सिस्टम का उपयोग करते हैं, उन्हें यह स्पष्ट और ईमानदारी से बताना चाहिए कि वे कब, क्यों, और कैसे उनका उपयोग करते हैं। साथ ही, उनके उपयोग की सीमाओं के बारे में भी जानकारी होनी चाहिए। उदाहरण के लिए, यदि कोई बैंक अपने उपभोक्ता ऋण निर्णयों का समर्थन करने के लिए AI सिस्टम का उपयोग करता है, तो यह महत्वपूर्ण है कि परिणामों की जांच की जाए और यह समझा जाए कि कौन सा डेटा सिस्टम की सिफारिशों को प्रभावित करता है। सरकारें उद्योगों में AI को विनियमित करना शुरू कर रही हैं, इसलिए डेटा वैज्ञानिकों और संगठनों को यह समझाना होगा कि AI सिस्टम नियामक आवश्यकताओं को पूरा करता है या नहीं, विशेष रूप से जब कोई अवांछनीय परिणाम होता है।
### पारदर्शिता
AI सिस्टम को समझने योग्य होना चाहिए। पारदर्शिता का एक महत्वपूर्ण हिस्सा AI सिस्टमों और उनके घटकों के व्यवहार की व्याख्या करना है। AI सिस्टमों की समझ में सुधार के लिए यह आवश्यक है कि हितधारक यह समझें कि वे कैसे और क्यों कार्य करते हैं ताकि वे संभावित प्रदर्शन समस्याओं, सुरक्षा और गोपनीयता चिंताओं, पूर्वाग्रह, बहिष्करण संबंधी प्रथाओं या अनपेक्षित परिणामों की पहचान कर सकें। हम यह भी मानते हैं कि जो लोग AI सिस्टमों का उपयोग करते हैं, उन्हें ईमानदार और स्पष्ट होना चाहिए कि वे कब, क्यों और कैसे इन्हें लागू करते हैं। साथ ही, जिन सिस्टमों का वे उपयोग करते हैं उनकी सीमाओं को समझाना भी आवश्यक है। उदाहरण के लिए, यदि कोई बैंक अपने उपभोक्ता ऋण निर्णयों का समर्थन करने के लिए AI सिस्टम का उपयोग करता है, तो परिणामों की जांच करना और यह समझना महत्वपूर्ण है कि कौन सा डेटा सिस्टम की सिफारिशों को प्रभावित करता है। सरकारें उद्योगों में AI को विनियमित करना शुरू कर रही हैं, इसलिए डेटा वैज्ञानिकों और संगठनों को यह समझाना होगा कि क्या कोई AI सिस्टम नियामक आवश्यकताओं को पूरा करता है, विशेष रूप से जब कोई अवांछित परिणाम होता है।
> [🎥 वीडियो के लिए यहां क्लिक करें: AI में पारदर्शिता](https://www.microsoft.com/videoplayer/embed/RE4voJF)
> [🎥 AI में पारदर्शिता के लिए यहाँ क्लिक करें वीडियो पर](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- क्योंकि AI सिस्टम इतने जटिल हैं, यह समझना कठिन है कि वे कैसे काम करते हैं और उनके परिणामों की व्याख्या कैसे करें।
- इस समझ की कमी इन सिस्टमों के प्रबंधन, संचालन, और प्रलेखन को प्रभावित करती है।
- यह समझ की कमी, विशेष रूप से, उन निर्णयों को प्रभावित करती है जो इन सिस्टमों द्वारा उत्पन्न परिणामों का उपयोग करके किए जाते हैं।
- क्योंकि AI सिस्टम इतने जटिल हैं, यह समझना कठिन है कि वे कैसे काम करते हैं और परिणामों की व्याख्या कैसे करें।
- इस समझ के अभाव का प्रभाव इन सिस्टमों के प्रबंधन, संचालन और प्रलेखन पर पड़ता है।
- यह समझ के अभाव का सबसे महत्वपूर्ण प्रभाव उन निर्णयों पर पड़ता है जो इन सिस्टमों द्वारा उत्पन्न परिणामों के आधार पर लिए जाते हैं।
### जवाबदेही
वे लोग जो AI सिस्टम डिजाइन और तैनात करते हैं, उन्हें अपने सिस्टम के संचालन के लिए जवाबदेह होना चाहिए। जवाबदेही की आवश्यकता विशेष रूप से संवेदनशील उपयोग जैसी तकनीकों के साथ महत्वपूर्ण होती है जैसे चेहरे की पहचान। हाल ही में, कानून प्रवर्तन संगठनों की ओर से चेहरे की पहचान तकनीक की मांग बढ़ रही है, जो इससे खोए हुए बच्चों को खोजने जैसे उपयोग देखते हैं। हालांकि, ये तकनीकें संभावित रूप से सरकार द्वारा अपने नागरिकों की मौलिक स्वतंत्रताओं को जोखिम में डालने के लिए उपयोग की जा सकती हैं, उदाहरण के लिए, विशिष्ट व्यक्तियों की निरंतर निगरानी सक्षम करके। इसलिए, डेटा वैज्ञानिकों और संगठनों को जिम्मेदार होना चाहिए कि उनका AI सिस्टम व्यक्तियों या समाज पर कैसे प्रभाव डालता है।
जो लोग AI सिस्टम डिज़ाइन और तैनात करते हैं, उन्हें यह सुनिश्चित करना चाहिए कि उनके सिस्टम कैसे काम करते हैं, इसके लिए वे जवाबदेह हों। जवाबदेही की आवश्यकता विशेष रूप से संवेदनशील उपयोग प्रौद्योगिकियों जैसे चेहरे की पहचान के साथ महत्वपूर्ण है। हाल ही में, चेहरे की पहचान तकनीक की मांग बढ़ रही है, विशेष रूप से कानून प्रवर्तन संगठनों से जो इस तकनीक की क्षमता को लापता बच्चों को खोजने जैसे उपयोगों में देखते हैं। हालांकि, इन तकनीकों का उपयोग सरकार द्वारा नागरिकों की मौलिक स्वतंत्रताओं को खतरे में डालने के लिए किया जा सकता है, जैसे कि विशिष्ट व्यक्तियों की निरंतर निगरानी को सक्षम करना। इसलिए, डेटा वैज्ञानिकों और संगठनों को यह सुनिश्चित करना चाहिए कि उनके AI सिस्टम का प्रभाव व्यक्तियों या समाज पर जिम्मेदार हो।
[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft का Responsible AI के प्रति दृष्टिकोण")
[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft का जिम्मेदार AI के प्रति दृष्टिकोण")
> 🎥 ऊपर छवि पर क्लिक करें वीडियो के लिए: चेहरे की पहचान के जरिए व्यापक निगरानी की चेतावनियाँ
> 🎥 ऊपर दी गई छवि पर क्लिक करें: चेहरे की पहचान के माध्यम से बड़े पैमाने पर निगरानी की चेतावनी
अंततः, हमारी पीढ़ी के लिए सबसे बड़ा सवाल यह है, जो AI को समाज में ला रही है, कि यह कैसे सुनिश्चित करें कि कंप्यूटर लोगों के प्रति जवाबदेह बने रहें और वे लोग जो कंप्यूटर डिजाइन करते हैं, वे सभी के प्रति जवाबदेह बने रहें।
आखिरकार, हमारे युग के लिए सबसे बड़े सवालों में से एक यह है कि, AI को समाज में लाने वाली पहली पीढ़ी के रूप में, हम यह कैसे सुनिश्चित करेंगे कि कंप्यूटर लोगों के प्रति जवाबदेह बने रहें और यह सुनिश्चित करें कि कंप्यूटर डिज़ाइन करने वाले लोग बाकी सभी के प्रति जवाबदेह बने रहें।
## प्रभाव आकलन
## प्रभाव मूल्यांकन
मशीन लर्निंग मॉडल प्रशिक्षित करने से पहले, यह महत्वपूर्ण है कि प्रभाव आकलन किया जाए ताकि AI सिस्टम के उद्देश्य, इसके उपयोग क्षेत्र, कहां लागू किया जाएगा और कौन इस सिस्टम के साथ बातचीत करेगा, ये समझा जा सके। समीक्षा करने वाले या परीक्षणकर्ता यह जान पाते हैं कि संभावित जोखिम और अपेक्षित परिणामों की पहचान करते समय किन पहलुओं पर ध्यान देना है।
मशीन लर्निंग मॉडल को प्रशिक्षित करने से पहले, AI सिस्टम के उद्देश्य को समझने के लिए प्रभाव मूल्यांकन करना महत्वपूर्ण है; इसका इरादा उपयोग क्या है; इसे कहाँ तैनात किया जाएगा; और कौन सिस्टम के साथ इंटरैक्ट करेगा। ये समीक्षक या परीक्षक के लिए सहायक होते हैं ताकि वे संभावित जोखिमों और अपेक्षित परिणामों की पहचान करते समय किन कारकों पर विचार करें, यह जान सकें।
प्रभाव आकलन करते समय निम्न क्षेत्र ध्यान केंद्रित किए जाते हैं:
प्रभाव मूल्यांकन करते समय ध्यान केंद्रित करने के क्षेत्र निम्नलिखित हैं:
* **व्यक्तियों पर प्रतिकूल प्रभाव**। किसी भी प्रतिबंध, आवश्यकताओं, अनुचित उपयोग या ज्ञात सीमाओं के प्रति जागरूक रहना आवश्यक है ताकि यह सुनिश्चित किया जा सके कि सिस्टम का उपयोग ऐसे तरीके से न हो जो व्यक्तियों को हानि पहुंचाए।
* **डेटा आवश्यकताएँ**। यह समझना कि सिस्टम डेटा का उपयोग कैसे और कहां करेगा, समीक्षकों को डेटा आवश्यकताओं (जैसे, GDPR या HIPAA डेटा नियम) के प्रति जागरूक होने में सक्षम बनाता है। इसके अलावा, जांचें कि प्रशिक्षण के लिए स्रोत या डेटा की मात्रा पर्याप्त है या नहीं।
* **प्रभाव का सारांश**। सिस्टम के उपयोग से उत्पन्न होने वाली संभावित हानियों की सूची एकत्र करें। ML जीवनचक्र के दौरान, जाँचे कि पहचानी गई समस्याएँ कम या सुलझाई गई हैं या नहीं।
* छह प्रमुख सिद्धांतों में से प्रत्येक के लिए **लागू उद्देश्यों**। यह आकलन करें कि सिद्धांतों के लक्ष्य पूरे होते हैं या कोई अंतराल है।
* **व्यक्तियों पर प्रतिकूल प्रभाव**: किसी भी प्रतिबंध या आवश्यकताओं, असमर्थित उपयोग, या किसी भी ज्ञात सीमाओं के बारे में जागरूक होना जो सिस्टम के प्रदर्शन को बाधित कर सकती हैं, यह सुनिश्चित करने के लिए महत्वपूर्ण है कि सिस्टम का उपयोग इस तरह से न हो जो व्यक्तियों को नुकसान पहुंचा सके।
* **डेटा आवश्यकताएं**: यह समझना कि सिस्टम डेटा का उपयोग कैसे और कहाँ करेगा, समीक्षकों को उन डेटा आवश्यकताओं का पता लगाने में सक्षम बनाता है जिनका आपको ध्यान रखना चाहिए (जैसे, GDPR या HIPPA डेटा नियम)। इसके अलावा, यह जांचें कि क्या डेटा का स्रोत या मात्रा प्रशिक्षण के लिए पर्याप्त है।
* **प्रभाव का सारांश**: संभावित हानियों की एक सूची एकत्र करें जो सिस्टम का उपयोग करने से उत्पन्न हो सकती हैं। ML जीवनचक्र के दौरान, यह समीक्षा करें कि पहचानी गई समस्याओं को कम किया गया है या संबोधित किया गया है।
* **प्रत्येक छह मुख्य सिद्धांतों के लिए लागू लक्ष्य**: मूल्यांकन करें कि क्या प्रत्येक सिद्धांत के लक्ष्यों को पूरा किया गया है और क्या कोई अंतराल है।
## जिम्मेदार AI के साथ डिबगिंग
जैसे सॉफ़्टवेयर एप्लिकेशन को डिबग करना आवश्यक है, वैसे ही AI सिस्टम को डिबग करना भी आवश्यक है ताकि सिस्टम में समस्याओं की पहचान की जा सके और उन्हें हल किया जा सके। कई कारक हैं जो एक मॉडल को अपेक्षित या जिम्मेदार तरीके से प्रदर्शन करने से रोक सकते हैं। अधिकांश पारंपरिक मॉडल प्रदर्शन मेट्रिक्स मॉडल के प्रदर्शन के मात्रात्मक समुच्चय होते हैं, जो यह विश्लेषण करने के लिए पर्याप्त नहीं हैं कि मॉडल जिम्मेदार AI सिद्धांतों का उल्लंघन कैसे करता है। इसके अलावा, मशीन लर्निंग मॉडल एक ब्लैक बॉक्स है जो यह समझना कठिन बनाता है कि इसके परिणामों को क्या प्रेरित करता है या जब यह गलती करता है तो स्पष्टीकरण प्रदान करता है। इस पाठ्यक्रम में बाद में, हम जिम्मेदार AI डैशबोर्ड का उपयोग करना सीखेंगे ताकि AI सिस्टम को डिबग करने में मदद मिल सके। डैशबोर्ड डेटा वैज्ञानिकों और AI डेवलपर्स के लिए एक समग्र उपकरण प्रदान करता है ताकि वे निम्नलिखित कार्य कर सकें:
किसी सॉफ़्टवेयर एप्लिकेशन की तरह ही, AI सिस्टम की डिबगिंग आवश्यक प्रक्रिया है जो सिस्टम की समस्याओं की पहचान और समाधान करती है। कई ऐसे कारक होते हैं जो एक मॉडल को अपेक्षित या जिम्मेदार तरीके से प्रदर्शन न करने पर प्रभाव डालते हैं। अधिकांश पारंपरिक मॉडल प्रदर्शन मीट्रिक्स मॉडल के प्रदर्शन के मात्रात्मक सारांश हैं, जो यह विश्लेषण करने के लिए पर्याप्त नहीं हैं कि मॉडल जिम्मेदार AI सिद्धांतों का उल्लंघन कैसे करता है। इसके अलावा, एक मशीन लर्निंग मॉडल एक ब्लैक बॉक्स होता है जिससे यह समझना मुश्किल हो जाता है कि उसके परिणाम को क्या प्रेरित करता है या जब वह गलती करता है तो उसकी व्याख्या देना कठिन होता है। इस कोर्स के आगे के भाग में, हम जिम्मेदार AI डैशबोर्ड का उपयोग करना सीखेंगे जो AI सिस्टम डिबग करने में मदद करता है। यह डैशबोर्ड डेटा वैज्ञानिकों और AI डेवलपर्स के लिए एक समग्र उपकरण प्रदान करता है:
* **त्रुटि विश्लेषण**: मॉडल की त्रुटि वितरण की पहचान करने के लिए जो सिस्टम की निष्पक्षता या विश्वसनीयता को प्रभावित कर सकता है।
* **मॉडल अवलोकन**: यह पता लगाने के लिए कि डेटा समूहों में मॉडल के प्रदर्शन में असमानताएं कहाँ हैं।
* **डेटा विश्लेषण**: डेटा वितरण को समझने और डेटा में किसी भी संभावित पूर्वाग्रह की पहचान करने के लिए जो निष्पक्षता, समावेशिता, और विश्वसनीयता के मुद्दों को जन्म दे सकता है।
* **मॉडल व्याख्या**: यह समझने के लिए कि मॉडल की भविष्यवाणियों को क्या प्रभावित करता है। यह मॉडल के व्यवहार को समझाने में मदद करता है, जो पारदर्शिता और जवाबदेही के लिए महत्वपूर्ण है।
* **त्रुटि विश्लेषण**। मॉडल की त्रुटियों का वितरण पहचानने के लिए जो सिस्टम की निष्पक्षता या विश्वसनीयता प्रभावित कर सकते हैं।
* **मॉडल अवलोकन**। यह जानने के लिए कि डेटा समूहों के प्रदर्शन में कहाँ असमानताएं हैं।
* **डेटा विश्लेषण**। डेटा वितरण को समझने और ऐसे संभावित पूर्वाग्रह की पहचान करने के लिए जो निष्पक्षता, समावेशन और विश्वसनीयता से संबंधित समस्याएँ पैदा कर सकता है।
* **मॉडल व्याख्यात्मकता**। यह समझने के लिए कि मॉडल के पूर्वानुमानों को क्या प्रभावित करता है। यह मॉडल के व्यवहार को समझाने में मदद करता है, जो पारदर्शिता और जवाबदेही के लिए महत्वपूर्ण है।
## 🚀 चुनौती
हानियों को पहली जगह में पेश होने से रोकने के लिए, हमें:
## 🚀 चुनौती
हानियों को शुरू में ही रोकने के लिए, हमें:
- सिस्टम पर काम करने वाले लोगों में पृष्ठभूमि और दृष्टिकोण की विविधता होनी चाहिए।
- ऐसे डेटासेट में निवेश करना चाहिए जो हमारे समाज की विविधता को दर्शाते हों।
- मशीन लर्निंग जीवनचक्र के दौरान जिम्मेदार AI का पता लगाने और सुधारने के लिए बेहतर तरीकों का विकास करना चाहिए।
- सिस्टम पर काम करने वाले लोगों के बीच पृष्ठभूमि और दृष्टिकोण में विविधता होनी चाहिए।
- ऐसे डेटासेट्स में निवेश करें जो हमारे समाज की विविधता को दर्शाते हों।
- मशीन लर्निंग जीवनचक्र के दौरान जिम्मेदार AI के किसी भी उल्लंघन का पता लगाने और सुधारने के लिए बेहतर विधियाँ विकसित करें।
उन वास्तविक जीवन परिदृश्यों के बारे में सोचें जहां मॉडल की अविश्वसनीयता मॉडल-निर्माण और उपयोग में स्पष्ट है। हमें और क्या विचार करना चाहिए?
वास्तविक जीवन के परिदृश्यों के बारे में सोचें जहाँ मॉडल की अविश्वसनीयता मॉडल निर्माण और उपयोग में स्पष्ट हो। हमें और क्या विचार करना चाहिए?
## [पाठ के बाद का क्विज़](https://ff-quizzes.netlify.app/en/ml/)
इस पाठ में, आपने मशीन लर्निंग में निष्पक्षता और असमानता की अवधारणाओं की कुछ मूल बातें सीखी हैं।
इस कार्यशाला को देखें ताकि विषयों को गहराई से समझा जा सके:
इस पाठ में, आपने मशीन लर्निंग में निष्पक्षता और अन्याय के कुछ मूलभूत सिद्धांतों के बारे में सीखा है।
इन विषयों में गहराई से जाने के लिए इस कार्यशाला को देखें:
- जिम्मेदार AI की खोज में: सिद्धांतों को व्यवहार में लाने पर Besmira Nushi, Mehrnoosh Sameki और Amit Sharma द्वारा प्रस्तुति
- जिम्मेदार एआई के प्रयास में: सिद्धांतों को अभ्यास में लाना, लेखक: बेस्मिरा नूशी, मेहरनूश सामेकी और अमित शर्मा
[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: जिम्मेदार AI बनाने के लिए एक ओपन-सोर्स फ्रेमवर्क")
[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: An open-source framework for building responsible AI")
> 🎥 ऊपर दी गई छवि पर क्लिक करें वीडियो के लिए: RAI Toolbox: जिम्मेदार AI बनाने के लिए एक ओपन-सोर्स फ्रेमवर्क, Besmira Nushi, Mehrnoosh Sameki और Amit Sharma द्वारा
> 🎥 वीडियो के लिए ऊपर दिए गए चित्र पर क्लिक करें: RAI Toolbox: बेस्मिरा नूशी, मेहरनूश सामेकी, और अमित शर्मा द्वारा जिम्मेदार एआई के लिए एक ओपन-सोर्स फ्रेमवर्क
साथ ही पढ़ें:
साथ ही, पढ़ें:
- Microsoft का RAI संसाधन केंद्र: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- माइक्रोसॉफ्ट का RAI संसाधन केंद्र: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Microsoft का FATE अनुसंधान समूह: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
- माइक्रोसॉफ्ट का FATE अनुसंधान समूह: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
RAI Toolbox:
RAI टूलबॉक्स:
- [Responsible AI Toolbox GitHub रिपॉजिटरी](https://github.com/microsoft/responsible-ai-toolbox)
- [Responsible AI Toolbox GitHub repository](https://github.com/microsoft/responsible-ai-toolbox)
Azure Machine Learning के उपकरणों के बारे में पढ़ें जो निष्पक्षता सुनिश्चित करते हैं:
निष्पक्षता सुनिश्चित करने के लिए Azure Machine Learning के उपकरणों के बारे में पढ़ें:
यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**अस्वीकरण**:
इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
इन चार पाठों में, आप सीखेंगे कि रिग्रेशन मॉडल्स कैसे बनाए जाते हैं। हम जल्द ही चर्चा करेंगे कि इनका उपयोग किस लिए किया जाता है। लेकिन कुछ भी शुरू करने से पहले, सुनिश्चित करें कि आपके पास सही उपकरण हैं ताकि आप प्रक्रिया शुरू कर सकें!
इन चार पाठों में, आप सीखेंगे कि रिग्रेशन मॉडल कैसे बनाएं। हम थोड़ी देर में चर्चा करेंगे कि ये क्या हैं। लेकिन इससे पहले कि आप कुछ भी करें, सुनिश्चित करें कि आपके पास प्रक्रिया शुरू करने के लिए सही उपकरण हैं!
इस पाठ में, आप सीखेंगे:
इस पाठ में, आप सीखेंगे कि कैसे:
- अपने कंप्यूटर को स्थानीय मशीन लर्निंग कार्यों के लिए कॉन्फ़िगर करना।
- Jupyter नोटबुक्स के साथ काम करना।
- Scikit-learn का उपयोग करना, जिसमें इंस्टॉलेशन शामिल है।
- एक हैंड्स-ऑन अभ्यास के साथ लीनियर रिग्रेशन का अन्वेषण करना।
- अपने कंप्यूटर को स्थानीय मशीन लर्निंग कार्यों के लिए कॉन्फ़िगर करें।
- जुपिटर नोटबुक्स के साथ काम करें।
- साइकीट-लर्न का उपयोग करें, इंस्टॉलेशन सहित।
- एक हैंड्स-ऑन अभ्यास के साथ लीनियर रिग्रेशन का अन्वेषण करें।
## इंस्टॉलेशन और कॉन्फ़िगरेशन
[](https://youtu.be/-DfeD2k2Kj0 "मशीन लर्निंग के लिए शुरुआती - अपने उपकरण सेटअप करें")
[](https://youtu.be/-DfeD2k2Kj0 "शुरुआती के लिए एमएल - मशीन लर्निंग मॉडल बनाने के लिए अपने उपकरण तैयार करें")
> 🎥 ऊपर दी गई छवि पर क्लिक करें ताकि आप अपने कंप्यूटर को मशीन लर्निंग के लिए कॉन्फ़िगर करने की प्रक्रिया देख सकें।
> 🎥 ऊपर दिए गए चित्र पर क्लिक करें एक लघु वीडियो के लिए, जो आपके कंप्यूटर को एमएल के लिए कॉन्फ़िगर करने की प्रक्रिया दिखाता है।
1. **Python इंस्टॉल करें**। सुनिश्चित करें कि [Python](https://www.python.org/downloads/) आपके कंप्यूटर पर इंस्टॉल है। आप डेटा साइंस और मशीन लर्निंग कार्यों के लिए Python का उपयोग करेंगे। अधिकांश कंप्यूटर सिस्टम में पहले से ही Python इंस्टॉल होता है। कुछ उपयोगकर्ताओं के लिए सेटअप को आसान बनाने के लिए उपयोगी [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) भी उपलब्ध हैं।
1. **पायथन इंस्टॉल करें**। सुनिश्चित करें कि [पायथन](https://www.python.org/downloads/) आपके कंप्यूटर पर इंस्टॉल है। आप कई डेटा साइंस और मशीन लर्निंग कार्यों के लिए पायथन का उपयोग करेंगे। अधिकांश कंप्यूटर सिस्टम में पहले से पायथन इंस्टॉल होता है। कुछ उपयोगकर्ताओं के लिए सेटअप को आसान बनाने के लिए उपयोगी [पायथन कोडिंग पैक्स](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) भी उपलब्ध हैं।
हालांकि, Python के कुछ उपयोगों के लिए सॉफ़्टवेयर का एक संस्करण आवश्यक होता है, जबकि अन्य के लिए अलग संस्करण। इस कारण से, [वर्चुअल एनवायरनमेंट](https://docs.python.org/3/library/venv.html) में काम करना उपयोगी होता है।
पायथन के कुछ उपयोग एक सॉफ्टवेयर संस्करण की मांग करते हैं, जबकि दूसरे उपयोग किसी भिन्न संस्करण की। इसलिए, एक [वर्चुअल एन्वायरनमेंट](https://docs.python.org/3/library/venv.html) के भीतर काम करना उपयोगी होता है।
2. **Visual Studio Code इंस्टॉल करें**। सुनिश्चित करें कि आपके कंप्यूटर पर Visual Studio Code इंस्टॉल है। [Visual Studio Code इंस्टॉल करने](https://code.visualstudio.com/) के लिए इन निर्देशों का पालन करें। इस पाठ्यक्रम में आप Visual Studio Code में Python का उपयोग करेंगे, इसलिए आप [Python विकास के लिए Visual Studio Code को कॉन्फ़िगर करने](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) के बारे में जानकारी प्राप्त कर सकते हैं।
2. **विज़ुअल स्टूडियो कोड इंस्टॉल करें**। सुनिश्चित करें कि आपके कंप्यूटर पर विज़ुअल स्टूडियो कोड इंस्टॉल है। बुनियादी इंस्टॉलेशन के लिए इन निर्देशों का पालन करें [विज़ुअल स्टूडियो कोड इंस्टॉल करें](https://code.visualstudio.com/)। इस पाठ्यक्रम में आप विज़ुअल स्टूडियो कोड में पायथन का उपयोग करेंगे, इसलिए आप सीख सकते हैं कि कैसे [विज़ुअल स्टूडियो कोड को पायथन विकास के लिए कॉन्फ़िगर करें](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott)।
> Python के साथ सहज होने के लिए इस [Learn modules](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) संग्रह को देखें।
> इस संग्रह के माध्यम से काम करके पायथन के साथ सहज हो जाएं [लर्न मॉड्यूल्स](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
>
> [](https://youtu.be/yyQM70vi7V8 "Python को Visual Studio Code के साथ सेटअप करें")
> [](https://youtu.be/yyQM70vi7V8 "विज़ुअल स्टूडियो कोड के साथ पायथन सेटअप करें")
>
> 🎥 ऊपर दी गई छवि पर क्लिक करें ताकि आप Python को VS Code में उपयोग करने की प्रक्रिया देख सकें।
> 🎥 ऊपर दिए गए चित्र पर क्लिक करें एक वीडियो के लिए: VS कोड में पायथन का उपयोग करना।
3. **Scikit-learn इंस्टॉल करें**, [इन निर्देशों](https://scikit-learn.org/stable/install.html) का पालन करके। चूंकि आपको Python 3 का उपयोग सुनिश्चित करना है, इसलिए वर्चुअल एनवायरनमेंट का उपयोग करने की सिफारिश की जाती है। ध्यान दें, यदि आप इस लाइब्रेरी को M1 Mac पर इंस्टॉल कर रहे हैं, तो ऊपर दिए गए पृष्ठ पर विशेष निर्देश हैं।
3. **साइकीट-लर्न इंस्टॉल करें**, इन [निर्देशों](https://scikit-learn.org/stable/install.html) का पालन करते हुए। चूंकि आपको पायथन 3 का उपयोग सुनिश्चित करना है, इसलिए वर्चुअल एन्वायरनमेंट का उपयोग करने की सलाह दी जाती है। ध्यान दें, अगर आप इसे M1 Mac पर इंस्टॉल कर रहे हैं, तो ऊपर दिए लिंक पर विशेष निर्देश हैं।
आप **नोटबुक्स** का उपयोग करके Python कोड विकसित करेंगे और मशीन लर्निंग मॉडल बनाएंगे। यह प्रकार की फाइल डेटा वैज्ञानिकों के लिए एक सामान्य उपकरण है, और इन्हें उनके `.ipynb` एक्सटेंशन से पहचाना जा सकता है।
आप **नोटबुक्स** का उपयोग करेंगे अपने पायथन कोड का विकास करने और मशीन लर्निंग मॉडल बनाने के लिए। इस प्रकार की फाइल डेटा वैज्ञानिकों के लिए एक सामान्य उपकरण है, और इन्हें उनकी प्रत्यय या एक्सटेंशन`.ipynb` से पहचाना जा सकता है।
नोटबुक्स एक इंटरैक्टिव वातावरण हैं जो डेवलपर को कोड लिखने और उसके आसपास नोट्स और दस्तावेज़ जोड़ने की अनुमति देते हैं, जो शोध-उन्मुख परियोजनाओं के लिए काफी उपयोगी है।
नोटबुक्स एक इंटरैक्टिव वातावरण हैं जो डेवलपर को कोड लिखने के साथ ही उसके आसपास नोट्स और दस्तावेज़ भी जोड़ने की अनुमति देते हैं, जो प्रयोगात्मक या शोध-उन्मुख परियोजनाओं के लिए बहुत सहायक होता है।
[](https://youtu.be/7E-jC8FLA2E "मशीन लर्निंग के लिए शुरुआती - Jupyter नोटबुक्स सेटअप करें")
[](https://youtu.be/7E-jC8FLA2E "शुरुआती के लिए एमएल - रिग्रेशन मॉडल बनाने के लिए जुपिटर नोटबुक सेटअप करें")
> 🎥 ऊपर दी गई छवि पर क्लिक करें ताकि आप इस अभ्यास की प्रक्रिया देख सकें।
> 🎥 ऊपर दिए गए चित्र पर क्लिक करें इस अभ्यास के माध्यम से एक लघु वीडियो के लिए।
### अभ्यास - नोटबुक के साथ काम करें
### अभ्यास - एक नोटबुक के साथ काम करें
इस फ़ोल्डर में, आपको _notebook.ipynb_ नामक फाइल मिलेगी।
इस फ़ोल्डर में, आपको फाइल _notebook.ipynb_ मिलेगी।
1. _notebook.ipynb_ को Visual Studio Code में खोलें।
1. विज़ुअल स्टूडियो कोड में _notebook.ipynb_ खोलें।
एक Jupyter सर्वर Python 3+ के साथ शुरू होगा। आप नोटबुक के उन क्षेत्रों को पाएंगे जिन्हें `run` किया जा सकता है, यानी कोड के टुकड़े। आप कोड ब्लॉक को चलाने के लिए उस आइकन का चयन कर सकते हैं जो प्ले बटन जैसा दिखता है।
एक जुपिटर सर्वर पायथन 3+ के साथ शुरू हो जाएगा। आपको नोटबुक के ऐसे भाग मिलेंगे जिन्हें `run` किया जा सकता है, कोड के टुकड़े। आप किसी कोड ब्लॉक को चलाने के लिए उस आइकन का चयन कर सकते हैं जो प्ले बटन जैसा दिखता है।
2. `md` आइकन का चयन करें और थोड़ा मार्कडाउन जोड़ें, और निम्नलिखित टेक्स्ट लिखें**# Welcome to your notebook**।
1. `md` आइकन चुनें और थोड़ा मार्कडाउन जोड़ें, साथ ही निम्नलिखित टेक्स्ट **# Welcome to your notebook**।
इसके बाद, कुछ Python कोड जोड़ें।
इसके बाद कुछ पायथन कोड जोड़ें।
3. कोड ब्लॉक में **print('hello notebook')** टाइप करें।
4. कोड चलाने के लिए तीर का चयन करें।
1. कोड ब्लॉक में टाइप करें **print('hello notebook')**।
1. कोड चलाने के लिए ऊपर तीर दबाएं।
आपको प्रिंट किया गया कथन दिखाई देना चाहिए:
आपको मुद्रित कथन दिखाई देना चाहिए:
```output
hello notebook
```


आप अपने कोड के साथ टिप्पणियां जोड़ सकते हैं ताकि नोटबुक को स्वयं दस्तावेज़ित किया जा सके।
आप अपने कोड के बीच टिप्पणियां (comments) जोड़ सकते हैं ताकि नोटबुक स्वयं दस्तावेज़ हो जाए।
✅ एक मिनट के लिए सोचें कि एक वेब डेवलपर का कार्य वातावरण डेटा वैज्ञानिक के कार्य वातावरण से कितना अलग है।
✅ एक मिनट सोचिए, एक वेब डेवलपर का कार्य वातावरण डेटा वैज्ञानिक के कार्य वातावरण से कितना भिन्न होता है।
## Scikit-learn के साथ शुरुआत
## साइकीट-लर्न के साथ शुरुआत और चलाना
अब जब Python आपके स्थानीय वातावरण में सेटअप हो गया है, और आप Jupyter नोटबुक्स के साथ सहज हैं, तो आइए Scikit-learn के साथ भी उतना ही सहज हो जाएं। (इसे `sci` के रूप में उच्चारित करें, जैसे `science`)। Scikit-learn आपको मशीन लर्निंग कार्यों को करने में मदद करने के लिए एक [विस्तृत API](https://scikit-learn.org/stable/modules/classes.html#api-ref) प्रदान करता है।
अब जब पाइथन आपके लोकल वातावरण में सेटअप हो चुका है, और आप जुपिटर नोटबुक्स के साथ आरामदायक हैं, आइए साइकीट-लर्न (उच्चारण: `sci` जैसा `science`) के साथ भी सहज हो जाएं। साइकीट-लर्न एक [विस्तृत API](https://scikit-learn.org/stable/modules/classes.html#api-ref) प्रदान करता है जो आपको एमएल कार्य करने में मदद करता है।
उनकी [वेबसाइट](https://scikit-learn.org/stable/getting_started.html) के अनुसार, "Scikit-learn एक ओपन सोर्स मशीन लर्निंग लाइब्रेरी है जो सुपरवाइज्ड और अनसुपरवाइज्ड लर्निंग का समर्थन करती है। यह मॉडल फिटिंग, डेटा प्रीप्रोसेसिंग, मॉडल चयन और मूल्यांकन, और कई अन्य उपयोगिताओं के लिए विभिन्न उपकरण भी प्रदान करती है।"
उनकी [वेबसाइट](https://scikit-learn.org/stable/getting_started.html) के अनुसार, "साइकीट-लर्न एक ओपन सोर्स मशीन लर्निंग लाइब्रेरी है जो सुपरवाइज्ड और अनसुपरवाइज्ड लर्निंग का समर्थन करती है। यह मॉडल फिटिंग, डेटा प्रीप्रोसेसिंग, मॉडल चयन और मूल्यांकन, और कई अन्य उपयोगिताओं के लिए विभिन्न टूल भी प्रदान करता है।"
इस पाठ्यक्रम में, आप Scikit-learn और अन्य उपकरणों का उपयोग करके मशीन लर्निंग मॉडल बनाएंगे ताकि 'पारंपरिक मशीन लर्निंग' कार्यों को अंजाम दिया जा सके। हमने जानबूझकर न्यूरल नेटवर्क्स और डीप लर्निंग को शामिल नहीं किया है, क्योंकि इन्हें हमारे आगामी 'AI for Beginners' पाठ्यक्रम में बेहतर तरीके से कवर किया जाएगा।
इस कोर्स में, आप मशीन लर्निंग मॉडल बनाने के लिए साइकीट-लर्न और अन्य टूल का उपयोग करेंगे, जिन्हें हम 'पारंपरिक मशीन लर्निंग' कार्य कहते हैं। हमने जानबूझकर न्यूरल नेटवर्क और डीप लर्निंग से बचाव किया है क्योंकि वे हमारे आगामी 'बिगिनर्स के लिए एआई' पाठ्यक्रम में बेहतर कवर किए जाएंगे।
Scikit-learn मॉडल्स को बनाना और उनका मूल्यांकन करना आसान बनाता है। यह मुख्य रूप से संख्यात्मक डेटा का उपयोग करता है और सीखने के उपकरण के रूप में उपयोग के लिए कई तैयार किए गए डेटासेट्स प्रदान करता है। इसमें छात्रों के लिए आज़माने के लिए प्री-बिल्ट मॉडल्स भी शामिल हैं। आइए पहले Scikit-learn के साथ प्रीपैकेज्ड डेटा को लोड करने और एक बिल्ट-इन एस्टीमेटर का उपयोग करके पहला मशीन लर्निंग मॉडल बनाने की प्रक्रिया का अन्वेषण करें।
साइकीट-लर्न मॉडल बनाने और उनका मूल्यांकन करने को सरल बनाता है। यह मुख्य रूप से संख्यात्मक डेटा का उपयोग करता है और सीखने के लिए कुछ पहले से बने डेटासेट भी शामिल करता है। इसमें विद्यार्थियों के प्रयोग के लिए पूर्वनिर्मित मॉडल भी शामिल हैं। आइए पहले कुछ बुनियादी डेटा के साथ प्रीपैकेज्ड डेटा लोड करने और एक अंतर्निर्मित एस्टीमेटर का उपयोग करके पहला ML मॉडल बनाने की प्रक्रिया देखें।
## अभ्यास - आपका पहला Scikit-learn नोटबुक
## अभ्यास - आपका पहला साइकीट-लर्न नोटबुक
> यह ट्यूटोरियल Scikit-learn की वेबसाइट पर [लीनियर रिग्रेशन उदाहरण](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) से प्रेरित है।
> यह ट्यूटोरियल साइकीट-लर्न की वेबसाइट पर [लीनियर रिग्रेशन उदाहरण](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) से प्रेरित है।
[](https://youtu.be/2xkXL5EUpS0 "मशीन लर्निंग के लिए शुरुआती - Python में आपका पहला लीनियर रिग्रेशन प्रोजेक्ट")
> 🎥 ऊपर दी गई छवि पर क्लिक करें ताकि आप इस अभ्यास की प्रक्रिया देख सकें।
[](https://youtu.be/2xkXL5EUpS0 "शुरुआती के लिए एमएल - पाइथन में आपका पहला लीनियर रिग्रेशन प्रोजेक्ट")
इस पाठ से संबंधित _notebook.ipynb_ फाइल में, सभी सेल्स को 'trash can' आइकन दबाकर साफ़ करें।
> 🎥 ऊपर दिए गए चित्र पर क्लिक करें इस अभ्यास के माध्यम से एक लघु वीडियो के लिए।
इस सेक्शन में, आप Scikit-learn में सीखने के उद्देश्यों के लिए बनाए गए एक छोटे से डायबिटीज डेटासेट के साथ काम करेंगे। कल्पना करें कि आप डायबिटीज रोगियों के लिए एक उपचार का परीक्षण करना चाहते हैं। मशीन लर्निंग मॉडल्स आपको यह निर्धारित करने में मदद कर सकते हैं कि कौन से रोगी उपचार के लिए बेहतर प्रतिक्रिया देंगे, चर के संयोजनों के आधार पर। यहां तक कि एक बहुत ही बुनियादी रिग्रेशन मॉडल, जब विज़ुअलाइज़ किया जाता है, तो चर के बारे में जानकारी दिखा सकता है जो आपको अपने सैद्धांतिक क्लिनिकल ट्रायल्स को व्यवस्थित करने में मदद कर सकता है।
_notebook.ipynb_ फ़ाइल में, इस पाठ से संबंधित, सभी सेल को 'ट्रैश कैन' आइकन दबाकर साफ़ करें।
✅ रिग्रेशन विधियों के कई प्रकार होते हैं, और आप कौन सा चुनते हैं यह उस उत्तर पर निर्भर करता है जिसे आप ढूंढ रहे हैं। यदि आप किसी दिए गए उम्र के व्यक्ति की संभावित ऊंचाई की भविष्यवाणी करना चाहते हैं, तो आप लीनियर रिग्रेशन का उपयोग करेंगे, क्योंकि आप एक **संख्यात्मक मान** की तलाश कर रहे हैं। यदि आप यह पता लगाना चाहते हैं कि किसी प्रकार के भोजन को शाकाहारी माना जाना चाहिए या नहीं, तो आप एक **श्रेणी असाइनमेंट** की तलाश कर रहे हैं, इसलिए आप लॉजिस्टिक रिग्रेशन का उपयोग करेंगे। आप बाद में लॉजिस्टिक रिग्रेशन के बारे में अधिक जानेंगे। डेटा से कुछ प्रश्न पूछने के बारे में सोचें, और इनमें से कौन सी विधि अधिक उपयुक्त होगी।
इस अनुभाग में, आप स्किकट-लर्न में सीखने के उद्देश्य से बने मधुमेह (डायबिटीज) के एक छोटे डेटासेट के साथ काम करेंगे। कल्पना करें कि आप मधुमेह रोगियों के लिए एक उपचार जांचना चाहते हैं। मशीन लर्निंग मॉडल मदद कर सकते हैं यह निर्धारित करने में कि कौन से रोगी उपचार पर बेहतर प्रतिक्रिया देंगे, विभिन्न वेरिएबल्स के संयोजन के आधार पर। एक बहुत ही बुनियादी रिग्रेशन मॉडल भी, जब विज़ुअलाइज़ किया जाए, तो उन वेरिएबल्स के बारे में जानकारी दे सकता है जो चिकित्सीय परीक्षणों की योजना बनाने में मदद कर सकते हैं।
✅ कई प्रकार के रिग्रेशन तरीकों होते हैं, और कौन सा चुनना है यह आपके प्रश्न के उत्तर पर निर्भर करता है। यदि आप किसी व्यक्ति की उम्र के अनुसार उसकी संभावित ऊंचाई का पूर्वानुमान लगाना चाहते हैं, तो आप लीनियर रिग्रेशन का उपयोग करेंगे, क्योंकि आप एक **संख्यात्मक मान** तलाश रहे हैं। यदि आप पता लगाना चाहते हैं कि कोई भोजन शाकाहारी (वेजन) माना जाना चाहिए या नहीं, तो आप **श्रेणी निर्धारण** तलाश रहे हैं इसलिए आप लॉजिस्टिक रिग्रेशन का उपयोग करेंगे। आप लॉजिस्टिक रिग्रेशन के बारे में बाद में अधिक जानेंगे। डेटा से पूछे जाने वाले कुछ प्रश्नों के बारे में सोचें और कौन सा तरीका अधिक उपयुक्त होगा।
आइए इस कार्य को शुरू करें।
### लाइब्रेरीज़ इंपोर्ट करें
### पुस्तकालयों का इम्पोर्ट करें
इस कार्य के लिए हम कुछ लाइब्रेरीज़ इंपोर्ट करेंगे:
इस कार्य के लिए हम कुछ पुस्तकालय इम्पोर्ट करेंगे:
- **matplotlib**। यह एक उपयोगी [ग्राफिंग टूल](https://matplotlib.org/) है और हम इसका उपयोग लाइन प्लॉट बनाने के लिए करेंगे।
- **numpy**। [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) Python में संख्यात्मक डेटा को संभालने के लिए एक उपयोगी लाइब्रेरी है।
- **sklearn**। यह [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) लाइब्रेरी है।
- **matplotlib**। यह एक उपयोगी [ग्राफिंग टूल](https://matplotlib.org/) है और हम इसे लाइन प्लॉट बनाने के लिए उपयोग करेंगे।
- **numpy**। [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) पाइथन में संख्यात्मक डेटा संभालने के लिए उपयोगी पुस्तकालय है।
- **sklearn**। यह [साइकीट-लर्न](https://scikit-learn.org/stable/user_guide.html) पुस्तकालय है।
अपने कार्यों में मदद के लिए कुछ लाइब्रेरीज़ इंपोर्ट करें।
अपने कार्यों में सहायता के लिए कुछ लाइब्रेरी आयात करें।
1. निम्नलिखित कोड टाइप करके इंपोर्ट्स जोड़ें:
1. निम्न कोड टाइप करके आयात जोड़ें:
```python
import matplotlib.pyplot as plt
@ -122,26 +123,26 @@ Scikit-learn मॉडल्स को बनाना और उनका म
from sklearn import datasets, linear_model, model_selection
```
ऊपर आप `matplotlib`, `numpy` और `sklearn` से `datasets`, `linear_model` और `model_selection`इंपोर्ट कर रहे हैं। `model_selection` का उपयोग डेटा को ट्रेनिंग और टेस्ट सेट्स में विभाजित करने के लिए किया जाता है।
ऊपर आप `matplotlib`, `numpy`आयात कर रहे हैं और `sklearn` से `datasets`, `linear_model` और `model_selection`आयात कर रहे हैं। `model_selection` का उपयोग डेटा को प्रशिक्षण और परीक्षण सेटों में विभाजित करने के लिए किया जाता है।
### डायबिटीज डेटासेट
### मधुमेह डेटासेट
बिल्ट-इन [डायबिटीज डेटासेट](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) में डायबिटीज से संबंधित 442 नमूनों का डेटा है, जिसमें 10 फीचर वेरिएबल्स शामिल हैं, जिनमें से कुछ हैं:
अंतर्निर्मित [मधुमेह डेटासेट](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) में मधुमेह से संबंधित 442 नमूने होते हैं, जिनमें 10 फीचर चर होते हैं, जिनमें से कुछ हैं:
- age: उम्र वर्षों में
- उम्र: वर्षों में उम्र
- bmi: बॉडी मास इंडेक्स
- bp: औसत रक्तचाप
- s1 tc: टी-सेल्स (सफेद रक्त कोशिकाओं का एक प्रकार)
- s1 tc: T-सेल्स (सफेद रक्त कोशिकाओं का एक प्रकार)
✅ इस डेटासेट में 'sex' की अवधारणा एक फीचर वेरिएबल के रूप में शामिल है, जो डायबिटीज के शोध के लिए महत्वपूर्ण है। कई मेडिकल डेटासेट्स में इस प्रकार का बाइनरी वर्गीकरण शामिल होता है। सोचें कि इस प्रकार की श्रेणियां आबादी के कुछ हिस्सों को उपचार से कैसे बाहर कर सकती हैं।
✅ इस डेटासेट में 'लिंग' का विचार एक फीचर चर के रूप में शामिल है, जो मधुमेह अनुसंधान के लिए महत्वपूर्ण है। कई चिकित्सा डेटासेट में इस प्रकार की द्विआधारी श्रेणीकरण शामिल होती है। इस तरह की श्रेणीबद्धता इसे ध्यान में रखते हुए सोचें कि कैसे यह जनसंख्या के कुछ हिस्सों को उपचारों से बाहर कर सकती है।
अब, X और y डेटा लोड करें।
> 🎓 याद रखें, यह सुपरवाइज्ड लर्निंग है, और हमें एक नामित 'y' टारगेट की आवश्यकता है।
> 🎓 याद रखें, यह सुपरवाइज्ड लर्निंग है, और हमें 'y' टारगेट चाहिए।
एक नए कोड सेल में, डायबिटीज डेटासेट को `load_diabetes()` कॉल करके लोड करें। इनपुट `return_X_y=True` संकेत देता है कि `X` एक डेटा मैट्रिक्स होगा, और `y` रिग्रेशन टारगेट होगा।
नई कोड सेल में, मधुमेह डेटासेट को `load_diabetes()` कॉल करके लोड करें। इनपुट `return_X_y=True` से संकेत मिलता है कि `X` डेटा मैट्रिक्स होगा, और `y` रिग्रेशन टारगेट होगा।
1. डेटा मैट्रिक्स के आकार और इसके पहले तत्व को दिखाने के लिए कुछ प्रिंट कमांड जोड़ें:
1. डेटा मैट्रिक्स के आकार और उसके पहले तत्व को दिखाने के लिए कुछ प्रिंट कमांड जोड़ें:
```python
X, y = datasets.load_diabetes(return_X_y=True)
@ -149,9 +150,9 @@ Scikit-learn मॉडल्स को बनाना और उनका म
print(X[0])
```
जो प्रतिक्रिया आपको मिल रही है, वह एक ट्यूपल है। आप जो कर रहे हैं वह ट्यूपल के पहले दो मानों को क्रमशः `X` और `y` को असाइन करना है। [ट्यूपल्स](https://wikipedia.org/wiki/Tuple) के बारे में अधिक जानें।
आपको जो प्रतिक्रिया मिल रही है वह एक टपल है। आप टपल के पहले दो मानों को क्रमशः `X` और `y` को सौंप रहे हैं। टपल के बारे में अधिक जानें [यहां](https://wikipedia.org/wiki/Tuple)।
आप देख सकते हैं कि इस डेटा में 442 आइटम हैं जो 10 तत्वों के एरे में आकारित हैं:
आप देख सकते हैं कि इस डेटा में 442 आइटम हैं जो 10 तत्वों वाले एरे में आकारित हैं:
```text
(442, 10)
@ -159,39 +160,39 @@ Scikit-learn मॉडल्स को बनाना और उनका म
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
✅ डेटा और रिग्रेशन टारगेट के बीच संबंध के बारे में सोचें। लीनियर रिग्रेशन फीचर X और टारगेट वेरिएबल y के बीच संबंधों की भविष्यवाणी करता है। क्या आप डायबिटीज डेटासेट के लिए [टारगेट](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) को दस्तावेज़ में पा सकते हैं? यह डेटासेट क्या प्रदर्शित कर रहा है, टारगेट को देखते हुए?
✅ डेटा और रिग्रेशन टारगेट के बीच संबंध के बारे में थोड़ा सोचें। लीनियर रिग्रेशन फीचर X और टारगेट वेरिएबल y के बीच संबंध की भविष्यवाणी करता है। क्या आप मधुमेह डेटासेट के लिए [टारगेट](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) को डॉक्यूमेंटेशन में देख सकते हैं? यह डेटासेट उस टारगेट के आधार पर क्या प्रदर्शित कर रहा है?
2. इसके बाद, इस डेटासेट के एक हिस्से को प्लॉट करने के लिए चुनें, डेटासेट के तीसरे कॉलम का चयन करके। आप `:` ऑपरेटर का उपयोग करके सभी पंक्तियों का चयन कर सकते हैं, और फिर इंडेक्स (2) का उपयोग करके तीसरे कॉलम का चयन कर सकते हैं। आप डेटा को 2D एरे में आकार देने के लिए `reshape(n_rows, n_columns)` का उपयोग कर सकते हैं - जैसा कि प्लॉटिंग के लिए आवश्यक है। यदि पैरामीटर में से एक -1 है, तो संबंधित आयाम स्वचालित रूप से गणना किया जाता है।
2. अगला, इस डेटासेट का एक हिस्सा प्लॉट करने के लिए 3री कॉलम चुनें। आप `:` ऑपरेटर का उपयोग करके सभी पंक्तियां चुन सकते हैं, फिर इंडेक्स (2) द्वारा तीसरी कॉलम चुन सकते हैं। इसके अलावा, प्लॉटिंग के लिए आवश्यक 2D एरे में डेटा को `reshape(n_rows, n_columns)` का उपयोग करके पुनः आकारित कर सकते हैं। यदि कोई पैरामीटर -1 है, तो संबंधित आयाम स्वचालित रूप से गणना किया जाएगा।
```python
X = X[:, 2]
X = X.reshape((-1,1))
```
✅ किसी भी समय, डेटा का आकार जांचने के लिए इसे प्रिंट करें।
✅ किसी भी समय, डेटा का आकार जांचने के लिए प्रिंट करें।
3. अब जब आपके पास डेटा प्लॉट करने के लिए तैयार है, तो आप देख सकते हैं कि क्या मशीन इस डेटासेट में संख्याओं के बीच एक तार्किक विभाजन निर्धारित करने में मदद कर सकती है। ऐसा करने के लिए, आपको डेटा (X) और टारगेट (y) दोनों को टेस्ट और ट्रेनिंग सेट्स में विभाजित करना होगा। Scikit-learn में इसे करने का एक सीधा तरीका है; आप अपने टेस्ट डेटा को एक दिए गए बिंदु पर विभाजित कर सकते हैं।
3. अब जब आपके पास प्लॉट करने के लिए डेटा तैयार है, तो देखें कि क्या मशीन इस डेटासेट के नंबरों के बीच तार्किक विभाजन करने में मदद कर सकती है। इसके लिए, आपको दोनों डेटा (X) और टारगेट (y) को परीक्षण और प्रशिक्षण सेटों में विभाजित करना होगा। साइकीट-लर्न के पास इसे करने का सरल तरीका है; आप अपने परीक्षण डेटा को एक दिए गए बिंदु पर विभाजित कर सकते हैं।
```python
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
```
4. अब आप अपने मॉडल को ट्रेन करने के लिए तैयार हैं! लीनियर रिग्रेशन मॉडल लोड करें और इसे अपने X और y ट्रेनिंग सेट्स के साथ `model.fit()` का उपयोग करके ट्रेन करें:
4. अब आप अपने मॉडल को प्रशिक्षित करने के लिए तैयार हैं! लाइनियर रिग्रेशन मॉडल लोड करें और अपने X और y प्रशिक्षण सेट का उपयोग करके `model.fit()` के साथ प्रशिक्षित करें:
```python
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
```
✅ `model.fit()` एक फ़ंक्शन है जिसे आप TensorFlow जैसी कई ML लाइब्रेरीज़ में देखेंगे।
✅ `model.fit()` एक फ़ंक्शन है जिसे आप कई एमएल लाइब्रेरियों जैसे TensorFlow में भी देखेंगे।
5. फिर, टेस्ट डेटा का उपयोग करके एक प्रेडिक्शन बनाएं, `predict()` फ़ंक्शन का उपयोग करके। इसका उपयोग डेटा समूहों के बीच लाइन खींचने के लिए किया जाएगा।
5. फिर, परीक्षण डेटा का उपयोग करके भविष्यवाणी बनाएं, `predict()` फ़ंक्शन का उपयोग करके। इसका उपयोग मॉडल के डेटा समूहों के बीच लाइन खींचने के लिए किया जाएगा।
```python
y_pred = model.predict(X_test)
```
6. अब डेटा को प्लॉट में दिखाने का समय है। Matplotlib इस कार्य के लिए एक बहुत उपयोगी टूल है। सभी X और y टेस्ट डेटा का एक स्कैटरप्लॉट बनाएं, और मॉडल के डेटा समूहों के बीच सबसे उपयुक्त स्थान पर एक लाइन खींचने के लिए प्रेडिक्शन का उपयोग करें।
6. अब डेटा को प्लॉट में दिखाने का समय है। मैटप्लॉटलिब इस कार्य के लिए एक बहुत उपयोगी उपकरण है। सभी X और y टेस्ट डेटा का एक स्कैटरप्लॉट बनाएं, और मॉडल के डेटा समूहों के बीच सबसे उपयुक्त जगह पर लाइन खींचने के लिए भविष्यवाणी का उपयोग करें।
```python
plt.scatter(X_test, y_test, color='black')
@ -202,29 +203,32 @@ Scikit-learn मॉडल्स को बनाना और उनका म
plt.show()
```

✅ यहां क्या हो रहा है, इस पर थोड़ा विचार करें। एक सीधी रेखा कई छोटे डेटा बिंदुओं के बीच से गुजर रही है, लेकिन यह वास्तव में क्या कर रही है? क्या आप देख सकते हैं कि इस रेखा का उपयोग करके आप यह अनुमान कैसे लगा सकते हैं कि एक नया, अनदेखा डेटा बिंदु प्लॉट के y अक्ष के संबंध में कहां फिट होगा? इस मॉडल के व्यावहारिक उपयोग को शब्दों में व्यक्त करने की कोशिश करें।

बधाई हो, आपने अपना पहला लीनियर रिग्रेशन मॉडल बनाया, इसके साथ एक भविष्यवाणी की, और इसे एक प्लॉट में प्रदर्शित किया!
✅ यहाँ जो हो रहा है उसके बारे में थोड़ा सोचें। एक सीधी रेखा कई छोटे डेटा बिंदुओं से होकर गुजर रही है, लेकिन यह वास्तव में क्या कर रही है? क्या आप देख सकते हैं कि आपको इस रेखा का उपयोग कैसे करना चाहिए ताकि यह अनुमान लगाया जा सके कि एक नया, अब तक न देखा गया डेटा पॉइंट प्लॉट के y अक्ष के सापेक्ष कहाँ फिट होना चाहिए? इस मॉडल के व्यावहारिक उपयोग को शब्दों में व्यक्त करने की कोशिश करें।
बधाई हो, आपने अपना पहला लीनियर रिग्रेशन मॉडल बनाया, इसके साथ एक पूर्वानुमान बनाया, और इसे एक प्लॉट में प्रदर्शित किया!
---
## 🚀चुनौती
इस डेटा सेट से एक अलग वेरिएबल को प्लॉट करें। संकेत: इस लाइन को एडिट करें: `X = X[:,2]`। इस डेटा सेट के टारगेट को देखते हुए, आप डायबिटीज के एक बीमारी के रूप में प्रगति के बारे में क्या पता लगा सकते हैं?
इस डेटासेट से एक अलग चर को प्लॉट करें। सलाह: इस लाइन को संपादित करें: `X = X[:,2]`। इस डेटासेट के लक्ष्य के आधार पर, आप मधुमेह को एक रोग के रूप में प्रगति के बारे में क्या खोजने में सक्षम हैं?
इस ट्यूटोरियल में, आपने सिंपल लीनियर रिग्रेशन के साथ काम किया, न कि यूनिवेरिएट या मल्टीपल लीनियर रिग्रेशन के साथ। इन विधियों के बीच के अंतर के बारे में थोड़ा पढ़ें, या [इस वीडियो](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) को देखें।
इस ट्यूटोरियल में, आपने सरल लीनियर रिग्रेशन के साथ काम किया, न कि एकविवरणीय या बहुविवरणीय लीनियर रिग्रेशन के साथ। इन तरीकों के बीच के अंतर के बारे में थोड़ा पढ़ें, या इस [वीडियो](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) को देखें।
रिग्रेशन की अवधारणा के बारे में अधिक पढ़ें और सोचें कि इस तकनीक द्वारा किस प्रकार के प्रश्नों का उत्तर दिया जा सकता है। अपनी समझ को गहरा करने के लिए यह [ट्यूटोरियल](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) लें।
रिग्रेशन की अवधारणा के बारे में अधिक पढ़ें और सोचें कि इस तकनीक से किस तरह के प्रश्नों का उत्तर दिया जा सकता है। अपनी समझ को गहरा करने के लिए यह [ट्यूटोरियल](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) लें।
## असाइनमेंट
[एक अलग डेटासेट](assignment.md)
[एक अलग डेटासेट](assignment.md)
---
**अस्वीकरण**:
यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**अस्वीकरण**:
इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
> ### [यह पाठ R में भी उपलब्ध है!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
> ### [यह पाठ R में उपलब्ध है!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
## परिचय
अब जब आपके पास Scikit-learn के साथ मशीन लर्निंग मॉडल बनाने के लिए आवश्यक टूल्स हैं, तो आप अपने डेटा से सवाल पूछने के लिए तैयार हैं। जब आप डेटा के साथ काम करते हैं और ML समाधान लागू करते हैं, तो सही सवाल पूछना बहुत महत्वपूर्ण है ताकि आप अपने डेटासेट की संभावनाओं को सही तरीके से समझ सकें।
अब जब आप Scikit-learn के साथ मशीन लर्निंग मॉडल निर्माण शुरू करने के लिए आवश्यक टूल्स के साथ तैयार हैं, तो आप अपने डेटा से प्रश्न पूछना शुरू करने के लिए तैयार हैं। डेटा के साथ काम करते समय और एमएल समाधान लागू करते समय, यह बहुत महत्वपूर्ण है कि सही प्रश्न पूछें ताकि आप अपने डेटासेट की संभावनाओं को सही तरीके से खोल सकें।
इस पाठ में, आप सीखेंगे:
- मॉडल बनाने के लिए अपने डेटा को कैसे तैयार करें।
- डेटा विज़ुअलाइज़ेशन के लिए Matplotlib का उपयोग कैसे करें।
- डेटा विज़ुअलाईज़ेशन के लिए Matplotlib का उपयोग कैसे करें।
- अधिक अभिव्यक्तिपूर्ण डेटा विज़ुअलाईज़ेशन के लिए Seaborn का उपयोग कैसे करें।
## अपने डेटा से सही सवाल पूछना
## अपने डेटा से सही प्रश्न पूछना
आपके द्वारा पूछे जाने वाले सवाल यह तय करेंगे कि आप किस प्रकार के ML एल्गोरिदम का उपयोग करेंगे। और आपको मिलने वाले उत्तर की गुणवत्ता आपके डेटा की प्रकृति पर बहुत अधिक निर्भर करेगी।
जिस प्रश्न का आपको उत्तर चाहिए वह निर्धारित करेगा कि आप कौन सा प्रकार का एमएल एल्गोरिदम उपयोग करेंगे। और आपको जो उत्तर मिलता है उसकी गुणवत्ता आपके डेटा के स्वभाव पर भारी निर्भर करेगी।
इस पाठ के लिए दिए गए [डेटा](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) पर एक नज़र डालें। आप इस .csv फ़ाइल को VS Code में खोल सकते हैं। एक त्वरित स्कैन से तुरंत पता चलता है कि इसमें खाली स्थान हैं और स्ट्रिंग्स और संख्यात्मक डेटा का मिश्रण है। इसमें 'Package' नाम का एक अजीब कॉलम भी है, जिसमें डेटा 'sacks', 'bins' और अन्य मानों का मिश्रण है। वास्तव में, यह डेटा थोड़ा गड़बड़ है।
इस पाठ के लिए प्रदान किए गए [डेटा](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) पर एक नजर डालें। आप इस .csv फ़ाइल को VS कोड में खोल सकते हैं। एक त्वरित अवलोकन से पता चलता है कि वहाँ रिक्त स्थान हैं और स्ट्रिंग्स और संख्यात्मक डेटा का मिश्रण है। एक अजीब कॉलम 'Package' भी है जहाँ डेटा 'sacks', 'bins' और अन्य मानों का मिश्रण है। वास्तव में, डेटा थोड़ा अस्त-व्यस्त है।
[](https://youtu.be/5qGjczWTrDQ "शुरुआती के लिए ML - डेटा सेट का विश्लेषण और सफाई कैसे करें")
[](https://youtu.be/5qGjczWTrDQ "शुरुआती लोगों के लिए एमएल - डेटा सेट को कैसे विश्लेषण और साफ़ करें")
> 🎥 ऊपर दी गई छवि पर क्लिक करें इस पाठ के लिए डेटा तैयार करने पर एक छोटा वीडियो देखने के लिए।
> 🎥 इस पाठ के लिए डेटा तैयार करने के काम को दर्शाते एक छोटे वीडियो के लिए ऊपर की छवि पर क्लिक करें।
वास्तव में, ऐसा बहुत कम होता है कि आपको एक ऐसा डेटा सेट मिले जो पूरी तरह से तैयार हो और जिसे सीधे ML मॉडल बनाने के लिए उपयोग किया जा सके। इस पाठ में, आप मानक Python लाइब्रेरी का उपयोग करके एक कच्चे डेटा सेट को तैयार करना सीखेंगे। आप डेटा को विज़ुअलाइज़ करने की विभिन्न तकनीकों को भी सीखेंगे।
वास्तव में, यह बहुत आम नहीं है कि आपको एक ऐसा डेटासेट दिया जाए जो तुरंत उपयोग के लिए पूरी तरह से तैयार हो ताकि आप एमएल मॉडल बना सकें। इस पाठ में, आप मानक पायथन लाइब्रेरीज का उपयोग करके एक कच्चे डेटासेट को कैसे तैयार करें, यह सीखेंगे। आप डेटा विज़ुअलाईज़ेशन की विभिन्न तकनीकों के बारे में भी जानेंगे।
## केस स्टडी: 'कद्दू का बाजार'
## केस स्टडी: 'कद्दू बाजार'
इस फ़ोल्डर में आपको रूट `data` फ़ोल्डर में [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) नामक एक .csv फ़ाइल मिलेगी, जिसमें कद्दू के बाजार के बारे में 1757 पंक्तियों का डेटा है, जो शहर के अनुसार वर्गीकृत है। यह कच्चा डेटा [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) से निकाला गया है, जिसे संयुक्त राज्य अमेरिका के कृषि विभाग द्वारा वितरित किया गया है।
इस फ़ोल्डर में आपको रूट `data` फ़ोल्डर में [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) नाम की एक .csv फ़ाइल मिलेगी जिसमें कद्दुओं के बाजार के बारे में 1757 पंक्तियाँ हैं, जिन्हें शहरों द्वारा समूहित किया गया है। यह कच्चा डेटा संयुक्त राज्य कृषि विभाग द्वारा वितरित [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) से निकाला गया है।
### डेटा तैयार करना
### डेटा की तैयारी
यह डेटा सार्वजनिक डोमेन में है। इसे USDA वेबसाइट से कई अलग-अलग फ़ाइलों में, प्रत्येक शहर के लिए, डाउनलोड किया जा सकता है। बहुत अधिक अलग-अलग फ़ाइलों से बचने के लिए, हमने सभी शहरों के डेटा को एक स्प्रेडशीट में जोड़ दिया है, इस प्रकार हमने पहले ही डेटा को थोड़ा _तैयार_ कर लिया है। अब, आइए डेटा को करीब से देखें।
यह डेटा सार्वजनिक क्षेत्र में है। इसे USDA वेबसाइट से शहर के अनुसार कई अलग-अलग फ़ाइलों में डाउनलोड किया जा सकता है। बहुत सारी अलग-अलग फ़ाइलों से बचने के लिए, हमने सभी शहरों का डेटा एक स्प्रेडशीट में संयोजित किया है, इसलिए हमने डेटा को थोड़ा _तैयार_ किया हुआ है। अब, आइए डेटा को करीब से देखें।
### कद्दू का डेटा - प्रारंभिक निष्कर्ष
### कद्दू डेटा - प्रारंभिक निष्कर्ष
आप इस डेटा के बारे में क्या नोटिस करते हैं? आपने पहले ही देखा है कि इसमें स्ट्रिंग्स, नंबर, खाली स्थान और अजीब मानों का मिश्रण है, जिसे आपको समझने की आवश्यकता है।
आप इस डेटा के बारे में क्या नोटिस करते हैं? आपने पहले ही देखा है कि इसमें स्ट्रिंग्स, संख्याएँ, रिक्त स्थान और अजीब मानों का मिश्रण है जिन्हें आपको समझना है।
आप इस डेटा से कौन सा सवाल पूछ सकते हैं, रिग्रेशन तकनीक का उपयोग करके? उदाहरण के लिए, "किसी दिए गए महीने में बिक्री के लिए कद्दू की कीमत का अनुमान लगाएं।" डेटा को फिर से देखते हुए, आपको डेटा संरचना बनाने के लिए कुछ बदलाव करने होंगे जो इस कार्य के लिए आवश्यक है।
आप इस डेटा से रिग्रेशन तकनीक का उपयोग करते हुए क्या प्रश्न पूछ सकते हैं? जैसे कि "किसी दिए गए महीने में बिक्री के लिए कद्दू का मूल्य अनुमानित करें"। डेटा को पुनः देखने पर, कुछ बदलाव करने होंगे ताकि इस कार्य के लिए आवश्यक डेटा संरचना बन सके।
## अभ्यास - कद्दू डेटा का विश्लेषण करें
## अभ्यास - कद्दू के डेटा का विश्लेषण करें
चलिए [Pandas](https://pandas.pydata.org/) का उपयोग करते हैं, (नाम का अर्थ है `Python Data Analysis`) जो डेटा को आकार देने के लिए बहुत उपयोगी टूल है, इस कद्दू डेटा का विश्लेषण और तैयारी करने के लिए।
आइए [Pandas](https://pandas.pydata.org/) का उपयोग करें, (जिसका नाम `Python Data Analysis` के लिए है) जो डेटा को आकार देने के लिए बहुत उपयोगी टूल है, इस कद्दू के डेटा का विश्लेषण और तैयारी करने के लिए।
### पहले, गायब तारीखें चेक करें
### सबसे पहले, गायब तारीखों की जांच करें
आपको सबसे पहले गायब तारीखों के लिए जांच करनी होगी:
आपको सबसे पहले गायब तारीखों की जांच करने के लिए कदम उठाने होंगे:
1. तारीखों को महीने के प्रारूप में बदलें (ये US तारीखें हैं, इसलिए प्रारूप `MM/DD/YYYY` है)।
1. तारीखों को महीने के प्रारूप में बदलें (ये अमेरिकी तारीखें हैं, इसलिए प्रारूप है `MM/DD/YYYY`)।
2. महीने को एक नए कॉलम में निकालें।
Visual Studio Code में _notebook.ipynb_ फ़ाइल खोलें और स्प्रेडशीट को एक नए Pandas डेटा फ्रेम में आयात करें।
Visual Studio Code में _notebook.ipynb_ फ़ाइल खोलें और स्प्रेडशीट को नए Pandas dataframe में इंपोर्ट करें।
1. पहले पांच पंक्तियों को देखने के लिए `head()` फ़ंक्शन का उपयोग करें।
1. `head()` फ़ंक्शन का उपयोग करके पहले पाँच पंक्तियों को देखें।
```python
import pandas as pd
@ -64,30 +64,30 @@ Visual Studio Code में _notebook.ipynb_ फ़ाइल खोलें
pumpkins.head()
```
✅ आप अंतिम पांच पंक्तियों को देखने के लिए कौन सा फ़ंक्शन उपयोग करेंगे?
✅ अंतिम पाँच पंक्तियाँ देखने के लिए कौन सा फ़ंक्शन उपयोग करेंगे?
1. वर्तमान डेटा फ्रेम में गायब डेटा की जांच करें:
1. जांचें कि वर्तमान dataframe में कोई गायब डेटा है या नहीं:
```python
pumpkins.isnull().sum()
```
डेटा गायब है, लेकिन शायद यह वर्तमान कार्य के लिए मायने नहीं रखता।
कुछ डेटा गायब है, लेकिन शायद यह कार्य के लिए मायने नहीं रखेगा।
1. अपने डेटा फ्रेम को काम करने में आसान बनाने के लिए, केवल उन कॉलमों का चयन करें जिनकी आपको आवश्यकता है, `loc` फ़ंक्शन का उपयोग करके जो मूल डेटा फ्रेम से पंक्तियों (पहले पैरामीटर के रूप में पास की गई) और कॉलमों (दूसरे पैरामीटर के रूप में पास की गई) का एक समूह निकालता है। नीचे दिए गए मामले में अभिव्यक्ति`:` का अर्थ है "सभी पंक्तियाँ।"
1. अपने dataframe के साथ काम करना आसान बनाने के लिए, केवल आवश्यक कॉलम चुनें, `loc` फ़ंक्शन का उपयोग करके जो मूल dataframe से पंक्तियों (पहला पैरामीटर) और कॉलमों (दूसरा पैरामीटर) का समूह निकालता है। नीचे के उदाहरण में`:` का अर्थ है "सभी पंक्तियाँ"।
सोचें कि किसी दिए गए महीने में कद्दू की औसत कीमत कैसे निर्धारित करें। इस कार्य के लिए आप कौन से कॉलम चुनेंगे? संकेत: आपको 3 कॉलम की आवश्यकता होगी।
सोचें कि किसी दिए गए महीने में कद्दू का औसत मूल्य कैसे पाएँ। इस कार्य के लिए आप कौन से कॉलम चुनेंगे? संकेत: आपको 3 कॉलम चाहिए होंगे।
समाधान: `Low Price` और `High Price` कॉलम का औसत लें और नए Price कॉलम को भरें, और Date कॉलम को केवल महीने दिखाने के लिए बदलें। सौभाग्य से, ऊपर की जांच के अनुसार, तारीखों या कीमतों के लिए कोई गायब डेटा नहीं है।
समाधान: `Low Price` और `High Price` कॉलमों का औसत लेकर नए Price कॉलम में भरें, और Date कॉलम को केवल महीने तक सीमित करें। सौभाग्य से ऊपर की जांच के अनुसार, तारीखों या कीमतों के लिए कोई गायब डेटा नहीं है।
1. औसत की गणना करने के लिए, निम्नलिखित कोड जोड़ें:
अपने डेटा फ्रेम को प्रिंट करने से आपको एक साफ, व्यवस्थित डेटा सेट दिखाई देगा, जिस पर आप अपना नया रिग्रेशन मॉडल बना सकते हैं।
अपने dataframe को प्रिंट करने पर आपको एक साफ, व्यवस्थित डेटासेट मिलेगा जिस पर आप अपना नया रिग्रेशन मॉडल बना सकते हैं।
### लेकिन रुको! यहाँ कुछ अजीब है
यदि आप `Package` कॉलम को देखें, तो कद्दू कई अलग-अलग कॉन्फ़िगरेशन में बेचे जाते हैं। कुछ '1 1/9 bushel' माप में बेचे जाते हैं, और कुछ '1/2 bushel' माप में, कुछ प्रति कद्दू, कुछ प्रति पाउंड, और कुछ बड़े बक्सों में अलग-अलग चौड़ाई के साथ।
यदि आप `Package` कॉलम देखें, तो कद्दू कई अलग-अलग आकारों में बेचे जाते हैं। कुछ '1 1/9 bushel' मापन में बेचे जाते हैं, कुछ '1/2 bushel' में, कुछ प्रति कद्दू, कुछ प्रति पाउंड, और कुछ बड़े डब्बों में जिनकी चौड़ाई भिन्न होती है।
> कद्दू को लगातार तौलना बहुत कठिन लगता है
> कद्दू को लगातार वजन करना बहुत कठिन लगता है
मूल डेटा में गहराई से देखें, यह दिलचस्प है कि जिनका `Unit of Sale` 'EACH' या 'PER BIN' के बराबर है, उनके `Package` प्रकार प्रति इंच, प्रति बिन, या 'each' भी हैं। कद्दू को लगातार तौलना बहुत कठिन लगता है, इसलिए आइए उन्हें फ़िल्टर करें और केवल उन कद्दूओं का चयन करें जिनके `Package` कॉलम में 'bushel' शब्द है।
मूल डेटा को देखकर दिलचस्प बात यह है कि जिनका `Unit of Sale` 'EACH' या 'PER BIN' है, उनके `Package` प्रकार में भी प्रति इंच, प्रति बिन या 'each' होता है। कद्दू का लगातार वजन करना कठिन लगता है, इसलिए चलिए केवल उन कद्दुओं को फ़िल्टर करते हैं जिनके `Package` कॉलम में 'bushel' स्ट्रिंग है।
1. फ़ाइल के शीर्ष पर, प्रारंभिक .csv आयात के तहत एक फ़िल्टर जोड़ें:
1. फ़ाइल की शुरुआत में, प्रारंभिक .csv इंपोर्ट के नीचे फ़िल्टर जोड़ें:
यदि आप अब डेटा प्रिंट करते हैं, तो आप देख सकते हैं कि आपको केवल लगभग 415 पंक्तियों का डेटा मिल रहा है जिसमें कद्दू बसल के अनुसार हैं।
यदि आप अब डेटा प्रिंट करते हैं, तो आप देखेंगे कि आप केवल लगभग 415 पंक्तियों को प्राप्त कर रहे हैं जिनमें bushel द्वारा कद्दू हैं।
### लेकिन रुको! एक और काम करना बाकी है
### लेकिन रुको! एक और काम करना है
क्या आपने देखा कि बसल की मात्रा प्रति पंक्ति बदलती है? आपको मूल्य निर्धारण को सामान्य करना होगा ताकि आप बसल के अनुसार मूल्य दिखा सकें, इसलिए इसे मानकीकृत करने के लिए कुछ गणना करें।
क्या आपने देखा कि bushel मात्रा प्रति पंक्ति भिन्न होती है? आपको मूल्य निर्धारण को सामान्यीकृत करना होगा ताकि आप मूल्य प्रति bushel दिखा सकें, इसलिए इसे मानकीकृत करने के लिए कुछ गणना करें।
1. नए_pumpkins डेटा फ्रेम बनाने वाले ब्लॉक के बाद ये लाइनें जोड़ें:
1. नई_pumpkins dataframe बनाने वाले ब्लॉक के बाद ये लाइनें जोड़ें:
✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) के अनुसार, बसल का वजन उत्पाद के प्रकार पर निर्भर करता है, क्योंकि यह एक वॉल्यूम माप है। "उदाहरण के लिए, टमाटर का एक बसल 56 पाउंड वजन का होना चाहिए... पत्ते और साग अधिक जगह लेते हैं और कम वजन होता है, इसलिए पालक का एक बसल केवल 20 पाउंड होता है।" यह सब काफी जटिल है! आइए बसल-से-पाउंड रूपांतरण करने की बजाय बसल के अनुसार मूल्य निर्धारण करें। हालांकि, कद्दू के बसल का यह अध्ययन यह दिखाता है कि आपके डेटा की प्रकृति को समझना कितना महत्वपूर्ण है!
✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) के अनुसार, एक bushel का वजन उत्पाद के प्रकार पर निर्भर करता है, क्योंकि यह एक आयतन मापन है। "उदाहरण के लिए टमाटर के एक bushel का वजन 56 पाउंड होना चाहिए... पत्ते और हरी पत्तेदार सब्जियाँ अधिक जगह घेरती हैं लेकिन कम वजन होती है, इसलिए पालक के एक bushel का वजन केवल 20 पाउंड होता है।" यह सब काफी जटिल है! चलिए bushel को पाउंड में परिवर्तित करने की चिंता न करें, बल्कि bushel के हिसाब से मूल्य रखें। कद्दुओं के bushel के इस अध्ययन से ऐसा साबित होता है कि अपने डेटा की प्रकृति को समझना कितना महत्वपूर्ण है!
अब, आप उनके बसल माप के आधार पर प्रति यूनिट मूल्य का विश्लेषण कर सकते हैं। यदि आप डेटा को एक बार फिर प्रिंट करते हैं, तो आप देख सकते हैं कि यह मानकीकृत है।
अब, आप उनके bushel मापन के आधार पर मूल्य निर्धारण का विश्लेषण कर सकते हैं। यदि आप डेटा को एक बार फिर से प्रिंट करें, तो आप देख सकते हैं कि यह कैसे मानकीकृत है।
✅ क्या आपने देखा कि आधे बसल में बेचे जाने वाले कद्दू बहुत महंगे हैं? क्या आप इसका कारण पता लगा सकते हैं? संकेत: छोटे कद्दू बड़े कद्दू की तुलना में बहुत महंगे होते हैं, शायद इसलिए कि एक बड़े खोखले पाई कद्दू द्वारा लिए गए खाली स्थान को देखते हुए प्रति बसल उनमें बहुत अधिक होते हैं।
✅ क्या आपने नोटिस किया कि आधे bushel में बेचे जाने वाले कद्दू बहुत महंगे हैं? क्या आप इसका कारण पता लगा सकते हैं? संकेत: छोटे कद्दू बड़े कद्दू से बहुत महंगे होते हैं, शायद इसलिए क्योंकि प्रति bushel उनमें कई अधिक होते हैं, जबकि एक बड़ा खोखला पाई कद्दू अधिक खाली जगह लेता है।
## विज़ुअलाइज़ेशन रणनीतियाँ
## विज़ुअलाइजेशन रणनीतियाँ
डेटा वैज्ञानिक का एक हिस्सा यह प्रदर्शित करना है कि वे जिस डेटा के साथ काम कर रहे हैं उसकी गुणवत्ता और प्रकृति क्या है। ऐसा करने के लिए, वे अक्सर दिलचस्प विज़ुअलाइज़ेशन, जैसे प्लॉट्स, ग्राफ़्स, और चार्ट्स बनाते हैं, जो डेटा के विभिन्न पहलुओं को दिखाते हैं। इस तरह, वे दृश्य रूप से उन संबंधों और अंतरालों को दिखा सकते हैं जिन्हें अन्यथा समझना कठिन होता है।
डेटा वैज्ञानिक की भूमिका का एक भाग यह दिखाना है कि वे जिस डेटा के साथ काम कर रहे हैं उसकी गुणवत्ता और प्रकृति कैसी है। इसके लिए, वे अक्सर रोचक विज़ुअलाइजेशन बनाते हैं, जैसे प्लॉट, ग्राफ़, और चार्ट, जो डेटा के विभिन्न पहलुओं को दिखाते हैं। इस तरह वे بصری रूप से रिश्तों और अंतर को दिखा पाते हैं जो अन्यथा पता लगाना कठिन होता है।
[](https://youtu.be/SbUkxH6IJo0 "शुरुआती के लिए ML - Matplotlib के साथ डेटा कैसे विज़ुअलाइज़ करें")
[](https://youtu.be/SbUkxH6IJo0 "शुरुआती लोगों के लिए एमएल - Matplotlib के साथ डेटा विज़ुअलाईज़ करें")
> 🎥 ऊपर दी गई छवि पर क्लिक करें इस पाठ के लिए डेटा को विज़ुअलाइज़ करने पर एक छोटा वीडियो देखने के लिए।
> 🎥 इस पाठ के लिए डेटा विज़ुअलाईज़ेशन पर एक छोटा वीडियो देखने के लिए ऊपर की छवि पर क्लिक करें।
विज़ुअलाइज़ेशन यह निर्धारित करने में भी मदद कर सकते हैं कि डेटा के लिए कौन सी मशीन लर्निंग तकनीक सबसे उपयुक्त है। उदाहरण के लिए, एक स्कैटरप्लॉट जो एक रेखा का अनुसरण करता हुआ प्रतीत होता है, यह संकेत देता है कि डेटा एक रेखीय रिग्रेशन अभ्यास के लिए एक अच्छा उम्मीदवार है।
विज़ुअलाइजेशन यह भी तय करने में मदद कर सकता है कि डेटा के लिए कौन सी मशीन लर्निंग तकनीक सबसे उपयुक्त है। उदाहरण के लिए, एक स्कैटरप्लॉट जो एक रेखा का पालन करता प्रतीत होता है, यह दर्शाता है कि डेटा एक रैखिक रिग्रेशन अभ्यास के लिए उपयुक्त हो सकता है।
एक डेटा विज़ुअलाइज़ेशन लाइब्रेरी जो Jupyter नोटबुक्स में अच्छी तरह काम करती है वह है [Matplotlib](https://matplotlib.org/) (जिसे आपने पिछले पाठ में भी देखा था)।
एक डेटा विज़ुअलाईज़ेशन लाइब्रेरी जो Jupyter नोटबुक में अच्छी तरह काम करती है वह है [Matplotlib](https://matplotlib.org/) (जिसे आपने पिछले पाठ में भी देखा था)।
> डेटा विज़ुअलाइज़ेशन के साथ अधिक अनुभव प्राप्त करें [इन ट्यूटोरियल्स](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) में।
> [इन ट्यूटोरियल्स](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) में डेटा विज़ुअलाईज़ेशन के साथ अधिक अनुभव प्राप्त करें।
## अभ्यास - Matplotlib के साथ प्रयोग करें
नए डेटा फ्रेम को प्रदर्शित करने के लिए कुछ बुनियादी प्लॉट्स बनाने का प्रयास करें। एक बुनियादी लाइन प्लॉट क्या दिखाएगा?
अभी बनाए गए नए dataframe को प्रदर्शित करने के लिए कुछ बुनियादी प्लॉट बनाने की कोशिश करें। एक बुनियादी लाइन प्लॉट क्या दिखाएगा?
1. फ़ाइल के शीर्ष पर Pandas आयात के तहत Matplotlib आयात करें:
1. फ़ाइल के शीर्ष पर, Pandas इंपोर्ट के नीचे Matplotlib इंपोर्ट करें:
```python
import matplotlib.pyplot as plt
```
1. पूरे नोटबुक को फिर से चलाएं ताकि यह ताज़ा हो जाए।
1. नोटबुक के नीचे एक सेल जोड़ें ताकि डेटा को एक बॉक्स के रूप में प्लॉट किया जा सके:
1. नोटबुक को संपूर्ण रूप से पुनः चलाएं।
1. नोटबुक के नीचे एक सेल जोड़ें जो डेटा को बॉक्स प्लॉट के रूप में प्रस्तुत करे:
```python
price = new_pumpkins.Price
@ -174,44 +174,121 @@ Visual Studio Code में _notebook.ipynb_ फ़ाइल खोलें
plt.show()
```


क्या यह एक उपयोगी प्लॉट है? क्या इसमें कुछ ऐसा है जो आपको आश्चर्यचकित करता है?
क्या यह एक उपयोगी प्लॉट है? क्या इसमें कुछ आपको आश्चर्यचकित करता है?
यह विशेष रूप से उपयोगी नहीं है क्योंकि यह केवल आपके डेटा को एक दिए गए महीने में बिंदुओं के फैलाव के रूप में प्रदर्शित करता है।
यह खास उपयोगी नहीं है क्योंकि यह केवल आपके डेटा को एक विस्तृत बिंदुओं के रूप में एक दिए गए महीने में दिखाता है।
### इसे उपयोगी बनाएं
उपयोगी डेटा प्रदर्शित करने के लिए, आपको आमतौर पर डेटा को किसी न किसी तरह से समूहित करना होता है। आइए एक प्लॉट बनाएं जहां y अक्ष महीने दिखाए और डेटा वितरण को प्रदर्शित करे।
उपयोगी डेटा चार्ट्स प्रदर्शित करने के लिए, आपको आमतौर पर डेटा को किसी तरह समूहित करना पड़ता है। चलिए एक ऐसा प्लॉट बनाने की कोशिश करें जहाँ y अक्ष महीनों को दिखाता है और डेटा वितरण को दर्शाता है।
1. एक सेल जोड़ें ताकि एक समूहित बार चार्ट बनाया जा सके:


यह एक अधिक उपयोगी डेटा विज़ुअलाईज़ेशन है! यह दर्शाता है कि कद्दू के लिए उच्चतम कीमत सितंबर और अक्टूबर में होती है। क्या यह आपकी उम्मीद से मेल खाता है? क्यों या क्यों नहीं?
## अभ्यास - Seaborn के साथ प्रयोग करें
Matplotlib शक्तिशाली है, लेकिन एक चिकना चार्ट बनाने में काफी कोड लग सकता है। [Seaborn](https://seaborn.pydata.org/) एक लाइब्रेरी है जो Matplotlib के ऊपर बनी है और सांख्यिकीय डेटा विज़ुअलाईज़ेशन के लिए डिज़ाइन की गई है। यह सीधे Pandas dataframes के साथ काम करती है, आकर्षक डिफ़ॉल्ट शैलियाँ लागू करती है, और बहुत कम कोड के साथ सूचनात्मक प्लॉट बनाती है। चूंकि Seaborn Matplotlib ऑब्जेक्ट्स लौटाता है, आप Matplotlib के बारे में पहले से जो कुछ जानते हैं उसे परिणामों को बेहतर बनाने के लिए उपयोग कर सकते हैं।
> यदि आपके पास Seaborn पहले से इंस्टॉल नहीं है, तो इसे `pip install seaborn` से इंस्टॉल करें।
1. नोटबुक के शीर्ष पर अन्य इंपोर्ट्स के नीचे Seaborn इंपोर्ट करें। इसे सामान्यतः `sns` के रूप में इंपोर्ट किया जाता है:
```python
import seaborn as sns
```
### रिश्तों को दिखाने के लिए स्कैटर प्लॉट्स
मॉडल बनाने से पहले डेटा का पता लगाने का एक बड़ा हिस्सा है चर के बीच _रिश्तों_ को देखना। [स्कैटर प्लॉट](https://en.wikipedia.org/wiki/Scatter_plot) इस उद्देश्य के लिए सबसे अच्छे उपकरणों में से एक है: यदि बिंदु किसी रेखा का अनुसरण करते हुए दिखें, तो दोनों चर सहसंबद्ध हो सकते हैं, जो कि एक संकेत है कि लाइनियर रिग्रेशन मॉडल काम कर सकता है।
1. पहले के मूल्य-से-महीना स्कैटर प्लॉट को फिर से बनाएं, लेकिन इस बार Seaborn के [`relplot()`](https://seaborn.pydata.org/generated/seaborn.relplot.html) (संबंधित प्लॉट) का उपयोग करते हुए, जो सीधे आपके dataframe के कॉलम के साथ काम करता है:

यह विशेष डेटा काफी शोर युक्त है, इसलिए लाइन प्लॉट सबसे स्पष्ट विकल्प नहीं है - लेकिन यह दिखाता है कि आप आसानी से Seaborn में चार्ट प्रकार कैसे बदल सकते हैं।
### वितरण दिखाने के लिए बार चार्ट्स
पहले आपने Matplotlib के साथ बार चार्ट बनाने के लिए डेटा को हाथ से समूहित किया था। Seaborn का [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html) (श्रेणीबद्ध प्लॉट) आपके लिए समूहण और एकत्रीकरण कर सकता है। डिफ़ॉल्ट रूप से `kind="bar"` प्रत्येक श्रेणी का औसत दिखाता है साथ ही एक काली रेखा जो विश्वास अंतराल को संकेत करती है।

यह पुष्टि करता है जो आपने Matplotlib के साथ देखा था — कीमतें सितंबर और अक्टूबर के आसपास चरम पर होती हैं — लेकिन Seaborn यह भी दिखाता है कि प्रत्येक महीने के भीतर कीमत कितनी _वैरिएबल_ होती है।
### सहसंबंध दिखाने वाले हीटमैप्स
स्कैटर प्लॉट एक बार में दो चर की तुलना करते हैं। जब आपके पास कई संख्यात्मक कॉलम होते हैं, तब एक [हीटमैप](https://en.wikipedia.org/wiki/Heat_map) आपको एक साथ _हर_ कॉलम जोड़ी के बीच संबंध की ताकत देखने देता है। यह एक सामान्य तरीका है यह देखने का कि कौन से फीचर्स सबसे अधिक संबंधित हैं इससे पहले कि आप मॉडल में कौन से फीचर फीड करें (और समान प्रकार के चार्ट का उपयोग बाद में क्लासिफिकेशन में कॉन्फ्यूजन मैट्रिक्स दिखाने के लिए किया जाता है)।
1. Pandas के साथ एक सहसंबंध मैट्रिक्स बनाएं, फिर Seaborn के [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html) के साथ इसे ड्रॉ करें। `annot=True` विकल्प प्रत्येक सेल पर सहसंबंध मान प्रिंट करता है:

`1` (या `-1`) के करीब मान का अर्थ है कि कॉलम सशक्त रूप से _रेखीय_ संबंधित हैं। देखें कि कैसे `Low Price` और `High Price` लगभग पूरी तरह से संबंधित हैं। दूसरी ओर, `Month` केवल कमजोर रेखीय संबंध दिखाता है — भले ही उपर्युक्त बार चार्ट ने सितंबर और अक्टूबर में एक स्पष्ट मौसमी चरम को दिखाया हो। यह एक महत्वपूर्ण सबक है: सहसंबंध गुणांक केवल _सीधी_ रेखा वाले संबंधों को मापता है, इसलिए यह मौसमी या अन्यथा गैर-रेखीय पैटर्न को छिपा सकता है। ✅ यह उपयोगी क्यों है कि हीटमैप और बार चार्ट जैसे चार्ट दोनों को देखने के बाद यह तय करें कि कौन से कॉलम का उपयोग करना है?
### Matplotlib या Seaborn?
दोनों पुस्तकालय जानने योग्य हैं:
- **Matplotlib** आपको चार्ट के प्रत्येक तत्व पर सूक्ष्म नियंत्रण देता है और यह लगभग हर अन्य पायथन प्लॉटिंग लाइब्रेरी की नींव है।
- **Seaborn** उच्च-स्तरीय फ़ंक्शन और सांख्यिकीय चार्ट के लिए आकर्षक पूर्वनिर्धारित सेटिंग्स प्रदान करता है, सीधे डेटा फ्रेम के साथ काम करता है, और अन्वेषणात्मक डेटा विश्लेषण के लिए अक्सर तेज़ होता है।
यह एक अधिक उपयोगी डेटा विज़ुअलाइज़ेशन है! ऐसा लगता है कि कद्दू की सबसे अधिक कीमत सितंबर और अक्टूबर में होती है। क्या यह आपकी अपेक्षा के अनुरूप है? क्यों या क्यों नहीं?
एक सामान्य कार्यप्रवाह यह है कि आप जल्दी से अपने डेटा का पता लगाने के लिए Seaborn तक पहुंचें, फिर जब विवरण कस्टमाइज़ेशन की ज़रूरत हो तो Matplotlib का उपयोग करें।
---
## 🚀चुनौती
Matplotlib द्वारा प्रदान किए गए विभिन्न प्रकार के विज़ुअलाइज़ेशन का अन्वेषण करें। कौन से प्रकार रिग्रेशन समस्याओं के लिए सबसे उपयुक्त हैं?
Matplotlib और Seaborn जो विभिन्न प्रकार के विज़ुअलाइज़ेशन प्रदान करते हैं उन्हें एक्सप्लोर करें। कौन से प्रकार सबसे उपयुक्त हैं रिग्रेशन समस्याओं के लिए?
डेटा को विज़ुअलाइज़ करने के कई तरीकों को देखें। उपलब्ध विभिन्न लाइब्रेरी की एक सूची बनाएं और नोट करें कि कौन सी लाइब्रेरी किस प्रकार के कार्यों के लिए सबसे अच्छी है, उदाहरण के लिए 2D विज़ुअलाइज़ेशन बनाम 3D विज़ुअलाइज़ेशन। आप क्या खोजते हैं?
डेटा को विज़ुअलाइज़ करने के कई तरीकों को देखें। उपलब्ध विभिन्न लाइब्रेरी की सूची बनाएं और नोट करें कि कौन से कार्य के लिए सबसे उपयुक्त हैं, जैसे 2D विज़ुअलाइज़ेशन बनाम 3D विज़ुअलाइज़ेशन। आप क्या खोजते हैं?
## असाइनमेंट
[विज़ुअलाइज़ेशन का अन्वेषण](assignment.md)
[विज़ुअलाइज़ेशन की खोज](assignment.md)
---
**अस्वीकरण**:
यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**अस्वीकरण**:
इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
"[Seaborn](https://seaborn.pydata.org/) Matplotlib के ऊपर बनाया गया है और सीधे डेटा फ्रेम के साथ काम करता है, जिससे बहुत कम कोड के साथ आकर्षक सांख्यिकीय प्लॉट बनाना तेज़ हो जाता है।\n"
"\n---\n\n**अस्वीकरण**: \nयह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**अस्वीकरण**:\nइस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"

> स्केचनोट द्वारा [Tomomi Imura](https://www.twitter.com/girlie_mac)
रिइंफोर्समेंट लर्निंग तीन महत्वपूर्ण अवधारणाओं पर आधारित है: एजेंट, कुछ स्टेट्स, और प्रत्येक स्टेट के लिए एक्शन का सेट। किसी निर्दिष्ट स्टेट में एक्शन को निष्पादित करके, एजेंट को एक इनाम दिया जाता है। फिर से सुपर मारियो गेम की कल्पना करें। आप मारियो हैं, आप एक गेम लेवल में हैं, और एक चट्टान के किनारे पर खड़े हैं। आपके ऊपर एक सिक्का है। आप मारियो हैं, एक गेम लेवल में, एक विशिष्ट स्थिति में ... यही आपका स्टेट है। दाईं ओर एक कदम बढ़ाना (एक्शन) आपको किनारे से नीचे गिरा देगा, और यह आपको कम अंक देगा। हालांकि, जंप बटन दबाने से आप एक पॉइंट स्कोर करेंगे और जीवित रहेंगे। यह एक सकारात्मक परिणाम है और आपको एक सकारात्मक अंक प्रदान करना चाहिए।
सुदृढ़ीकरण शिक्षण में तीन महत्वपूर्ण अवधारणाएँ शामिल हैं: एजेंट, कुछ अवस्थाएं, और प्रत्येक अवस्था के लिए कुछ क्रियाएं। किसी विशिष्ट अवस्था में कोई क्रिया करके, एजेंट को पुरस्कार (रिवार्ड) दिया जाता है। फिर से सोचिए कंप्यूटर गेम सुपर मारियो के बारे में। आप मारियो हैं, आप एक गेम स्तर में हैं, एक चट्टान के किनारे खड़े हैं। आपके ऊपर एक सिक्का है। आप मारियो हैं, एक गेम स्तर में, एक विशिष्ट स्थान पर ... वह आपकी अवस्था है। दाईं ओर एक कदम बढ़ाना (एक क्रिया) आपको किनारे से नीचे गिरा देगा, और इसका आपको कम अंक मिलेगा। हालांकि, जंप बटन दबाने पर आप एक पॉइंट स्कोर करेंगे और ज़िंदा रहेंगे। यह एक सकारात्मक परिणाम है और इसके लिए आपको सकारात्मक अंक मिलना चाहिए।
रिइंफोर्समेंट लर्निंग और एक सिम्युलेटर (गेम) का उपयोग करके, आप गेम खेलने का तरीका सीख सकते हैं ताकि आप जीवित रह सकें और अधिकतम पॉइंट्स स्कोर कर सकें।
सुदृढ़ीकरण सीखने और एक सिम्युलेटर (गेम) का उपयोग करके, आप गेम को इस तरह खेलना सीख सकते हैं ताकि पुरस्कार को अधिकतम किया जा सके, अर्थात ज़िंदा रहना और अधिक से अधिक अंक जमा करना।
[](https://www.youtube.com/watch?v=lDq_en8RNOo)
[](https://www.youtube.com/watch?v=lDq_en8RNOo)
> 🎥 ऊपर दी गई छवि पर क्लिक करें और Dmitry से रिइंफोर्समेंट लर्निंग के बारे में सुनें
> 🎥 ऊपर चित्र पर क्लिक करें और Dmitry से सुदृढ़ीकरण शिक्षण पर चर्चा सुनें
इस पाठ में, हम Python में कुछ कोड के साथ प्रयोग करेंगे। आपको इस पाठ के Jupyter Notebook कोड को अपने कंप्यूटर पर या क्लाउड में कहीं भी चलाने में सक्षम होना चाहिए।
इस पाठ में, हम Python में कुछ कोड के साथ प्रयोग करेंगे। आपको इस पाठ का Jupyter Notebook कोड अपने कंप्यूटर या क्लाउड में कहीं भी चला पाने में सक्षम होना चाहिए।
आप [पाठ नोटबुक](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) खोल सकते हैं और इस पाठ को बनाने के लिए इसका अनुसरण कर सकते हैं।
आप [पाठ नोटबुक](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) खोल सकते हैं और इस पाठ को सीखने के लिए इसका अनुसरण कर सकते हैं।
> **नोट:** यदि आप इस कोड को क्लाउड से खोल रहे हैं, तो आपको [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) फ़ाइल भी प्राप्त करनी होगी, जो नोटबुक कोड में उपयोग की जाती है। इसे नोटबुक के समान डायरेक्टरी में जोड़ें।
> **नोट:** यदि आप यह कोड क्लाउड से खोल रहे हैं, तो आपको [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) फाइल भी प्राप्त करनी होगी, जो नोटबुक के कोड में इस्तेमाल होती है। इसे नोटबुक के उसी डायरेक्टरी में जोड़ें।
## परिचय
इस पाठ में, हम **[Peter and the Wolf](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)** की दुनिया का अन्वेषण करेंगे, जो एक रूसी संगीतकार [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev) की एक संगीत परी कथा से प्रेरित है। हम **रिइंफोर्समेंट लर्निंग** का उपयोग करेंगे ताकि पीटर अपने वातावरण का पता लगा सके, स्वादिष्ट सेब इकट्ठा कर सके और भेड़िये से बच सके।
इस पाठ में, हम **[पीटर और वुल्फ](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)** की दुनिया का अन्वेषण करेंगे, जो रूसी संगीतकार, [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev) की एक संगीत परिकथा से प्रेरित है। हम **सुदृढ़ीकरण शिक्षण** का उपयोग करेंगे ताकि पीटर अपने पर्यावरण का अन्वेषण कर सके, स्वादिष्ट सेब इकट्ठा कर सके और भेड़िये से मिलना टाल सके।
**रिइंफोर्समेंट लर्निंग** (RL) एक लर्निंग तकनीक है जो हमें कई प्रयोगों को चलाकर किसी **एजेंट** के **वातावरण** में इष्टतम व्यवहार सीखने की अनुमति देती है। इस वातावरण में एक एजेंट का कुछ **लक्ष्य** होना चाहिए, जिसे एक **इनाम फ़ंक्शन** द्वारा परिभाषित किया गया है।
**सुदृढ़ीकरण शिक्षण** (RL) एक सीखने की तकनीक है जो हमें कई प्रयोग करके किसी **एजेंट** का किसी **पर्यावरण** में इष्टतम व्यवहार सीखने देती है। इस पर्यावरण में एजेंट का एक **लक्ष्य** होना चाहिए, जिसका निर्धारण एक **पुरस्कार फलन** द्वारा किया जाता है।
## वातावरण
## पर्यावरण
सरलता के लिए, आइए पीटर की दुनिया को `width` x `height`आकार के एक वर्ग बोर्ड के रूप में मानें, जैसे:
सरलता के लिए, आइए पीटर की दुनिया को `width` x `height` के एक वर्गाकार बोर्ड के रूप में मानते हैं, इस प्रकार:


इस बोर्ड में प्रत्येक सेल निम्नलिखित में से एक हो सकता है:
इस बोर्ड के प्रत्येक सेल में हो सकता है:
* **जमीन**, जिस पर पीटर और अन्य जीव चल सकते हैं।
* **भूमि**, जिस पर पीटर और अन्य जीव चल सकते हैं।
* **पानी**, जिस पर आप स्पष्ट रूप से नहीं चल सकते।
* एक **पेड़** या **घास**, एक जगह जहां आप आराम कर सकते हैं।
* एक **सेब**, जिसे पीटर खुशी से खोजेगा ताकि वह खुद को खिला सके।
* एक **भेड़िया**, जो खतरनाक है और इससे बचा जाना चाहिए।
* एक **पेड़** या **घास**, जहाँ आप आराम कर सकते हैं।
* एक **सेब**, जो दर्शाता है कि पीटर अपने आप को खिलाने के लिए उसे पाकर खुश होगा।
* एक **भेड़िया**, जो खतरनाक है और बचना चाहिए।
एक अलग Python मॉड्यूल, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), इस वातावरण के साथ काम करने के लिए कोड को शामिल करता है। चूंकि यह कोड हमारे अवधारणाओं को समझने के लिए महत्वपूर्ण नहीं है, हम मॉड्यूल को आयात करेंगे और नमूना बोर्ड बनाने के लिए इसका उपयोग करेंगे (कोड ब्लॉक 1):
एक अलग Python मॉड्यूल, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), इसमें इस पर्यावरण के साथ काम करने के लिए कोड है। क्योंकि यह कोड हमारे अवधारणाओं को समझने के लिए आवश्यक नहीं है, हम मॉड्यूल को इम्पोर्ट करेंगे और इसका उपयोग नमूना बोर्ड बनाने के लिए करेंगे (कोड ब्लॉक 1):
```python
from rlboard import *
@ -52,63 +52,63 @@ m.randomize(seed=13)
m.plot()
```
यह कोड ऊपर दिए गए चित्र के समान वातावरण का चित्र प्रिंट करेगा।
यह कोड ऊपर के समान पर्यावरण की एक तस्वीर प्रिंट करेगा।
## एक्शन और पॉलिसी
## क्रियाएं और नीति
हमारे उदाहरण में, पीटर का लक्ष्य सेब को खोजना होगा, जबकि भेड़िये और अन्य बाधाओं से बचना होगा। ऐसा करने के लिए, वह सेब को खोजने तक इधर-उधर चल सकता है।
हमारे उदाहरण में, पीटर का लक्ष्य सेब ढूंढना होगा, जबकि भेड़िये और अन्य बाधाओं से बचना होगा। इसके लिए, वह मूल रूप से तब तक चल सकता है जब तक उसे सेब न मिल जाए।
इसलिए, किसी भी स्थिति में, वह निम्नलिखित एक्शन में से एक चुन सकता है: ऊपर, नीचे, बाएं और दाएं।
इसलिए, किसी भी स्थान पर, वह निम्नलिखित क्रियाओं में से एक चुन सकता है: ऊपर, नीचे, बाएँ और दाएँ।
हम इन एक्शन को एक डिक्शनरी के रूप में परिभाषित करेंगे, और उन्हें संबंधित समन्वय परिवर्तनों के जोड़े से मैप करेंगे। उदाहरण के लिए, दाईं ओर बढ़ना (`R`) एक जोड़ी `(1,0)` के अनुरूप होगा। (कोड ब्लॉक 2):
हम उन क्रियाओं को एक डिक्शनरी के रूप में परिभाषित करेंगे, और उन्हें संबंधित निर्देशांक परिवर्तनों के जोड़े से मैप करेंगे। उदाहरण के लिए, दाईं ओर जाना (`R`) `(1,0)` जोड़े के अनुरूप होगा। (कोड ब्लॉक 2):
action_idx = { a : i for i,a in enumerate(actions.keys()) }
```
इस परिदृश्य की रणनीति और लक्ष्य को संक्षेप में कहें:
संक्षेप में, इस परिदृश्य की रणनीति और लक्ष्य इस प्रकार हैं:
- **रणनीति**, हमारे एजेंट (पीटर) की, एक तथाकथित **पॉलिसी** द्वारा परिभाषित की जाती है। पॉलिसी एक फ़ंक्शन है जो किसी भी दिए गए स्टेट पर एक्शन लौटाता है। हमारे मामले में, समस्या का स्टेट बोर्ड द्वारा दर्शाया गया है, जिसमें खिलाड़ी की वर्तमान स्थिति शामिल है।
- **रणनीति**, हमारे एजेंट (पीटर) के लिए एक तथाकथित **नीति** द्वारा परिभाषित है। एक नीति एक फंक्शन है जो किसी भी ज्ञात अवस्था में क्रिया वापस करता है। हमारे मामले में, समस्या की स्थिति का प्रतिनिधित्व बोर्ड द्वारा किया जाता है, जिसमें खिलाड़ी का वर्तमान स्थान शामिल है।
- **लक्ष्य**, रिइंफोर्समेंट लर्निंग का, अंततः एक अच्छी पॉलिसी सीखना है जो हमें समस्या को कुशलतापूर्वक हल करने की अनुमति देगा। हालांकि, एक आधार रेखा के रूप में, आइए सबसे सरल पॉलिसी पर विचार करें जिसे **रैंडम वॉक** कहा जाता है।
- **लक्ष्य**, सुदृढ़ीकरण शिक्षण का उद्देश्य अंततः एक अच्छी नीति सीखना है जो हमें समस्या को कुशलतापूर्वक हल करने की अनुमति देगा। हालांकि, एक आधारभूत रूप में, चलिए सबसे सरल नीति जिसे हम कहते हैं **random walk** (यादृच्छिक चाल) को मानते हैं।
## रैंडम वॉक
आइए पहले रैंडम वॉक रणनीति को लागू करके अपनी समस्या को हल करें। रैंडम वॉक के साथ, हम अनुमत एक्शन में से अगले एक्शन को यादृच्छिक रूप से चुनेंगे, जब तक कि हम सेब तक नहीं पहुंच जाते (कोड ब्लॉक 3)।
पहले हम एक यादृच्छिक चाल रणनीति लागू करके हमारी समस्या को हल करेंगे। रैंडम वॉक के साथ, हम अनुमत क्रियाओं में से अगली क्रिया यादृच्छिक रूप से चुनेंगे, जब तक कि हम सेब तक न पहुँच जाएं (कोड ब्लॉक 3)।
1. नीचे दिए गए कोड के साथ रैंडम वॉक लागू करें:
1. नीचे दिए गए कोड से यादृच्छिक चाल लागू करें:
```python
def random_policy(m):
return random.choice(list(actions))
def walk(m,policy,start_position=None):
n = 0 # number of steps
# set initial position
n = 0 # कदमों की संख्या
# प्रारंभिक स्थिति सेट करें
if start_position:
m.human = start_position
else:
m.random_start()
while True:
if m.at() == Board.Cell.apple:
return n # success!
return n # सफलता!
if m.at() in [Board.Cell.wolf, Board.Cell.water]:
return -1 # eaten by wolf or drowned
return -1 # भेड़िये द्वारा खाया गया या डूबा हुआ
while True:
a = actions[policy(m)]
new_pos = m.move_pos(m.human,a)
if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water:
m.move(a) # do the actual move
m.move(a) # वास्तविक चाल करें
break
n+=1
walk(m,random_policy)
```
`walk` को कॉल करने से संबंधित पथ की लंबाई लौटनी चाहिए, जो एक रन से दूसरे रन में भिन्न हो सकती है।
`walk` कॉल संबंधित पथ की लंबाई लौटाएगी, जो रन के आधार पर भिन्न हो सकती है।
1. वॉक प्रयोग को कई बार (कहें, 100) चलाएं, और परिणामी आँकड़े प्रिंट करें (कोड ब्लॉक 4):
1. चल प्रयोग को कई बार (मान लें 100) चलाएं और परिणामी सांख्यिकी प्रिंट करें (कोड ब्लॉक 4):
```python
def print_statistics(policy):
@ -125,17 +125,17 @@ action_idx = { a : i for i,a in enumerate(actions.keys()) }
print_statistics(random_policy)
```
ध्यान दें कि पथ की औसत लंबाई लगभग 30-40 कदम है, जो काफी अधिक है, यह देखते हुए कि निकटतम सेब की औसत दूरी लगभग 5-6 कदम है।
ध्यान दें कि पथ की औसत लंबाई लगभग 30-40 कदम है, जो कि काफी अधिक है, जबकि निकटतम सेब की औसत दूरी लगभग 5-6 कदम है।
आप यह भी देख सकते हैं कि रैंडम वॉक के दौरान पीटर की गति कैसी दिखती है:
आप यह भी देख सकते हैं कि रैंडम वॉक के दौरान पीटर की चाल कैसी दिखती है:


## इनाम फ़ंक्शन
## पुरस्कार फ़ंक्शन
हमारी पॉलिसी को अधिक बुद्धिमान बनाने के लिए, हमें यह समझने की आवश्यकता है कि कौन से कदम दूसरों की तुलना में "बेहतर" हैं। ऐसा करने के लिए, हमें अपना लक्ष्य परिभाषित करना होगा।
हमारी नीति को अधिक बुद्धिमान बनाने के लिए, हमें समझना होगा कि कौन से कदम "बेहतर" हैं। इसके लिए, हमें अपना लक्ष्य परिभाषित करना होगा।
लक्ष्य को एक **इनाम फ़ंक्शन** के संदर्भ में परिभाषित किया जा सकता है, जो प्रत्येक स्टेट के लिए कुछ स्कोर मान लौटाएगा। संख्या जितनी अधिक होगी, इनाम फ़ंक्शन उतना ही बेहतर होगा। (कोड ब्लॉक 5)
लक्ष्य को एक **पुरस्कार फ़ंक्शन** के रूप में परिभाषित किया जा सकता है, जो प्रत्येक अवस्था के लिए कुछ स्कोर मूल्य लौटाएगा। मूल्य जितना अधिक होगा, पुरस्कार फ़ंक्शन उतना बेहतर होगा। (कोड ब्लॉक 5)
```python
move_reward = -0.1
@ -154,39 +154,115 @@ def reward(m,pos=None):
return move_reward
```
इनाम फ़ंक्शन के बारे में एक दिलचस्प बात यह है कि अधिकांश मामलों में, *हमें केवल खेल के अंत में एक महत्वपूर्ण इनाम दिया जाता है*। इसका मतलब है कि हमारे एल्गोरिदम को "अच्छे" कदमों को याद रखना चाहिए जो अंत में सकारात्मक इनाम की ओर ले जाते हैं, और उनकी महत्वता बढ़ानी चाहिए। इसी तरह, सभी कदम जो खराब परिणामों की ओर ले जाते हैं, उन्हें हतोत्साहित किया जाना चाहिए।
पुरस्कार फ़ंक्शन के बारे में एक दिलचस्प बात यह है कि अधिकांश मामलों में, *हमें केवल खेल के अंत में महत्वपूर्ण पुरस्कार मिलता है*। इसका मतलब है कि हमारा एल्गोरिदम किसी तरह "अच्छे" कदमों को याद रखना चाहिए जो अंत में सकारात्मक पुरस्कार की ओर ले जाते हैं, और उनकी महत्ता बढ़ानी चाहिए। इसी तरह, सभी कदम जो बुरी परिणामों की ओर ले जाते हैं उन्हें हतोत्साहित किया जाना चाहिए।
## Q-लर्निंग
## क्यू-लर्निंग
एक एल्गोरिदम जिसे हम यहां चर्चा करेंगे, उसे **Q-लर्निंग** कहा जाता है। इस एल्गोरिदम में, पॉलिसी को एक फ़ंक्शन (या डेटा संरचना) द्वारा परिभाषित किया जाता है जिसे **Q-टेबल** कहा जाता है। यह प्रत्येक स्टेट में दिए गए एक्शन की "अच्छाई" को रिकॉर्ड करता है।
एक एल्गोरिदम जिसे हम यहाँ चर्चा करेंगे, उसे **क्यू-लर्निंग** कहा जाता है। इस एल्गोरिदम में, नीति एक फ़ंक्शन (या डेटा संरचना) द्वारा परिभाषित होती है जिसे **क्यू-टेबल** कहा जाता है। यह किसी निर्दिष्ट अवस्था में प्रत्येक क्रिया की "भलाइ" को रिकॉर्ड करता है।
इसे Q-टेबल कहा जाता है क्योंकि इसे अक्सर एक टेबल या बहु-आयामी ऐरे के रूप में प्रस्तुत करना सुविधाजनक होता है। चूंकि हमारे बोर्ड का आयाम `width` x `height` है, हम Q-टेबल को `width` x `height` x `len(actions)` आकार के साथ एक numpy ऐरे का उपयोग करके प्रस्तुत कर सकते हैं: (कोड ब्लॉक 6)
इसे क्यू-टेबल कहा जाता है क्योंकि इसे अक्सर एक तालिका या बहुआयामी सरणी के रूप में दर्शाना सुविधाजनक होता है। चूंकि हमारे बोर्ड के आकार `width` x `height` हैं, हम क्यू-टेबल को numpy सरणी के रूप में आकार `width` x `height` x `len(actions)` के साथ दर्शा सकते हैं: (कोड ब्लॉक 6)
ध्यान दें कि हम Q-टेबल के सभी मानों को समान मान के साथ प्रारंभ करते हैं, हमारे मामले में - 0.25। यह "रैंडम वॉक" पॉलिसी के अनुरूप है, क्योंकि प्रत्येक स्टेट में सभी कदम समान रूप से अच्छे हैं। हम बोर्ड पर टेबल को विज़ुअलाइज़ करने के लिए Q-टेबल को `plot` फ़ंक्शन में पास कर सकते हैं: `m.plot(Q)`।
ध्यान दें कि हम क्यू-टेबल के सभी मानों को समान मान के साथ प्रारंभ करते हैं, हमारे मामले में - 0.25। यह "यादृच्छिक चाल" नीति के अनुरूप है, क्योंकि प्रत्येक अवस्था में सभी चालें समान रूप से अच्छी हैं। हम इस क्यू-टेबल को `plot` फ़ंक्शन में पास कर सकते हैं ताकि बोर्ड पर इसे देखा जा सके: `m.plot(Q)`.


प्रत्येक सेल के केंद्र में एक "तीर" होता है जो गति की पसंदीदा दिशा को इंगित करता है। चूंकि सभी दिशाएँ समान हैं, एक बिंदु प्रदर्शित होता है।
प्रत्येक सेल के केंद्र में एक "तीर" होता है जो पसंदीदा आंदोलन दिशा को दर्शाता है। चूंकि सभी दिशाएँ समान हैं, इसलिए एक डॉट दिखाया जाता है।
अब हमें सिमुलेशन चलाने, अपने वातावरण का पता लगाने, और Q-टेबल मानों के बेहतर वितरण को सीखने की आवश्यकता है, जो हमें सेब तक पहुंचने का रास्ता बहुत तेज़ी से खोजने की अनुमति देगा।
अब हमें सिमुलेशन चलाना होगा, अपने पर्यावरण का अन्वेषण करना होगा, और क्यू-टेबल मानों का एक बेहतर वितरण सीखना होगा, जो हमें सेब तक तेजी से पहुंचने में मदद करेगा।
## Q-लर्निंग का सार: बेलमैन समीकरण
## क्यू-लर्निंग का सार: बेलमैन समीकरण
एक बार जब हम चलना शुरू करते हैं, तो प्रत्येक एक्शन का एक संबंधित इनाम होगा, यानी हम सैद्धांतिक रूप से उच्चतम तत्काल इनाम के आधार पर अगले एक्शन का चयन कर सकते हैं। हालांकि, अधिकांश स्टेट्स में, यह कदम हमारे लक्ष्य को प्राप्त नहीं करेगा, और इसलिए हम तुरंत यह तय नहीं कर सकते कि कौन सी दिशा बेहतर है।
जैसे ही हम चलना शुरू करेंगे, प्रत्येक क्रिया का एक संबंधित पुरस्कार होगा, अर्थात हम सैद्धांतिक रूप से सबसे उच्च तत्काल पुरस्कार के आधार पर अगली क्रिया चुन सकते हैं। लेकिन अधिकांश अवस्थाओं में, वह चाल हमारे लक्ष्य सेब तक पहुँचने को पूरा नहीं करेगी, इसलिए हम तुरंत नहीं तय कर सकते कि कौन सी दिशा बेहतर है।
> याद रखें कि तत्काल परिणाम महत्वपूर्ण नहीं है, बल्कि अंतिम परिणाम है, जिसे हम सिमुलेशन के अंत में प्राप्त करेंगे।
> याद रखें कि तत्काल परिणाम महत्वपूर्ण नहीं है, बल्कि अंतिम परिणाम महत्वपूर्ण है, जिसे हम सिमुलेशन के अंत में प्राप्त करेंगे।
इस विलंबित इनाम को ध्यान में रखने के लिए, हमें **[डायनामिक प्रोग्रामिंग](https://en.wikipedia.org/wiki/Dynamic_programming)** के सिद्धांतों का उपयोग करने की आवश्यकता है, जो हमें अपनी समस्या के बारे में पुनरावर्ती रूप से सोचने की अनुमति देते हैं।
इस विलंबित पुरस्कार को ध्यान में रखने के लिए, हमें **[डायनेमिक प्रोग्रामिंग](https://en.wikipedia.org/wiki/Dynamic_programming)** के सिद्धांतों का उपयोग करना होगा, जो हमें हमारी समस्या को पुनरावृत्तिमूलक रूप से सोचने की अनुमति देते हैं।
मान लें कि हम अब स्टेट *s* पर हैं, और हम अगले स्टेट *s'* पर जाना चाहते हैं। ऐसा करने से, हमें तत्काल इनाम *r(s,a)* प्राप्त होगा, जिसे इनाम फ़ंक्शन द्वारा परिभाषित किया गया है, साथ ही कुछ भविष्य का इनाम भी। यदि हम मान लें कि हमारा Q-टेबल प्रत्येक एक्शन की "आकर्षकता" को सही ढंग से दर्शाता है, तो स्टेट *s'* पर हम एक्शन *a'* चुनेंगे जो *Q(s',a')* के अधिकतम मान के अनुरूप होगा। इस प्रकार, स्टेट *s* पर हमें मिलने वाला सबसे अच्छा संभावित भविष्य का इनाम `max`
मान लीजिए हम अब अवस्था *s* में हैं, और हम अगली अवस्था *s'* में जाना चाहते हैं। ऐसा करने पर, हम तत्काल पुरस्कार *r(s,a)* प्राप्त करेंगे, जो पुरस्कार फ़ंक्शन द्वारा परिभाषित है, साथ ही कुछ भविष्य के पुरस्कार भी। यदि हम मान लें कि हमारा क्यू-टेबल प्रत्येक क्रिया की "आकर्षकता" को सही ढंग से दर्शाता है, तो अवस्था *s'* में हम ऐसी क्रिया *a* चुनेंगे जिसका मान अधिकतम होगा *Q(s',a')*। इस प्रकार, अवस्था *s* में हमारे लिए सबसे अच्छा संभव भविष्य का पुरस्कार `max`<sub>a'</sub>*Q(s',a')* होगा (यह अधिकतम सभी संभावित क्रियाओं *a'* पर अवस्था *s'* में लिया जाता है)।
## नीति की जांच करना
इससे क्यू-टेबल के मूल्य की गणना के लिए **बेलमैन सूत्र** मिलता है, जो अवस्था *s* में क्रिया *a* के लिए है:
चूंकि Q-Table प्रत्येक स्थिति में प्रत्येक क्रिया की "आकर्षकता" को सूचीबद्ध करता है, इसे हमारे संसार में कुशल नेविगेशन को परिभाषित करने के लिए उपयोग करना काफी आसान है। सबसे सरल मामले में, हम उस क्रिया का चयन कर सकते हैं जो Q-Table में सबसे उच्च मान से मेल खाती है: (कोड ब्लॉक 9)
यहाँ γ वह तथाकथित **छूट कारक** है जो यह निर्धारित करता है कि आपको वर्तमान पुरस्कार को भविष्य के पुरस्कार से कितनी प्राथमिकता देनी चाहिए।
## सीखने का एल्गोरिदम
उपरोक्त समीकरण के आधार पर, अब हम अपने सीखने वाले एल्गोरिदम के लिए छद्म-कोड लिख सकते हैं:
* क्यू-टेबल Q को सभी अवस्थाओं और क्रियाओं के लिए समान मानों से आरंभ करें
* सीखने की दर α ← 1 सेट करें
* सिमुलेशन को कई बार दोहराएं
1. यादृच्छिक स्थान से शुरू करें
1. दोहराएं
1. अवस्था *s* पर एक क्रिया *a* चुनें
2. क्रिया निष्पादित करें, नई अवस्था *s'* में जाएं
3. यदि हम खेल के अंत की स्थिति में पहुँच गए हैं, या कुल पुरस्कार बहुत कम है - सिमुलेशन बंद करें
4. नई अवस्था पर पुरस्कार *r* गणना करें
5. बेलमैन समीकरण के अनुसार क्यू-फ़ंक्शन अपडेट करें: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ max<sub>a'</sub>Q(s',a'))*
6. *s* ← *s'*
7. कुल पुरस्कार अपडेट करें और α घटाएं।
## विवेचना बनाम अन्वेषण
ऊपर के एल्गोरिदम में, हमने यह निर्दिष्ट नहीं किया कि हम चरण 2.1 में क्रिया कैसे चुनेंगे। यदि हम क्रियाओं को यादृच्छिक रूप से चुनते हैं, तो हम पर्यावरण का यादृच्छिक **अन्वेषण** करेंगे, और हमें अक्सर मरना पड़ सकता है, साथ ही हम उन क्षेत्रों की जांच भी करेंगे जहाँ हम आमतौर पर नहीं जाते। एक वैकल्पिक दृष्टिकोण यह होगा कि हम पहले से ज्ञात क्यू-टेबल मानों का **शोषण** करें, और इसलिए अवस्था *s* पर सबसे अच्छी क्रिया (जिसके क्यू-टेबल मान अधिक हैं) चुनें। हालांकि, यह हमें अन्य अवस्थाओं का अन्वेषण करने से रोकेगा, और संभवतः हम सर्वोत्कृष्ट समाधान नहीं पा सकेंगे।
इसलिए, सबसे अच्छा तरीका यह है कि अन्वेषण और शोषण के बीच संतुलन बनाया जाए। इसे किया जा सकता है कि हम अवस्था *s* पर क्रिया को उन क्यू-टेबल मानों के अनुपात में चुनें। शुरुआत में, जब क्यू-टेबल के सभी मान समान होंगे, तो यह यादृच्छिक चयन के समान होगा, लेकिन जैसे-जैसे हम पर्यावरण के बारे में अधिक सीखेंगे, हम अधिक संभावना के साथ इष्टतम मार्ग का पालन करेंगे, जबकि एजेंट को कभी-कभी अनदेखे रास्ते चुनने की अनुमति भी देंगे।
## Python कार्यान्वयन
अब हम सीखने वाले एल्गोरिदम को लागू करने के लिए तैयार हैं। इसके पहले, हमें ऐसी फ़ंक्शन की भी आवश्यकता है जो क्यू-टेबल में मनमाने नंबरों को संबंधित क्रियाओं के लिए संभावनाओं के वेक्टर में बदल सके।
1. `probs()` नामक फ़ंक्शन बनाएं:
```python
def probs(v,eps=1e-4):
v = v-v.min()+eps
v = v/v.sum()
return v
```
हम कुछ `eps` को मूल वेक्टर में जोड़ते हैं ताकि प्रारंभिक स्थिति में, जब वेक्टर के सभी घटक समान होते हैं, तो 0 से विभाजन से बचा जा सके।
इसे 5000 प्रयोगों, जिन्हें **इपोक्स** भी कहा जाता है, के माध्यम से चलाएं: (कोड ब्लॉक 8)
```python
for epoch in range(5000):
# प्रारंभिक बिंदु चुनें
m.random_start()
# यात्रा शुरू करें
n=0
cum_reward = 0
while True:
x,y = m.human
v = probs(Q[x,y])
a = random.choices(list(actions),weights=v)[0]
dpos = actions[a]
m.move(dpos,check_correctness=False) # हम खिलाड़ी को बोर्ड के बाहर जाने की अनुमति देते हैं, जो एपिसोड को समाप्त करता है
इस एल्गोरिदम को निष्पादित करने के बाद, क्यू-टेबल उन मानों के साथ अद्यतन हो जाएगा जो प्रत्येक चरण पर विभिन्न क्रियाओं की आकर्षकता को परिभाषित करते हैं। हम क्यू-टेबल को अपने बोर्ड पर चलने की इच्छित दिशा दिखाने वाले वेक्टर को प्रत्येक सेल पर प्लॉट करके विज़ुअलाइज़ कर सकते हैं। सरलता के लिए, हम तीर के सिर की जगह एक छोटा वृत्त बनाते हैं।
चूंकि क्यू-टेबल प्रत्येक अवस्था में प्रत्येक क्रिया की "आकर्षकता" सूचिबद्ध करता है, इसका उपयोग हमारे विश्व में कुशल नेविगेशन को परिभाषित करने के लिए काफी सरल है। सबसे सरल मामले में, हम सबसे उच्च क्यू-टेबल मान वाले क्रिया का चयन कर सकते हैं: (कोड ब्लॉक 9)
```python
def qpolicy_strict(m):
@ -198,17 +274,18 @@ def qpolicy_strict(m):
walk(m,qpolicy_strict)
```
> यदि आप ऊपर दिए गए कोड को कई बार आज़माते हैं, तो आप देख सकते हैं कि कभी-कभी यह "अटक" जाता है, और आपको इसे रोकने के लिए नोटबुक में STOP बटन दबाना पड़ता है। ऐसा इसलिए होता है क्योंकि कुछ स्थितियों में दो अवस्थाएँ "एक-दूसरे की ओर इशारा करती हैं" इष्टतम Q-Value के संदर्भ में, जिससे एजेंट उन अवस्थाओं के बीच अनिश्चितकाल तक घूमता रहता है।
> यदि आप ऊपर दिया गया कोड कई बार चलाते हैं, तो आप देख सकते हैं कि कभी-कभी यह "अटक" जाता है, और आपको इसे रोकने के लिए नोटबुक में STOP बटन दबाना पड़ता है। ऐसा इसलिए होता है क्योंकि ऐसी स्थितियां हो सकती हैं जब दो राज्य अनुकूल Q-मूल्य के संदर्भ में एक-दूसरे की "मुद्दा" करते हैं, जिस स्थिति में एजेंट अनंत काल तक उन राज्यों के बीच घूमता रहता है।
## 🚀चुनौती
> **कार्य 1:** `walk` फ़ंक्शन को संशोधित करें ताकि पथ की अधिकतम लंबाई को एक निश्चित संख्या (जैसे, 100) तक सीमित किया जा सके, और ऊपर दिया गया कोड समय-समय पर इस मान को लौटाए।
> **कार्य 1:** `walk` फ़ंक्शन को इस प्रकार संशोधित करें कि पथ की अधिकतम लंबाई एक निश्चित संख्या के चरणों (मान लीजिए, 100) तक सीमित हो, और ऊपर दिए गए कोड को समय-समय पर यह मान लौटाते हुए देखें।
> **कार्य 2:** `walk` फ़ंक्शन को संशोधित करें ताकि वह उन स्थानों पर वापस न जाए जहाँ वह पहले ही जा चुका है। यह `walk` को लूपिंग से रोक देगा, लेकिन एजेंट अभी भी ऐसी जगह पर "फंस" सकता है जहाँ से वह बाहर नहीं निकल सकता।
> **कार्य 2:** `walk` फ़ंक्शन को इस तरह बदलें कि यह उन स्थानों पर वापस न जाए जहां यह पहले ही जा चुका हो। इससे `walk` के लूप में फंसने से बचा जा सकेगा, हालांकि, एजेंट फिर भी एक ऐसे स्थान पर "फंस" सकता है जहाँ से वह निकल न सके।
## नेविगेशन
एक बेहतर नेविगेशन नीति वह होगी जो हमने प्रशिक्षण के दौरान उपयोग की थी, जो शोषण और अन्वेषण को जोड़ती है। इस नीति में, हम प्रत्येक क्रिया को एक निश्चित संभावना के साथ चुनेंगे, जो Q-Table में मानों के अनुपात में होगी। यह रणनीति अभी भी एजेंट को पहले से खोजे गए स्थान पर वापस लौटने का कारण बन सकती है, लेकिन जैसा कि आप नीचे दिए गए कोड से देख सकते हैं, यह वांछित स्थान तक बहुत छोटे औसत पथ का परिणाम देती है (याद रखें कि `print_statistics` सिमुलेशन को 100 बार चलाता है): (कोड ब्लॉक 10)
एक बेहतर नेविगेशन नीति वही होगी जिसका हमने प्रशिक्षण के दौरान उपयोग किया था, जो शोषण और अन्वेषण का संयोजन करती है। इस नीति में, हम प्रत्येक क्रिया को निश्चित संभावना के साथ चुनेंगे, जो Q-टेबल में मानों के अनुपात में होगी। यह रणनीति एजेंट को पहले से देखे गए स्थान पर वापस लौटने का कारण बन सकती है, लेकिन जैसा कि नीचे के कोड में देख सकते हैं, यह वांछित स्थान तक बहुत छोटा औसत पथ प्रदान करती है (ध्यान दें कि `print_statistics` सिमुलेशन को 100 बार चलाता है): (कोड ब्लॉक 10)
```python
def qpolicy(m):
@ -220,28 +297,32 @@ def qpolicy(m):
print_statistics(qpolicy)
```
इस कोड को चलाने के बाद, आपको पहले की तुलना में बहुत छोटा औसत पथ लंबाई प्राप्त करनी चाहिए, जो 3-6 की सीमा में होगी।
इस कोड को चलाने के बाद, आपको पहले की तुलना में बहुत छोटा औसत पथ लंबाई प्राप्त होनी चाहिए, लगभग 3-6 के बीच।
## सीखने की प्रक्रिया की जांच
जैसा कि हमने उल्लेख किया है, सीखने की प्रक्रिया समस्या स्थान की संरचना के बारे में प्राप्त ज्ञान के अन्वेषण और उपयोग के बीच संतुलन है। हमने देखा है कि सीखने के परिणाम (एजेंट को लक्ष्य तक पहुँचने के लिए छोटा पथ खोजने की क्षमता) में सुधार हुआ है, लेकिन यह देखना भी दिलचस्प है कि सीखने की प्रक्रिया के दौरान औसत पथ लंबाई कैसे व्यवहार करती है:
जैसा कि हमने उल्लेख किया है, सीखने की प्रक्रिया समस्या स्थान की संरचना के बारे में प्राप्त ज्ञान के अन्वेषण और उपयोग के बीच संतुलन है। हमने देखा कि सीखने के परिणाम (एजेंट को लक्ष्य तक छोटा पथ खोजने में मदद करने की क्षमता) बेहतर हुए हैं, लेकिन यह देखना भी दिलचस्प है कि सीखने की प्रक्रिया के दौरान औसत पथ लंबाई कैसे व्यवहार करती है:
## सीखने को निम्नलिखित रूप में संक्षेपित किया जा सकता है:
सीखने को इस प्रकार संक्षेपित किया जा सकता है:
- **औसत पथ लंबाई बढ़ती है**। यहाँ हम देखते हैं कि शुरुआत में औसत पथ लंबाई बढ़ती है। ऐसा संभवतः इसलिए होता है क्योंकि जब हमें पर्यावरण के बारे में कुछ भी पता नहीं होता, तो हम खराब अवस्थाओं, पानी या भेड़िये में फंसने की संभावना रखते हैं। जैसे-जैसे हम अधिक सीखते हैं और इस ज्ञान का उपयोग करना शुरू करते हैं, हम पर्यावरण का अधिक समय तक अन्वेषण कर सकते हैं, लेकिन हमें अभी भी सेबों के स्थान का सही पता नहीं होता।
- **औसत पथ लंबाई बढ़ती है।** यहाँ हम देखते हैं कि पहले औसत पथ लंबाई बढ़ती है। यह संभवतः इसलिए होता है क्योंकि जब हमें पर्यावरण के बारे में कुछ पता नहीं होता, तो हम खराब राज्यों, पानी या भेड़िये में फंस सकते हैं। जैसे-जैसे हम अधिक सीखते हैं और इस ज्ञान का उपयोग करते हैं, हम पर्यावरण का अधिक अन्वेषण कर सकते हैं, लेकिन फिर भी हमें सेबों के स्थान के बारे में पूरी जानकारी नहीं होती।
- **पथ लंबाई घटती है, जैसे-जैसे हम अधिक सीखते हैं**। एक बार जब हम पर्याप्त सीख लेते हैं, तो एजेंट के लिए लक्ष्य प्राप्त करना आसान हो जाता है, और पथ लंबाई घटने लगती है। हालांकि, हम अभी भी अन्वेषण के लिए खुले हैं, इसलिए हम अक्सर सबसे अच्छे पथ से दूर चले जाते हैं और नए विकल्पों का अन्वेषण करते हैं, जिससे पथ आदर्श से लंबा हो जाता है।
- **जैसे-जैसे हम अधिक सीखते हैं, पथ लंबाई घटती है।** जब हम पर्याप्त सीख जाते हैं, तो एजेंट के लिए लक्ष्य प्राप्त करना आसान हो जाता है, और पथ लंबाई घटने लगती है। फिर भी, हम अन्वेषण के लिए खुले होते हैं, इसलिए हम अक्सर सर्वोत्तम पथ से भटक जाते हैं, और नए विकल्प खोजते हैं, जिससे पथ औप्टिमल से लंबा हो जाता है।
- **लंबाई अचानक बढ़ जाती है**। जो हम इस ग्राफ पर भी देखते हैं वह यह है कि किसी बिंदु पर, लंबाई अचानक बढ़ जाती है। यह प्रक्रिया की अनिश्चित प्रकृति को इंगित करता है, और यह कि हम किसी बिंदु पर Q-Table गुणांक को नए मानों से अधिलेखित करके "खराब" कर सकते हैं। इसे आदर्श रूप से सीखने की दर को कम करके न्यूनतम किया जाना चाहिए (उदाहरण के लिए, प्रशिक्षण के अंत में, हम केवल Q-Table मानों को एक छोटे मान से समायोजित करते हैं)।
- **लंबाई अचानक बढ़ जाती है।** इस ग्राफ़ पर हम यह भी देखते हैं कि कुछ बिंदु पर लंबाई अचानक बढ़ गई। यह प्रक्रिया की यादृच्छिक प्रकृति को दर्शाता है, और यह कि कभी-कभी हम Q-टेबल गुणांक को नए मानों से अधिलेखित करके "खराब" कर देते हैं। आदर्श रूप से, इसे सीखने की दर को घटाकर कम किया जाना चाहिए (उदाहरण के लिए, प्रशिक्षण के अंत में, हम केवल Q-टेबल मानों को थोड़े मान से समायोजित करते हैं)।
कुल मिलाकर, यह याद रखना महत्वपूर्ण है कि सीखने की प्रक्रिया की सफलता और गुणवत्ता काफी हद तक पैरामीटर पर निर्भर करती है, जैसे सीखने की दर, सीखने की दर में कमी, और छूट कारक। इन्हें अक्सर **हाइपरपैरामीटर** कहा जाता है, ताकि उन्हें **पैरामीटर** से अलग किया जा सके, जिन्हें हम प्रशिक्षण के दौरान अनुकूलित करते हैं (उदाहरण के लिए, Q-Table गुणांक)। सबसे अच्छे हाइपरपैरामीटर मानों को खोजने की प्रक्रिया को **हाइपरपैरामीटर अनुकूलन** कहा जाता है, और यह एक अलग विषय के योग्य है।
कुल मिलाकर, यह याद रखना महत्वपूर्ण है कि सीखने की प्रक्रिया की सफलता और गुणवत्ता काफी हद तक कुछ पैरामीटरों पर निर्भर करती है, जैसे कि सीखने की दर, सीखने की दर में कमी, और डिस्काउंट फैक्टर। इन्हें अक्सर **हाइपरपैरामीटर** कहा जाता है, ताकि उन्हें उन **पैरामीटरों** से अलग किया जा सके जिन्हें हम प्रशिक्षण के दौरान अनुकूलित करते हैं (उदाहरण के लिए, Q-टेबल गुणांक)। सबसे अच्छे हाइपरपैरामीटर मान खोजने की प्रक्रिया को **हाइपरपैरामीटर ऑप्टिमाइज़ेशन** कहा जाता है, और यह एक अलग विषय का हकदार है।
## [प्रसारण के बाद क्विज़](https://ff-quizzes.netlify.app/en/ml/)
## असाइनमेंट
[एक अधिक यथार्थवादी संसार](assignment.md)
## असाइनमेंट
[एक अधिक यथार्थवादी दुनिया](assignment.md)
---
**अस्वीकरण**:
यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**अस्वीकरण**:
इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
इस पाठ में, हम **OpenAI Gym** नामक एक लाइब्रेरी का उपयोग करेंगे जो विभिन्न **पर्यावरणों** को सिमुलेट करती है। आप इस पाठ का कोड स्थानीय रूप से (जैसे Visual Studio Code से) चला सकते हैं, जिसमें सिमुलेशन एक नई विंडो में खुलेगा। ऑनलाइन कोड चलाते समय, आपको कोड में कुछ बदलाव करने की आवश्यकता हो सकती है, जैसा कि [यहां](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) वर्णित है।
पिछली पाठ में हमने जो समस्या हल की थी, वह एक खिलौना समस्या लग सकती है, जो वास्तविक जीवन के परिदृश्यों के लिए वास्तविक रूप से लागू नहीं होती। ऐसा नहीं है, क्योंकि कई वास्तविक दुनिया की समस्याएँ भी इस परिदृश्य को साझा करती हैं - जिसमें शतरंज या गो खेलना भी शामिल है। ये समान हैं, क्योंकि हमारे पास एक बोर्ड होता है जिसमें दिए गए नियम होते हैं और एक **अवकलित स्थिति** होती है।
इस पाठ में हम Q-लर्निंग के समान सिद्धांतों को एक ऐसी समस्या पर लागू करेंगे जिसमें **सतत स्थिति** होती है, अर्थात ऐसी स्थिति जो एक या अधिक वास्तविक संख्याओं द्वारा दी जाती है। हम निम्नलिखित समस्या से निपटेंगे:
> **समस्या**: यदि पीटर भालू से बचना चाहता है, तो उसे तेज़ चलना होगा। हम देखेंगे कि कैसे पीटर Q-लर्निंग का उपयोग करके स्केट करना सीख सकता है, खासकर संतुलन बनाए रखना।
> पीटर और उसके दोस्त भालू से बचने के लिए रचनात्मक हो जाते हैं! छवि द्वारा [Jen Looper](https://twitter.com/jenlooper)
हम संतुलन बनाए रखने के एक सरल संस्करण का उपयोग करेंगे जिसे **कार्टपोल** समस्या के रूप में जाना जाता है। कार्टपोल दुनिया में, हमारे पास एक क्षैतिज स्लाइडर होता है जो बाएं या दाएं स्थानांतरित हो सकता है, और लक्ष्य स्लाइडर के शीर्ष पर एक ऊर्ध्वाधर पोल का संतुलन बनाए रखना होता है।
इस पाठ में, हम विभिन्न **परिसरों** का अनुकरण करने के लिए **OpenAI Gym** नामक पुस्तकालय का उपयोग करेंगे। आप इस पाठ के कोड को स्थानीय रूप से चला सकते हैं (उदा. Visual Studio Code से), उस स्थिति में अनुकरण एक नई विंडो में खुलेगा। ऑनलाइन कोड चलाते समय, आपको कोड में कुछ समायोजन करने पड़ सकते हैं, जैसा कि [यहाँ](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) वर्णित है।
## OpenAI Gym
पिछले पाठ में, खेल के नियम और स्थिति `Board` क्लास द्वारा दी गई थी जिसे हमने स्वयं परिभाषित किया था। यहां हम एक विशेष **सिमुलेशन पर्यावरण** का उपयोग करेंगे, जो बैलेंसिंग पोल के पीछे के भौतिकी को सिमुलेट करेगा। रिइंफोर्समेंट लर्निंग एल्गोरिदम को प्रशिक्षित करने के लिए सबसे लोकप्रिय सिमुलेशन पर्यावरणों में से एक [Gym](https://gym.openai.com/) है, जिसे [OpenAI](https://openai.com/) द्वारा बनाए रखा गया है। इस जिम का उपयोग करके हम विभिन्न **पर्यावरणों** को बना सकते हैं, जैसे कि कार्टपोल सिमुलेशन से लेकर Atari गेम्स तक।
पिछली पाठ में, खेल के नियम और स्थिति `Board` वर्ग द्वारा दी गई थी जिसे हमने स्वयं परिभाषित किया था। यहाँ हम एक विशेष **अनुकरण पर्यावरण** का उपयोग करेंगे, जो संतुलन पोल के पीछे की भौतिकी का अनुकरण करेगा। प्रशिक्षण सुदृढीकरण लर्निंग एल्गोरिदम के लिए सबसे लोकप्रिय अनुकरण परिवेशों में से एक [Gym](https://gym.openai.com/) कहलाता है, जिसे [OpenAI](https://openai.com/) द्वारा रखरखाव किया जाता है। इस जिम का उपयोग करके हम विभिन्न **परिसर** बना सकते हैं, जैसे कार्टपोल अनुकरण से लेकर अटारी खेल तक।
> **Note**: आप OpenAI Gym द्वारा उपलब्ध अन्य पर्यावरणों को [यहां](https://gym.openai.com/envs/#classic_control) देख सकते हैं।
> **टिप्पणी**: आप OpenAI Gym के अन्य उपलब्ध परिसरों को [यहाँ](https://gym.openai.com/envs/#classic_control) देख सकते हैं।
सबसे पहले, जिम को इंस्टॉल करें और आवश्यक लाइब्रेरी को इंपोर्ट करें (कोड ब्लॉक 1):
पहले, चलिए जिम इंस्टॉल करें और आवश्यक पुस्तकालय आयात करें (कोड ब्लॉक 1):
```python
import sys
@ -20,15 +40,15 @@ import numpy as np
import random
```
## अभ्यास - कार्टपोल पर्यावरण को प्रारंभ करें
## अभ्यास - कार्टपोल पर्यावरण आरंभ करें
कार्टपोल बैलेंसिंग समस्या पर काम करने के लिए, हमें संबंधित पर्यावरण को प्रारंभ करना होगा। प्रत्येक पर्यावरण निम्नलिखित से जुड़ा होता है:
कार्टपोल संतुलन समस्या पर काम करने के लिए, हमें संबंधित पर्यावरण आरंभ करना होगा। प्रत्येक पर्यावरण एक से जुड़ा होता है:
- **Observation space** जो उस जानकारी की संरचना को परिभाषित करता है जो हमें पर्यावरण से प्राप्त होती है। कार्टपोल समस्या के लिए, हमें पोल की स्थिति, वेग और कुछ अन्य मान प्राप्त होते हैं।
- **अवलोकन स्थान** जो उस जानकारी की संरचना को परिभाषित करता है जो हमें पर्यावरण से प्राप्त होती है। कार्टपोल समस्या में, हमें पोल की स्थिति, वेग और कुछ अन्य मान प्राप्त होते हैं।
- **Action space** जो संभावित क्रियाओं को परिभाषित करता है। हमारे मामले में, एक्शन स्पेस डिस्क्रीट है और इसमें दो क्रियाएं शामिल हैं - **बाएं** और **दाएं**। (कोड ब्लॉक 2)
- **कार्य स्थान** जो संभव क्रियाओं को परिभाषित करता है। हमारे मामले में, क्रिया स्थान अवकलित है, और इसमें दो क्रियाएं होती हैं - **बाएँ** और **दाएँ**। (कोड ब्लॉक 2)
1. प्रारंभ करने के लिए, निम्नलिखित कोड टाइप करें:
1. आरंभ करने के लिए, निम्नलिखित कोड टाइप करें:
```python
env = gym.make("CartPole-v1")
@ -37,9 +57,9 @@ import random
print(env.action_space.sample())
```
पर्यावरण कैसे काम करता है यह देखने के लिए, चलिए 100 चरणों के लिए एक छोटा सिमुलेशन चलाते हैं। प्रत्येक चरण में, हम एक क्रिया प्रदान करते हैं जिसे लिया जाना चाहिए - इस सिमुलेशन में हम बस `action_space` से एक क्रिया को रैंडमली चुनते हैं।
पर्यावरण कैसे काम करता है यह देखने के लिए, चलिए 100 कदमों के लिए एक छोटा अनुकरण चलाते हैं। प्रत्येक कदम पर, हम एक क्रिया देते हैं जिसे लिया जाना है - इस अनुकरण में हम बस `action_space` से यादृच्छिक रूप से एक क्रिया चुनते हैं।
1. नीचे दिए गए कोड को चलाएं और देखें कि इसका क्या परिणाम होता है।
1. नीचे दिए गए कोड को चलाएँ और देखें कि इसका परिणाम क्या होता है।
✅ याद रखें कि इस कोड को स्थानीय Python इंस्टॉलेशन पर चलाना बेहतर है! (कोड ब्लॉक 3)
1. सिमुलेशन के दौरान, हमें यह तय करने के लिए ऑब्ज़र्वेशन प्राप्त करने की आवश्यकता होती है कि कैसे कार्य करना है। वास्तव में, स्टेप फंक्शन वर्तमान ऑब्ज़र्वेशन, एक रिवॉर्ड फंक्शन, और एक डन फ्लैग लौटाता है जो यह संकेत देता है कि सिमुलेशन जारी रखना समझदारी है या नहीं: (कोड ब्लॉक 4)
1. अनुकरण के दौरान, हमें निर्णय लेने के लिए अवलोकन प्राप्त करना होता है। वास्तव में, step फ़ंक्शन वर्तमान अवलोकन, पुरस्कार फ़ंक्शन, और done फ़्लैग लौटाता है जो बताता है कि अनुकरण जारी रखना समझदारी है या नहीं: (कोड ब्लॉक 4)
सिमुलेशन के प्रत्येक चरण में लौटाए गए ऑब्ज़र्वेशन वेक्टर में निम्नलिखित मान होते हैं:
हर कदम पर लौटाए गए अवलोकन वेक्टर में निम्नलिखित मान शामिल हैं:
- कार्ट की स्थिति
- कार्ट का वेग
- कार्ट की गति
- पोल का कोण
- पोल का रोटेशन दर
- पोल की घूर्णन दर
1. उन संख्याओं के न्यूनतम और अधिकतम मान प्राप्त करें: (कोड ब्लॉक 5)
@ -95,30 +115,30 @@ import random
print(env.observation_space.high)
```
आप यह भी देख सकते हैं कि प्रत्येक सिमुलेशन चरण पर रिवॉर्ड मान हमेशा 1 होता है। ऐसा इसलिए है क्योंकि हमारा लक्ष्य जितना संभव हो उतना लंबे समय तक जीवित रहना है, यानी पोल को एक उचित वर्टिकल स्थिति में सबसे लंबे समय तक बनाए रखना।
आप यह भी नोटिस कर सकते हैं कि प्रत्येक अनुकरण कदम पर पुरस्कार मान हमेशा 1 होता है। ऐसा इसलिए है क्योंकि हमारा लक्ष्य यथासंभव लंबे समय तक जीवित रहना है, अर्थात पोल को यथासंभव लंबवत स्थिति में रखना।
✅ वास्तव में, यदि हम 100 लगातार प्रयासों में औसत रिवॉर्ड 195 प्राप्त करने में सफल होते हैं, तो कार्टपोल सिमुलेशन को हल किया हुआ माना जाता है।
✅ वास्तव में, यदि हम 100 लगातार परीक्षणों में औसत पुरस्कार 195 प्राप्त करने में सक्षम हैं तो CartPole अनुकरण को हल माना जाता है।
## स्थिति का डिस्क्रीटाइजेशन
## स्थिति का वर्गीकरण
Q-Learning में, हमें Q-Table बनानी होती है जो यह परिभाषित करती है कि प्रत्येक स्थिति में क्या करना है। ऐसा करने के लिए, हमें स्थिति को **डिस्क्रीट** बनाना होगा, अधिक सटीक रूप से, इसमें सीमित संख्या में डिस्क्रीट मान होने चाहिए। इसलिए, हमें किसी तरह से अपने ऑब्ज़र्वेशन को **डिस्क्रीटाइज** करना होगा, उन्हें सीमित सेट की स्थितियों में मैप करना होगा।
Q-लर्निंग में, हमें Q-टेबल बनाना होता है जो प्रत्येक स्थिति में क्या करना है यह परिभाषित करता है। ऐसा करने के लिए, हमें स्थिति को **अवकलित** (Discreet) होना चाहिए, अर्थात इसे सीमित संख्या में वर्गीकृत मानों से बनाना होगा। इसलिए हमें किसी तरह हमारे अवलोकनों को **वर्गीकृत** करना होगा, जिससे वे सीमित राज्य सेट में मैप हो जाएं।
हम इसे करने के कुछ तरीके हैं:
- **बिन्स में विभाजित करें**। यदि हमें किसी मान का अंतराल पता है, तो हम इस अंतराल को कई **बिन्स** में विभाजित कर सकते हैं, और फिर उस मान को उस बिन नंबर से बदल सकते हैं जिसमें वह आता है। इसे numpy के [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) मेथड का उपयोग करके किया जा सकता है। इस मामले में, हम स्थिति का आकार सटीक रूप से जान पाएंगे, क्योंकि यह डिजिटलाइजेशन के लिए चुने गए बिन्स की संख्या पर निर्भर करेगा।
- **बिन्स में विभाजित करें**। यदि हमें किसी मान के अंतराल का पता है, तो हम इस अंतराल को कई **बिन्स** में विभाजित कर सकते हैं, और फिर मान को उस बिन नंबर से बदल सकते हैं जिसमें वह आता है। यह numpy के [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) मेथड का उपयोग करके किया जा सकता है। इस मामले में, हमें स्थिति का आकार ठीक से पता होगा, क्योंकि यह उन बिन्स की संख्या पर निर्भर करेगा जो हम डिजिटलीकरण के लिए चुनते हैं।
✅ हम मानों को एक सीमित अंतराल (जैसे, -20 से 20) में लाने के लिए रैखिक इंटरपोलेशन कर सकते हैं, और फिर उन्हें गोल करके पूर्णांकों में बदल सकते हैं। इससे हमें स्थिति के आकार पर कम नियंत्रण मिलेगा, खासकर यदि हमें इनपुट मानों की सटीक रेंज ज्ञात न हो। उदाहरण के लिए, हमारे मामले में 4 में से 2 मानों के मूल्य सीमित नहीं हैं, जिसका अर्थ है कि स्थिति की अनंत संख्या हो सकती है।
✅ हम लीनियर इंटरपोलेशन का उपयोग करके मानों को किसी सीमित अंतराल (जैसे, -20 से 20 तक) में ला सकते हैं, और फिर उन्हें राउंडिंग करके पूर्णांक में बदल सकते हैं। इससे स्थिति के आकार पर थोड़ा कम नियंत्रण मिलता है, खासकर यदि हमें इनपुट मानों की सटीक सीमाएं नहीं पता हों। उदाहरण के लिए, हमारे मामले में 4 में से 2 मानों की कोई ऊपरी/निचली सीमा नहीं है, जिससे असीमित संख्या में स्थितियां हो सकती हैं।
हमारे उदाहरण में, हम दूसरे दृष्टिकोण के साथ जाएंगे। आप बाद में देखेंगे कि अपरिभाषित ऊपरी/नीचे की सीमाओं के बावजूद, ये मान बहुत कम ही किसी निश्चित सीमित अंतराल से बाहर जाते हैं, इसलिए अत्यधिक मानों वाली अवस्थाएँ बहुत दुर्लभ होंगी।
हमारे उदाहरण में, हम दूसरे दृष्टिकोण का उपयोग करेंगे। जैसा कि आप बाद में देख सकते हैं, अपरिभाषित ऊपरी/निचली सीमाओं के बावजूद, वे मान शायद ही कभी कुछ सीमित अंतरालों के बाहर मान लेते हैं, इसलिए उन स्थितियों के साथ चरम मान बहुत दुर्लभ होंगे।
1. यहां वह फंक्शन है जो हमारे मॉडल से ऑब्ज़र्वेशन लेगा और 4 पूर्णांक मानों के टपल को उत्पन्न करेगा: (कोड ब्लॉक 6)
1. यहाँ वह फ़ंक्शन है जो हमारे मॉडल से अवलोकन लेकर 4 पूर्णांक मानों का एक टुपल बनाएगा: (कोड ब्लॉक 6)
1. चलिए बिन्स का उपयोग करके डिस्क्रीटाइजेशन के दूसरे तरीके का भी पता लगाते हैं: (कोड ब्लॉक 7)
1. चलिए बिन्स के उपयोग से एक और वर्गीकरण विधि का अन्वेषण करते हैं: (कोड ब्लॉक 7)
```python
def create_bins(i,num):
@ -126,17 +146,17 @@ Q-Learning में, हमें Q-Table बनानी होती है
print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10))
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter
nbins = [20,20,10,10] # number of bins for each parameter
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # प्रत्येक पैरामीटर के लिए मानों के अंतराल
nbins = [20,20,10,10] # प्रत्येक पैरामीटर के लिए बिन की संख्या
bins = [create_bins(ints[i],nbins[i]) for i in range(4)]
def discretize_bins(x):
return tuple(np.digitize(x[i],bins[i]) for i in range(4))
```
1. अब एक छोटा सिमुलेशन चलाएं और उन डिस्क्रीट पर्यावरण मानों का निरीक्षण करें। `discretize` और `discretize_bins` दोनों को आज़माने के लिए स्वतंत्र महसूस करें और देखें कि क्या कोई अंतर है।
1. अब चलिए एक छोटा अनुकरण चलाते हैं और इन वर्गीकृत पर्यावरण मानों को देखें। आप `discretize` और `discretize_bins` दोनों को आज़मा सकते हैं और देख सकते हैं कि क्या कोई अंतर है।
✅ `discretize_bins` बिन नंबर लौटाता है, जो 0-आधारित होता है। इसलिए इनपुट वैरिएबल के मानों के आसपास 0 के लिए यह अंतराल के मध्य से संख्या (10) लौटाता है। `discretize` में, हमने आउटपुट मानों की रेंज की परवाह नहीं की, जिससे वे नकारात्मक हो सकते हैं, इसलिए स्थिति मान शिफ्ट नहीं होते हैं, और 0 का मतलब 0 होता है। (कोड ब्लॉक 8)
✅ discretize_bins बिन नंबर लौटाता है, जो 0-आधारित है। इसलिए 0 के आसपास के इनपुट मानों के लिए यह मध्य अंतराल (10) का नंबर लौटाता है। वहीं discretize में हमने आउटपुट मानों की सीमा की परवाह नहीं की, जिससे मान नकारात्मक भी हो सकते हैं, इसलिए स्थिति मान विस्थापित नहीं होते और 0 का मतलब 0 होता है। (कोड ब्लॉक 8)
```python
env.reset()
@ -150,15 +170,15 @@ Q-Learning में, हमें Q-Table बनानी होती है
env.close()
```
✅ यदि आप देखना चाहते हैं कि पर्यावरण कैसे निष्पादित होता है, तो env.render से शुरू होने वाली लाइन को अनकमेंट करें। अन्यथा आप इसे बैकग्राउंड में निष्पादित कर सकते हैं, जो तेज़ है। हम अपने Q-Learning प्रक्रिया के दौरान इस "अदृश्य" निष्पादन का उपयोग करेंगे।
✅ यदि आप देखना चाहते हैं कि पर्यावरण कैसे चलता है, तो env.render से शुरू होने वाली लाइन की टिप्पणी हटा दें। अन्यथा आप इसे पृष्ठभूमि में चला सकते हैं, जो तेज होता है। Q-लर्निंग प्रक्रिया के दौरान हम इस "अदृश्य" निष्पादन का उपयोग करेंगे।
## Q-Table की संरचना
## Q-टेबल संरचना
पिछले पाठ में, स्थिति 0 से 8 तक की संख्याओं की एक साधारण जोड़ी थी, और इसलिए Q-Table को numpy टेंसर द्वारा 8x8x2 के आकार के साथ प्रस्तुत करना सुविधाजनक था। यदि हम बिन्स डिस्क्रीटाइजेशन का उपयोग करते हैं, तो हमारे स्थिति वेक्टर का आकार भी ज्ञात है, इसलिए हम वही दृष्टिकोण अपना सकते हैं और स्थिति को 20x20x10x10x2 के आकार के ऐरे द्वारा प्रस्तुत कर सकते हैं (यहां 2 एक्शन स्पेस का आयाम है, और पहले आयाम ऑब्ज़र्वेशन स्पेस में प्रत्येक पैरामीटर के लिए उपयोग किए गए बिन्स की संख्या से संबंधित हैं)।
पिछली पाठ में, स्थिति 0 से 8 की सरल जोड़ी थी, इसलिए Q-टेबल को 8x8x2 आकार के numpy टेन्सर द्वारा दर्शाना सुविधाजनक था। यदि हम बिन्स वर्गीकरण का उपयोग करें, तो हमारे स्थिति वेक्टर का आकार भी ज्ञात होगा, इसलिए हम इसी दृष्टिकोण का उपयोग कर सकते हैं और 20x20x10x10x2 आकार के एरे से स्थिति को दर्शा सकते हैं (यहाँ 2 क्रिया स्थान का आयाम है, और पहली आयाम पर्यवेक्षण स्थान के प्रत्येक पैरामीटर के लिए चुने गए बिन्स की संख्या के अनुरूप हैं)।
हालांकि, कभी-कभी ऑब्ज़र्वेशन स्पेस के सटीक आयाम ज्ञात नहीं होते। `discretize` फंक्शन के मामले में, हम कभी भी यह सुनिश्चित नहीं कर सकते कि हमारी स्थिति निश्चित सीमाओं के भीतर रहती है, क्योंकि कुछ मूल मान बाउंड नहीं होते। इसलिए, हम थोड़ा अलग दृष्टिकोण अपनाएंगे और Q-Table को एक डिक्शनरी द्वारा प्रस्तुत करेंगे।
हालाँकि, कई बार अवलोकन स्थान के सटीक आयाम ज्ञात नहीं होते। `discretize` फ़ंक्शन के मामले में, हम कभी सुनिश्चित नहीं हो सकते कि हमारी स्थिति निश्चित सीमाओं के भीतर रहती है या नहीं, क्योंकि कुछ मूल मानों पर कोई सीमा नहीं है। इसलिए, हम एक थोड़ा भिन्न दृष्टिकोण अपनाएंगे और Q-टेबल को एक शब्दकोश द्वारा दर्शाएंगे।
1. *(state,action)* जोड़ी को डिक्शनरी की कुंजी के रूप में उपयोग करें, और मान Q-Table एंट्री मान से संबंधित होगा। (कोड ब्लॉक 9)
1. * (स्थिति, क्रिया)* जोड़ी को शब्दकोश की कुंजी के रूप में उपयोग करें, और मान Q-टेबल प्रविष्टि मान के अनुरूप होगा। (कोड ब्लॉक 9)
```python
Q = {}
@ -168,38 +188,38 @@ Q-Learning में, हमें Q-Table बनानी होती है
return [Q.get((state,a),0) for a in actions]
```
यहां हमने एक फंक्शन `qvalues()` भी परिभाषित किया है, जो एक दिए गए स्थिति के लिए Q-Table मानों की सूची लौटाता है जो सभी संभावित क्रियाओं से संबंधित है। यदि Q-Table में एंट्री मौजूद नहीं है, तो हम डिफ़ॉल्ट रूप से 0 लौटाएंगे।
यहाँ हम `qvalues()` फ़ंक्शन भी परिभाषित करते हैं, जो दिए गए स्थिति के लिए सभी संभव क्रियाओं के Q-टेबल मानों की सूची लौटाता है। यदि प्रविष्टि Q-टेबल में मौजूद नहीं होती, तो हम डिफ़ॉल्ट रूप से 0 लौटाएंगे।
## चलिए Q-Learning शुरू करें
## चलिए Q-लर्निंग शुरू करें
अब हम पीटर को बैलेंस करना सिखाने के लिए तैयार हैं!
अब हम पीटर को संतुलन बनाए रखना सिखाने के लिए तैयार हैं!
1. सबसे पहले, कुछ हाइपरपैरामीटर सेट करें: (कोड ब्लॉक 10)
```python
# hyperparameters
# हाइपरपैरामीटर
alpha = 0.3
gamma = 0.9
epsilon = 0.90
```
यहां, `alpha`**लर्निंग रेट** है जो यह परिभाषित करता है कि हमें प्रत्येक चरण में Q-Table के वर्तमान मानों को किस हद तक समायोजित करना चाहिए। पिछले पाठ में हमने 1 से शुरुआत की थी, और फिर प्रशिक्षण के दौरान `alpha` को कम मानों में घटा दिया था। इस उदाहरण में हम इसे स्थिर रखेंगे केवल सादगी के लिए, और आप बाद में `alpha` मानों को समायोजित करने के साथ प्रयोग कर सकते हैं।
यहाँ, `alpha`**लर्निंग रेट** है जो यह परिभाषित करता है कि हमें प्रत्येक कदम पर Q-टेबल के वर्तमान मानों को कितना समायोजित करना चाहिए। पिछली पाठ में हमने इसे 1 से शुरू किया था, और प्रशिक्षण के दौरान `alpha` को कम किया था। इस उदाहरण में हम सरलता के लिए इसे स्थिर रखेंगे, और आप बाद में `alpha` मानों का समायोजन करके प्रयोग कर सकते हैं।
`gamma`**डिस्काउंट फैक्टर** है जो यह दिखाता है कि हमें वर्तमान रिवॉर्ड की तुलना में भविष्य के रिवॉर्ड को किस हद तक प्राथमिकता देनी चाहिए।
`gamma`**डिस्काउंट फैक्टर** है जो यह दर्शाता है कि हमें वर्तमान पुरस्कार की तुलना में भविष्य के पुरस्कार को कितना प्राथमिकता देनी चाहिए।
`epsilon`**एक्सप्लोरेशन/एक्सप्लॉइटेशन फैक्टर** है जो यह निर्धारित करता है कि हमें एक्सप्लोरेशन को एक्सप्लॉइटेशन पर या इसके विपरीत प्राथमिकता देनी चाहिए। हमारे एल्गोरिदम में, हम `epsilon` प्रतिशत मामलों में Q-Table मानों के अनुसार अगली क्रिया का चयन करेंगे, और शेष मामलों में हम एक रैंडम क्रिया निष्पादित करेंगे। यह हमें खोज स्थान के उन क्षेत्रों का पता लगाने की अनुमति देगा जिन्हें हमने पहले कभी नहीं देखा।
`epsilon`**अन्वेषण/शोषण फैक्टर** है जो निर्धारित करता है कि हमें अन्वेषण को शोषण की तुलना में प्राथमिकता देनी चाहिए या नहीं। हमारे एल्गोरिदम में, हम `epsilon` प्रतिशत मामलों में अगले क्रिया को Q-टेबल मानों के आधार पर चुनेंगे, और शेष मामलों में यादृच्छिक क्रिया निष्पादित करेंगे। यह हमें खोज स्थान के उन हिस्सों का अन्वेषण करने की अनुमति देता है जिन्हें हमने पहले कभी नहीं देखा।
✅ बैलेंसिंग के संदर्भ में - रैंडम क्रिया (एक्सप्लोरेशन) चुनना गलत दिशा में एक रैंडम पंच की तरह काम करेगा, और पोल को उन "गलतियों" से बैलेंस को पुनः प्राप्त करना सीखना होगा।
✅ संतुलन के संदर्भ में - यादृच्छिक क्रिया चुनना (अन्वेषण) गलत दिशा में एक यादृच्छिक पंच की तरह होगा, और पोल को उन "गलतियों" से पुनः संतुलन सीखना होगा।
### एल्गोरिदम में सुधार करें
हम पिछले पाठ से अपने एल्गोरिदम में दो सुधार कर सकते हैं:
- **औसत संचयी रिवॉर्ड की गणना करें**, कई सिमुलेशन के दौरान। हम हर 5000 इटरेशन पर प्रगति को प्रिंट करेंगे, और उस समय अवधि के दौरान अपने संचयी रिवॉर्ड को औसत करेंगे। इसका मतलब है कि यदि हमें 195 से अधिक अंक मिलते हैं - तो हम समस्या को हल किया हुआ मान सकते हैं, और आवश्यक गुणवत्ता से भी बेहतर।
हम पिछली पाठ के हमारे एल्गोरिदम में दो सुधार भी कर सकते हैं:
- **अधिकतम औसत संचयी परिणाम की गणना करें**, `Qmax`, और हम उस परिणाम से संबंधित Q-Table को स्टोर करेंगे। जब आप प्रशिक्षण चलाते हैं तो आप देखेंगे कि कभी-कभी औसत संचयी परिणाम गिरने लगते हैं, और हम प्रशिक्षण के दौरान देखे गए सर्वश्रेष्ठ मॉडल से संबंधित Q-Table मानों को रखना चाहते हैं।
- **औसत संचयी पुरस्कार की गणना करें**, कई अनुकरणों में। हम प्रत्येक 5000 पुनरावृत्ति पर प्रगति को प्रिंट करेंगे, और उस अवधि में हमारे संचयी पुरस्कार का औसत लेंगे। इसका अर्थ है कि यदि हमें 195 से अधिक अंक मिलते हैं - तो हम समस्या को हल माना सकते हैं, और वह भी अपेक्षित गुणवत्ता से बेहतर।
- **अधिकतम औसत संचयी परिणाम** `Qmax` की गणना करें, और हम उस परिणाम से संबंधित Q-टेबल संग्रहीत करेंगे। जब आप प्रशिक्षण चलाएंगे तो आप नोटिस करेंगे कि कभी-कभी औसत संचयी परिणाम नीचे गिरना शुरू हो जाता है, और हम प्रशिक्षण के दौरान पाए गए सर्वोत्तम मॉडल से संबंधित Q-टेबल मान रखना चाहते हैं।
1. प्रत्येक सिमुलेशन में सभी संचयी रिवॉर्ड को `rewards` वेक्टर में एकत्र करें ताकि आगे प्लॉटिंग की जा सके। (कोड ब्लॉक 11)
1. आगे के प्लॉटिंग के लिए प्रत्येक अनुकरण में सभी संचयी पुरस्कार को `rewards` वेक्टर में संग्रहित करें। (कोड ब्लॉक 11)
```python
def probs(v,eps=1e-4):
@ -214,15 +234,15 @@ Q-Learning में, हमें Q-Table बनानी होती है
obs = env.reset()
done = False
cum_reward=0
# == do the simulation ==
# == सिमुलेशन करें ==
while not done:
s = discretize(obs)
if random.random()<epsilon:
# exploitation - chose the action according to Q-Table probabilities
# शोषण - Q-टेबल संभावनाओं के अनुसार क्रिया चुनें
v = probs(np.array(qvalues(s)))
a = random.choices(actions,weights=v)[0]
else:
# exploration - randomly chose the action
# अन्वेषण - यादृच्छिक रूप से क्रिया चुनें
a = np.random.randint(env.action_space.n)
obs, rew, done, info = env.step(a)
@ -231,7 +251,7 @@ Q-Learning में, हमें Q-Table बनानी होती है
@ -240,25 +260,25 @@ Q-Learning में, हमें Q-Table बनानी होती है
cum_rewards=[]
```
आप इन परिणामों से क्या देख सकते हैं:
आप इन परिणामों से क्या नोटिस कर सकते हैं:
- **हमारे लक्ष्य के करीब**। हम 100+ लगातार सिमुलेशन रन में 195 संचयी रिवॉर्ड प्राप्त करने के लक्ष्य को प्राप्त करने के बहुत करीब हैं, या हमने वास्तव में इसे प्राप्त कर लिया है! भले ही हमें छोटे नंबर मिलें, हमें अभी भी पता नहीं है, क्योंकि हम 5000 रन पर औसत करते हैं, और औपचारिक मानदंड में केवल 100 रन की आवश्यकता होती है।
- **हमारे लक्ष्य के करीब**। हम उन 100+ लगातार अनुकरणों में 195 संचयी पुरस्कार प्राप्त करने के लक्ष्य के बहुत करीब हैं, या हो सकता है कि वास्तव में इसे हासिल कर भी लिया हो! भले ही हमें छोटे अंक मिलें, हमें अभी नहीं पता क्योंकि हम 5000 रन के औसत ले रहे हैं, और केवल 100 रन की औपचारिक आवश्यकता है।
- **पुरस्कार गिरना शुरू हो जाता है**। कभी-कभी पुरस्कार गिरना शुरू हो जाता है, जिसका अर्थ है कि हम पहले से सीखे गए मानों को Q-टेबल में खराब मानों से "बर्बाद" कर सकते हैं।
- **रिवॉर्ड गिरने लगते हैं**। कभी-कभी रिवॉर्ड गिरने लगते हैं, जिसका मतलब है कि हम Q-Table में पहले से सीखे गए मानों को उन मानों से "नष्ट" कर सकते हैं जो स्थिति को खराब बनाते हैं।
यह अवलोकन प्रशिक्षण प्रगति की प्लॉटिंग में अधिक स्पष्ट रूप से दिखाई देता है।
यह अवलोकन अधिक स्पष्ट रूप से दिखाई देता है यदि हम प्रशिक्षण प्रगति को प्लॉट करें।
## प्रशिक्षण प्रगति का प्लॉटिंग
## प्रशिक्षण प्रगति का प्लॉट बनाना
प्रशिक्षण के दौरान, हमने प्रत्येक इटरेशन में संचयी रिवॉर्ड मान को `rewards` वेक्टर में एकत्र किया। यहां यह कैसा दिखता है जब हम इसे इटरेशन नंबर के खिलाफ प्लॉट करते हैं:
प्रशिक्षण के दौरान, हमने प्रत्येक पुनरावृत्ति पर संचयी पुरस्कार मान `rewards` वेक्टर में संग्रहित किया। जब हम इसे पुनरावृत्ति संख्या के विरुद्ध प्लॉट करते हैं तो यह इस प्रकार दिखता है:
इस ग्राफ से कुछ भी बताना संभव नहीं है, क्योंकि स्टोकेस्टिक प्रशिक्षण प्रक्रिया की प्रकृति के कारण प्रशिक्षण सत्रों की लंबाई बहुत भिन्न होती है। इस ग्राफ को अधिक समझने योग्य बनाने के लिए, हम 100 के एक श्रृंखला पर **रनिंग एवरेज** की गणना कर सकते हैं। इसे `np.convolve` का उपयोग करके सुविधाजनक रूप से किया जा सकता है: (कोड ब्लॉक 12)
इस ग्राफ से कुछ कहना संभव नहीं है, क्योंकि यादृच्छिक प्रशिक्षण प्रक्रिया की प्रकृति के कारण प्रशिक्षण सत्रों की लंबाई बहुत भिन्न होती है। इस ग्राफ को समझने के लिए, हम कई प्रयोगों पर चलती औसत (running average) निकाल सकते हैं, मान लें 100। यह `np.convolve` का उपयोग करके आसानी से किया जा सकता है: (कोड ब्लॉक 12)
सीखने को अधिक स्थिर बनाने के लिए, प्रशिक्षण के दौरान हमारे कुछ हाइपरपैरामीटर को समायोजित करना समझदारी होगी। विशेष रूप से:
- **लर्निंग रेट** `alpha` के लिए, हम लगभग 1 के मान के साथ शुरू कर सकते हैं, और फिर इस पैरामीटर को निरंतर कम करते रह सकते हैं। समय के साथ, हम Q-टेबल में अच्छे प्रायिकता मान प्राप्त करेंगे, इसलिए हमें इन्हें थोड़ा समायोजित करना चाहिए, और पूरी तरह से नए मानों से अधिलेखित नहीं करना चाहिए।
## हाइपरपैरामीटर बदलना
- **epsilon बढ़ाएँ**। हम `epsilon` को धीरे-धीरे बढ़ा सकते हैं, ताकि कम अन्वेषण और अधिक शोषण हो सके। शायद यह समझदारी होगी कि हम `epsilon` को कम मान से शुरू करें, और लगभग 1 तक बढ़ाएँ।
सीखने को अधिक स्थिर बनाने के लिए, प्रशिक्षण के दौरान हमारे कुछ हाइपरपैरामीटर को समायोजित करना समझ में आता है। विशेष रूप से:
> **कार्य 1**: हाइपरपैरामीटर मानों के साथ प्रयोग करें और देखें कि क्या आप उच्च संचयी पुरस्कार प्राप्त कर सकते हैं। क्या आप 195 से ऊपर पहुँच रहे हैं?
- **लर्निंग रेट** `alpha` के लिए, हम 1 के करीब मानों से शुरू कर सकते हैं, और फिर पैरामीटर को कम करते रह सकते हैं। समय के साथ, हमें Q-Table में अच्छे प्रायिकता मान मिलेंगे, और इसलिए हमें उन्हें थोड़ा समायोजित करना चाहिए, और नए मानों के साथ पूरी तरह से ओवरराइट नहीं करना चाहिए।
- **epsilon बढ़ाएं**। हम `epsilon` को धीरे-धीरे बढ़ाना चाह सकते हैं, ताकि कम एक्सप्लोरेशन और अधिक एक्सप्लॉइटेशन करें। शायद कम `epsilon` मान से शुरू करना और इसे लगभग 1 तक बढ़ाना समझ में आता है।
> **कार्य 1**: हाइपरपैरामीटर मानों के साथ प्रयोग करें और देखें कि क्या आप उच्च संचयी इनाम प्राप्त कर सकते हैं। क्या आप 195 से ऊपर प्राप्त कर रहे हैं?
> **कार्य 2**: समस्या को औपचारिक रूप से हल करने के लिए, आपको 100 लगातार रन के दौरान 195 औसत इनाम प्राप्त करना होगा। प्रशिक्षण के दौरान इसे मापें और सुनिश्चित करें कि आपने समस्या को औपचारिक रूप से हल कर लिया है!
> **कार्य 2**: समस्या को औपचारिक रूप से हल करने के लिए, आपको 100 लगातार प्रयासों में 195 औसत इनाम प्राप्त करना होगा। प्रशिक्षण के दौरान इसका मापन करें और सुनिश्चित करें कि आपने समस्या को औपचारिक रूप से हल कर लिया है!
## परिणाम को क्रियान्वित होते हुए देखना
## परिणाम को क्रियाशील रूप में देखना
यह देखना दिलचस्प होगा कि प्रशिक्षित मॉडल कैसे व्यवहार करता है। चलिए सिमुलेशन चलाते हैं और प्रशिक्षण के दौरान उपयोग की गई वही एक्शन चयन रणनीति अपनाते हैं, Q-Table में प्रायिकता वितरण के अनुसार सैंपलिंग करते हुए: (कोड ब्लॉक 13)
यह वास्तव में दिलचस्प होगा कि प्रशिक्षित मॉडल कैसे व्यवहार करता है। आइए सिमुलेशन चलाते हैं और प्रशिक्षण के दौरान इसी क्रिया चयन रणनीति का पालन करें, Q-टेबल में प्रायिकता वितरण के अनुसार सैंपलिंग करते हुए: (कोड ब्लॉक 13)

---
## 🚀चुनौती
> **कार्य 3**: यहां, हम Q-Table की अंतिम प्रति का उपयोग कर रहे थे, जो शायद सबसे अच्छी न हो। याद रखें कि हमने सबसे अच्छा प्रदर्शन करने वाले Q-Table को `Qbest` वेरिएबल में संग्रहीत किया है! `Qbest` को `Q` पर कॉपी करके उसी उदाहरण को आज़माएं और देखें कि क्या आपको कोई अंतर दिखाई देता है।
> **कार्य 3**: यहां, हम Q-टेबल की अंतिम प्रति का उपयोग कर रहे थे, जो संभवतः सबसे अच्छी प्रति नहीं हो सकती। याद रखें कि हमने सर्वश्रेष्ठ प्रदर्शन करने वाली Q-टेबल को `Qbest` नामक वेरिएबल में संग्रहीत किया है! `Qbest` को `Q` पर कॉपी करके उसी उदाहरण को सर्वश्रेष्ठ प्रदर्शन करने वाली Q-टेबल के साथ आजमाएं और देखें कि क्या आपको कोई अंतर महसूस होता है।
> **कार्य 4**: यहां हम प्रत्येक चरण पर सबसे अच्छा एक्शन नहीं चुन रहे थे, बल्कि संबंधित प्रायिकता वितरण के साथ सैंपलिंग कर रहे थे। क्या हमेशा सबसे अच्छा एक्शन चुनना अधिक समझदारी होगी, जिसमें Q-Table का सबसे उच्च मान हो? यह `np.argmax` फ़ंक्शन का उपयोग करके किया जा सकता है, जो उच्चतम Q-Table मान के अनुरूप एक्शन नंबर का पता लगाता है। इस रणनीति को लागू करें और देखें कि क्या यह बैलेंसिंग में सुधार करता है।
> **कार्य 4**: यहाँ हम प्रत्येक कदम पर हमेशा सबसे अच्छी क्रिया का चयन नहीं कर रहे थे, बल्कि संबंधित प्रायिकता वितरण के अनुसार सैंपलिंग कर रहे थे। क्या हमेशा सबसे अच्छी क्रिया का चयन करना, जिसमें सबसे उच्च Q-टेबल मान होता है, अधिक समझदारी होगी? इसे करने के लिए `np.argmax` फ़ंक्शन का उपयोग करें ताकि उच्चतम Q-टेबल मान के अनुरूप क्रिया संख्या पता चल सके। इस रणनीति को कार्यान्वित करें और देखें कि क्या इससे संतुलन में सुधार होता है।
## [पाठ के बाद क्विज़](https://ff-quizzes.netlify.app/en/ml/)
## असाइनमेंट
[माउंटेन कार को प्रशिक्षित करें](assignment.md)
## निष्कर्ष
अब हमने यह सीख लिया है कि एजेंट्स को केवल एक इनाम फ़ंक्शन प्रदान करके, जो गेम की वांछित स्थिति को परिभाषित करता है, और उन्हें खोज स्थान को बुद्धिमानी से एक्सप्लोर करने का अवसर देकर अच्छे परिणाम प्राप्त करने के लिए प्रशिक्षित कैसे किया जाए। हमने Q-Learning एल्गोरिदम को डिस्क्रीट और कंटीन्यस एनवायरनमेंट्स के मामलों में सफलतापूर्वक लागू किया है, लेकिन डिस्क्रीट एक्शन्स के साथ।
हमने अब यह सीख लिया है कि कैसे एजेंटों को एक ऐसा इनाम फंक्शन प्रदान करके जो खेल की इच्छित स्थिति को परिभाषित करता है, और उन्हें खोज क्षेत्र का बुद्धिमानी से अन्वेषण करने का अवसर देकर अच्छे परिणाम हासिल करने के लिए प्रशिक्षित किया जा सकता है। हमने Q-लर्निंग एल्गोरिदम को सफलतापूर्वक लागू किया है, जो डिसक्रेट और कंटीन्यूअस पर्यावरणों के मामलों में था, लेकिन डिसक्रेट क्रियाओं के साथ।
यह भी अध्ययन करना महत्वपूर्ण है कि जब एक्शन स्टेट भी कंटीन्यस हो और जब ऑब्ज़र्वेशन स्पेस अधिक जटिल हो, जैसे कि एटारी गेम स्क्रीन की छवि। इन समस्याओं में अक्सर अच्छे परिणाम प्राप्त करने के लिए अधिक शक्तिशाली मशीन लर्निंग तकनीकों, जैसे कि न्यूरल नेटवर्क्स, का उपयोग करना आवश्यक होता है। ये अधिक उन्नत विषय हमारे आगामी उन्नत AI कोर्स का विषय हैं।
यह भी महत्वपूर्ण है कि हम उन स्थितियों का अध्ययन करें जहां क्रिया स्थिति भी कंटीन्यूअस हो, और जब प्रेक्षण स्थान अधिक जटिल हो, जैसे कि अटारी गेम स्क्रीन की छवि। उन समस्याओं में हमें अक्सर बेहतर परिणाम प्राप्त करने के लिए अधिक शक्तिशाली मशीन लर्निंग तकनीकों, जैसे कि न्यूरल नेटवर्क्स का उपयोग करना पड़ता है। ये अधिक उन्नत विषय हमारे आगामी अधिक उन्नत AI पाठ्यक्रम का विषय हैं।
---
**अस्वीकरण**:
यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**अस्वीकरण**:
इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: 責任あるAIを構築するためのオープンソースフレームワーク")
[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: An open-source framework for building responsible AI")
[Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- MicrosoftのRAIリソースセンター:[Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- MicrosoftのFATE研究グループ:
[FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
- MicrosoftのFATE研究グループ:[FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
RAI Toolbox:
RAI Toolbox:
- [Responsible AI Toolbox GitHubリポジトリ](https://github.com/microsoft/responsible-ai-toolbox)
2. **Visual Studio Codeをインストール**。コンピュータにVisual Studio Codeがインストールされていることを確認してください。基本的なインストールについては、[Visual Studio Codeのインストール](https://code.visualstudio.com/)手順に従ってください。このコースではVisual Studio CodeでPythonを使用するため、[Visual Studio CodeのPython開発用設定](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott)について学んでおくと良いでしょう。
2. **Visual Studio Codeをインストール**。コンピューターにVisual Studio Codeがインストールされていることを確認してください。基本インストールについては、[Visual Studio Codeをインストールする手順](https://code.visualstudio.com/)に従ってください。このコースではVisual Studio Code上でPythonを使うので、[Python開発用にVisual Studio Codeを設定する方法](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott)も確認しておくと良いでしょう。
元のデータを掘り下げると、`Unit of Sale`が「EACH」または「PER BIN」の場合、`Package`タイプもインチ単位、ビン単位、または「each」となっています。かぼちゃを一貫して計量するのは非常に難しいようです。そのため、`Package`列に「bushel」という文字列が含まれるかぼちゃだけを選択してフィルタリングしましょう。
元データを詳しく見ると、`Unit of Sale`が 'EACH' または 'PER BIN' のものには、`Package`タイプがインチ単位、ビンごと、または 'each' となっていることがわかります。カボチャは非常に重量が一定ではないようなので、`Package`列に「bushel」という文字列が含まれるカボチャだけを選択してフィルタ処理しましょう。
このレッスンでは、**OpenAI Gym**というライブラリを使用して、さまざまな**環境**をシミュレーションします。このレッスンのコードはローカル環境(例: Visual Studio Code)で実行することができ、その場合シミュレーションは新しいウィンドウで開きます。オンラインでコードを実行する場合は、[こちら](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7)に記載されているように、コードにいくつかの調整が必要になる場合があります。
このレッスンでは、**OpenAI Gym** と呼ばれるライブラリを使い、異なる<strong>環境</strong>をシミュレートします。コードをローカル(例:Visual Studio Code)で実行する場合、シミュレーションは新しいウィンドウで開きます。オンラインで実行する場合は、[こちら](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7)の説明に従いコードを一部調整する必要があるかもしれません。
## [강의 전 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
## 소개
이 커리큘럼에서는 머신 러닝이 우리의 일상생활에 어떤 영향을 미치고 있는지 알아보기 시작합니다. 현재도 시스템과 모델은 의료 진단, 대출 승인, 사기 탐지와 같은 일상적인 의사 결정 작업에 관여하고 있습니다. 따라서 이러한 모델이 신뢰할 수 있는 결과를 제공하기 위해 잘 작동하는 것이 중요합니다. 모든 소프트웨어 애플리케이션과 마찬가지로, AI 시스템은 기대에 미치지 못하거나 바람직하지 않은 결과를 초래할 수 있습니다. 그렇기 때문에 AI 모델의 행동을 이해하고 설명할 수 있는 것이 필수적입니다.
이 교육과정에서는 머신러닝이 우리 일상에 어떻게 영향을 미치고 있는지를 알아보기 시작할 것입니다. 이미 시스템과 모델은 의료 진단, 대출 승인, 사기 탐지 등의 일상적 의사결정 업무에 관여하고 있습니다. 따라서 이러한 모델들이 신뢰할 수 있는 결과를 제공할 수 있도록 잘 작동하는 것이 중요합니다. 모든 소프트웨어 애플리케이션과 마찬가지로, AI 시스템도 기대에 미치지 못하거나 원치 않는 결과를 만들 수 있습니다. 그러므로 AI 모델의 동작을 이해하고 설명할 수 있는 능력은 필수적입니다.
모델을 구축하는 데 사용하는 데이터가 특정 인구 통계(예: 인종, 성별, 정치적 견해, 종교 등)를 포함하지 않거나 불균형적으로 대표하는 경우 어떤 일이 발생할 수 있을까요? 모델의 출력이 특정 인구 통계를 선호하도록 해석된다면 어떻게 될까요? 애플리케이션에 어떤 영향을 미칠까요? 또한 모델이 부정적인 결과를 초래하여 사람들에게 해를 끼친다면 어떻게 될까요? AI 시스템의 행동에 대한 책임은 누구에게 있을까요? 이러한 질문들은 이 커리큘럼에서 탐구할 내용입니다.
모델을 만드는 데 사용하는 데이터가 인종, 성별, 정치적 견해, 종교 등 특정 인구 집단을 포함하지 않거나 한쪽에 치우쳐 있다면 어떤 일이 벌어질지 상상해 보십시오. 모델의 출력이 특정 인구 집단에 유리하게 해석된다면 어떻게 될까요? 그 결과는 해당 응용 프로그램에 어떤 영향을 미칠까요? 그리고 모델이 바람직하지 않은 결과를 내거나 사람들에게 해를 끼친다면 어떻게 될까요? AI 시스템의 행동에 누가 책임이 있을까요? 이러한 질문들을 이 교육과정에서 탐구할 것입니다.
- AI 모델의 동작을 설명하기 위한 투명한 접근법(글라스 박스 방식)의 중요성을 확인합니다.
- AI 시스템에 대한 신뢰를 구축하기 위해 책임성이 필수적임을 인지합니다.
## 사전 요구사항
## 전제 조건
사전 요구사항으로 "책임 있는 AI 원칙" 학습 경로를 완료하고 아래의 주제에 대한 비디오를 시청하세요:
전제 조건으로 "책임 있는 AI 원칙" 학습 경로를 수강하고 아래 주제에 대한 동영상을 시청하시기 바랍니다:
[학습 경로](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)를 통해 책임 있는 AI에 대해 더 알아보세요.
다음 [학습 경로](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)에서 책임 있는 AI에 대해 자세히 알아보세요.
[](https://youtu.be/dnC8-uUZXSc "Microsoft의 책임 있는 AI 접근 방식")
[](https://youtu.be/dnC8-uUZXSc "Microsoft의 책임 있는 AI 접근법")
> 🎥 위 이미지를 클릭하여 비디오를 시청하세요: Microsoft의 책임 있는 AI 접근 방식
> 🎥 위 이미지를 클릭하면 동영상 시청: Microsoft의 책임 있는 AI 접근법
## 공정성
AI 시스템은 모든 사람을 공정하게 대하고 유사한 그룹의 사람들에게 다른 방식으로 영향을 미치지 않아야 합니다. 예를 들어, AI 시스템이 의료 치료, 대출 신청 또는 고용에 대한 지침을 제공할 때, 유사한 증상, 재정 상황 또는 전문 자격을 가진 모든 사람에게 동일한 권장 사항을 제공해야 합니다. 우리 각자는 인간으로서 우리의 결정과 행동에 영향을 미치는 내재된 편견을 가지고 있습니다. 이러한 편견은 우리가 AI 시스템을 훈련시키는 데 사용하는 데이터에서 드러날 수 있습니다. 이러한 조작은 때로는 의도치 않게 발생할 수 있습니다. 데이터를 다룰 때 편견을 도입하고 있는지 의식적으로 알기 어려운 경우가 많습니다.
AI 시스템은 모든 사람을 공정하게 대우하고 유사한 그룹의 사람들에게 다르게 영향을 미치는 일을 피해야 합니다. 예를 들어, AI 시스템이 의료 치료, 대출 신청, 고용에 대한 조언을 제공할 때 유사한 증상, 재정 상황, 전문 자격을 가진 사람들에게 동일한 권고를 해야 합니다. 우리 각자는 결정과 행동에 영향을 미치는 선천적인 편견을 지니고 있으며, 이러한 편견은 AI 시스템 학습에 사용되는 데이터에도 나타날 수 있습니다. 이런 편향은 때때로 의도치 않게 발생할 수 있으며, 데이터를 통해 편향을 의식적으로 인지하는 것은 종종 어렵습니다.
**“불공정성”**은 인종, 성별, 연령 또는 장애 상태와 같은 기준으로 정의된 사람들 그룹에 대한 부정적인 영향 또는 “피해”를 포함합니다. 주요 공정성 관련 피해는 다음과 같이 분류할 수 있습니다:
<strong>“불공정함”</strong>은 인종, 성별, 연령, 장애 상태 등 특정 집단에 부정적 영향을 미치는 해악을 의미합니다. 주요 공정성 관련 피해 유형은 다음과 같이 분류됩니다:
- **할당**: 예를 들어, 특정 성별이나 민족이 다른 성별이나 민족보다 선호되는 경우.
- **서비스 품질**: 특정 시나리오에 맞춰 데이터를 훈련시키지만 현실은 훨씬 더 복잡한 경우, 서비스 성능이 저하됩니다. 예를 들어, 어두운 피부를 가진 사람을 감지하지 못하는 손 비누 디스펜서. [참조](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **비난**: 부당하게 비판하거나 특정 대상이나 사람을 잘못 평가하는 경우. 예를 들어, 이미지 라벨링 기술이 어두운 피부를 가진 사람들의 이미지를 고릴라로 잘못 라벨링한 사례.
- **과잉 또는 부족 대표**: 특정 그룹이 특정 직업에서 보이지 않는 경우, 이를 계속 촉진하는 서비스나 기능은 피해를 초래할 수 있습니다.
- **고정관념**: 특정 그룹을 미리 할당된 속성과 연관시키는 경우. 예를 들어, 영어와 터키어 간의 언어 번역 시스템이 성별과 관련된 고정관념으로 인해 부정확성을 가질 수 있습니다.
- <strong>할당</strong>: 예를 들어, 한 성별이나 민족이 다른 집단보다 선호되는 경우.
- **서비스 품질**: 특정 시나리오만 학습시켰으나 실제 상황은 더 복잡해 서비스 성능이 떨어질 때. 예로 어두운 피부색을 인식하지 못하는 손 세정제 디스펜서가 있습니다. [참고자료](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- <strong>폄하</strong>: 부당하게 비판하거나 낙인을 찍는 행위. 예를 들어, 이미지 라벨링 기술이 어두운 피부색 사람들을 고릴라로 잘못 인식한 경우가 있습니다.
- **과대 또는 과소 대표**: 특정 그룹이 특정 직종에서 보이지 않거나 서비스가 이를 계속 촉진할 때 발생하는 피해.
- <strong>고정관념</strong>: 특정 집단에 미리 할당된 속성을 연결하는 행위. 예를 들어, 영어와 터키어 간 번역 시스템이 성별 고정관념에 기반한 단어로 인해 부정확할 수 있습니다.
AI 시스템을 설계하고 테스트할 때, AI가 공정하며 인간이 금지된 편향적이거나 차별적인 결정을 내리지 않도록 해야 합니다. AI와 머신러닝에서 공정성을 보장하는 것은 여전히 복잡한 사회기술적 과제입니다.
AI 시스템을 설계하고 테스트할 때 AI가 공정하며 편향되거나 차별적인 결정을 내리지 않도록 해야 합니다. 이는 인간에게도 금지된 행위입니다. AI와 머신러닝에서 공정성을 보장하는 것은 복잡한 사회기술적 도전 과제입니다.
### 신뢰성과 안전성
신뢰를 구축하려면 AI 시스템이 정상적이고 예상치 못한 조건에서도 신뢰할 수 있고 안전하며 일관성이 있어야 합니다. 특히 이상치 상황에서 AI 시스템이 다양한 상황에서 어떻게 행동할지 아는 것이 중요합니다. AI 솔루션을 구축할 때, AI 솔루션이 직면할 수 있는 다양한 상황을 처리하는 방법에 상당한 초점을 맞춰야 합니다. 예를 들어, 자율주행차는 사람들의 안전을 최우선으로 고려해야 합니다. 따라서 차량을 구동하는 AI는 밤, 폭풍우, 눈보라, 길을 건너는 아이들, 애완동물, 도로 공사 등 차량이 직면할 수 있는 모든 가능한 시나리오를 고려해야 합니다. AI 시스템이 다양한 조건을 신뢰할 수 있고 안전하게 처리할 수 있는 능력은 데이터 과학자나 AI 개발자가 시스템 설계 또는 테스트 중에 고려한 예상 수준을 반영합니다.
신뢰를 구축하려면 AI 시스템이 정상 및 예기치 않은 상황 모두에서 신뢰할 수 있고 안전하며 일관되어야 합니다. AI 시스템이 다양한 상황, 특히 이상치에서 어떻게 동작하는지 아는 것이 중요합니다. AI 솔루션을 구축할 때는 AI가 마주치게 될 다양한 상황을 다루는 데 많은 초점을 둬야 합니다. 예를 들어, 자율주행차는 사람들의 안전을 최우선으로 해야 합니다. 따라서 차량을 작동하는 AI는 야간, 폭풍우, 눈보라, 길을 가로지르는 아이들, 애완동물, 도로 공사 등 다양한 시나리오를 고려해야 합니다. AI 시스템이 다양한 조건을 얼마나 신뢰성 있고 안전하게 처리하는지는 데이터 과학자 또는 AI 개발자가 설계 및 테스트 시 어느 정도 예상했는지를 반영합니다.
### 포괄성
> [🎥 영상 시청하려면 여기를 클릭하세요: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
AI 시스템은 모든 사람을 참여시키고 지원할 수 있도록 설계되어야 합니다. AI 시스템을 설계하고 구현할 때 데이터 과학자와 AI 개발자는 시스템에서 사람들을 의도치 않게 배제할 수 있는 잠재적 장벽을 식별하고 해결합니다. 예를 들어, 전 세계적으로 10억 명의 장애인이 있습니다. AI의 발전으로 인해 이들은 일상생활에서 더 쉽게 다양한 정보와 기회를 접할 수 있습니다. 이러한 장벽을 해결함으로써 모든 사람에게 혜택을 주는 더 나은 경험을 제공하는 AI 제품을 혁신하고 개발할 기회를 창출합니다.
AI 시스템은 모두가 참여하고 권한을 갖도록 설계되어야 합니다. AI 시스템 설계 및 구현 시 데이터 과학자와 AI 개발자들은 사람들을 의도치 않게 제외할 수 있는 장벽을 식별하고 해결합니다. 전 세계적으로 10억 명의 장애인이 있습니다. AI 기술이 발전함에 따라 이들은 일상생활에서 정보와 기회에 더욱 쉽게 접근할 수 있게 되었습니다. 장벽을 해결함으로써 모두에게 혜택이 되는 더 나은 경험을 제공하는 AI 제품을 혁신하고 개발할 수 있는 기회를 창출합니다.
### 보안과 프라이버시
> [🎥 영상 시청하려면 여기를 클릭하세요: AI에서의 포용성](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
AI 시스템은 안전해야 하며 사람들의 프라이버시를 존중해야 합니다. 프라이버시, 정보 또는 생명을 위험에 빠뜨리는 시스템에 대한 신뢰는 낮아집니다. 머신 러닝 모델을 훈련할 때, 최상의 결과를 도출하기 위해 데이터를 활용합니다. 이 과정에서 데이터의 출처와 무결성을 고려해야 합니다. 예를 들어, 데이터가 사용자 제출 데이터인지 공개적으로 이용 가능한 데이터인지 확인해야 합니다. 다음으로 데이터를 다룰 때, 기밀 정보를 보호하고 공격에 저항할 수 있는 AI 시스템을 개발하는 것이 중요합니다. AI가 점점 더 널리 사용됨에 따라 프라이버시를 보호하고 중요한 개인 및 비즈니스 정보를 안전하게 유지하는 것이 점점 더 중요하고 복잡해지고 있습니다. AI는 데이터를 기반으로 사람들에 대한 정확하고 정보에 입각한 예측과 결정을 내리기 때문에 프라이버시와 데이터 보안 문제는 특히 주의가 필요합니다.
AI 시스템은 안전해야 하며 사람들의 프라이버시를 존중해야 합니다. 사람들은 개인정보, 정보 또는 생명이 위험에 처하는 시스템을 덜 신뢰합니다. 머신러닝 모델을 훈련할 때 최상의 결과를 내기 위해 데이터에 의존합니다. 이때 데이터 출처와 무결성을 고려해야 합니다. 예를 들어, 데이터가 사용자 제출 데이터인지 공개적으로 사용 가능한지 여부가 중요합니다. 또한, 데이터를 다룰 때 기밀 정보를 보호하고 공격에 저항하는 AI 시스템을 개발하는 것이 필수적입니다. AI가 보편화되면서 개인정보 보호와 중요한 개인 및 기업 정보 보안이 더욱 중요하고 복잡해졌습니다. AI의 정확한 예측과 결정을 위해 데이터 접근이 필수적이므로 프라이버시 및 데이터 보안 문제에 특별히 주의를 기울여야 합니다.
- 업계는 GDPR(일반 데이터 보호 규정)과 같은 규정에 의해 크게 촉진된 프라이버시 및 보안에서 상당한 발전을 이루었습니다.
- 그러나 AI 시스템에서는 시스템을 더 개인적이고 효과적으로 만들기 위해 더 많은 개인 데이터를 필요로 하는 것과 프라이버시 간의 긴장을 인정해야 합니다.
- 인터넷으로 연결된 컴퓨터의 탄생과 마찬가지로 AI와 관련된 보안 문제의 급증을 목격하고 있습니다.
- 동시에 AI가 보안을 개선하는 데 사용되는 사례도 있습니다. 예를 들어, 대부분의 현대적인 안티바이러스 스캐너는 오늘날 AI 휴리스틱에 의해 구동됩니다.
- 데이터 과학 프로세스가 최신 프라이버시 및 보안 관행과 조화를 이루도록 해야 합니다.
> [🎥 영상 시청하려면 여기를 클릭하세요: AI에서의 보안](https://www.microsoft.com/videoplayer/embed/RE4voJF)
### 투명성
- 업계 전반에서 GDPR(일반 데이터 보호 규정) 같은 규제 덕분에 프라이버시와 보안 분야에서 크게 발전해 왔습니다.
- 그러나 AI 시스템에서는 더 개인화되고 효율적인 시스템을 만들기 위해 더 많은 개인정보가 필요한 것과 프라이버시 사이의 긴장을 인식해야 합니다.
- 인터넷과 연결된 컴퓨터가 처음 등장했을 때처럼 AI 관련 보안 이슈도 급증하고 있습니다.
- 동시에 AI는 보안을 향상하는 데 사용되고 있습니다. 예를 들어, 오늘날 대부분의 최신 안티바이러스 스캐너는 AI 휴리스틱을 활용합니다.
- 데이터 과학 프로세스가 최신 프라이버시 및 보안 관행과 조화롭게 융합되도록 해야 합니다.
AI 시스템은 이해할 수 있어야 합니다. 투명성의 중요한 부분은 AI 시스템과 그 구성 요소의 행동을 설명하는 것입니다. AI 시스템에 대한 이해를 개선하려면 이해관계자가 시스템이 어떻게 작동하고 왜 작동하는지 이해하여 잠재적인 성능 문제, 안전 및 프라이버시 문제, 편향, 배제적 관행 또는 의도치 않은 결과를 식별할 수 있어야 합니다. 또한 AI 시스템을 사용하는 사람들은 시스템을 언제, 왜, 어떻게 배포하는지, 그리고 사용하는 시스템의 한계를 솔직하게 공개해야 한다고 믿습니다. 예를 들어, 은행이 소비자 대출 결정을 지원하기 위해 AI 시스템을 사용하는 경우, 결과를 검토하고 시스템의 권장 사항에 영향을 미치는 데이터를 이해하는 것이 중요합니다. 정부는 산업 전반에 걸쳐 AI를 규제하기 시작하고 있으므로 데이터 과학자와 조직은 AI 시스템이 규제 요구 사항을 충족하는지, 특히 바람직하지 않은 결과가 발생했을 때 이를 설명해야 합니다.
AI 시스템은 이해할 수 있어야 합니다. 투명성의 중요한 부분은 AI 시스템과 구성 요소의 동작을 설명하는 것입니다. AI 시스템의 이해도를 높이려면 이해관계자가 시스템이 어떻게 그리고 왜 동작하는지 파악하여 성능 문제, 안전 및 프라이버시 우려, 편향, 배제적 관행 또는 의도치 않은 결과를 식별할 수 있어야 합니다. 또한 AI 시스템을 사용하는 주체가 언제, 왜, 어떻게 AI를 배포하는지를 정직하고 솔직히 밝혀야 하며 사용 시스템의 한계도 알려야 한다고 믿습니다. 예를 들어, 은행이 소비자 대출 결정을 지원하기 위해 AI 시스템을 사용할 경우 결과를 검토하고 추천에 영향을 미치는 데이터가 무엇인지 이해하는 것이 중요합니다. 정부가 산업 전반에 AI 규제를 시작하고 있으므로 데이터 과학자와 조직은 AI 시스템이 규제 요구사항을 충족하는지, 특히 바람직하지 않은 결과가 발생했을 때 설명할 수 있어야 합니다.
- AI 시스템이 매우 복잡하기 때문에 시스템이 어떻게 작동하고 결과를 해석하는지 이해하기 어렵습니다.
- 이러한 이해 부족은 시스템이 관리, 운영 및 문서화되는 방식에 영향을 미칩니다.
- 더 중요한 것은 이러한 이해 부족이 시스템이 생성하는 결과를 기반으로 내리는 결정에 영향을 미친다는 점입니다.
> [🎥 영상 시청하려면 여기를 클릭하세요: AI에서의 투명성](https://www.microsoft.com/videoplayer/embed/RE4voJF)
### 책임감
- AI 시스템이 매우 복잡하여 작동 방식을 이해하고 결과를 해석하기 어렵습니다.
- 이러한 이해 부족은 시스템 관리, 운영 및 문서화 방식에 영향을 미칩니다.
- 더욱 중요하게는, 시스템이 만든 결과를 사용한 의사결정에 영향을 줍니다.
AI 시스템을 설계하고 배포하는 사람들은 시스템이 어떻게 작동하는지에 대해 책임을 져야 합니다. 책임감의 필요성은 특히 얼굴 인식과 같은 민감한 기술에서 중요합니다. 최근에는 실종 아동을 찾는 것과 같은 용도로 기술의 잠재력을 보는 법 집행 기관에서 얼굴 인식 기술에 대한 수요가 증가하고 있습니다. 그러나 이러한 기술은 특정 개인에 대한 지속적인 감시를 가능하게 함으로써 시민의 기본 자유를 위협할 수 있는 방식으로 정부에 의해 사용될 가능성이 있습니다. 따라서 데이터 과학자와 조직은 AI 시스템이 개인이나 사회에 미치는 영향에 대해 책임을 져야 합니다.
### 책임성
AI 시스템을 설계하고 배포하는 사람들은 그 시스템의 작동 방식에 책임을 져야 합니다. 특히 안면 인식 같은 민감한 기술을 사용할 때 책임성은 더욱 중요합니다. 최근 법 집행 기관들이 실종 아동 탐색 등에서 기술의 잠재력을 주목하며 안면 인식 기술에 대한 수요가 증가하고 있습니다. 그러나 정부가 특정 개인을 지속적으로 감시하는 등 시민의 기본 자유를 위협하는 데 사용할 수도 있습니다. 따라서 데이터 과학자와 조직은 AI 시스템이 개인 또는 사회에 미치는 영향에 책임을 져야 합니다.
[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft의 책임 있는 AI 접근 방식")
[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft의 책임 있는 AI 접근법")
> 🎥 위 이미지를 클릭하여 비디오를 시청하세요: 얼굴 인식을 통한 대규모 감시에 대한 경고
> 🎥 위 이미지를 클릭하면 동영상 시청: 안면 인식 통한 대규모 감시에 대한 경고
결국, AI를 사회에 도입하는 첫 번째 세대로서 우리 세대가 직면한 가장 큰 질문 중 하나는 컴퓨터가 사람들에게 계속 책임을 질 수 있도록 하고 컴퓨터를 설계하는 사람들이 다른 모든 사람들에게 책임을 질 수 있도록 하는 방법입니다.
결국 우리 세대, 즉 AI를 사회에 처음 도입하는 세대에게 가장 큰 질문 중 하나는 컴퓨터가 사람들에게 책임을 지도록 어떻게 보장할 것인가와 컴퓨터를 설계하는 사람들이 모두에게 책임을 지도록 어떻게 보장할 것인가입니다.
## 영향 평가
머신 러닝 모델을 훈련하기 전에 AI 시스템의 목적, 의도된 사용, 배포 위치 및 시스템과 상호작용할 사람들을 이해하기 위해 영향 평가를 수행하는 것이 중요합니다. 이는 시스템을 평가하는 리뷰어 또는 테스터가 잠재적 위험과 예상 결과를 식별할 때 고려해야 할 요소를 아는 데 도움이 됩니다.
머신러닝 모델을 훈련하기 전에 AI 시스템의 목적, 의도된 사용, 배포 장소, 상호 작용할 대상 등을 이해하기 위해 영향 평가를 수행하는 것이 중요합니다. 이는 시스템을 평가하는 검토자 또는 테스터가 잠재적 위험과 예상 결과를 판단할 때 고려해야 할 요소를 파악하는 데 도움을 줍니다.
영향 평가 시 중점 영역은 다음과 같습니다:
영향 평가를 수행할 때 집중해야 할 영역은 다음과 같습니다:
* **개인에 대한 부정적 영향**: 제한이나 요구 사항, 지원되지 않는 사용, 알려진 제한 사항 등 시스템 성능을 저해하는 요소를 인지하여 개인에게 피해를 주는 방식으로 시스템이 사용되지 않도록 하는 것이 중요합니다.
* **데이터 요구 사항**: 시스템이 데이터를 어떻게 어디에서 사용할지 이해하면 검토자가 GDPR 또는 HIPAA 같은 데이터 규정과 같은 데이터 요구 사항을 고려할 수 있습니다. 또한 데이터 소스와 양이 훈련에 충분한지 평가합니다.
* **영향 요약**: 시스템 사용으로 발생할 수 있는 잠재적 피해 목록을 수집합니다. 머신러닝 라이프사이클 전반에 걸쳐 식별된 문제들이 경감되거나 해결되었는지 검토합니다.
* **각 원칙별 적용 가능한 목표**: 6가지 핵심 원칙 각자의 목표가 충족되는지, 부족한 점이 있는지 평가합니다.
* **개인에 대한 부정적 영향**: 시스템 성능을 저해할 수 있는 제한, 요구사항, 지원되지 않는 사용 또는 알려진 한계를 인식하는 것이 중요합니다.
* **데이터 요구사항**: 시스템이 데이터를 사용하는 방법과 위치를 이해하면 GDPR 또는 HIPPA 데이터 규정과 같은 데이터 요구사항을 고려해야 할 사항을 탐구할 수 있습니다. 또한 데이터를 훈련시키기에 충분한 출처와 양을 검토합니다.
* **영향 요약**: 시스템 사용으로 인해 발생할 수 있는 잠재적 피해 목록을 수집합니다. ML 라이프사이클 전반에 걸쳐 식별된 문제가 완화되었거나 해결되었는지 검토합니다.
* **적용 가능한 목표**: 여섯 가지 핵심 원칙 각각에 대한 목표가 충족되었는지, 그리고 어떤 격차가 있는지 평가합니다.
## 책임 있는 AI로 디버깅하기
소프트웨어 애플리케이션을 디버깅하는 것과 마찬가지로, AI 시스템을 디버깅하는 것은 시스템의 문제를 식별하고 해결하는 데 필요한 과정입니다. 모델이 예상대로 또는 책임감 있게 작동하지 않는 데 영향을 미치는 많은 요인이 있습니다. 대부분의 전통적인 모델 성능 지표는 모델 성능의 정량적 집계로, 책임 있는 AI 원칙을 위반하는 방법을 분석하기에는 충분하지 않습니다. 게다가 머신 러닝 모델은 결과를 유도하는 요인을 이해하거나 실수를 했을 때 설명을 제공하기 어려운 블랙박스입니다. 이 과정에서 우리는 책임 있는 AI 대시보드를 사용하여 AI 시스템을 디버깅하는 방법을 배우게 됩니다. 이 대시보드는 데이터 과학자와 AI 개발자가 다음을 수행할 수 있는 포괄적인 도구를 제공합니다:
소프트웨어 애플리케이션을 디버깅하는 것과 마찬가지로 AI 시스템을 디버깅하는 것은 시스템 내 문제를 식별하고 해결하는 필수 과정입니다. 모델이 기대대로 또는 책임감 있게 작동하지 못하는 데 영향을 미치는 여러 요인이 있습니다. 대부분의 전통적인 모델 성능 지표는 모델 성능의 정량적 집계치에 불과하여 모델이 책임 있는 AI 원칙을 위반하는 방식을 분석하기에 충분하지 않습니다. 게다가 머신러닝 모델은 결과를 어떻게 도출하는지 이해하기 어려운 블랙박스이며, 오류가 발생할 때 설명하기 어렵습니다. 이 강의 후반부에서는 책임 있는 AI 대시보드를 사용하여 AI 시스템을 디버깅하는 방법을 배울 것입니다. 이 대시보드는 데이터 과학자와 AI 개발자가 다음과 같은 작업을 수행할 수 있는 전체적인 도구를 제공합니다:
* **오류 분석**: 시스템의 공정성 또는 신뢰성에 영향을 미칠 수 있는 모델의 오류 분포를 식별합니다.
* **모델 개요**: 데이터 코호트 간의 모델 성능에서 불균형이 있는 곳을 발견합니다.
* **데이터 분석**: 데이터 분포를 이해하고 공정성, 포괄성 및 신뢰성 문제를 초래할 수 있는 데이터의 잠재적 편향을 식별합니다.
* **모델 해석 가능성**: 모델의 예측에 영향을 미치거나 영향을 주는 요인을 이해합니다. 이는 모델의 행동을 설명하는 데 중요하며, 투명성과 책임감을 위해 필요합니다.
* **오류 분석**: 시스템의 공정성 또는 신뢰성에 영향을 미칠 수 있는 모델 오류 분포를 식별합니다.
* **모델 개요**: 데이터 집단별 모델 성능 격차를 발견합니다.
* **데이터 분석**: 데이터 분포를 이해하고 공정성, 포용성, 신뢰성 문제를 일으킬 수 있는 편향을 식별합니다.
* **모델 해석 가능성**: 모델 예측에 영향을 주는 요소를 파악합니다. 이는 투명성과 책임성에 중요한 모델 동작 설명에 도움을 줍니다.
## 🚀 도전
피해가 처음부터 도입되지 않도록 하기 위해 우리는 다음을 해야 합니다:
## 🚀 도전 과제
피해를 처음부터 예방하기 위해 우리는:
- 시스템 작업에 참여하는 사람들 간에 다양한 배경과 관점을 확보합니다.
- 우리 사회의 다양성을 반영하는 데이터 세트에 투자합니다.
- 머신 러닝 라이프사이클 전반에 걸쳐 책임 있는 AI를 감지하고 수정하는 더 나은 방법을 개발합니다.
- 시스템 작업에 참여하는 사람들의 배경과 관점의 다양성을 확보해야 합니다.
- 사회의 다양성을 반영한 데이터셋에 투자해야 합니다.
- 책임 있는 AI가 발생했을 때 이를 탐지하고 수정하는 머신러닝 라이프사이클 전반에 걸친 더 나은 방법을 개발해야 합니다.
모델 구축 및 사용에서 모델의 신뢰할 수 없는 점이 드러나는 실제 시나리오를 생각해보세요. 우리는 무엇을 더 고려해야 할까요?
모델 구축과 사용에서 신뢰를 잃는 현실 사례를 생각해 보십시오. 또 무엇을 고려해야 할까요?
## [강의 후 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
## 복습 및 자기 학습
## 복습 및 자기주도 학습
이 강의에서는 머신 러닝에서 공정성과 불공정성의 개념에 대한 기본 사항을 배웠습니다.
이 워크숍을 통해 주제에 대해 더 깊이 알아보세요:
이 수업에서는 머신러닝에서 공정성과 불공정성 개념의 기본을 배웠습니다.
이 워크숍을 시청하여 주제를 더 깊이 파고들어 보세요:
- 책임 있는 AI를 추구하며: 원칙을 실천으로 옮기기 - Besmira Nushi, Mehrnoosh Sameki, Amit Sharma
- 책임 있는 AI 추구: Besmira Nushi, Mehrnoosh Sameki, Amit Sharma가 전하는 원칙의 실천
[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: 책임 있는 AI를 구축하기 위한 오픈소스 프레임워크")
[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: An open-source framework for building responsible AI")
> 🎥 위 이미지를 클릭하면 비디오를 볼 수 있습니다: RAI Toolbox: 책임 있는 AI를 구축하기 위한 오픈소스 프레임워크 - Besmira Nushi, Mehrnoosh Sameki, Amit Sharma
> 🎥 위 이미지를 클릭하여 영상 보기: Besmira Nushi, Mehrnoosh Sameki, Amit Sharma가 전하는 책임 있는 AI 구축을 위한 오픈 소스 프레임워크 RAI Toolbox
또한 읽어보세요:
또한, 다음을 읽어보세요:
- Microsoft의 RAI 리소스 센터: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Microsoft의 RAI 리소스 센터: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Microsoft의 FATE 연구 그룹: [FATE: 공정성, 책임성, 투명성, 윤리성 - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
- Microsoft의 FATE 연구 그룹: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
RAI Toolbox:
RAI Toolbox:
- [Responsible AI Toolbox GitHub 저장소](https://github.com/microsoft/responsible-ai-toolbox)
Azure Machine Learning의 공정성을 보장하기 위한 도구에 대해 읽어보세요:
@ -157,5 +161,7 @@ Azure Machine Learning의 공정성을 보장하기 위한 도구에 대해 읽
---
**면책 조항**:
이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**면책 조항**:
이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역은 오류나 부정확한 부분이 있을 수 있음을 유의하시기 바랍니다. 원본 문서의 원어본이 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우, 전문가의 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
이 네 가지 강의에서는 회귀 모델을 구축하는 방법을 배웁니다. 회귀 모델이 무엇을 위한 것인지 곧 논의할 것입니다. 하지만 그 전에, 과정을 시작하기 위해 적절한 도구가 준비되어 있는지 확인하세요!
이 네 개의 수업에서 회귀 모델을 어떻게 구축하는지 배우게 될 것입니다. 이것들이 무엇을 위한 것인지 곧 설명하겠습니다. 하지만 무엇을 하기에 앞서, 프로세스를 시작하기 위한 올바른 도구들이 갖추어져 있는지 확인하십시오!
이 강의에서 배우게 될 내용:
이 수업에서는 다음을 배우게 됩니다:
- 로컬 머신 러닝 작업을 위한 컴퓨터 설정
- Jupyter 노트북 사용법
- Scikit-learn 설치 및 사용법
- 실습을 통해 선형 회귀 탐구
- 컴퓨터를 로컬 머신러닝 작업을 위해 구성하는 방법.
- Jupyter 노트북 작업하기.
- 설치를 포함한 Scikit-learn 사용법.
- 실습을 통한 선형 회귀 탐색.
## 설치 및 설정
## 설치 및 구성
[](https://youtu.be/-DfeD2k2Kj0 "초보자를 위한 머신 러닝 - 머신 러닝 모델 구축을 위한 도구 설정")
[](https://youtu.be/-DfeD2k2Kj0 "초보자를 위한 ML - 머신러닝 모델 구축 준비를 위한 도구 설정")
> 🎥 위 이미지를 클릭하면 머신 러닝을 위한 컴퓨터 설정 과정을 다룬 짧은 영상을 볼 수 있습니다.
> 🎥 위 이미지를 클릭하면 컴퓨터를 ML용으로 구성하는 과정을 담은 짧은 영상이 나옵니다.
1. **Python 설치**. [Python](https://www.python.org/downloads/)이 컴퓨터에 설치되어 있는지 확인하세요. Python은 데이터 과학 및 머신 러닝 작업에 많이 사용됩니다. 대부분의 컴퓨터 시스템에는 이미 Python이 설치되어 있습니다. 일부 사용자에게는 설정을 쉽게 해주는 [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott)도 유용할 수 있습니다.
1. **Python 설치**. 컴퓨터에 [Python](https://www.python.org/downloads/)이 설치되어 있는지 확인하세요. 데이터 과학과 머신러닝 작업에 많이 사용됩니다. 대부분의 컴퓨터 시스템에는 이미 Python이 설치되어 있습니다. 일부 사용자들을 위해 설치를 쉽게 해주는 유용한 [Python 코딩 팩](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott)도 있습니다.
하지만 Python의 일부 사용 사례는 특정 버전을 요구할 수 있습니다. 따라서 [가상 환경](https://docs.python.org/3/library/venv.html)에서 작업하는 것이 유용합니다.
하지만 Python 사용 용도에 따라 소프트웨어 버전이 다르게 요구될 수 있으므로, [가상 환경](https://docs.python.org/3/library/venv.html)에서 작업하는 것이 유용합니다.
2. **Visual Studio Code 설치**. 컴퓨터에 Visual Studio Code가 설치되어 있는지 확인하세요. [Visual Studio Code 설치](https://code.visualstudio.com/)에 대한 지침을 따라 기본 설치를 완료하세요. 이 강의에서는 Visual Studio Code에서 Python을 사용할 예정이므로, [Visual Studio Code를 Python 개발에 맞게 설정](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott)하는 방법을 익혀두는 것이 좋습니다.
2. **Visual Studio Code 설치**. 컴퓨터에 Visual Studio Code가 설치되어 있는지 확인하세요. 기본 설치를 위한 [Visual Studio Code 설치법](https://code.visualstudio.com/)을 따르세요. 이번 과정에서는 Visual Studio Code에서 Python을 사용할 것이므로, [Visual Studio Code에서 Python 개발 설정법](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott)을 익히는 것도 좋습니다.
> Python에 익숙해지려면 이 [Learn 모듈 모음](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)을 살펴보세요.
> 이 [학습 모듈 모음](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)을 통해 Python에 익숙해지세요.
>
> [](https://youtu.be/yyQM70vi7V8 "Visual Studio Code로 Python 설정")
> 🎥 위 이미지를 클릭하면 VS Code에서 Python을 사용하는 방법에 대한 영상을 볼 수 있습니다.
> 🎥 위 이미지를 클릭하면 VS Code 내에서 Python을 사용하는 영상이 나옵니다.
3. **Scikit-learn 설치**. [이 지침](https://scikit-learn.org/stable/install.html)을 따라 Scikit-learn을 설치하세요. Python 3을 사용해야 하므로 가상 환경을 사용하는 것이 권장됩니다. M1 Mac에 이 라이브러리를 설치하는 경우, 위 링크에 특별 지침이 나와 있습니다.
3. <strong>Scikit-learn 설치</strong>는 [이 안내](https://scikit-learn.org/stable/install.html)를 따르세요. Python 3를 사용해야 하므로 가상 환경 사용을 권장합니다. Mac M1에서 설치할 경우 위 링크 페이지에 특수 지침이 있습니다.
Python 코드 개발 및 머신 러닝 모델 생성을 위해 **노트북**을 사용할 것입니다. 이 파일 형식은 데이터 과학자들이 자주 사용하는 도구로, `.ipynb` 확장자로 식별됩니다.
Python 코드 작성과 머신러닝 모델 생성에 <strong>노트북</strong>을 사용할 것입니다. 이 파일 유형은 데이터 과학자들이 흔히 쓰는 도구로 `.ipynb` 확장자를 가집니다.
노트북은 개발자가 코드를 작성하고, 코드에 대한 주석을 추가하며, 문서를 작성할 수 있는 대화형 환경을 제공합니다. 이는 실험적이거나 연구 지향적인 프로젝트에 매우 유용합니다.
노트북은 개발자가 코딩과 노트, 문서 작성을 같이 할 수 있는 대화형 환경으로, 실험적이거나 연구 중심 프로젝트에 매우 유용합니다.
[](https://youtu.be/7E-jC8FLA2E "초보자를 위한 머신 러닝 - 회귀 모델 구축을 위한 Jupyter 노트북 설정")
[](https://youtu.be/7E-jC8FLA2E "초보자를 위한 ML - Jupyter 노트북 설정하여 회귀 모델 시작")
> 🎥 위 이미지를 클릭하면 이 연습 과정을 다룬 짧은 영상을 볼 수 있습니다.
> 🎥 위 이미지를 클릭하면 이 실습 과정을 담은 짧은 영상이 나옵니다.
### 연습 - 노트북 작업하기
### 실습 - 노트북 작업
이 폴더에서 _notebook.ipynb_ 파일을 찾을 수 있습니다.
이 폴더에_notebook.ipynb_ 파일이 있습니다.
1. Visual Studio Code에서 _notebook.ipynb_를 엽니다.
Jupyter 서버가 Python 3+와 함께 시작됩니다. 노트북의 특정 영역에서 `실행(run)`할 수 있는 코드 블록을 찾을 수 있습니다. 코드 블록은 재생 버튼 모양의 아이콘을 선택하여 실행할 수 있습니다.
Python 3+와 함께 Jupyter 서버가 시작됩니다. 노트북 내에서 `실행(run)` 가능한 코드 조각들을 볼 수 있습니다. 재생 버튼 모양 아이콘을 클릭해 코드 블록을 실행할 수 있습니다.
2. `md` 아이콘을 선택하고, 다음 텍스트를 추가하여 약간의 마크다운을 작성합니다: **# Welcome to your notebook**.
1. `md` 아이콘을 선택하고 마크다운 문법으로 다음 텍스트를 입력하세요: **# Welcome to your notebook**.
다음으로, Python 코드를 추가합니다.
이어서 Python 코드를 몇 줄 추가합니다.
3. 코드 블록에 **print('hello notebook')**을 입력합니다.
4. 화살표를 선택하여 코드를 실행합니다.
1. 코드 블록에 **print('hello notebook')**을 입력합니다.
1. 실행 화살표를 선택하여 코드를 실행하세요.
출력 결과로 다음과 같은 문구가 표시됩니다:
출력문이 나타나는 것을 볼 수 있을 것입니다:
```output
hello notebook
```


코드와 함께 주석을 추가하여 노트북을 스스로 문서화할 수 있습니다.
코드 사이에 주석을 넣어 노트북을 자가 문서화할 수 있습니다.
✅ 웹 개발자의 작업 환경과 데이터 과학자의 작업 환경이 얼마나 다른지 잠시 생각해 보세요.
✅ 웹 개발자 작업 환경과 데이터 과학자의 작업 환경이 얼마나 다른지 잠시 생각해 보세요.
## Scikit-learn 시작하기
이제 로컬 환경에 Python이 설정되었고, Jupyter 노트북에 익숙해졌으니, Scikit-learn에도 익숙해져 봅시다. Scikit-learn은 머신 러닝 작업을 수행하는 데 도움을 주는 [광범위한 API](https://scikit-learn.org/stable/modules/classes.html#api-ref)를 제공합니다.
로컬 환경에 Python을 설치하고 Jupyter 노트북을 익혔다면, 이제 Scikit-learn도 편안하게 사용해 봅시다 (`sci`는 `science`의 발음과 같습니다). Scikit-learn은 머신러닝 작업에 도움이 되는 [광범위한 API](https://scikit-learn.org/stable/modules/classes.html#api-ref)를 제공합니다.
Scikit-learn의 [웹사이트](https://scikit-learn.org/stable/getting_started.html)에 따르면, "Scikit-learn은 지도 학습 및 비지도 학습을 지원하는 오픈 소스 머신 러닝 라이브러리입니다. 또한 모델 피팅, 데이터 전처리, 모델 선택 및 평가, 기타 다양한 유틸리티를 제공합니다."
공식 [웹사이트](https://scikit-learn.org/stable/getting_started.html)에 따르면 "Scikit-learn은 감독 및 비감독 학습을 지원하는 오픈 소스 머신러닝 라이브러리입니다. 모델 적합, 데이터 전처리, 모델 선택 및 평가, 기타 다양한 유틸리티를 제공합니다."
이 강의에서는 Scikit-learn 및 기타 도구를 사용하여 '전통적인 머신 러닝' 작업을 수행하는 머신 러닝 모델을 구축할 것입니다. 신경망과 딥러닝은 다루지 않으며, 이는 곧 제공될 'AI for Beginners' 커리큘럼에서 다룰 예정입니다.
이 과정에서 Scikit-learn과 기타 도구를 사용해 전통적인 머신러닝 작업을 수행하는 모델을 구축할 것입니다. 신경망과 딥러닝은 의도적으로 제외했으며, 향후 'AI for Beginners' 커리큘럼에서 자세히 다룰 예정입니다.
Scikit-learn은 모델을 구축하고 평가하는 과정을 간단하게 만들어 줍니다. 주로 숫자 데이터를 사용하는 데 초점이 맞춰져 있으며, 학습 도구로 사용할 수 있는 여러 가지 사전 제작된 데이터셋을 포함하고 있습니다. 또한 학생들이 시도해볼 수 있는 사전 제작된 모델도 포함되어 있습니다. 이제 사전 패키지 데이터와 기본 데이터를 사용하여 첫 번째 머신 러닝 모델을 구축하는 과정을 살펴봅시다.
Scikit-learn은 모델을 쉽게 구축하고 평가할 수 있게 해 줍니다. 주로 수치 데이터를 사용하는 데 중점을 두며, 학습 도구로 사용할 몇 가지 준비된 데이터셋도 포함되어 있습니다. 학생들이 시도해볼 수 있는 사전 제작 모델도 있습니다. 먼저, 기본 데이터를 사용해 미리 포장된 데이터 로딩과 내장 추정기를 사용하는 기본 ML 모델 과정을 살펴봅시다.
## 연습 - 첫 번째 Scikit-learn 노트북
## 실습 - 첫 번째 Scikit-learn 노트북
> 이 튜토리얼은 Scikit-learn 웹사이트의 [선형 회귀 예제](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py)에서 영감을 받았습니다.
[](https://youtu.be/2xkXL5EUpS0 "초보자를 위한 머신 러닝 - Python에서 첫 번째 선형 회귀 프로젝트")
> 🎥 위 이미지를 클릭하면 이 연습 과정을 다룬 짧은 영상을 볼 수 있습니다.
[](https://youtu.be/2xkXL5EUpS0 "초보자를 위한 ML - Python에서 첫 선형 회귀 프로젝트")
이 강의와 관련된 _notebook.ipynb_ 파일에서 모든 셀을 '휴지통' 아이콘을 눌러 비웁니다.
> 🎥 위 이미지를 클릭하면 이 실습에 관한 짧은 영상이 나옵니다.
이 섹션에서는 학습 목적으로 Scikit-learn에 내장된 당뇨병 관련 소규모 데이터셋을 사용합니다. 당뇨병 환자에 대한 치료를 테스트하려 한다고 가정해 봅시다. 머신 러닝 모델은 변수 조합을 기반으로 어떤 환자가 치료에 더 잘 반응할지 결정하는 데 도움을 줄 수 있습니다. 시각화된 매우 기본적인 회귀 모델조차도 이론적 임상 시험을 조직하는 데 도움이 되는 변수에 대한 정보를 보여줄 수 있습니다.
_notebook.ipynb_ 파일에서, 모든 셀을 '휴지통' 아이콘을 눌러 삭제하세요.
✅ 회귀 방법에는 여러 가지가 있으며, 어떤 방법을 선택할지는 찾고자 하는 답에 따라 다릅니다. 예를 들어, 특정 나이에 대한 예상 키를 예측하려면 선형 회귀를 사용합니다. 이는 **숫자 값**을 찾고 있기 때문입니다. 반면, 특정 요리가 비건인지 아닌지를 알아내고 싶다면 **범주 할당**을 찾고 있는 것이므로 로지스틱 회귀를 사용합니다. 이후에 로지스틱 회귀에 대해 더 배우게 될 것입니다. 데이터를 통해 어떤 질문을 할 수 있을지, 그리고 어떤 방법이 더 적합할지 잠시 생각해 보세요.
여기서는 학습 목적용으로 Scikit-learn에 내장된 당뇨병에 관한 작은 데이터셋을 사용합니다. 당뇨 환자 치료법을 평가해 보고자 한다고 가정해 보세요. 머신러닝 모델은 변수 조합에 근거해 어떤 환자가 치료에 더 잘 반응할지 예측하는 데 도움을 줄 수 있습니다. 시각화된 기본 회귀 모델조차, 이론적 임상시험 구성에 도움이 될 변수 정보를 보여줄 수 있습니다.
이제 시작해 봅시다.
✅ 회귀 방법에는 여러 유형이 있으며 선택하는 방법은 찾고자 하는 답변에 달려 있습니다. 특정 연령대 사람의 예상 키를 예측하고 싶다면 선형 회귀를 사용합니다. 이는 **수치 값을** 찾기 때문입니다. 어떤 요리가 비건으로 분류되어야 하는지 알고 싶다면, **범주 할당** 문제이므로 로지스틱 회귀를 사용합니다. 로지스틱 회귀는 나중에 더 배울 것입니다. 데이터에 대해 질문할 수 있는 것들과 어떤 방법이 적절할지 잠시 생각해 보세요.
이제 이 작업을 시작해 봅시다.
### 라이브러리 가져오기
이 작업을 위해 몇 가지 라이브러리를 가져옵니다:
이 작업을 위해 일부 라이브러리를 불러오겠습니다:
- **matplotlib**. [그래프 도구](https://matplotlib.org/)로 유용하며, 선 그래프를 생성하는 데 사용할 것입니다.
- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html)는 Python에서 숫자 데이터를 처리하는 데 유용한 라이브러리입니다.
- **sklearn**. 이는 [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) 라이브러리입니다.
- **matplotlib**. 유용한 [그래프 도구](https://matplotlib.org/)이며 선 그래프를 만드는 데 사용할 것입니다.
- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html)는 파이썬에서 수치 데이터를 다루는 데 유용한 라이브러리입니다.
- **sklearn**. 이것은 [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) 라이브러리입니다.
작업에 필요한 라이브러리를 가져옵니다.
작업을 돕기 위해 라이브러리를 임포트하세요.
1. 다음 코드를 입력하여 라이브러리를 가져옵니다:
1. 다음 코드를 입력하여 임포트합니다:
```python
import matplotlib.pyplot as plt
@ -122,26 +123,26 @@ Scikit-learn은 모델을 구축하고 평가하는 과정을 간단하게 만
from sklearn import datasets, linear_model, model_selection
```
위 코드에서는 `matplotlib`, `numpy`를 가져오고, `sklearn`에서 `datasets`, `linear_model`, `model_selection`을 가져옵니다. `model_selection`은 데이터를 학습 및 테스트 세트로 나누는 데 사용됩니다.
위 코드는 `matplotlib`, `numpy`를 임포트하며, `sklearn`에서 `datasets`, `linear_model`, `model_selection`을 가져옵니다. `model_selection`은 데이터를 훈련 세트와 테스트 세트로 분할하는 데 사용됩니다.
### 당뇨병 데이터셋
내장된 [당뇨병 데이터셋](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)에는 당뇨병과 관련된 442개의 샘플 데이터와 10개의 특징 변수가 포함되어 있습니다. 일부 변수는 다음과 같습니다:
내장된 [당뇨병 데이터셋](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)은 당뇨병 관련 442개의 샘플과 10개의 특성 변수를 포함합니다. 일부 변수는 다음과 같습니다:
- age: 나이 (연도 단위)
- bmi: 체질량지수
- age: 나이(년 단위)
- bmi: 체질량지수
- bp: 평균 혈압
- s1 tc: T-세포 (백혈구의 한 종류)
- s1 tc: T-세포(백혈구의 일종)
✅ 이 데이터셋에는 당뇨병 연구에서 중요한 특징 변수로 '성별' 개념이 포함되어 있습니다. 많은 의료 데이터셋에는 이러한 이진 분류가 포함되어 있습니다. 이러한 분류가 인구의 특정 부분을 치료에서 배제할 가능성에 대해 잠시 생각해 보세요.
✅ 이 데이터셋은 연구에 중요한 '성별'을 특성 변수로 포함합니다. 많은 의학 데이터셋에 이런 이진 분류가 포함되어 있습니다. 이런 분류 기준이 인구 일부를 치료 대상에서 제외할 수 있다는 점을 생각해보세요.
이제 X와 y 데이터를 로드합니다.
이제 X와 y 데이터를 불러옵니다.
> 🎓 이는 지도 학습(supervised learning)이며, 명명된 'y' 타겟이 필요합니다.
> 🎓 이 것은 감독 학습이므로 'y' 타겟이 필요하다는 점을 기억하세요.
새로운 코드 셀에서 `load_diabetes()`를 호출하여 당뇨병 데이터셋을 로드합니다. 입력값 `return_X_y=True`는 `X`가 데이터 행렬이 되고, `y`가 회귀 타겟이 됨을 나타냅니다.
새로운 코드 셀에서 `load_diabetes()`를 호출해 당뇨병 데이터셋을 불러오세요. 입력값 `return_X_y=True`는 `X`가 데이터 매트릭스, `y`가 회귀 타겟임을 나타냅니다.
1. 데이터 행렬의 모양과 첫 번째 요소를 표시하는 몇 가지 print 명령을 추가합니다:
1. 데이터 매트릭스의 형태와 첫 번째 요소를 출력하는 코드를 추가합니다:
```python
X, y = datasets.load_diabetes(return_X_y=True)
@ -149,9 +150,9 @@ Scikit-learn은 모델을 구축하고 평가하는 과정을 간단하게 만
print(X[0])
```
반환값은 튜플입니다. 튜플의 첫 번째 두 값을 각각 `X`와 `y`에 할당합니다. [튜플에 대해 더 알아보기](https://wikipedia.org/wiki/Tuple).
반환되는 값은 튜플입니다. 이 튜플의 처음 두 값을 각각 `X`와 `y`로 할당하는 것입니다. [튜플에 대해 더 알아보기](https://wikipedia.org/wiki/Tuple).
이 데이터는 442개의 항목으로 구성되어 있으며, 각 항목은 10개의 요소로 이루어진 배열로 되어 있음을 확인할 수 있습니다:
이 데이터가 442 개의 항목으로 구성되며 각 항목은 10요소 배열임을 알 수 있습니다:
```text
(442, 10)
@ -159,39 +160,39 @@ Scikit-learn은 모델을 구축하고 평가하는 과정을 간단하게 만
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
✅ 데이터와 회귀 타겟 간의 관계에 대해 잠시 생각해 보세요. 선형 회귀는 특징 X와 타겟 변수 y 간의 관계를 예측합니다. 당뇨병 데이터셋의 [타겟](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)을 문서에서 찾을 수 있나요? 이 데이터셋은 무엇을 보여주고 있나요?
✅ 데이터와 회귀 타겟 간의 관계를 잠시 생각해보세요. 선형 회귀는 특성 X와 타겟 변수 y 간 관계를 예측합니다. 문서에서 당뇨병 데이터셋의 [타겟](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)을 찾을 수 있나요? 이 타겟을 고려할 때 이 데이터셋이 무엇을 보여주는지 생각해 보세요.
2. 다음으로, 데이터셋의 3번째 열을 선택하여 플롯합니다. `:` 연산자를 사용하여 모든 행을 선택한 다음, 인덱스(2)를 사용하여 3번째 열을 선택할 수 있습니다. 또한 `reshape(n_rows, n_columns)`를 사용하여 데이터를 2D 배열로 재구성할 수 있습니다. 매개변수 중 하나가 -1이면 해당 차원이 자동으로 계산됩니다.
2. 다음으로, 데이터셋의 일부를 선택해 플로팅합니다. 데이터셋의 3번째 열을 선택하세요. `:` 연산자로 모든 행을 선택하고 인덱스 2로 3번째 열을 선택할 수 있습니다. 플로팅에 필요한 2D 배열로 변경하려면 `reshape(n_rows, n_columns)`를 사용하세요. 매개변수 중 하나가 -1이면 해당 차원이 자동 계산됩니다.
```python
X = X[:, 2]
X = X.reshape((-1,1))
```
✅ 데이터의 모양을 확인하려면 언제든지 데이터를 출력하세요.
✅ 데이터 모양을 확인하기 위해 언제든 출력해 보세요.
3. 이제 데이터를 플롯할 준비가 되었으니, 머신이 이 데이터셋의 숫자 간 논리적 분리를 결정할 수 있는지 확인할 수 있습니다. 이를 위해 데이터(X)와 타겟(y)을 테스트 및 학습 세트로 나눌 필요가 있습니다. Scikit-learn은 이를 간단히 수행할 수 있는 방법을 제공합니다. 특정 지점에서 테스트 데이터를 나눌 수 있습니다.
3. 이제 플로팅할 데이터가 준비되었으니, 머신이 이 데이터 숫자 사이에 논리적 구분을 짓도록 해봅니다. 이를 위해서는 데이터(X)와 타겟(y)을 테스트 세트와 학습 세트로 분할해야 합니다. Scikit-learn에는 이를 쉽게 하는 방법이 있습니다. 원하는 지점에서 테스트 데이터를 분할할 수 있습니다.
```python
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
```
4. 이제 모델을 학습시킬 준비가 되었습니다! 선형 회귀 모델을 로드하고, `model.fit()`을 사용하여 X 및 y 학습 세트로 학습시킵니다:
4. 이제 모델 학습 준비가 되었습니다! 선형 회귀 모델을 불러와 `model.fit()`으로 X와 y 학습 세트로 학습시킵니다:
```python
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
```
✅ `model.fit()`은 TensorFlow와 같은 많은 머신 러닝 라이브러리에서 볼 수 있는 함수입니다.
✅ `model.fit()` 함수는 TensorFlow 등 많은 ML 라이브러리에서 공통으로 사용됩니다.
5. 그런 다음, `predict()` 함수를 사용하여 테스트 데이터를 기반으로 예측을 생성합니다. 이는 데이터 그룹 간의 선을 그리는 데 사용됩니다.
5. 그런 다음, `predict()` 함수를 이용해 테스트 데이터를 기반으로 예측을 만듭니다. 이를 통해 데이터 그룹 사이에 선을 그릴 수 있습니다.
```python
y_pred = model.predict(X_test)
```
6. 이제 데이터를 플롯에 표시할 시간입니다. Matplotlib은 이 작업에 매우 유용한 도구입니다. 모든 X 및 y 테스트 데이터의 산점도를 생성하고, 예측을 사용하여 데이터 그룹 간 가장 적절한 위치에 선을 그립니다.
6. 이제 데이터를 그래프로 나타냅니다. Matplotlib은 이를 위해 매우 유용합니다. 모든 X와 y 테스트 데이터를 산점도로 나타내고, 모델의 데이터 그룹 간 가장 적절한 위치에 예측된 선을 그리세요.
```python
plt.scatter(X_test, y_test, color='black')
@ -202,23 +203,24 @@ Scikit-learn은 모델을 구축하고 평가하는 과정을 간단하게 만
plt.show()
```

✅ 여기서 무슨 일이 일어나고 있는지 잠시 생각해 보세요. 많은 작은 데이터 점들을 관통하는 직선이 있습니다. 하지만 이 직선이 정확히 무엇을 하고 있는 걸까요? 이 직선을 사용하여 새로운, 보지 못한 데이터 포인트가 플롯의 y축과 어떤 관계를 맺어야 하는지 예측할 수 있다는 것을 이해할 수 있나요? 이 모델의 실질적인 사용 방법을 말로 표현해 보세요.

축하합니다! 첫 번째 선형 회귀 모델을 구축하고, 이를 사용해 예측을 생성한 뒤 플롯에 표시했습니다!
✅ 여기서 무슨 일이 일어나고 있는지 조금 생각해 보세요. 여러 개의 작은 데이터 점을 통과하는 직선이 있는데, 정확히 무엇을 하고 있는 걸까요? 이 직선을 사용하여 새로운, 본 적 없는 데이터 포인트가 플롯의 y축과 어떤 관계를 맺어야 하는지 예측할 수 있어야 한다는 점을 볼 수 있나요? 이 모델의 실질적인 용도를 말로 표현해 보세요.
축하합니다, 첫 번째 선형 회귀 모델을 만들고, 이를 사용해 예측을 수행했으며, 플롯에 표시했습니다!
---
## 🚀도전 과제
이 데이터셋에서 다른 변수를 플롯해 보세요. 힌트: 이 줄을 수정하세요: `X = X[:,2]`. 이 데이터셋의 목표를 고려했을 때, 당뇨병이 질병으로서 어떻게 진행되는지에 대해 무엇을 발견할 수 있나요?
이 데이터셋에서 다른 변수를 플로팅해 보세요. 힌트: 이 줄을 수정하세요: `X = X[:,2]`. 이 데이터셋의 목표 값을 고려할 때, 당뇨병이라는 질병의 진행에 대해 무엇을 발견할 수 있나요?
## [강의 후 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
## 복습 및 자기 학습
## 복습 & 자기 주도 학습
이 튜토리얼에서는 단변량 또는 다변량 선형 회귀가 아닌 간단한 선형 회귀를 사용했습니다. 이러한 방법들 간의 차이에 대해 조금 읽어보거나 [이 비디오](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)를 확인해 보세요.
이 튜토리얼에서는 단순 선형 회귀를 다뤘으며, 단변량 또는 다중 선형 회귀와는 다릅니다. 이 방법들 간의 차이점에 대해 조금 읽어 보거나, [이 영상](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)을 참조하세요.
회귀의 개념에 대해 더 읽어보고 이 기술로 어떤 종류의 질문에 답할 수 있는지 생각해 보세요. 이 [튜토리얼](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott)을 통해 이해를 심화해 보세요.
회귀 개념에 대해 더 읽고, 이 기법으로 어떤 질문들에 답할 수 있는지 생각해 보세요. 이해를 깊게 하려면 이 [튜토리얼](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott)을 통해 학습해 보세요.
## 과제
@ -226,5 +228,7 @@ Scikit-learn은 모델을 구축하고 평가하는 과정을 간단하게 만
---
**면책 조항**:
이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**면책 조항**:
이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역은 오류나 부정확한 부분이 있을 수 있음을 유의하시기 바랍니다. 원본 문서의 원어본이 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우, 전문가의 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
> ### [이 강의는 R 버전도 있습니다!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
## 소개
Scikit-learn을 사용하여 머신러닝 모델을 구축하기 위한 도구를 준비했으니, 이제 데이터를 분석하고 질문을 던질 준비가 되었습니다. 데이터를 다루고 ML 솔루션을 적용할 때, 올바른 질문을 던지는 것이 데이터의 잠재력을 제대로 활용하는 데 매우 중요합니다.
이제 Scikit-learn을 사용해 머신러닝 모델 구축을 시작할 준비가 되었으니 데이터에 질문을 던질 준비가 되었습니다. 데이터를 다루고 ML 솔루션을 적용할 때, 데이터셋의 잠재력을 제대로 활용하려면 올바른 질문을 하는 방법을 이해하는 것이 매우 중요합니다.
이 강의에서 배우게 될 내용:
이 강의에서 여러분은 다음을 배우게 됩니다:
- 모델 구축을 위한 데이터 준비 방법
- Matplotlib을 사용한 데이터 시각화 방법
- 더 표현력 있는 데이터 시각화를 위한 Seaborn 활용법
## 데이터에 올바른 질문 던지기
## 데이터에 올바른 질문하기
답을 얻고자 하는 질문은 어떤 유형의 ML 알고리즘을 사용할지 결정합니다. 그리고 얻는 답변의 품질은 데이터의 특성에 크게 좌우됩니다.
어떤 질문을 하느냐에 따라 사용할 ML 알고리즘 종류가 결정됩니다. 그리고 돌아오는 답변의 품질은 데이터의 특성에 크게 좌우됩니다.
이 강의에서 제공된 [데이터](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv)를 살펴보세요. 이 .csv 파일을 VS Code에서 열어보면, 빈칸과 문자열 및 숫자 데이터가 혼합되어 있음을 바로 확인할 수 있습니다. 또한 'Package'라는 이상한 열이 있는데, 데이터가 'sacks', 'bins' 등 다양한 값으로 구성되어 있습니다. 사실, 이 데이터는 약간 엉망입니다.
이 강의에 제공된 [데이터](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv)를 살펴보세요. VS Code에서 이 .csv 파일을 열 수 있습니다. 빠르게 살펴봐도 빈칸과 문자열과 숫자 데이터가 혼합되어 있음을 알 수 있습니다. 'Package'라는 이상한 컬럼도 있는데, 여기 데이터는 'sacks', 'bins' 등 다양한 값이 혼합되어 있습니다. 실제로 데이터가 꽤 엉망입니다.
[](https://youtu.be/5qGjczWTrDQ "ML 초보자를 위한 데이터셋 분석 및 정리 방법")
[](https://youtu.be/5qGjczWTrDQ "초보자를 위한 ML - 데이터셋 분석 및 정리 방법")
> 🎥 위 이미지를 클릭하면 이 강의를 위한 데이터를 준비하는 과정을 다룬 짧은 영상을 볼 수 있습니다.
> 🎥 위 이미지 클릭 시 이 강의 데이터 준비 과정을 다룬 짧은 영상이 재생됩니다.
사실, ML 모델을 바로 사용할 수 있도록 완벽히 준비된 데이터셋을 받는 경우는 드뭅니다. 이 강의에서는 표준 Python 라이브러리를 사용하여 원시 데이터를 준비하는 방법을 배우게 됩니다. 또한 데이터를 시각화하는 다양한 기술도 배울 것입니다.
실제로 즉시 사용할 수 있는 완벽한 데이터셋을 제공받는 경우는 드뭅니다. 이 강의에서는 표준 Python 라이브러리를 사용해 원시 데이터셋을 준비하는 방법과 데이터를 시각화하는 다양한 기법을 배웁니다.
## 사례 연구: '호박 시장'
이 폴더의 루트 `data` 폴더에는 [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv)라는 .csv 파일이 포함되어 있으며, 이는 도시별로 그룹화된 호박 시장에 대한 1757개의 데이터 라인을 포함하고 있습니다. 이 데이터는 미국 농무부(USDA)가 배포한 [특수 작물 터미널 시장 표준 보고서](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice)에서 추출한 원시 데이터입니다.
이 폴더에는 루트 `data` 폴더 내 [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv)라는 1757행의 호박 시장 도시별 그룹화 데이터 CSV 파일이 있습니다. 이 데이터는 미국 농무부가 배포하는 [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice)에서 추출한 원시 데이터입니다.
### 데이터 준비
이 데이터는 공공 도메인에 속합니다. USDA 웹사이트에서 도시별로 여러 개의 파일로 다운로드할 수 있습니다. 너무 많은 파일을 방지하기 위해 모든 도시 데이터를 하나의 스프레드시트로 결합했으므로, 이미 데이터를 약간 _준비_한 상태입니다. 이제 데이터를 좀 더 자세히 살펴보겠습니다.
이 데이터는 퍼블릭 도메인 데이터입니다. USDA 웹사이트에서 도시별로 여러 개의 개별 파일로 다운로드 가능합니다. 파일 수가 너무 많지 않도록 모든 도시 데이터를 하나로 합쳐 _일부_ 데이터 준비를 이미 진행했습니다. 다음으로 데이터를 좀 더 자세히 살펴보겠습니다.
### 호박 데이터 - 초기 결론
이 데이터에서 무엇을 발견할 수 있나요? 이미 문자열, 숫자, 빈칸 및 이상한 값이 혼합되어 있다는 것을 확인했습니다.
데이터에서 무엇을 알아차렸나요? 문자열, 숫자, 빈칸 및 이상한 값들이 혼재되어 있음을 이미 보았습니다. 이를 이해해야 합니다.
회귀 기법을 사용하여 이 데이터에 어떤 질문을 던질 수 있을까요? 예를 들어, "특정 월에 판매되는 호박의 가격을 예측하라"는 질문은 어떨까요? 데이터를 다시 살펴보면, 이 작업에 필요한 데이터 구조를 만들기 위해 몇 가지 변경이 필요하다는 것을 알 수 있습니다.
회귀 분석 기법을 사용해 이 데이터에 어떤 질문을 던질 수 있을까요? 예를 들면 "특정 월에 판매되는 호박의 가격 예측하기" 같은 질문입니다. 데이터를 다시보면, 이 작업에 필요한 데이터 구조를 만들기 위해 수정해야 할 점들이 있습니다.
## 연습 문제 - 호박 데이터 분석하기
## 실습 - 호박 데이터 분석
데이터를 다루기 위해 매우 유용한 도구인 [Pandas](https://pandas.pydata.org/) (`Python Data Analysis`의 약자)를 사용해 이 호박 데이터를 분석하고 준비해 봅시다.
[판다스(Pandas)](https://pandas.pydata.org/)를 사용해 봅시다. 판다스는 데이터를 분석하고 준비하는 데 매우 유용한 도구입니다.
### 먼저, 누락된 날짜 확인
### 첫 번째 단계: 누락된 날짜 확인
누락된 날짜가 있는지 확인하는 단계부터 시작하세요:
먼저 누락된 날짜를 확인하기 위한 단계를 수행해야 합니다.
1. 날짜를 월 포맷으로 변환 (미국식 날짜 `MM/DD/YYYY` 형식).
2. 월 정보를 새 열로 추출.
1. 날짜를 월 형식으로 변환합니다(미국 날짜 형식은 `MM/DD/YYYY`입니다).
2. 월을 새 열로 추출합니다.
Visual Studio Code에서 _notebook.ipynb_ 파일을 열고 스프레드시트를 새 Pandas 데이터프레임으로 임포트 하세요.
Visual Studio Code에서 _notebook.ipynb_ 파일을 열고 스프레드시트를 새 판다스 데이터프레임으로 가져옵니다.
1. `head()` 함수를 사용하여 처음 다섯 줄을 확인합니다.
1. `head()` 함수를 사용해 처음 다섯 행을 봅니다.
```python
import pandas as pd
@ -64,30 +64,30 @@ Visual Studio Code에서 _notebook.ipynb_ 파일을 열고 스프레드시트를
pumpkins.head()
```
✅ 마지막 다섯 줄을 확인하려면 어떤 함수를 사용해야 할까요?
✅ 마지막 다섯 행을 보려면 어떤 함수를 사용하나요?
1. 현재 데이터프레임에 누락된 데이터가 있는지 확인합니다.
1. 현재 데이터프레임에 누락된 데이터가 있는지 확인:
```python
pumpkins.isnull().sum()
```
누락된 데이터가 있지만, 현재 작업에는 문제가 없을 수도 있습니다.
누락된 데이터가 있지만, 당면한 작업에 크게 지장 없을 수도 있습니다.
1. 데이터프레임을 더 쉽게 작업할 수 있도록 `loc` 함수를 사용하여 필요한 열만 선택합니다. `loc` 함수는 원래 데이터프레임에서 행(첫 번째 매개변수)과 열(두 번째 매개변수)을 추출합니다. 아래의 경우 `:`는 "모든 행"을 의미합니다.
1. 작업하기 쉬운 데이터프레임을 만들기 위해 필요한 열만 선택하세요. `loc` 함수를 사용하면 원본 데이터프레임에서 행(첫 번째 매개변수)과 열(두 번째 매개변수)를 선택할 수 있습니다. 아래 `:`는 "모든 행"을 의미합니다.
데이터프레임을 출력하면 새 회귀 모델을 구축할 수 있는 깨끗하고 정돈된 데이터셋을 확인할 수 있습니다.
데이터프레임을 출력하면 깔끔하고 정돈된 새로운 데이터셋을 볼 수 있으며 이를 기반으로 회귀 모델을 구축할 수 있습니다.
### 그런데! 이상한 점이 있습니다
### 잠깐! 이상한 점이 있습니다
`Package` 열을 보면, 호박은 다양한 구성으로 판매됩니다. 일부는 '1 1/9 bushel' 단위로, 일부는 '1/2 bushel' 단위로, 일부는 호박 개별 단위로, 일부는 파운드 단위로, 그리고 일부는 다양한 크기의 큰 상자로 판매됩니다.
`Package` 열을 보면 호박이 여러 형태로 판매됩니다. '1 1/9 bushel', '1/2 bushel' 단위로 팔리기도 하고, 개별 호박 단위, 파운드 단위, 크기가 다른 큰 상자 단위 등 다양합니다.
> 호박은 일관되게 무게를 측정하기가 매우 어렵습니다.
> 호박은 일관되게 무게를 재기 매우 어려운 것 같습니다
원래 데이터를 살펴보면, `Unit of Sale`이 'EACH' 또는 'PER BIN'인 경우 `Package` 유형이 인치 단위, 빈 단위 또는 'each'로 표시됩니다. 호박은 일관되게 무게를 측정하기가 매우 어려운 것 같습니다. 따라서 `Package` 열에 'bushel' 문자열이 포함된 호박만 선택하여 필터링해 봅시다.
원본 데이터를 더 들여다보면 `Unit of Sale`이 'EACH' 또는 'PER BIN'인 항목은 `Package` 타입이 인치 단위, 빈 단위, 또는 'each'로 표시되어 있는 것을 알 수 있습니다. 호박은 정량적으로 무게 측정이 어렵기 때문에, `Package` 열에 'bushel' 문자열이 포함된 항목만 선택해 필터링해 보겠습니다.
✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308)에 따르면, 버셸의 무게는 농산물의 종류에 따라 다릅니다. 이는 부피 측정 단위입니다. "예를 들어, 토마토 한 버셸은 56파운드로 간주됩니다... 잎과 채소는 더 많은 공간을 차지하지만 무게는 적기 때문에 시금치 한 버셸은 20파운드에 불과합니다." 이는 매우 복잡합니다! 버셸을 파운드로 변환하는 작업은 생략하고 대신 버셸 단위로 가격을 표시합시다. 그러나 호박의 버셸을 연구하면서 데이터의 특성을 이해하는 것이 얼마나 중요한지 알게 됩니다!
✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308)에 따르면 버쉘은 부피 단위이기 때문에 농산물 종류에 따라 무게가 다릅니다. "예를 들어 토마토 한 버쉘은 56파운드여야 합니다... 잎채소는 부피는 크지만 무게가 적어 시금치 한 버쉘은 20파운드에 불과합니다." 매우 복잡합니다! 버쉘-파운드 변환 대신 버쉘 단위로 가격을 책정합시다. 버쉘 단위 호박 연구는 데이터 특성을 이해하는 것이 얼마나 중요한지 보여줍니다!
이제 버셸 측정 단위에 따라 가격을 분석할 수 있습니다. 데이터를 한 번 더 출력하면 표준화된 데이터를 확인할 수 있습니다.
이제 버쉘 단위 가격을 분석할 수 있습니다. 데이터를 한 번 더 출력해 보면 표준화된 모습을 확인할 수 있습니다.
✅ 반 버셸로 판매되는 호박이 매우 비싸다는 것을 눈치챘나요? 왜 그런지 알아낼 수 있나요? 힌트: 작은 호박은 큰 호박보다 훨씬 비쌉니다. 이는 큰 속이 빈 파이 호박 하나가 차지하는 공간 때문에 버셸당 훨씬 더 많은 작은 호박이 포함되기 때문입니다.
✅ 반 버쉘 단위의 호박 가격이 매우 비싼 점 눈치 챘나요? 왜 그런지 이유를 생각해 보세요. 힌트: 작은 호박은 큰 호박보다 버쉘당 훨씬 비싸게 평가되며, 아마도 큰 빈 구멍이 있는 파이 호박으로 인해 버쉘당 개수가 훨씬 많기 때문입니다.
## 시각화 전략
데이터 과학자의 역할 중 하나는 자신이 작업하는 데이터의 품질과 특성을 보여주는 것입니다. 이를 위해 데이터의 다양한 측면을 보여주는 흥미로운 시각화, 즉 플롯, 그래프, 차트를 생성합니다. 이를 통해 관계와 격차를 시각적으로 보여줄 수 있으며, 이는 그렇지 않으면 발견하기 어려운 경우가 많습니다.
데이터 과학자의 역할 중 하나는 자신이 다루는 데이터의 품질과 특성을 보여주는 것입니다. 이를 위해 다양한 시각화, 플롯, 그래프, 차트 등을 만들어 데이터의 여러 측면을 시각적으로 표현합니다. 이를 통해 데이터 간 관계나 누락된 부분을 쉽게 발견할 수 있습니다.
[](https://youtu.be/SbUkxH6IJo0 "ML 초보자를 위한 Matplotlib을 사용한 데이터 시각화 방법")
[](https://youtu.be/SbUkxH6IJo0 "초보자를 위한 ML - Matplotlib으로 데이터 시각화하기")
> 🎥 위 이미지를 클릭하면 이 강의를 위한 데이터를 시각화하는 과정을 다룬 짧은 영상을 볼 수 있습니다.
> 🎥 위 이미지를 클릭하면 이 강의 데이터 시각화 과정의 짧은 영상이 재생됩니다.
시각화는 데이터에 가장 적합한 머신러닝 기법을 결정하는 데도 도움이 됩니다. 예를 들어, 선을 따르는 것처럼 보이는 산점도는 데이터가 선형 회귀 연습에 적합하다는 것을 나타냅니다.
시각화는 데이터에 가장 적합한 머신러닝 기법을 결정하는 데에도 도움이 됩니다. 예를 들어 점들이 선을 따르는 산점도는 데이터가 선형 회귀 연습에 적합하다는 신호입니다.
Jupyter 노트북에서 잘 작동하는 데이터 시각화 라이브러리 중 하나는 [Matplotlib](https://matplotlib.org/)입니다(이전 강의에서도 보았습니다).
Jupyter 노트북에서 잘 작동하는 데이터 시각화 라이브러리 중 하나가 [Matplotlib](https://matplotlib.org/)입니다 (이전 강의에서도 살펴봤습니다).
> 데이터 시각화에 대한 경험을 더 쌓고 싶다면 [이 튜토리얼](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott)을 확인하세요.
> 시각화 경험을 더 쌓으려면 [이 튜토리얼들](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott)을 참고하세요.
## 실습 - Matplotlib 실험하기
## 연습 문제 - Matplotlib 실험
방금 생성한 새 데이터프레임을 표시하기 위해 기본 플롯을 만들어 보세요. 기본 선형 플롯은 무엇을 보여줄까요?
방금 만든 새 데이터프레임을 보여주는 기본 플롯 몇 가지를 만들어 보세요. 기본 선형 플롯은 무엇을 보여줄까요?
1. 파일 상단의 Pandas 가져오기 아래에 Matplotlib을 가져옵니다.
1. 파일 상단, Pandas 임포트 아래에 Matplotlib을 임포트하세요:
```python
import matplotlib.pyplot as plt
```
1. 노트북 전체를 다시 실행하여 새로 고칩니다.
1. 노트북 하단에 데이터를 박스로 표시하는 셀을 추가합니다.
1. 노트북 전체를 다시 실행해 새로 고침하세요.
1. 노트북 하단에 셀을 추가해 다음과 같이 상자 그림을 그리세요:
```python
price = new_pumpkins.Price
@ -174,44 +174,121 @@ Jupyter 노트북에서 잘 작동하는 데이터 시각화 라이브러리 중
plt.show()
```


이 플롯이 유용한가요? 놀라운 점이 있나요?
이 플롯이 유용할까요? 무엇인가 놀랍게 느껴지나요?
이 플롯은 특정 월에 데이터가 퍼져 있는 점으로만 표시되므로 특별히 유용하지 않습니다.
별로 유용하지 않습니다. 그저 월별 데이터가 점들로 퍼져 있는 모습만 보여줍니다.
### 유용하게 만들기
유용한 데이터를 표시하려면 데이터를 그룹화해야 합니다. y축에 월을 표시하고 데이터가 분포를 나타내는 플롯을 만들어 봅시다.
차트가 유용한 데이터를 보여주려면 데이터를 어떤 식으로든 그룹화해야 합니다. 이번에는 y축에 월을 표시하고 데이터 분포를 시각화하는 플롯을 만들어 보겠습니다.


더 유용한 시각화입니다! 9월과 10월에 호박 가격이 가장 높다는 점을 보여 줍니다. 예상과 부합하나요? 왜 그렇거나 왜 아닌가요?
## 연습 문제 - Seaborn 실험
Matplotlib은 강력하지만 세련된 차트를 만들려면 코드가 많을 수 있습니다. [Seaborn](https://seaborn.pydata.org/)은 Matplotlib 위에 구축된 통계적 데이터 시각화 라이브러리로, Pandas 데이터프레임과 바로 작동하고 매력적인 기본 스타일을 적용해 훨씬 적은 코드로 유용한 플롯을 만들 수 있습니다. Seaborn은 Matplotlib 객체를 반환하므로, 기존 Matplotlib 활용법을 그대로 이용해 결과를 세밀하게 조정할 수 있습니다.
> 아직 Seaborn이 설치되어 있지 않다면 `pip install seaborn`으로 설치하세요.
1. 노트북 상단, 다른 임포트 아래에 Seaborn을 임포트하세요. 보통 `sns` 별칭으로 임포트합니다:
```python
import seaborn as sns
```
### 변수 관계를 보여주는 산점도
모델 구축 전에 데이터를 탐색하는 중요한 부분은 변수들 간 _관계_를 찾는 것입니다. [산점도](https://en.wikipedia.org/wiki/Scatter_plot)는 이 작업에 가장 좋은 도구 중 하나입니다: 점들이 선을 따르거나 패턴이 있으면 두 변수 간 상관관계가 있다는 뜻이며, 선형 회귀 모델에 적합할 수 있다는 좋은 신호입니다.
1. 이전에 만들었던 가격 대 월 산점도를, 이번에는 Seaborn의 [`relplot()`](https://seaborn.pydata.org/generated/seaborn.relplot.html) (관계형 플롯)을 사용해 데이터프레임 열을 바로 참조하여 다시 만드세요:

이 데이터는 꽤 잡음이 있어서 선형 플롯이 가장 명확하진 않지만, Seaborn에서 차트 유형을 쉽게 변경할 수 있음을 보여 줍니다.
### 분포를 보여주는 막대 그래프
앞서 Matplotlib을 사용해 데이터를 수작업으로 그룹화하여 막대 그래프를 만들었습니다. Seaborn의 [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html)(범주형 플롯)은 그룹화와 집계를 대신해 줄 수 있습니다. 기본값 `kind="bar"`는 각 범주의 평균과 신뢰 구간을 나타내는 검은 선을 함께 표시합니다.

이는 Matplotlib에서 본 것과 일치합니다 — 가격은 9월과 10월에 정점에 달합니다 — 그러나 Seaborn은 각 월 내 가격이 얼마나 _변동_하는지도 시각화합니다.
### 상관관계를 보여주는 히트맵
산점도는 한 번에 두 변수만 비교합니다. 여러 숫자형 열이 있을 때는 [히트맵](https://en.wikipedia.org/wiki/Heat_map)을 사용하면 모든 열 쌍간 관계 강도를 한눈에 볼 수 있습니다. 이는 모델에 어떤 특성을 넣을지 선택하기 전 가장 상관성이 큰 특성을 찾는 흔한 방법이며 (그리고 이후 분류에서 혼동 행렬을 표시할 때도 같은 유형의 차트를 사용합니다).
1. Pandas로 상관 행렬을 만들고 Seaborn의 [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html)으로 그립니다. `annot=True` 옵션은 각 셀에 상관값을 출력합니다:

`1` (또는 `-1`)에 가까운 값은 열들이 강하게 _선형적으로_ 상관됨을 의미합니다. `Low Price`와 `High Price`가 거의 완벽히 상관되어 있음을 확인하세요. 한편 `Month`는 가격과 약한 선형 상관만 보여줍니다 — 위의 막대 그래프가 9월과 10월의 뚜렷한 계절 피크를 나타냈음에도 말이죠. 이것은 중요한 교훈입니다: 상관계수는 _직선_ 관계만 측정하므로 계절성이나 다른 비선형 패턴을 놓칠 수 있습니다. ✅ 어떤 열을 사용할지 결정하기 전에 왜 히트맵과 막대 그래프 같은 차트를 <em>함께</em> 보는 것이 유용할까요?
### Matplotlib 또는 Seaborn?
두 라이브러리 모두 익혀둘 가치가 있습니다:
- <strong>Matplotlib</strong>은 차트의 모든 요소를 정밀하게 제어할 수 있게 하며 거의 모든 다른 Python 그래프 라이브러리가 기반으로 삼고 있습니다.
- <strong>Seaborn</strong>은 통계 차트를 위한 고수준 함수와 매력적인 기본값을 제공하며 데이터프레임과 직접 작동하고 탐색적 데이터 분석에 더 빠른 경우가 많습니다.
이 시각화는 더 유용합니다! 호박의 최고 가격이 9월과 10월에 발생한다는 것을 나타내는 것 같습니다. 이것이 예상과 일치하나요? 왜 그런지 생각해 보세요.
일반적인 작업 흐름은 데이터를 빠르게 탐색할 때 Seaborn을 사용하고, 세부 사항을 조정해야 할 때 Matplotlib으로 내려가는 것입니다.
---
## 🚀도전 과제
Matplotlib이 제공하는 다양한 시각화 유형을 탐색해 보세요. 회귀 문제에 가장 적합한 유형은 무엇인가요?
Matplotlib과 Seaborn이 제공하는 다양한 시각화 유형을 탐색하세요. 어떤 유형이 회귀 문제에 가장 적합한가요?
## [강의 후 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
## 복습 및 자기 학습
## 복습 및 자기 공부
데이터를 시각화하는 다양한 방법을 살펴보세요. 사용 가능한 라이브러리 목록을 작성하고, 2D 시각화와 3D 시각화와 같은 특정 작업에 가장 적합한 라이브러리를 기록하세요. 무엇을 발견했나요?
데이터를 시각화하는 다양한 방법을 살펴보세요. 사용 가능한 여러 라이브러리를 나열하고 2D 시각화와 3D 시각화 같은 작업 유형별로 어떤 것이 가장 적합한지 기록해보세요. 무엇을 발견하나요?
## 과제
[시각화 탐구](assignment.md)
[시각화 탐색하기](assignment.md)
---
**면책 조항**:
이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**면책 조항**:
이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역은 오류나 부정확한 부분이 있을 수 있음을 유의하시기 바랍니다. 원본 문서의 원어본이 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우, 전문가의 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
"\n---\n\n**면책 조항**: \n이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**면책 조항**:\n이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역은 오류나 부정확한 부분이 있을 수 있음을 유의하시기 바랍니다. 원본 문서의 원어본이 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우, 전문가의 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
강화 학습은 세 가지 중요한 개념을 포함합니다: 에이전트, 상태, 그리고 각 상태에서의 행동 집합. 특정 상태에서 행동을 실행하면 에이전트는 보상을 받습니다. 컴퓨터 게임 슈퍼 마리오를 다시 상상해 보세요. 당신은 마리오이고, 게임 레벨에서 절벽 가장자리 옆에 서 있습니다. 위에는 동전이 있습니다. 당신이 마리오로서 특정 위치에 있는 게임 레벨에 있다는 것이 바로 당신의 상태입니다. 오른쪽으로 한 걸음 이동하는 행동은 절벽 아래로 떨어지게 되어 낮은 점수를 받게 됩니다. 하지만 점프 버튼을 누르면 점수를 얻고 살아남을 수 있습니다. 이는 긍정적인 결과이며, 높은 점수를 받아야 합니다.
강화 학습은 세 가지 중요한 개념을 포함합니다: 에이전트, 상태들, 그리고 각 상태별 행동 집합입니다. 지정된 상태에서 행동을 실행함으로써 에이전트는 보상을 받습니다. 다시 슈퍼 마리오 게임을 상상해 보십시오. 당신은 마리오이고, 게임 레벨 안에서 절벽 옆에 서 있습니다. 위에는 동전이 있습니다. 당신이 마리오이고, 게임 레벨에서 특정 위치에 있는 것이 ... 바로 당신의 상태입니다. 오른쪽으로 한 걸음 움직이는 것(행동)은 절벽 밖으로 떨어지게 하여 낮은 점수를 받을 것입니다. 하지만 점프 버튼을 누르면 점수를 얻고 살아남게 됩니다. 이것은 긍정적인 결과이며 긍정적인 숫자 점수를 부여해야 합니다.
강화 학습과 시뮬레이터(게임)를 사용하면 살아남고 최대한 많은 점수를 얻는 보상을 극대화하기 위해 게임을 플레이하는 방법을 배울 수 있습니다.
강화 학습과 시뮬레이터(게임)를 사용하여 보상을 극대화하는 방법, 즉 생존하고 많은 점수를 얻는 방법을 배울 수 있습니다.
[](https://www.youtube.com/watch?v=lDq_en8RNOo)
> 🎥 위 이미지를 클릭하여 Dmitry가 강화 학습에 대해 설명하는 영상을 시청하세요.
> 🎥 위 이미지를 클릭하여 Dmitry가 강화 학습에 대해 이야기하는 내용을 들어보세요
## [강의 전 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
## [수업 전 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
## 사전 준비 및 설정
## 전제 조건 및 설정
이 강의에서는 Python으로 코드를 실험해 볼 것입니다. 이 강의의 Jupyter Notebook 코드를 컴퓨터 또는 클라우드에서 실행할 수 있어야 합니다.
이 수업에서는 Python 코드를 실험해 볼 것입니다. 여러분은 이 수업의 Jupyter Notebook 코드를 컴퓨터나 클라우드 어디서든 실행할 수 있어야 합니다.
[강의 노트북](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb)을 열어 이 강의를 따라가며 실습을 진행하세요.
[수업 노트북](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb)을 열고 이 수업을 따라가며 코드를 작성할 수 있습니다.
> **참고:** 클라우드에서 이 코드를 열 경우, 노트북 코드에서 사용되는 [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) 파일도 가져와야 합니다. 이 파일을 노트북과 동일한 디렉토리에 추가하세요.
> **참고:** 클라우드에서 이 코드를 여는 경우, 노트북 코드에서 사용되는 [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) 파일도 받아서 노트북과 같은 디렉터리에 두어야 합니다.
## 소개
이 강의에서는 러시아 작곡가 [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev)의 음악 동화 **[피터와 늑대](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**에서 영감을 받아 피터가 환경을 탐험하고 맛있는 사과를 모으며 늑대를 피하도록 하는 **강화 학습**을 탐구할 것입니다.
이 수업에서는 러시아 작곡가 [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev)의 음악 동화에서 영감을 받은**[피터와 늑대](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)** 세계를 탐험합니다. 강화 학습을 사용하여 피터가 환경을 탐험하고 맛있는 사과를 모으며 늑대를 피하도록 할 것입니다.
**강화 학습**(RL)은 여러 실험을 실행하여 **에이전트**가 특정 **환경**에서 최적의 행동을 학습할 수 있도록 하는 학습 기법입니다. 이 환경에서 에이전트는 **보상 함수**로 정의된 **목표**를 가져야 합니다.
**강화 학습**(Reinforcement Learning, RL)은 많은 실험을 통해 어떤 <strong>환경</strong>에서 <strong>에이전트</strong>의 최적 행동을 학습하는 기법입니다. 이 환경에서 에이전트는 일정한 <strong>보상 함수</strong>로 정의되는 <strong>목표</strong>를 가져야 합니다.
## 환경
간단히 하기 위해, 피터의 세계를 `width` x `height` 크기의 정사각형 보드로 간주해 봅시다:
간단히 하기 위해 피터의 세계를 `가로` x `세로` 크기의 정사각형 보드로 생각해 봅시다:
이 환경을 다루는 코드는 별도의 Python 모듈 [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py)에 포함되어 있습니다. 이 코드는 개념을 이해하는 데 중요하지 않으므로 모듈을 가져와 샘플 보드를 생성하는 데 사용합니다(코드 블록 1):
별도의 Python 모듈 [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py)가 이 환경을 다루는 코드를 포함합니다. 이 코드는 개념 이해에 중요하지 않으므로 모듈을 불러와 샘플 보드를 만드는 데 사용하겠습니다 (코드 블록 1):
```python
from rlboard import *
@ -52,63 +52,63 @@ m.randomize(seed=13)
m.plot()
```
이 코드는 위 그림과 유사한 환경을 출력해야 합니다.
이 코드는 위와 유사한 환경 그림을 출력할 것입니다.
## 행동과 정책
이 예제에서 피터의 목표는 늑대와 다른 장애물을 피하면서 사과를 찾는 것입니다. 이를 위해 그는 사과를 찾을 때까지 주변을 걸어다닐 수 있습니다.
예제에서 피터의 목표는 늑대를 피하면서 사과를 찾는 것입니다. 이를 위해 피터는 사과를 찾을 때까지 걸어 다닐 수 있습니다.
따라서 그는 어떤 위치에서든 다음 행동 중 하나를 선택할 수 있습니다: 위, 아래, 왼쪽, 오른쪽.
따라서 어떤 위치에서도 위, 아래, 왼쪽, 오른쪽 중 하나의 행동을 선택할 수 있습니다.
이 행동들을 사전으로 정의하고, 해당 좌표 변화에 매핑합니다. 예를 들어, 오른쪽으로 이동(`R`)은 `(1,0)`에 해당합니다(코드 블록 2):
이 행동들을 사전(dictionary)으로 정의하고, 각각에 해당하는 좌표 변화 쌍에 매핑할 것입니다. 예를 들어, 오른쪽으로 이동하는 것(`R`)은 `(1,0)` 쌍에 해당합니다. (코드 블록 2):
정책을 더 똑똑하게 만들기 위해 어떤 움직임이 다른 움직임보다 "더 나은지"를 이해해야 합니다. 이를 위해 목표를 정의해야 합니다.
정책을 더 똑똑하게 만들기 위해서는 어떤 움직임이 다른 것보다 "더 좋다"는 것을 이해해야 합니다. 이를 위해 목표를 정의해야 합니다.
목표는 **보상 함수**로 정의될 수 있으며, 각 상태에 대해 점수 값을 반환합니다. 숫자가 높을수록 보상이 더 좋습니다(코드 블록 5).
목표는 각 상태에 대해 점수를 반환하는 <strong>보상 함수(reward function)</strong>로 정의할 수 있습니다. 숫자가 클수록 좋은 보상을 나타냅니다. (코드 블록 5)
```python
move_reward = -0.1
@ -154,39 +154,115 @@ def reward(m,pos=None):
return move_reward
```
보상 함수의 흥미로운 점은 대부분의 경우 *게임이 끝날 때만 실질적인 보상을 받는다는 것*입니다. 이는 알고리즘이 긍정적인 보상으로 이어지는 "좋은" 단계를 기억하고 그 중요성을 높여야 하며, 나쁜 결과로 이어지는 모든 움직임은 억제해야 한다는 것을 의미합니다.
보상 함수에 대한 흥미로운 점은 대부분의 경우 <em>게임 끝에서만 실질적인 보상을 받는다는 것</em>입니다. 이는 알고리즘이 긍정적인 결과로 이어지는 “좋은” 단계를 기억하고 중요도를 높여야 하며, 반대로 나쁜 결과로 이어지는 모든 움직임을 억제해야 함을 의미합니다.
## Q-러닝
여기서 논의할 알고리즘은 **Q-러닝**이라고 합니다. 이 알고리즘에서 정책은 **Q-테이블**이라는 함수(또는 데이터 구조)로 정의됩니다. 이는 주어진 상태에서 각 행동의 "좋음"을 기록합니다.
여기서 논의할 알고리즘은 <strong>Q-러닝</strong>이라고 불립니다. 이 알고리즘에서 정책은 <strong>Q-테이블</strong>이라 불리는 함수(또는 데이터 구조)로 정의됩니다. 이는 주어진 상태에서 각 행동의 "좋음" 정도를 기록합니다.
Q-테이블은 종종 테이블 또는 다차원 배열로 표현하기 편리하기 때문에 Q-테이블이라고 불립니다. 보드의 크기가 `width` x `height`인 경우, Q-테이블을 `width` x `height` x `len(actions)` 형태의 numpy 배열로 표현할 수 있습니다(코드 블록 6).
Q-테이블이라고 하는 이유는 이를 표나 다차원 배열 형식으로 표현하는 것이 편리하기 때문입니다. 보드 크기가 `가로` x `세로`이므로, Q-테이블은 `가로` x `세로` x `동작 수` 모양의 numpy 배열로 나타낼 수 있습니다: (코드 블록 6)
Q-테이블의 모든 값을 동일한 값으로 초기화합니다. 여기서는 0.25로 설정합니다. 이는 모든 상태에서 모든 움직임이 동일하게 좋은 "랜덤 워크" 정책에 해당합니다. Q-테이블을 `plot` 함수에 전달하여 보드에서 테이블을 시각화할 수 있습니다: `m.plot(Q)`.
모든 Q-테이블 값들을 동일한 값, 여기서는 0.25로 초기화한 것을 볼 수 있습니다. 이는 각 상태의 모든 동작이 동일하게 좋은 무작위 걷기 정책과 대응됩니다. Q-테이블을 `plot` 함수에 전달하여 보드에 시각화할 수 있습니다: `m.plot(Q)`.
각 셀의 중앙에는 이동 방향을 나타내는 "화살표"가 있습니다. 모든 방향이 동일하기 때문에 점이 표시됩니다.
각 칸 중앙에는 선호하는 이동 방향을 나타내는 "화살표"가 있습니다. 모든 방향이 같으므로 점(dot)으로 표시됩니다.
이제 시뮬레이션을 실행하고 환경을 탐색하며 Q-테이블 값을 더 나은 분포로 학습해야 합니다. 이를 통해 사과로 가는 경로를 훨씬 더 빠르게 찾을 수 있습니다.
이제 시뮬레이션을 실행하여 환경을 탐험하고 Q-테이블 값을 더 나은 분포로 학습하여 사과로 가는 경로를 훨씬 빠르게 찾을 수 있게 할 것입니다.
## Q-러닝의 핵심: 벨만 방정식
움직이기 시작하면 각 행동은 해당 보상을 가지게 됩니다. 즉, 이론적으로 가장 높은 즉각적인 보상을 기반으로 다음 행동을 선택할 수 있습니다. 하지만 대부분의 상태에서는 움직임이 사과에 도달하는 목표를 달성하지 못하므로 어떤 방향이 더 나은지 즉시 결정할 수 없습니다.
움직이기 시작하면 각 행동에는 즉각적인 보상이 따릅니다. 이론적으로는 가장 높은 즉각 보상에 따라 다음 행동을 선택할 수 있습니다. 그러나 대부분의 상태에서 이 움직임만으로는 사과에 도달할 수 없으므로 어떤 방향이 더 좋은지 즉시 결정할 수 없습니다.
> 중요한 것은 즉각적인 결과가 아니라 시뮬레이션 끝에서 얻을 최종 결과입니다.
> 즉각적인 결과가 중요한 것이 아니라, 시뮬레이션 끝에서 얻는 최종 결과가 중요하다는 점을 기억하세요.
이 지연된 보상을 고려하기 위해 **[동적 프로그래밍](https://en.wikipedia.org/wiki/Dynamic_programming)** 원칙을 사용해야 합니다. 이는 문제를 재귀적으로 생각할 수 있도록 합니다.
지연된 보상을 고려하기 위해서는 문제를 재귀적으로 생각할 수 있게 하는**[동적 프로그래밍](https://en.wikipedia.org/wiki/Dynamic_programming)** 원리를 사용해야 합니다.
현재 상태*s*에 있다고 가정하고 다음 상태 *s'*로 이동하려고 합니다. 이렇게 하면 보상 함수로 정의된 즉각적인 보상 *r(s,a)*를 받게 되며, 추가로 미래 보상을 받게 됩니다. Q-테이블이 각 행동의 "매력"을 올바르게 반영한다고 가정하면, 상태 *s'*에서 *Q(s',a')* 값이 최대인 행동 *a'*를 선택할 것입니다. 따라서 상태 *s*에서 얻을 수 있는 최상의 미래 보상은 `max`
현재 상태를 <em>s</em>라고 하고 다음 상태를 <em>s'</em>로 이동한다고 가정합시다. 이렇게 하면 보상 함수로 정의된 즉각 보상 <em>r(s,a)</em>와 일부 미래 보상을 받습니다. 만약 우리가 Q-테이블을 각 행동의 "매력도"를 정확히 반영한다고 가정하면, 상태 <em>s'</em>에서 우리는 최대 *Q(s',a')* 값을 갖는 행동 <em>a</em>를 선택할 것입니다. 따라서 상태 <em>s</em>에서 얻을 수 있는 최상의 미래 보상은 `max`<sub>a'</sub><em>Q(s',a')</em>로 정의됩니다 (최대값은 상태 <em>s'</em>에서 가능한 모든 행동 <em>a'</em>에 대해 계산).
## 정책 확인하기
이것이 상태 <em>s</em>에서 행동 <em>a</em>에 대한 Q-테이블 값을 계산하는 **벨만 방정식(Bellman equation)** 입니다:
Q-Table은 각 상태에서 각 행동의 "매력도"를 나열하고 있으므로, 이를 사용하여 우리 세계에서 효율적인 탐색을 정의하는 것은 비교적 간단합니다. 가장 간단한 경우, Q-Table 값이 가장 높은 행동을 선택하면 됩니다: (코드 블록 9)
여기서 γ는 현재 보상과 미래 보상 중 어느 쪽을 더 선호할지 결정하는 이른바 **할인율(discount factor)** 입니다.
## 학습 알고리즘
위 방정식을 바탕으로 학습 알고리즘에 대한 의사 코드를 작성할 수 있습니다:
* 모든 상태와 행동에 대해 동일한 값으로 Q-테이블 Q 초기화
* 학습률 α ← 1로 설정
* 시뮬레이션을 여러 번 반복 실행
1. 임의 위치에서 시작
1. 반복
1. 상태 <em>s</em>에서 행동 *a* 선택
2. 이동하여 새로운 상태 <em>s'</em>로 행동 실행
3. 게임 종료 조건을 만나거나 총 보상이 너무 작으면 시뮬레이션 종료
4. 새 상태에서 보상 *r* 계산
5. 벨만 방정식에 따라 Q 함수 업데이트: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ max<sub>a'</sub>Q(s',a'))*
6. *s* ← *s'*
7. 총 보상 업데이트 및 α 감소
## 탐험(Explore) 대 착취(Exploit)
위 알고리즘에서 2.1 단계에서 행동을 어떻게 선택할지 명시하지 않았습니다. 만약 행동을 무작위로 선택한다면, 환경을 무작위로 <strong>탐험</strong>하여 자주 죽을 가능성이 있고 평소 가지 않을 곳도 탐험할 것입니다. 반면에 이미 알고 있는 Q-테이블 값을 <strong>착취</strong>하여 가장 좋은 행동(더 높은 Q-테이블 값)을 선택하면 다른 상태를 탐험하지 못하고 최적 해결책을 찾지 못할 수 있습니다.
따라서 탐험과 착취 사이에 균형을 맞추는 것이 최선입니다. 이는 상태 <em>s</em>에서의 행동 선택을 Q-테이블 값에 비례하는 확률로 하여 구현할 수 있습니다. 처음에 Q-테이블 값이 모두 동일하면 무작위 선택과 같지만, 학습이 진행될수록 최적 경로를 따르면서도 가끔씩 미탐험 경로를 선택할 수 있습니다.
## 파이썬 구현
이제 학습 알고리즘을 구현할 준비가 되었습니다. 그 전에 Q-테이블의 임의 숫자를 해당 동작의 확률 벡터로 변환하는 함수가 필요합니다.
1. 함수 `probs()`를 만듭니다:
```python
def probs(v,eps=1e-4):
v = v-v.min()+eps
v = v/v.sum()
return v
```
초기 상태에서 벡터의 모든 성분이 동일하기 때문에 0으로 나누는 오류를 피하기 위해 원래 벡터에 몇 개의 `eps`를 더합니다.
5000번의 실험, 즉 <strong>epoch</strong>을 통해 학습 알고리즘을 실행합니다: (코드 블록 8)
```python
for epoch in range(5000):
# 초기 지점 선택
m.random_start()
# 이동 시작
n=0
cum_reward = 0
while True:
x,y = m.human
v = probs(Q[x,y])
a = random.choices(list(actions),weights=v)[0]
dpos = actions[a]
m.move(dpos,check_correctness=False) # 플레이어가 보드 밖으로 이동할 수 있도록 허용하며, 이 경우 에피소드가 종료됩니다
Q-테이블이 각 상태별로 행동의 "매력도"를 나열하므로, 이를 활용해 우리 세계에서 효율적인 길 찾기가 가능합니다. 가장 간단하게는 가장 높은 Q-테이블 값에 해당하는 행동을 선택할 수 있습니다: (코드 블록 9)
```python
def qpolicy_strict(m):
@ -198,17 +274,18 @@ def qpolicy_strict(m):
walk(m,qpolicy_strict)
```
> 위 코드를 여러 번 실행해보면 가끔 "멈추는" 현상이 발생할 수 있으며, 이 경우 노트북에서 STOP 버튼을 눌러 중단해야 할 수도 있습니다. 이는 두 상태가 최적 Q-Value 관점에서 서로를 "가리키는" 상황이 발생할 때, 에이전트가 두 상태 사이를 무한히 이동하게 되는 경우 때문입니다.
> 위 코드를 여러 번 실행해 보면, 때때로 "멈추는" 현상이 발생하며, 이를 중단하려면 노트북에서 STOP 버튼을 눌러야 한다는 것을 알 수 있습니다. 이는 두 상태가 최적의 Q-Value 관점에서 서로 "가리키는" 상황이 있을 수 있기 때문이며, 이 경우 에이전트가 무한히 그 상태들 사이를 오가게 됩니다.
## 🚀도전 과제
> **과제 1:** `walk` 함수를 수정하여 경로의 최대 길이를 특정 단계 수(예: 100)로 제한하고, 위 코드가 이 값을 반환하는지 확인하세요.
> **과제 1:** `walk` 함수를 수정하여 경로의 최대 길이를 일정한 단계 수(예: 100단계)로 제한하고, 위 코드가 때때로 이 값을 반환하는 것을 확인하세요.
> **과제 2:** `walk` 함수를 수정하여 이전에 방문했던 장소로 돌아가지 않도록 하세요. 이렇게 하면 `walk`가 루프에 빠지는 것을 방지할 수 있지만, 에이전트가 탈출할 수 없는 위치에 "갇히는" 상황은 여전히 발생할 수 있습니다.
> **과제 2:** `walk` 함수를 수정하여 이전에 방문했던 장소로 다시 가지 않도록 하세요. 이렇게 하면 `walk`가 무한 루프에 빠지는 것을 방지할 수 있지만, 에이전트가 빠져나올 수 없는 위치에 "갇힐" 수 있습니다.
## 탐색
## 내비게이션
더 나은 탐색 정책은 우리가 학습 중에 사용했던 정책으로, 탐색과 활용을 결합한 것입니다. 이 정책에서는 Q-Table 값에 비례하여 각 행동을 특정 확률로 선택합니다. 이 전략은 여전히 에이전트가 이미 탐색한 위치로 돌아가는 결과를 초래할 수 있지만, 아래 코드에서 볼 수 있듯이 목표 위치까지의 평균 경로가 매우 짧아지는 결과를 가져옵니다(참고로 `print_statistics`는 시뮬레이션을 100번 실행합니다): (코드 블록 10)
더 나은 내비게이션 정책은 훈련 중에 사용한, 탐사와 활용을 결합한 방법입니다. 이 정책에서는 Q-테이블 값에 비례하는 확률로 각 행동을 선택합니다. 이 전략은 여전히 에이전트가 이미 탐험한 위치로 돌아올 수 있지만, 아래 코드에서 볼 수 있듯이 기대 위치까지의 평균 경로가 매우 짧아집니다(`print_statistics`가 시뮬레이션을 100번 실행함을 기억하세요): (code block 10)
```python
def qpolicy(m):
@ -220,30 +297,32 @@ def qpolicy(m):
print_statistics(qpolicy)
```
이 코드를 실행한 후에는 이전보다 훨씬 짧은 평균 경로 길이를 얻을 수 있으며, 이는 대략 3-6 범위에 해당합니다.
이 코드를 실행하면 이전보다 훨씬 짧은 평균 경로 길이(3~6 범위)를 얻을 수 있습니다.
## 학습 과정 조사
앞서 언급했듯이, 학습 과정은 문제 공간 구조에 대한 지식을 탐색하고 활용하는 균형입니다. 학습 결과(에이전트가 목표로 가는 짧은 경로를 찾는 능력)가 개선된 것을 확인했지만, 학습 과정 중 평균 경로 길이가 어떻게 변화하는지 관찰하는 것도 흥미롭습니다:
앞서 언급했듯이 학습 과정은 탐색과 문제 공간 구조에 대한 습득 지식의 활용 사이의 균형입니다. 학습의 결과(에이전트가 목표까지 짧은 경로를 찾도록 돕는 능력)가 향상된 것을 보았는데, 학습 과정 동안 평균 경로 길이가 어떻게 변하는지 관찰하는 것도 흥미롭습니다:
- **평균 경로 길이 증가**. 처음에는 평균 경로 길이가 증가하는 것을 볼 수 있습니다. 이는 환경에 대해 아무것도 모를 때, 나쁜 상태(물이나 늑대)에 갇히기 쉽기 때문입니다. 더 많은 것을 배우고 이 지식을 활용하기 시작하면 환경을 더 오래 탐색할 수 있지만, 여전히 사과가 어디에 있는지 잘 모르는 상태입니다.
- **평균 경로 길이가 증가한다**. 처음에는 평균 경로 길이가 증가합니다. 이는 환경에 대해 아무것도 모를 때, 물 또는 늑대와 같은 나쁜 상태에 갇힐 가능성이 크기 때문입니다. 더 많이 학습하고 이 지식을 사용함에 따라 환경을 더 오래 탐색할 수 있지만, 사과 위치를 아직 잘 모릅니다.
- **학습이 진행됨에 따라 경로 길이 감소**. 충분히 학습한 후에는 에이전트가 목표를 달성하기 쉬워지고, 경로 길이가 감소하기 시작합니다. 하지만 여전히 탐색을 열어두고 있기 때문에 최적 경로에서 벗어나 새로운 옵션을 탐색하며 경로가 최적보다 길어지는 경우도 있습니다.
- **학습이 진행될수록 경로 길이가 감소한다**. 충분히 학습하면 에이전트가 목표에 도달하기 쉬워지고 경로 길이가 감소하기 시작합니다. 그러나 여전히 탐색 가능성이 열려 있어 종종 최적 경로에서 벗어나 새 경로를 탐색하며 경로가 최적보다 길어질 수 있습니다.
- **경로 길이의 급격한 증가**. 그래프에서 관찰할 수 있는 또 다른 점은 어느 순간 경로 길이가 급격히 증가한다는 것입니다. 이는 과정의 확률적 특성을 나타내며, Q-Table 계수를 새로운 값으로 덮어쓰면서 "망치는" 경우가 발생할 수 있음을 의미합니다. 이를 최소화하려면 학습률을 줄이는 것이 이상적입니다(예: 학습 후반부에는 Q-Table 값을 소폭만 조정).
- **길이가 갑자기 증가한다**. 그래프에서 볼 수 있듯이 어느 시점에서는 길이가 갑자기 증가합니다. 이는 과정의 확률적 특성을 나타내고, Q-테이블 계수를 새 값으로 덮어쓰며 "망칠" 수 있음을 의미합니다. 이상적으로는 학습률을 낮춰(예: 학습 후반부에서는 Q-테이블 값을 약간만 조정) 이를 최소화해야 합니다.
전체적으로, 학습 과정의 성공과 품질은 학습률, 학습률 감소, 할인 계수와 같은 매개변수에 크게 의존한다는 점을 기억하는 것이 중요합니다. 이러한 매개변수는 **하이퍼파라미터**라고 불리며, 학습 중에 최적화하는 **파라미터**(예: Q-Table 계수)와 구분됩니다. 최적의 하이퍼파라미터 값을 찾는 과정을 **하이퍼파라미터 최적화**라고 하며, 이는 별도의 주제로 다룰 가치가 있습니다.
전반적으로 학습 성공과 품질은 학습률, 학습률 감소, 할인율과 같은 매개변수에 크게 의존합니다. 이러한 매개변수는 훈련 중 최적화하는 매개변수(예: Q-테이블 계수)와 구분하기 위해 <strong>하이퍼파라미터</strong>라고 불리며, 최적의 하이퍼파라미터 값을 찾는 과정을 <strong>하이퍼파라미터 최적화</strong>라고 하며 별도의 주제를 필요로 합니다.
## [강의 후 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
## 과제
## 과제
[더 현실적인 세계](assignment.md)
---
**면책 조항**:
이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서(원어로 작성된 문서)를 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**면책 조항**:
이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역은 오류나 부정확한 부분이 있을 수 있음을 유의하시기 바랍니다. 원본 문서의 원어본이 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우, 전문가의 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
이번 강의에서는 **OpenAI Gym**이라는 라이브러리를 사용하여 다양한 **환경**을 시뮬레이션할 것입니다. 이 강의의 코드는 로컬 환경(예: Visual Studio Code)에서 실행할 수 있으며, 이 경우 시뮬레이션이 새 창에서 열립니다. 온라인으로 코드를 실행할 경우, [여기](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7)에 설명된 대로 코드를 약간 수정해야 할 수도 있습니다.
이전 강의에서 해결했던 문제는 장난감 문제처럼 보일 수 있으며, 실제 생활 시나리오에 적용하기 어렵다고 느껴질 수 있습니다. 그러나 실제 많은 문제들이 이와 비슷한 시나리오를 공유합니다 — 체스나 바둑 게임도 포함됩니다. 이들은 규칙이 정해진 보드와 <strong>이산 상태</strong>를 갖고 있다는 점에서 비슷합니다.
## [사전 강의 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
## 소개
이번 강의에서는 Q-러닝의 동일한 원리를 **연속 상태** 문제에 적용할 것입니다. 연속 상태란 하나 이상의 실수로 주어지는 상태를 의미합니다. 아래 문제를 다룰 예정입니다:
> <strong>문제</strong>: 피터가 늑대에게서 도망치려면 더 빨리 움직여야 합니다. Q-러닝을 이용하여 피터가 스케이트를 배우고, 특히 균형을 잡는 법을 배우는 과정을 살펴봅니다.
이번 강의에서는 <strong>OpenAI Gym</strong>이라는 라이브러리를 사용하여 다양한 <strong>환경</strong>을 시뮬레이션할 것입니다. Visual Studio Code와 같이 로컬에서 강의 코드를 실행하면, 시뮬레이션이 새 창에서 열릴 것입니다. 온라인 실행 시에는 [여기](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) 설명된 코드 조정이 필요할 수 있습니다.
## OpenAI Gym
이전 강의에서는 게임의 규칙과 상태가 우리가 직접 정의한 `Board` 클래스에 의해 제공되었습니다. 이번에는 **시뮬레이션 환경**을 사용하여 균형 잡힌 막대의 물리학을 시뮬레이션할 것입니다. 강화 학습 알고리즘을 훈련하기 위한 가장 인기 있는 시뮬레이션 환경 중 하나는 [Gym](https://gym.openai.com/)이며, 이는 [OpenAI](https://openai.com/)에서 관리합니다. 이 Gym을 사용하면 카트폴 시뮬레이션부터 아타리 게임까지 다양한 **환경**을 생성할 수 있습니다.
이전 강의에는 게임의 규칙과 상태를 우리가 정의한 `Board` 클래스로 표현했습니다. 이번에는 균형 잡기 물리학을 시뮬레이션하는 특수 <strong>환경</strong>을 이용합니다. 강화학습 알고리즘 훈련에 가장 널리 사용되는 시뮬레이션 환경 중 하나는 [Gym](https://gym.openai.com/)이라 불리며, [OpenAI](https://openai.com/)에서 유지 관리합니다. 이 Gym을 이용하여 카트폴 시뮬레이션부터 아타리 게임까지 다양한 <strong>환경</strong>을 만들 수 있습니다.
> **참고**: OpenAI Gym에서 제공하는 다른 환경은 [여기](https://gym.openai.com/envs/#classic_control)에서 확인할 수 있습니다.
> <strong>참고</strong>: OpenAI Gym에서 사용할 수 있는 다른 환경들은 [여기](https://gym.openai.com/envs/#classic_control)에서 확인할 수 있습니다.
먼저 Gym을 설치하고 필요한 라이브러리를 가져옵니다. (코드 블록 1):
먼저 gym을 설치하고 필요한 라이브러리를 가져옵니다 (코드 블록 1):
```python
import sys
@ -22,13 +42,13 @@ import random
## 연습 - 카트폴 환경 초기화하기
카트폴 균형 문제를 다루기 위해서는 해당 환경을 초기화해야 합니다. 각 환경은 다음과 관련됩니다:
카트폴 균형 문제를 다루려면 해당 환경을 초기화해야 합니다. 각 환경에는 다음이 연관되어 있습니다:
- **관찰 공간**: 환경에서 얻는 정보의 구조를 정의합니다. 카트폴 문제에서는 막대의 위치, 속도 및 기타 값을 받습니다.
- **관찰 공간**: 환경에서 받는 정보의 구조를 정의합니다. 카트폴 문제에서는 기둥의 위치, 속도 등 여러 값을 받습니다.
- **행동 공간**: 가능한 행동을 정의합니다. 우리의 경우 행동 공간은 이산적이며, **왼쪽**과 **오른쪽** 두 가지 행동으로 구성됩니다. (코드 블록 2)
- **행동 공간**: 가능한 행동을 정의합니다. 이 경우 행동 공간은 이산적이며, 두 가지 행동 - <strong>왼쪽</strong> 과 <strong>오른쪽</strong>으로 구성됩니다. (코드 블록 2)
1. 초기화를 위해 다음 코드를 입력하세요:
1. 초기화하려면 다음 코드를 입력하세요:
```python
env = gym.make("CartPole-v1")
@ -37,11 +57,11 @@ import random
print(env.action_space.sample())
```
환경이 어떻게 작동하는지 확인하려면 100단계 동안 짧은 시뮬레이션을 실행해 봅시다. 각 단계에서 `action_space`에서 무작위로 선택한 행동을 제공합니다.
환경이 어떻게 작동하는지 보려면 100 스텝 동안 간단한 시뮬레이션을 실행해 보겠습니다. 각 스텝에서는 하나의 행동을 제공하는데, 여기서는 `action_space`에서 무작위로 행동을 선택합니다.
1. 아래 코드를 실행하고 결과를 확인하세요.
1. 아래 코드를 실행해 결과를 확인해 보세요.
✅ 이 코드는 로컬 Python 설치에서 실행하는 것이 좋습니다! (코드 블록 3)
✅ 이 코드는 로컬 파이썬 설치 환경에서 실행하는 것이 좋습니다! (코드 블록 3)
```python
env.reset()
@ -52,11 +72,11 @@ import random
env.close()
```
다음과 유사한 이미지를 볼 수 있어야 합니다:
결과는 다음과 비슷한 이미지를 볼 수 있습니다:


1. 시뮬레이션 중에는 행동을 결정하기 위해 관찰값을 얻어야 합니다. 실제로 `step` 함수는 현재 관찰값, 보상 함수, 시뮬레이션을 계속할 가치가 있는지 여부를 나타내는 완료 플래그를 반환합니다: (코드 블록 4)
1. 시뮬레이션 도중에는 어떻게 행동할지 결정하기 위해 관찰값을 받아야 합니다. 사실 `step` 함수는 현재 관찰값, 보상 값, 그리고 시뮬레이션을 계속할지 여부를 나타내는 완료 플래그를 반환합니다: (코드 블록 4)
또한 각 시뮬레이션 단계에서 보상 값이 항상 1임을 알 수 있습니다. 이는 우리의 목표가 가능한 한 오랫동안 막대를 수직에 가깝게 유지하는 것이기 때문입니다.
각 시뮬레이션 단계에서 보상 값이 항상 1인 것을 알 수 있습니다. 이는 목표가 가능한 오랫동안 막대를 수직으로 유지하여 최대한 오래 생존하는 것이기 때문입니다.
✅ 실제로, 카트폴 시뮬레이션은 100번의 연속적인 시도에서 평균 보상이 195에 도달하면 해결된 것으로 간주됩니다.
✅ 사실 카트폴 시뮬레이션은 100번 연속 시도에서 평균 보상이 195 이상이면 문제를 해결한 것으로 간주됩니다.
## 상태 이산화
Q-Learning에서는 각 상태에서 무엇을 해야 할지를 정의하는 Q-테이블을 구축해야 합니다. 이를 위해 상태는 **이산적**이어야 하며, 더 정확히는 유한한 수의 이산 값으로 구성되어야 합니다. 따라서 관찰값을 **이산화**하여 유한한 상태 집합으로 매핑해야 합니다.
Q-러닝에서는 각 상태에서 무엇을 할지 정의하는 Q-테이블을 만들어야 합니다. 이를 위해 상태가 <strong>이산적</strong>이어야 하며, 더 정확히는 유한한 개수의 이산 값들을 포함해야 합니다. 따라서 관찰값을 <strong>이산화</strong>하여 유한 집합의 상태로 매핑할 필요가 있습니다.
이를 수행하는 몇 가지 방법이 있습니다:
이를 하는 몇 가지 방법은 다음과 같습니다:
- **구간으로 나누기**: 특정 값의 범위를 알고 있다면 이 범위를 여러 **구간**으로 나누고, 해당 값이 속하는 구간 번호로 값을 대체할 수 있습니다. 이는 numpy의 [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) 메서드를 사용하여 수행할 수 있습니다. 이 경우 디지털화에 선택한 구간 수에 따라 상태 크기를 정확히 알 수 있습니다.
- **빈(bin)으로 나누기**: 특정 값의 구간을 알고 있으면 이 구간을 여러 <strong>빈</strong>으로 나누고, 값이 속한 빈 번호로 값을 대체할 수 있습니다. 이는 numpy의 [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) 메서드를 사용해 가능합니다. 이 경우 선택한 빈 개수에 따라 상태 크기를 정확히 알 수 있습니다.
✅ 값을 특정 유한 범위(예: -20에서 20)로 선형 보간한 다음, 반올림하여 정수로 변환할 수 있습니다. 이는 입력 값의 정확한 범위를 모를 경우 상태 크기에 대한 제어가 약간 줄어듭니다. 예를 들어, 우리의 경우 4개의 값 중 2개는 상한/하한이 정의되어 있지 않아 상태 수가 무한해질 수 있습니다.
✅ 선형 보간법을 사용해 값을 어떤 유한한 구간(예: -20에서 20) 안으로 가져온 뒤, 반올림하여 정수로 변환하는 방법도 있습니다. 이 경우 입력 값의 정확한 범위를 모르면 상태 크기에 대한 제어가 다소 떨어집니다. 예를 들어 우리 문제에서는 4개의 값 중 2개가 상한/하한이 없기 때문에 상태의 개수가 무한대가 될 수 있습니다.
우리의 예제에서는 두 번째 접근법을 사용할 것입니다. 나중에 알 수 있듯이 상한/하한이 정의되지 않았음에도 불구하고, 이러한 값들은 특정 유한 범위를 벗어나는 경우가 드뭅니다. 따라서 극단적인 값의 상태는 매우 드물게 나타납니다.
이번 예제에서는 두 번째 방법으로 진행하겠습니다. 후에 알 수 있겠지만, 상한/하한이 불명확해도 그런 극단적인 값은 드물게 발생하므로 극값 상태들은 매우 희귀합니다.
1. 모델에서 관찰값을 받아 4개의 정수 값 튜플을 생성하는 함수는 다음과 같습니다: (코드 블록 6)
1. 관찰값을 받아서 4개의 정수 값을 가지는 튜플로 변환하는 함수는 다음과 같습니다: (코드 블록 6)
@ -126,17 +146,17 @@ Q-Learning에서는 각 상태에서 무엇을 해야 할지를 정의하는 Q-
print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10))
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter
nbins = [20,20,10,10] # number of bins for each parameter
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # 각 매개변수에 대한 값의 구간
nbins = [20,20,10,10] # 각 매개변수에 대한 빈의 수
bins = [create_bins(ints[i],nbins[i]) for i in range(4)]
def discretize_bins(x):
return tuple(np.digitize(x[i],bins[i]) for i in range(4))
```
1. 짧은 시뮬레이션을 실행하고 이산화된 환경 값을 관찰해 봅시다. `discretize`와 `discretize_bins`를 모두 시도해 보고 차이가 있는지 확인하세요.
1. 이제 간단한 시뮬레이션을 실행하여 이산화된 환경 값을 관찰해 보세요. `discretize` 와 `discretize_bins` 양쪽 모두 시험해 보고 차이가 있는지 확인해 보세요.
✅ `discretize_bins`는 0부터 시작하는 구간 번호를 반환합니다. 따라서 입력 변수 값이 0 근처일 경우 구간의 중간 값(10)을 반환합니다. `discretize`에서는 출력 값의 범위에 대해 신경 쓰지 않았기 때문에 값이 음수가 될 수 있으며, 0은 0에 해당합니다. (코드 블록 8)
✅ `discretize_bins`는 0부터 시작하는 빈 번호를 반환하므로 입력 값이 0 근처일 때는 구간 중간 번호(10)를 돌려줍니다. 반면 `discretize`는 출력 값 범위를 제한하지 않아 음수가 나올 수 있기 때문에 상태 값이 이동하지 않으며, 0은 0에 대응합니다. (코드 블록 8)
```python
env.reset()
@ -150,15 +170,15 @@ Q-Learning에서는 각 상태에서 무엇을 해야 할지를 정의하는 Q-
env.close()
```
✅ 환경 실행을 보고 싶다면 `env.render`로 시작하는 줄의 주석을 제거하세요. 그렇지 않으면 백그라운드에서 실행할 수 있으며, 이 방식이 더 빠릅니다. Q-Learning 과정에서는 이 "보이지 않는" 실행을 사용할 것입니다.
✅ `env.render`로 시작하는 줄의 주석을 해제하면 환경이 실제 어떻게 동작하는지 볼 수 있습니다. 주석 상태라면 백그라운드에서 실행하는 것이므로 더 빠릅니다. 이 "보이지 않는" 실행 방식을 Q-러닝 과정에서 사용할 것입니다.
## Q-테이블 구조
이전 강의에서는 상태가 0에서 8까지의 숫자 쌍으로 간단했기 때문에 Q-테이블을 8x8x2 형태의 numpy 텐서로 표현하는 것이 편리했습니다. 구간 이산화를 사용하는 경우 상태 벡터의 크기도 알려져 있으므로 동일한 접근법을 사용하여 상태를 20x20x10x10x2 배열 형태로 표현할 수 있습니다(여기서 2는 행동 공간의 차원이며, 첫 번째 차원은 관찰 공간의 각 매개변수에 대해 선택한 구간 수에 해당합니다).
이전 강의에선 상태가 0부터 8사이의 두 숫자였어서, Q-테이블을 크기 8x8x2인 numpy 텐서로 나타내기 편했습니다. 빈 이산화를 쓰면 상태 벡터 크기가 알려져서 같은 방식을 사용하여 관찰 공간 각 매개변수에 대해 선택한 빈 수만큼 20x20x10x10x2 (끝의 2는 행동 공간 차원) 배열로 상태를 표현할 수 있습니다.
하지만 관찰 공간의 정확한 차원이 알려지지 않은 경우도 있습니다. `discretize` 함수의 경우, 일부 원래 값이 제한되지 않았기 때문에 상태가 특정 한계 내에 유지된다는 것을 확신할 수 없습니다. 따라서 약간 다른 접근법을 사용하여 Q-테이블을 딕셔너리로 표현할 것입니다.
그러나 때때로 관찰 공간의 정확한 차원이 알려지지 않을 수 있습니다. `discretize` 함수처럼 상태가 일정 경계 내에 머무르는지 확실치 않은 경우도 있습니다. 그래서 우리는 약간 다른 방식을 사용하여 Q-테이블을 딕셔너리로 나타냅니다.
1. *(state, action)* 쌍을 딕셔너리 키로 사용하고, 값은 Q-테이블 항목 값에 해당합니다. (코드 블록 9)
1. *(state, action)* 쌍을 딕셔너리 키로 쓰고, 값은 Q-테이블 엔트리 값을 대응시킵니다. (코드 블록 9)
```python
Q = {}
@ -168,38 +188,38 @@ Q-Learning에서는 각 상태에서 무엇을 해야 할지를 정의하는 Q-
return [Q.get((state,a),0) for a in actions]
```
여기서`qvalues()`라는 함수를 정의하여 특정 상태에 대해 가능한 모든 행동에 해당하는 Q-테이블 값을 반환합니다. Q-테이블에 항목이 없으면 기본값으로 0을 반환합니다.
여기서는 `qvalues()` 함수도 정의하여 주어진 상태에서 가능한 모든 행동에 대한 Q-테이블 값 리스트를 반환합니다. 만약 Q-테이블에 해당 엔트리가 없으면 기본값 0을 반환합니다.
## Q-Learning 시작하기
## Q-러닝 시작
이제 피터에게 균형 잡는 법을 가르칠 준비가 되었습니다!
이제 피터에게 균형 잡기 기술을 가르쳐 봅시다!
1. 먼저 몇 가지 하이퍼파라미터를 설정합시다: (코드 블록 10)
1. 먼저 하이퍼파라미터를 설정합니다: (코드 블록 10)
```python
# hyperparameters
# 하이퍼파라미터
alpha = 0.3
gamma = 0.9
epsilon = 0.90
```
여기서 `alpha`는 **학습률**로, 각 단계에서 Q-테이블의 현재 값을 어느 정도 조정해야 할지를 정의합니다. 이전 강의에서는 1로 시작하여 훈련 중에 `alpha`를 낮은 값으로 줄였습니다. 이번 예제에서는 단순성을 위해 이를 일정하게 유지할 것이며, 나중에 `alpha` 값을 조정하는 실험을 할 수 있습니다.
여기서 `alpha`는 <strong>학습률</strong>로 매 단계마다 Q-테이블 값을 얼마나 조정할지 정의합니다. 이전에는 1에서 출발해 훈련 중 점차 낮추었습니다. 이번 예제에서는 단순화를 위해 고정값으로 두고 나중에 값들을 조절해 볼 수 있습니다.
`gamma`는 **할인 계수**로, 현재 보상보다 미래 보상을 얼마나 우선시해야 하는지를 나타냅니다.
`gamma`는 <strong>할인율</strong>로, 미래 보상을 현재 보상보다 얼마나 더 중요시할지 나타냅니다.
`epsilon`은 **탐험/활용 계수**로, 탐험을 선호할지 활용을 선호할지를 결정합니다. 알고리즘에서는 `epsilon` 비율만큼 Q-테이블 값을 기준으로 다음 행동을 선택하고, 나머지 경우에는 무작위 행동을 실행합니다. 이를 통해 이전에 탐색하지 않은 검색 공간 영역을 탐험할 수 있습니다.
`epsilon`은 <strong>탐색/활용 비율</strong>로 탐색과 활용 중 어느 쪽을 더 선호할지 결정합니다. 알고리즘에서는 `epsilon` 확률로 Q-테이블의 값을 따라 행동하고, 나머지 경우에는 무작위 행동을 실행합니다. 이렇게 해야 전에 보지 못한 탐색 영역을 살필 수 있습니다.
✅ 균형을 잡는 관점에서 보면, 무작위 행동(탐험)은 잘못된 방향으로의 무작위 펀치처럼 작용하며, 막대는 이러한 "실수"에서 균형을 회복하는 방법을 배워야 합니다.
✅ 균형 맞추기 관점에서 무작위 행동(탐색)은 잘못된 방향에 무작위 펀치를 가하는 것이며, 막대는 이런 "실수"에서 균형 회복법을 학습해야 합니다.
### 알고리즘 개선
이전 강의의 알고리즘을 두 가지 방식으로 개선할 수 있습니다:
이전 강의 알고리즘에 다음 두 가지 개선을 할 수 있습니다:
- **평균 누적 보상 계산**: 여러 시뮬레이션에 걸쳐 평균 누적 보상을 계산합니다. 5000번의 반복마다 진행 상황을 출력하며, 해당 기간 동안 누적 보상의 평균을 계산합니다. 만약 195점 이상을 얻는다면 문제를 해결했다고 간주할 수 있으며, 요구된 품질보다 더 높은 품질로 해결한 것입니다.
- **평균 누적 보상 계산**: 여러 시뮬레이션 동안 평균 누적 보상을 계산합니다. 각 5000 반복마다 진행 상황을 출력하고 이 기간의 누적 보상 평균을 냅니다. 만약 195점 이상 획득하면 문제를 해결했다고 간주할 수 있습니다.
- **최대 평균 누적 결과 계산**: `Qmax`를 계산하고, 해당 결과에 해당하는 Q-테이블을 저장합니다. 훈련을 실행하면 평균 누적 결과가 때때로 감소하는 것을 알 수 있으며, 이는 상황을 악화시키는 값으로 이미 학습된 Q-테이블 값을 "파괴"할 수 있음을 의미합니다.
- **최대 평균 누적 결과 계산**, `Qmax`, 그리고 이 결과에 대응하는 Q-테이블을 저장합니다. 훈련할 때 평균 누적 결과가 가끔 감소하는데, 이때는 Q-테이블 내에서 이전에 관찰된 최적 모델 값을 유지하려고 합니다.
1. 각 시뮬레이션에서 누적 보상을 `rewards` 벡터에 수집하여 나중에 그래프를 그립니다. (코드 블록 11)
1. 모든 시뮬레이션에서 누적 보상을 `rewards` 벡터에 수집하여 후속 시각화에 이용합니다. (코드 블록 11)
```python
def probs(v,eps=1e-4):
@ -214,15 +234,15 @@ Q-Learning에서는 각 상태에서 무엇을 해야 할지를 정의하는 Q-
obs = env.reset()
done = False
cum_reward=0
# == do the simulation ==
# == 시뮬레이션 실행 ==
while not done:
s = discretize(obs)
if random.random()<epsilon:
# exploitation - chose the action according to Q-Table probabilities
# 활용 - Q-테이블 확률에 따라 행동 선택
v = probs(np.array(qvalues(s)))
a = random.choices(actions,weights=v)[0]
else:
# exploration - randomly chose the action
# 탐험 - 무작위로 행동 선택
a = np.random.randint(env.action_space.n)
obs, rew, done, info = env.step(a)
@ -231,7 +251,7 @@ Q-Learning에서는 각 상태에서 무엇을 해야 할지를 정의하는 Q-
@ -240,25 +260,25 @@ Q-Learning에서는 각 상태에서 무엇을 해야 할지를 정의하는 Q-
cum_rewards=[]
```
이 결과에서 다음을 알 수 있습니다:
다음과 같은 결과를 관찰할 수 있습니다:
- **목표에 근접**: 100번 이상의 연속 실행에서 195 누적 보상을 얻는 목표에 매우 근접하거나 실제로 달성했을 수 있습니다! 더 작은 숫자를 얻더라도, 우리는 5000번의 실행에서 평균을 내기 때문에 공식 기준에서는 100번의 실행만 필요합니다.
- **목표에 근접**: 100번 이상의 연속 실행에서 평균 195 누적 보상 달성에 매우 근접했거나 이미 달성했을 수 있습니다! 결과가 작아도 5000번 평균이고 공식 기준은 100번이므로 확실치 않습니다.
- **보상이 감소하기 시작**: 때때로 보상이 감소하기 시작하는데, 이는 상황을 악화시키는 값으로 이미 학습된 Q-테이블 값을 "파괴"할 수 있음을 의미합니다.
- **보상이 감소하기 시작함**: 가끔 보상이 떨어지는데, 이는 Q-테이블의 이미 학습된 값을 더 나쁘게 만드는 값으로 덮어쓸 수 있음을 뜻합니다.
이 관찰은 훈련 진행 상황을 그래프로 나타내면 더 명확하게 보입니다.
이 현상은 훈련 진행 상황을 그래프로 그리면 더 뚜렷해집니다.
## 훈련 진행 상황 그래프 그리기
## 훈련 진행 상황 시각화
훈련 중에 각 반복에서 누적 보상 값을 `rewards` 벡터에 수집했습니다. 이를 반복 번호에 대해 그래프로 나타내면 다음과 같습니다:
훈련 동안, 각 반복에서 누적 보상 값을 `rewards` 벡터에 수집했습니다. 반복 횟수에 대응하여 이 값을 그래프로 나타낸 모습은 다음과 같습니다:
```python
plt.plot(rewards)
```


이 그래프에서는 아무것도 알 수 없습니다. 이는 확률적 훈련 과정의 특성상 훈련 세션 길이가 크게 변하기 때문입니다. 이 그래프를 더 이해하기 쉽게 만들기 위해, 예를 들어 100번의 실험에 대해 **이동 평균**을 계산할 수 있습니다. 이는 `np.convolve`를 사용하여 편리하게 수행할 수 있습니다: (코드 블록 12)
이 그래프는 말해주는 바가 거의 없습니다. 왜냐하면 확률적 훈련 프로세스 특성상 세션 길이가 크게 달라지기 때문입니다. 이 그래프를 좀 더 의미있게 만들기 위해, 100번 실험에 대한 <strong>이동 평균</strong>을 계산할 수 있습니다. `np.convolve`로 편리하게 계산 가능합니다: (코드 블록 12)


## 하이퍼파라미터 조절
학습을 더 안정적으로 만들려면 훈련 중에 하이퍼파라미터를 조절하는 것이 좋습니다. 특히:
- **학습률(alpha)**: 1에 가까운 값에서 시작해 점차 감소시킵니다. 시간이 지날수록 Q-테이블 값의 확률이 좋아지고, 완전히 덮어쓰지 않고 조금씩 조정하게 됩니다.
## 하이퍼파라미터 조정
- **epsilon 증가**: 탐색을 줄이고 활용을 늘리기 위해 epsilon 값을 천천히 올릴 수 있습니다. 낮은 epsilon 값에서 시작하여 1에 가까워지는 방향이 적절할 것입니다.
학습을 더 안정적으로 만들기 위해 훈련 중에 일부 하이퍼파라미터를 조정하는 것이 좋습니다. 특히:
> **과제 1**: 하이퍼파라미터 값을 조절하며 더 높은 누적 보상을 달성할 수 있는지 시험해 보세요. 195 이상을 얻었나요?
- **학습률** `alpha`의 경우, 1에 가까운 값으로 시작한 다음 점차적으로 이 값을 줄이는 것이 좋습니다. 시간이 지나면 Q-테이블에서 좋은 확률 값을 얻을 수 있으며, 이를 약간만 조정하고 새 값으로 완전히 덮어쓰지 않아야 합니다.
- **epsilon 증가**: `epsilon`을 천천히 증가시켜 탐험을 줄이고 활용을 늘리는 것이 좋습니다. 낮은 `epsilon` 값으로 시작하여 거의 1에 가까운 값으로 이동하는 것이 합리적일 수 있습니다.
> **작업 1**: 하이퍼파라미터 값을 조정해 보며 더 높은 누적 보상을 얻을 수 있는지 확인하세요. 195점을 넘기고 있나요?
> **과제 2**: 문제를 공식적으로 해결하려면 100번의 연속 실행에서 평균 보상이 195에 도달해야 합니다. 훈련 중에 이를 측정하고 문제를 공식적으로 해결했는지 확인하세요!
> **과제 2**: 문제를 정식으로 해결하려면 100번 연속 실행에서 평균 보상 195를 얻어야 합니다. 훈련 중에 이를 측정하고 문제를 정식으로 해결했는지 확인하세요!
## 결과 확인하기
## 결과를 실제로 보기
훈련된 모델이 실제로 어떻게 작동하는지 보는 것은 흥미로울 것입니다. 시뮬레이션을 실행하고 훈련 중과 동일한 행동 선택 전략을 따라 Q-테이블의 확률 분포에 따라 샘플링해 봅시다: (코드 블록 13)
훈련된 모델이 실제로 어떻게 동작하는지 보는 것이 흥미로울 것입니다. 시뮬레이션을 실행하고 훈련 중과 동일한 행동 선택 전략을 따르며 Q-Table의 확률 분포에 따라 샘플링 해봅시다: (코드 블록 13)
```python
obs = env.reset()
@ -295,17 +318,17 @@ while not done:
env.close()
```
다음과 같은 결과를 볼 수 있을 것입니다:
다음과 같은 것을 볼 수 있을 것입니다:

---
## 🚀도전
## 🚀도전 과제
> **과제 3**: 여기서는 최종 Q-테이블을 사용했지만, 이것이 최상의 결과를 제공하는 것은 아닐 수 있습니다. 우리가 가장 성능이 좋은 Q-테이블을 `Qbest` 변수에 저장했다는 것을 기억하세요! `Qbest`를 `Q`로 복사하여 최상의 Q-테이블을 사용해 동일한 예제를 실행하고 차이를 확인해 보세요.
> **과제 3**: 여기서는 최종 Q-Table 사본을 사용했는데, 이것이 최선의 사본이 아닐 수도 있습니다. 최상의 성능을 낸 Q-Table을 `Qbest` 변수에 저장해두었음을 기억하세요! `Qbest`를 `Q`에 복사해서 최상의 Q-Table로 같은 예제를 시도해 보고 차이를 확인해 보세요.
> **과제 4**: 여기서는 각 단계에서 최상의 행동을 선택하지 않고, 해당 확률 분포에 따라 샘플링했습니다. 항상 Q-테이블 값이 가장 높은 최상의 행동을 선택하는 것이 더 합리적일까요? 이를 위해 `np.argmax` 함수를 사용하여 Q-테이블 값이 가장 높은 행동 번호를 찾을 수 있습니다. 이 전략을 구현하여 균형 잡기에 개선이 있는지 확인해 보세요.
> **과제 4**: 여기서는 각 단계마다 최선의 행동을 선택하지 않고, 해당 확률 분포에 따라 샘플링했습니다. 항상 Q-Table 값이 가장 높은 최선의 행동을 선택하는 것이 더 합리적일까요? 이는 `np.argmax` 함수를 사용해 가장 높은 Q-Table 값에 해당하는 행동 번호를 찾으면 됩니다. 이 전략을 구현하고 균형 유지가 개선되는지 확인해 보세요.
## [강의 후 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
@ -314,11 +337,13 @@ env.close()
## 결론
우리는 이제 에이전트가 게임의 원하는 상태를 정의하는 보상 함수만 제공받고, 검색 공간을 지능적으로 탐색할 기회를 통해 좋은 결과를 얻는 방법을 배웠습니다. 우리는 Q-러닝 알고리즘을 이산적 환경과 연속적 환경에서 성공적으로 적용했으며, 이산적 행동을 사용했습니다.
이제 원하는 게임 상태를 정의하는 보상 함수만 제공하고 탐색 공간을 지능적으로 탐험할 기회를 줌으로써 에이전트를 훈련해 좋은 결과를 얻는 방법을 배웠습니다. 이산 및 연속 환경의 경우에 Q-러닝 알고리즘을 성공적으로 적용했지만, 행동은 이산적이었습니다.
행동 상태도 연속적이고 관찰 공간이 훨씬 더 복잡한 상황, 예를 들어 아타리 게임 화면의 이미지를 다루는 경우를 연구하는 것도 중요합니다. 이러한 문제에서는 종종 신경망과 같은 더 강력한 머신러닝 기술을 사용해야 좋은 결과를 얻을 수 있습니다. 이러한 더 고급 주제는 앞으로 진행될 고급 AI 과정에서 다룰 예정입니다.
행동 상태도 연속적이고 관찰 공간이 Atari 게임 화면과 같이 훨씬 복잡한 상황을 연구하는 것도 중요합니다. 이러한 문제에서는 좋은 결과를 얻기 위해 신경망과 같은 더 강력한 머신러닝 기법을 사용해야 하는 경우가 많습니다. 이러한 고급 주제들은 우리가 곧 다룰 더 고급 AI 강의에서 다뤄질 내용입니다.
---
**면책 조항**:
이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**면책 조항**:
이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역은 오류나 부정확한 부분이 있을 수 있음을 유의하시기 바랍니다. 원본 문서의 원어본이 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우, 전문가의 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.