मशीन लर्निंग मॉडल और उनके उपयोग और रखरखाव की प्रक्रिया अन्य विकास वर्कफ़्लो से काफी अलग होती है। इस पाठ में, हम इस प्रक्रिया को सरल बनाएंगे और उन मुख्य तकनीकों को समझाएंगे जिन्हें आपको जानना चाहिए। आप:
मशीन लर्निंग मॉडल बनाने, उपयोग करने, और बनाए रखने की प्रक्रिया और उनके द्वारा उपयोग किए गए डेटा की प्रक्रिया कई अन्य विकास वर्कफ़्लो से बहुत अलग होती है। इस पाठ में, हम इस प्रक्रिया को सरल बनाएंगे और मुख्य तकनीकों का सारांश प्रस्तुत करेंगे जिन्हें आपको जानना आवश्यक है। आप:
- मशीन लर्निंग की प्रक्रियाओं को उच्च स्तर पर समझेंगे।
- 'मॉडल', 'प्रेडिक्शन', और 'ट्रेनिंग डेटा' जैसे मूलभूत अवधारणाओं का अन्वेषण करेंगे।
- उच्च स्तर पर मशीन लर्निंग के पीछे की प्रक्रियाओं को समझेंगे।
- 'मॉडल', 'पूर्वानुमान', और 'प्रशिक्षण डेटा' जैसे मूल अवधारणाओं का अन्वेषण करेंगे।
[](https://youtu.be/4NGM0U2ZSHU "मशीन लर्निंग के लिए शुरुआती - मशीन लर्निंग की तकनीकें")
[](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning")
> 🎥 ऊपर दी गई छवि पर क्लिक करें इस पाठ को समझाने वाले एक छोटे वीडियो के लिए।
> 🎥 इस पाठ को समझाने वाला संक्षिप्त वीडियो देखने के लिए ऊपर दिए चित्र पर क्लिक करें।
## परिचय
उच्च स्तर पर, मशीन लर्निंग (ML) प्रक्रियाओं को बनाने की कला में कई चरण शामिल होते हैं:
उच्च स्तर पर, मशीन लर्निंग (ML) प्रक्रियाओं को बनाने की कारीगरी कई चरणों से मिलकर होती है:
1. **प्रश्न तय करें**। अधिकांश ML प्रक्रियाएं एक ऐसे प्रश्न से शुरू होती हैं जिसे एक साधारण कंडीशनल प्रोग्राम या नियम-आधारित इंजन द्वारा उत्तर नहीं दिया जा सकता। ये प्रश्न अक्सर डेटा के संग्रह के आधार पर भविष्यवाणियों के इर्द-गिर्द घूमते हैं।
2. **डेटा एकत्रित और तैयार करें**। अपने प्रश्न का उत्तर देने के लिए, आपको डेटा की आवश्यकता होती है। आपके डेटा की गुणवत्ता और कभी-कभी मात्रा यह निर्धारित करती है कि आप अपने प्रारंभिक प्रश्न का उत्तर कितनी अच्छी तरह दे सकते हैं। इस चरण में डेटा को विज़ुअलाइज़ करना एक महत्वपूर्ण पहलू है। इस चरण में डेटा को ट्रेनिंग और टेस्टिंग समूह में विभाजित करना भी शामिल है ताकि मॉडल बनाया जा सके।
3. **ट्रेनिंग विधि चुनें**। आपके प्रश्न और डेटा की प्रकृति के आधार पर, आपको यह तय करना होगा कि आप मॉडल को कैसे ट्रेन करना चाहते हैं ताकि यह आपके डेटा को सबसे अच्छी तरह से प्रतिबिंबित करे और इसके खिलाफ सटीक भविष्यवाणियां करे। यह आपके ML प्रक्रिया का वह हिस्सा है जो विशेष विशेषज्ञता और अक्सर काफी मात्रा में प्रयोग की आवश्यकता होती है।
4. **मॉडल को ट्रेन करें**। अपने ट्रेनिंग डेटा का उपयोग करके, आप विभिन्न एल्गोरिदम का उपयोग करके मॉडल को डेटा में पैटर्न पहचानने के लिए ट्रेन करेंगे। मॉडल आंतरिक वेट्स का उपयोग कर सकता है जिन्हें डेटा के कुछ हिस्सों को दूसरों पर प्राथमिकता देने के लिए समायोजित किया जा सकता है ताकि बेहतर मॉडल बनाया जा सके।
5. **मॉडल का मूल्यांकन करें**। आप अपने संग्रहित सेट से पहले कभी न देखे गए डेटा (अपने टेस्टिंग डेटा) का उपयोग करके देख सकते हैं कि मॉडल कैसा प्रदर्शन कर रहा है।
6. **पैरामीटर ट्यूनिंग**। आपके मॉडल के प्रदर्शन के आधार पर, आप प्रक्रिया को अलग-अलग पैरामीटर या वेरिएबल का उपयोग करके फिर से कर सकते हैं जो मॉडल को ट्रेन करने के लिए उपयोग किए गए एल्गोरिदम के व्यवहार को नियंत्रित करते हैं।
7. **भविष्यवाणी करें**। नए इनपुट का उपयोग करके अपने मॉडल की सटीकता का परीक्षण करें।
1. **प्रश्न तय करें**। अधिकांश ML प्रक्रियाएं ऐसे प्रश्न पूछने से शुरू होती हैं जिनका उत्तर सरल कंडीशनल प्रोग्राम या नियम-आधारित इंजन द्वारा नहीं दिया जा सकता। ये प्रश्न अक्सर डेटा के संग्रह के आधार पर पूर्वानुमान से संबंधित होते हैं।
2. **डेटा इकट्ठा करें और तैयार करें**। अपने प्रश्न का उत्तर देने के लिए आपको डेटा की आवश्यकता होती है। आपके डेटा की गुणवत्ता और कभी-कभार मात्रा निर्धारित करेगी कि आप अपने प्रारंभिक प्रश्न का कितना अच्छा उत्तर दे सकते हैं। डेटा का दृश्यांकन इस चरण का एक महत्वपूर्ण हिस्सा है। इस चरण में डेटा को प्रशिक्षण और परीक्षण समूहों में विभाजित करना भी शामिल है ताकि मॉडल बनाया जा सके।
3. **प्रशिक्षण विधि चुनें**। आपके प्रश्न और डेटा की प्रकृति के अनुसार, आपको यह चुनना होगा कि आप मॉडल को कैसे प्रशिक्षित करेंगे ताकि यह आपके डेटा को सबसे अच्छी तरह दर्शाए और उसके विरुद्ध सटीक पूर्वानुमान कर सके। यह आपका ML प्रक्रिया का वह हिस्सा है जिसमें विशेषज्ञता और अक्सर काफी प्रयोग की आवश्यकता होती है।
4. **मॉडल प्रशिक्षित करें**। अपने प्रशिक्षण डेटा का उपयोग करके, आप विभिन्न एल्गोरिदम का उपयोग करके मॉडल को डेटा में पैटर्न पहचानने के लिए प्रशिक्षित करेंगे। मॉडल आंतरिक भार (वेट्स) का लाभ उठा सकता है जिन्हें समायोजित किया जा सकता है ताकि डेटा के कुछ हिस्सों को प्राथमिकता देकर बेहतर मॉडल बनाया जा सके।
5. **मॉडल का मूल्यांकन करें**। आप अपने एकत्र किए गए समूह से पहले कभी न देखे गए डेटा (परीक्षण डेटा) का उपयोग करके मॉडल के प्रदर्शन को देखेंगे।
6. **पैरामीटर ट्यूनिंग**। आपके मॉडल के प्रदर्शन के आधार पर, आप मॉडल को प्रशिक्षित करने के लिए उपयोग किए गए एल्गोरिदम के व्यवहार को नियंत्रित करने वाले विभिन्न पैरामीटर या वेरिएबल का उपयोग करके प्रक्रिया को फिर से कर सकते हैं।
7. **पूर्वानुमान करें**। अपने मॉडल की सटीकता जांचने के लिए नए इनपुट का उपयोग करें।
## कौन सा प्रश्न पूछना है
## किस प्रश्न को पूछना चाहिए
कंप्यूटर डेटा में छिपे पैटर्न खोजने में विशेष रूप से कुशल होते हैं। यह उपयोगिता उन शोधकर्ताओं के लिए बहुत मददगार है जिनके पास किसी दिए गए डोमेन के बारे में ऐसे प्रश्न होते हैं जिन्हें आसानी से कंडीशनली-आधारित नियम इंजन बनाकर उत्तर नहीं दिया जा सकता। उदाहरण के लिए, एक एक्चुरियल कार्य को देखते हुए, एक डेटा वैज्ञानिक धूम्रपान करने वालों बनाम गैर-धूम्रपान करने वालों की मृत्यु दर के आसपास हस्तनिर्मित नियम बना सकता है।
कंप्यूटर डेटा में छिपे पैटर्न खोजने में विशेष रूप से कुशल होते हैं। यह उपयोगिता शोधकर्ताओं के लिए बहुत मददगार होती है जिनके पास ऐसे प्रश्न होते हैं जिन्हें कंडीशनली आधारित नियम इंजन बनाकर आसानी से उत्तर नहीं दिया जा सकता। उदाहरण के लिए, एक सांख्यिकी कार्य में, एक डेटा वैज्ञानिक स्मोकर्स और नॉन-स्मोकर्स की मृत्यु दर के बारे में हस्तनिर्मित नियम बना सकता है।
हालांकि, जब कई अन्य वेरिएबल समीकरण में लाए जाते हैं, तो एक ML मॉडल पिछले स्वास्थ्य इतिहास के आधार पर भविष्य की मृत्यु दर की भविष्यवाणी करने में अधिक कुशल साबित हो सकता है। एक अधिक सुखद उदाहरण अप्रैल के महीने में किसी दिए गए स्थान के लिए मौसम की भविष्यवाणी करना हो सकता है, जिसमें अक्षांश, देशांतर, जलवायु परिवर्तन, महासागर के निकटता, जेट स्ट्रीम के पैटर्न और अधिक जैसे डेटा शामिल हैं।
जब अन्य कई चर इस समीकरण में लाए जाते हैं, तो ML मॉडल पिछले स्वास्थ्य इतिहास के आधार पर भविष्य की मृत्यु दर का पूर्वानुमान लगाने में अधिक कुशल साबित हो सकता है। एक और सुखद उदाहरण हो सकता है किसी स्थान में अप्रैल माह के लिए मौसम पूर्वानुमान बनाना, जिसमें अक्षांश, देशांतर, जलवायु परिवर्तन, समुद्र के निकटता, जेट स्ट्रीम के पैटर्न, और अधिक शामिल हो सकते हैं।
✅ यह [स्लाइड डेक](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) मौसम मॉडल पर ML का उपयोग करने के लिए एक ऐतिहासिक दृष्टिकोण प्रदान करता है।
✅ यह [स्लाइड डेक](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) मौसम मॉडल पर ML के उपयोग का ऐतिहासिक दृष्टिकोण प्रदान करता है।
## मॉडल बनाने से पहले के कार्य
## पूर्व-निर्माण कार्य
मॉडल बनाना शुरू करने से पहले, आपको कई कार्य पूरे करने की आवश्यकता होती है। अपने प्रश्न का परीक्षण करने और मॉडल की भविष्यवाणियों के आधार पर एक परिकल्पना बनाने के लिए, आपको कई तत्वों की पहचान और कॉन्फ़िगर करना होगा।
मॉडल बनाने से पहले, आपको कई कार्य पूरे करने होंगे। अपने प्रश्न का परीक्षण करने और मॉडल की भविष्यवाणियों के आधार पर एक अनुमान बनाने के लिए, आपको कई तत्वों की पहचान और कॉन्फ़िगर करना होगा।
### डेटा
अपने प्रश्न का उत्तर किसी भी प्रकार की निश्चितता के साथ देने के लिए, आपको सही प्रकार का पर्याप्त डेटा चाहिए। इस बिंदु पर आपको दो चीजें करनी होंगी:
अपने प्रश्न का किसी प्रकार की निश्चितता के साथ उत्तर देने के लिए, आपको सही प्रकार के पर्याप्त डेटा की आवश्यकता होती है। इस चरण में आपको दो काम करने होंगे:
- **डेटा एकत्रित करें**। डेटा विश्लेषण में निष्पक्षता पर पिछले पाठ को ध्यान में रखते हुए, अपने डेटा को सावधानीपूर्वक एकत्रित करें। इस डेटा के स्रोतों, इसमें मौजूद किसी भी अंतर्निहित पूर्वाग्रहों के बारे में जागरूक रहें और इसकी उत्पत्ति का दस्तावेज़ बनाएं।
- **डेटा तैयार करें**। डेटा तैयारी प्रक्रिया में कई चरण होते हैं। यदि डेटा विभिन्न स्रोतों से आता है, तो आपको इसे एकत्रित और सामान्यीकृत करने की आवश्यकता हो सकती है। आप डेटा की गुणवत्ता और मात्रा को विभिन्न तरीकों से सुधार सकते हैं, जैसे स्ट्रिंग्स को नंबर में बदलना (जैसा कि हम [क्लस्टरिंग](../../5-Clustering/1-Visualize/README.md) में करते हैं)। आप मूल डेटा के आधार पर नया डेटा भी उत्पन्न कर सकते हैं (जैसा कि हम [क्लासिफिकेशन](../../4-Classification/1-Introduction/README.md) में करते हैं)। आप डेटा को साफ और संपादित कर सकते हैं (जैसा कि हम [वेब ऐप](../../3-Web-App/README.md) पाठ से पहले करेंगे)। अंत में, आप इसे यादृच्छिक और शफल भी कर सकते हैं, यह आपके ट्रेनिंग तकनीकों पर निर्भर करता है।
- **डेटा इकट्ठा करें**। डेटा विश्लेषण में निष्पक्षता पर पिछले पाठ को ध्यान में रखते हुए, सावधानी से डेटा एकत्र करें। डेटा के स्रोतों के प्रति जागरूक रहें, इसमें मौजूद किसी भी अंतर्निहित पक्षपात से अवगत रहें, और इसके स्रोत का दस्तावेजीकरण करें।
- **डेटा तैयार करें**। डेटा तैयारी प्रक्रिया में कई चरण होते हैं। यदि डेटा विभिन्न स्रोतों से आया हो तो आपको डेटा को संयोजित और सामान्यीकृत करने की आवश्यकता हो सकती है। आप विभिन्न विधियों से डेटा की गुणवत्ता और मात्रा बढ़ा सकते हैं, जैसे स्ट्रिंग को संख्याओं में बदलना (जैसा कि हम [क्लस्टरिंग](../../5-Clustering/1-Visualize/README.md) में करते हैं)। आप मूल डेटा के आधार पर नया डेटा उत्पन्न भी कर सकते हैं (जैसा कि हम [क्लासिफिकेशन](../../4-Classification/1-Introduction/README.md) में करते हैं)। आप डेटा को साफ़ और संपादित भी कर सकते हैं (जैसा कि हम [वेब ऐप](../../3-Web-App/README.md) पाठ से पहले करेंगे)। अंत में, आपको इसे यादृच्छिक (रैंडमाइज़) और शफल करने की आवश्यकता हो सकती है, जो आपकी प्रशिक्षण तकनीकों पर निर्भर करता है।
✅ डेटा एकत्रित और प्रोसेस करने के बाद, एक पल लें और देखें कि क्या इसका आकार आपके इच्छित प्रश्न को संबोधित करने की अनुमति देगा। ऐसा हो सकता है कि डेटा आपके दिए गए कार्य में अच्छा प्रदर्शन न करे, जैसा कि हम अपने [क्लस्टरिंग](../../5-Clustering/1-Visualize/README.md) पाठ में खोजते हैं!
✅ डेटा एकत्र करने और संसाधित करने के बाद, यह जाँचने के लिए थोड़ा समय निकालें कि क्या इसका स्वरूप आपके लक्ष्यित प्रश्न को संबोधित करने की अनुमति देगा। हो सकता है कि डेटा आपके दिए गए कार्य में अच्छा प्रदर्शन न करे, जैसा कि हम अपने [क्लस्टरिंग](../../5-Clustering/1-Visualize/README.md) पाठों में देखते हैं!
### फीचर्स और टारगेट
एक [फीचर](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) आपके डेटा की एक मापने योग्य संपत्ति है। कई डेटासेट में इसे 'तारीख', 'आकार' या 'रंग' जैसे कॉलम हेडिंग के रूप में व्यक्त किया जाता है। आपका फीचर वेरिएबल, जिसे आमतौर पर कोड में `X` के रूप में दर्शाया जाता है, वह इनपुट वेरिएबल है जिसका उपयोग मॉडल को ट्रेन करने के लिए किया जाएगा।
एक [फीचर](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) आपके डेटा की एक मापनीय संपत्ति है। कई डेटासेट में इसे कॉलम हेडिंग के रूप में व्यक्त किया जाता है जैसे 'दिनांक', 'आकार' या 'रंग'। आपकी फीचर वेरिएबल, जो आमतौर पर कोड में `X` के रूप में निरूपित होती है, वह इनपुट वेरिएबल होती है जिसका उपयोग मॉडल को प्रशिक्षण देने के लिए किया जाएगा।
एक टारगेट वह चीज़ है जिसे आप भविष्यवाणी करने की कोशिश कर रहे हैं। टारगेट, जिसे आमतौर पर कोड में `y` के रूप में दर्शाया जाता है, आपके डेटा से पूछे जा रहे प्रश्न का उत्तर दर्शाता है: दिसंबर में कौन से **रंग** के कद्दू सबसे सस्ते होंगे? सैन फ्रांसिस्को में कौन से पड़ोस में सबसे अच्छी रियल एस्टेट **कीमत** होगी? कभी-कभी टारगेट को लेबल एट्रिब्यूट भी कहा जाता है।
एक टारगेट वह चीज़ है जिसे आप पूर्वानुमान लगाने की कोशिश कर रहे हैं। टारगेट, जो आमतौर पर कोड में `y` के रूप में निरूपित होता है, वह प्रश्न का उत्तर होता है जो आप अपने डेटा से पूछना चाहते हैं: दिसंबर में, कौन से **रंग** के कद्दू सबसे सस्ते होंगे? सैन फ्रांसिस्को में, कौन से इलाके सबसे अच्छी रियल एस्टेट **कीमत** रखेंगे? कभी-कभी टारगेट को लेबल एट्रिब्यूट भी कहा जाता है।
### अपने फीचर वेरिएबल का चयन करना
### अपनी फीचर वेरिएबल चुनना
🎓 **फीचर चयन और फीचर एक्सट्रैक्शन** जब आप मॉडल बनाते समय वेरिएबल चुनते हैं तो आप कैसे जानते हैं कि कौन सा वेरिएबल चुनना है? आप शायद फीचर चयन या फीचर एक्सट्रैक्शन की प्रक्रिया से गुजरेंगे ताकि सबसे अच्छा प्रदर्शन करने वाले मॉडल के लिए सही वेरिएबल चुने जा सकें। हालांकि, वे समान नहीं हैं: "फीचर एक्सट्रैक्शन मूल फीचर्स के फंक्शन्स से नए फीचर्स बनाता है, जबकि फीचर चयन फीचर्स का एक सबसेट लौटाता है।" ([स्रोत](https://wikipedia.org/wiki/Feature_selection))
🎓 **फीचर चयन और फीचर एक्सट्रैक्शन** मॉडल बनाते समय आप कैसे जानते हैं कि कौन सा वेरिएबल चुनें? आप सबसे प्रभावी मॉडल के लिए उपयुक्त वेरिएबल चुनने हेतु फीचर चयन या फीचर एक्सट्रैक्शन की प्रक्रिया से गुजरेंगे। हालांकि ये दोनों एक समान नहीं हैं: "फीचर एक्सट्रैक्शन मूल फीचर्स के फंक्शन्स से नए फीचर्स बनाता है, जबकि फीचर चयन फीचर्स के एक उपसमूह को लौटाता है।" ([स्रोत](https://wikipedia.org/wiki/Feature_selection))
### अपने डेटा को विज़ुअलाइज़ करें
### अपने डेटा का दृश्यांकन करें
डेटा वैज्ञानिक के टूलकिट का एक महत्वपूर्ण पहलू डेटा को विज़ुअलाइज़ करने की शक्ति है, जिसमें Seaborn या MatPlotLib जैसी कई उत्कृष्ट लाइब्रेरी शामिल हैं। अपने डेटा को विज़ुअल रूप से प्रस्तुत करना आपको छिपे हुए संबंधों को उजागर करने की अनुमति दे सकता है जिन्हें आप लाभ उठा सकते हैं। आपके विज़ुअलाइज़ेशन आपको पूर्वाग्रह या असंतुलित डेटा को उजागर करने में भी मदद कर सकते हैं (जैसा कि हम [क्लासिफिकेशन](../../4-Classification/2-Classifiers-1/README.md) में खोजते हैं)।
डेटा वैज्ञानिक के टूलकिट में डेटा को कई उत्कृष्ट लाइब्रेरी जैसे Seaborn या MatPlotLib का उपयोग करके विज़ुअलाइज़ करने की शक्ति एक महत्वपूर्ण पहलू है। अपने डेटा को दृश्यमान रूप में प्रस्तुत करने से आप छिपे हुए सहसंबंधों को खोज सकते हैं जिनका आप लाभ उठा सकते हैं। आपकी विज़ुअलाइज़ेशन मदद कर सकती है पक्षपात या असंतुलित डेटा खोजने में (जैसा कि हम [क्लासिफिकेशन](../../4-Classification/2-Classifiers-1/README.md) में पाते हैं)।
### अपने डेटासेट को विभाजित करें
ट्रेनिंग से पहले, आपको अपने डेटासेट को दो या अधिक असमान आकार के हिस्सों में विभाजित करना होगा जो अभी भी डेटा का अच्छा प्रतिनिधित्व करते हैं।
प्रशिक्षण से पहले, आपको अपने डेटासेट को दो या अधिक असमान आकार के लेकिन डेटा का अच्छा प्रतिनिधित्व करने वाले भागों में विभाजित करना होगा।
- **ट्रेनिंग**। डेटासेट का यह हिस्सा आपके मॉडल को ट्रेन करने के लिए फिट किया जाता है। यह सेट मूल डेटासेट का अधिकांश हिस्सा बनाता है।
- **टेस्टिंग**। एक टेस्ट डेटासेट एक स्वतंत्र डेटा समूह है, जिसे अक्सर मूल डेटा से एकत्रित किया जाता है, जिसका उपयोग आप बनाए गए मॉडल के प्रदर्शन की पुष्टि करने के लिए करते हैं।
- **वैलिडेशन**। एक वैलिडेशन सेट एक छोटा स्वतंत्र उदाहरणों का समूह है जिसका उपयोग आप मॉडल के हाइपरपैरामीटर या आर्किटेक्चर को ट्यून करने के लिए करते हैं ताकि मॉडल को बेहतर बनाया जा सके। आपके डेटा के आकार और आपके द्वारा पूछे गए प्रश्न के आधार पर, आपको इस तीसरे सेट को बनाने की आवश्यकता नहीं हो सकती (जैसा कि हम [टाइम सीरीज फोरकास्टिंग](../../7-TimeSeries/1-Introduction/README.md) में नोट करते हैं)।
- **प्रशिक्षण**। इस डेटासेट के हिस्से का उपयोग मॉडल को प्रशिक्षित करने के लिए किया जाता है। यह सेट मूल डेटासेट का अधिकांश हिस्सा होता है।
- **परीक्षण**। परीक्षण डेटासेट एक स्वतंत्र डेटा समूह होता है, जो अक्सर मूल डेटा से एकत्र किया जाता है, जिसे आप बने मॉडल के प्रदर्शन की पुष्टि करने के लिए उपयोग करते हैं।
- **मान्यकरण**। एक मान्यकरण सेट एक छोटा स्वतंत्र समूह होता है जिसे आप मॉडल के हाइपरपैरामीटर या वास्तुकला को ठीक करने के लिए उपयोग करते हैं ताकि मॉडल में सुधार किया जा सके। आपके डेटा के आकार और प्रश्न के अनुसार, इस तीसरे सेट को बनाना आवश्यक नहीं हो सकता (जैसा कि हम [टाइम सीरीज फोरकास्टिंग](../../7-TimeSeries/1-Introduction/README.md) में नोट करते हैं)।
## मॉडल बनाना
अपने ट्रेनिंग डेटा का उपयोग करते हुए, आपका लक्ष्य विभिन्न एल्गोरिदम का उपयोग करके एक मॉडल, या आपके डेटा का सांख्यिकीय प्रतिनिधित्व बनाना है ताकि इसे **ट्रेन** किया जा सके। मॉडल को ट्रेन करना इसे डेटा के संपर्क में लाता है और इसे खोजे गए पैटर्न के बारे में धारणाएं बनाने, मान्य करने और स्वीकार या अस्वीकार करने की अनुमति देता है।
अपने प्रशिक्षण डेटा का उपयोग करते हुए, आपका लक्ष्य विभिन्न एल्गोरिदम का उपयोग करके अपने डेटा का एक सांख्यिकीय प्रतिनिधित्व या मॉडल बनाना है और उसे **प्रशिक्षित** करना है। मॉडल को प्रशिक्षित करने से वह डेटा के प्रति उजागर होता है और इसमें पाए गए पैटर्न के बारे में अनुमानों को बनाने, सत्यापित करने, और स्वीकार या अस्वीकार करने की अनुमति मिलती है।
### ट्रेनिंग विधि तय करें
### प्रशिक्षण विधि तय करें
आपके प्रश्न और आपके डेटा की प्रकृति के आधार पर, आप इसे ट्रेन करने के लिए एक विधि चुनेंगे। [Scikit-learn के दस्तावेज़](https://scikit-learn.org/stable/user_guide.html) के माध्यम से कदम उठाते हुए - जिसे हम इस पाठ्यक्रम में उपयोग करते हैं - आप मॉडल को ट्रेन करने के कई तरीके खोज सकते हैं। आपके अनुभव के आधार पर, आपको सबसे अच्छा मॉडल बनाने के लिए कई अलग-अलग तरीकों को आजमाना पड़ सकता है। आप एक प्रक्रिया से गुजरने की संभावना रखते हैं जिसमें डेटा वैज्ञानिक मॉडल के प्रदर्शन का मूल्यांकन करते हैं, इसे अनदेखे डेटा खिलाते हैं, सटीकता, पूर्वाग्रह और अन्य गुणवत्ता-घटाने वाले मुद्दों की जांच करते हैं, और दिए गए कार्य के लिए सबसे उपयुक्त ट्रेनिंग विधि का चयन करते हैं।
प्रश्न और आपके डेटा की प्रकृति के अनुसार, आप इसे प्रशिक्षित करने के लिए एक विधि चुनेंगे। [Scikit-learn के प्रलेखन के माध्यम से](https://scikit-learn.org/stable/user_guide.html) - जिसका उपयोग हम इस पाठ्यक्रम में करते हैं - आप मॉडल प्रशिक्षित करने के कई तरीके तलाश सकते हैं। आपके अनुभव के अनुसार, आपको सर्वोत्तम मॉडल बनाने के लिए कई विभिन्न विधियाँ आजमानी पड़ सकती हैं। आप उस प्रक्रिया से गुजरेंगे जिसमें डेटा वैज्ञानिक एक मॉडल के प्रदर्शन का मूल्यांकन करते हैं, उसे अनदेखे डेटा खिलाकर, सटीकता, पक्षपात और अन्य गुणवत्ता-घटाने वाले मुद्दों को जांचकर, और कार्य के लिए सबसे उपयुक्त प्रशिक्षण विधि चुनते हैं।
### मॉडल को ट्रेन करें
### मॉडल प्रशिक्षण करें
अपने ट्रेनिंग डेटा से लैस, आप इसे 'फिट' करने के लिए तैयार हैं ताकि एक मॉडल बनाया जा सके। आप देखेंगे कि कई ML लाइब्रेरी में आपको 'model.fit' कोड मिलेगा - यह वह समय है जब आप अपने फीचर वेरिएबल को मानों के एक एरे के रूप में भेजते हैं (आमतौर पर 'X') और एक टारगेट वेरिएबल (आमतौर पर 'y')।
अपने प्रशिक्षण डेटा के साथ, आप इसे फिट करने के लिए तैयार होते हैं ताकि मॉडल बनाया जा सके। आप पाएंगे कि कई ML लाइब्रेरियों में कोड 'model.fit' होता है - यह वह क्षण होता है जब आप अपनी फीचर वेरिएबल को मानों की सरणी के रूप में (आमतौर पर 'X') और टारगेट वेरिएबल (आमतौर पर 'y') को भेजते हैं।
### मॉडल का मूल्यांकन करें
एक बार ट्रेनिंग प्रक्रिया पूरी हो जाने के बाद (एक बड़े मॉडल को ट्रेन करने में कई पुनरावृत्तियां, या 'epochs', लग सकते हैं), आप टेस्ट डेटा का उपयोग करके मॉडल की गुणवत्ता का मूल्यांकन करने में सक्षम होंगे ताकि इसके प्रदर्शन का आकलन किया जा सके। यह डेटा मूल डेटा का एक उपसमुच्चय है जिसे मॉडल ने पहले कभी विश्लेषण नहीं किया है। आप अपने मॉडल की गुणवत्ता के बारे में मेट्रिक्स की एक तालिका प्रिंट कर सकते हैं।
जब प्रशिक्षण प्रक्रिया पूरी हो जाती है (एक बड़े मॉडल को प्रशिक्षित करने में कई पुनरावृत्तियां, या 'एपोक' लग सकते हैं), आप परीक्षण डेटा का उपयोग करके मॉडल की गुणवत्ता का मूल्यांकन कर पाएंगे। यह डेटा मूल डेटा का एक उपसमुच्चय होता है जिसे मॉडल ने पहले कभी विश्लेषित नहीं किया होता। आप अपने मॉडल की गुणवत्ता पर मेट्रिक्स की तालिका भी प्रिंट कर सकते हैं।
🎓 **मॉडल फिटिंग**
मशीन लर्निंग के संदर्भ में, मॉडल फिटिंग उस मॉडल की अंतर्निहित फ़ंक्शन की सटीकता को संदर्भित करता है क्योंकि यह उस डेटा का विश्लेषण करने का प्रयास करता है जिससे यह परिचित नहीं है।
मशीन लर्निंग के संदर्भ में, मॉडल फिटिंग उस मॉडल के अंतर्निहित फ़ंक्शन की सटीकता को दर्शाती है जो अनजाने डेटा का विश्लेषण करने का प्रयास करता है।
🎓 **अंडरफिटिंग** और **ओवरफिटिंग** आम समस्याएं हैं जो मॉडल की गुणवत्ता को खराब करती हैं, क्योंकि मॉडल या तो पर्याप्त रूप से फिट नहीं होता है या बहुत अधिक फिट होता है। इससे मॉडल या तो अपने ट्रेनिंग डेटा के साथ बहुत अधिक संरेखित भविष्यवाणियां करता है या बहुत कम संरेखित करता है। एक ओवरफिट मॉडल ट्रेनिंग डेटा को बहुत अच्छी तरह से भविष्यवाणी करता है क्योंकि उसने डेटा के विवरण और शोर को बहुत अच्छी तरह से सीखा है। एक अंडरफिट मॉडल सटीक नहीं है क्योंकि यह न तो अपने ट्रेनिंग डेटा का सही तरीके से विश्लेषण कर सकता है और न ही उस डेटा का जिसे उसने अभी तक 'देखा' नहीं है।
🎓 **अंडरफिटिंग** और **ओवरफिटिंग** सामान्य समस्याएं हैं जो मॉडल की गुणवत्ता को कम करती हैं, क्योंकि मॉडल या तो ठीक से फिट नहीं होता या बहुत अधिक फिट हो जाता है। इससे मॉडल की भविष्यवाणियाँ या तो प्रशिक्षण डेटा के बहुत निकट होती हैं या बहुत दूर। एक ओवरफिट मॉडल प्रशिक्षण डेटा को बहुत अच्छी तरह से भविष्यवाणी करता है क्योंकि उसने डेटा के विवरण और शोर को बहुत अच्छी तरह सीख लिया है। एक अंडरफिट मॉडल सटीक नहीं होता क्योंकि वह न तो अपने प्रशिक्षण डेटा को और न ही अभी देखा नहीं गया डेटा को सही ढंग से विश्लेषित कर पाता है।
> इन्फोग्राफिक [Jen Looper](https://twitter.com/jenlooper) द्वारा
## पैरामीटर ट्यूनिंग
एक बार आपकी प्रारंभिक ट्रेनिंग पूरी हो जाने के बाद, मॉडल की गुणवत्ता का अवलोकन करें और इसे 'हाइपरपैरामीटर' को समायोजित करके सुधारने पर विचार करें। इस प्रक्रिया के बारे में अधिक पढ़ें [दस्तावेज़ में](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott)।
एक बार आपकी प्रारंभिक प्रशिक्षण प्रक्रिया पूरी हो जाने के बाद, मॉडल की गुणवत्ता पर नजर डालें और इसके 'हाइपरपैरामीटर' को सुधारने पर विचार करें। प्रक्रिया के बारे में और पढ़ें [प्रलेखन में](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott)।
## भविष्यवाणी
## पूर्वानुमान
यह वह क्षण है जब आप पूरी तरह से नए डेटा का उपयोग करके अपने मॉडल की सटीकता का परीक्षण कर सकते हैं। एक 'एप्लाइड' ML सेटिंग में, जहां आप मॉडल को प्रोडक्शन में उपयोग करने के लिए वेब एसेट्स बना रहे हैं, यह प्रक्रिया उपयोगकर्ता इनपुट (जैसे बटन दबाना) को एक वेरिएबल सेट करने और मॉडल को इनफरेंस या मूल्यांकन के लिए भेजने में शामिल कर सकती है।
यह वह क्षण है जब आप पूरी तरह नए डेटा का उपयोग करके अपने मॉडल की सटीकता का परीक्षण कर सकते हैं। एक 'प्रयुक्त' ML सेटिंग में, जहां आप उत्पादन के लिए वेब संसाधन बना रहे होते हैं, यह प्रक्रिया उपयोगकर्ता इनपुट (उदाहरण के लिए, एक बटन प्रेस) एक वेरिएबल सेट करने और उसे पूर्वानुमान या मूल्यांकन के लिए मॉडल को भेजने को शामिल कर सकती है।
इन पाठों में, आप इन चरणों का उपयोग करके तैयार करने, बनाने, परीक्षण करने, मूल्यांकन करने और भविष्यवाणी करने के तरीके खोजेंगे - डेटा वैज्ञानिक के सभी इशारों और अधिक, जैसे-जैसे आप 'फुल स्टैक' ML इंजीनियर बनने की अपनी यात्रा में आगे बढ़ते हैं।
इन पाठों में, आप सीखेंगे कि इन चरणों का उपयोग कैसे करना है — तैयारी, निर्माण, परीक्षण, मूल्यांकन, और पूर्वानुमान लगाना — डेटा वैज्ञानिक के सभी कार्यों और अधिक के रूप में, जब आप एक 'फुल स्टैक' ML इंजीनियर बनने की यात्रा पर आगे बढ़ते हैं।
---
## 🚀चुनौती
एक फ्लो चार्ट बनाएं जो एक ML प्रैक्टिशनर के चरणों को दर्शाता है। आप इस प्रक्रिया में अभी खुद को कहां देखते हैं? आपको कहां कठिनाई का सामना करना पड़ सकता है? आपको क्या आसान लगता है?
एक फ्लो चार्ट बनाएं जो एक ML विशेषज्ञ के चरणों को दर्शाता हो। अब आप प्रक्रिया में खुद को कहाँ देखते हैं? आपको कहाँ कठिनाई होने की उम्मीद है? आपके लिए क्या आसान प्रतीत होता है?
ऑनलाइन खोजें कि डेटा वैज्ञानिक अपने दैनिक कार्य के बारे में चर्चा करते हुए साक्षात्कार में क्या कहते हैं। यहाँ [एक](https://www.youtube.com/watch?v=Z3IjgbbCEfs) है।
ऑनलाइन खोजें उन डेटा वैज्ञानिकों के साक्षात्कार जिनमें वे अपने दैनिक कार्य के बारे में चर्चा करते हैं। यहाँ [एक](https://www.youtube.com/watch?v=Z3IjgbbCEfs) है।
## असाइनमेंट
@ -119,5 +119,7 @@
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**अस्वीकरण**:
यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या असंगतियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सलाह दी जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
# Scikit-learn का उपयोग करके रिग्रेशन मॉडल बनाएं: चार तरीकों से रिग्रेशन
# Scikit-learn का उपयोग करके एक प्रतिगमन मॉडल बनाएं: प्रतिगमन के चार तरीके
## शुरुआती नोट
जब हम एक **सांख्यिकीय मान** की भविष्यवाणी करना चाहते हैं (उदाहरण के लिए, घर की कीमत, तापमान, या बिक्री), तब लाइनियर रिग्रेशन का उपयोग किया जाता है। यह इनपुट फ़ीचर्स और आउटपुट के बीच संबंध का सर्वश्रेष्ठ प्रतिनिधित्व करने वाली एक सीधी रेखा खोजकर काम करता है।
रैखिक प्रतिगमन का उपयोग तब किया जाता है जब हम एक **संख्यात्मक मान** का पूर्वानुमान लगाना चाहते हैं (उदाहरण के लिए, घर का मूल्य, तापमान, या बिक्री)।
यह इनपुट विशेषताओं और आउटपुट के बीच के संबंध का सबसे अच्छा प्रतिनिधित्व करने वाली एक सीधी रेखा खोजकर काम करता है।
इस पाठ में, हम अधिक उन्नत रिग्रेशन तकनीकों का पता लगाने से पहले अवधारणा को समझने पर ध्यान केंद्रित करते हैं।

> इन्फोग्राफिक द्वारा [Dasani Madipalli](https://twitter.com/dasani_decoded)
इस पाठ में, हम अधिक उन्नत प्रतिगमन तकनीकों का पता लगाने से पहले अवधारणा को समझने पर ध्यान केंद्रित करते हैं।
> ### [यह पाठ R में उपलब्ध है!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### परिचय
अब तक आपने रिग्रेशन क्या है इसका अन्वेषण किया है, जिसमें कद्दू की कीमतों के डेटासेट के साथ नमूना डेटा शामिल है, जिसे हम इस पाठ में प्रयोग करेंगे। आपने इसे Matplotlib का उपयोग करके भी विज़ुअलाइज़ किया है।
अब तक आपने प्रतिगमन क्या है, इसे कद्दू के मूल्य निर्धारण डेटासेट से लिए गए नमूना डेटा के साथ एक्सप्लोर किया है, जिसे हम इस पाठ में लगातार उपयोग करेंगे। आपने इसे Matplotlib का उपयोग करके विज़ुअलाइज़ भी किया है।
अब आप मशीन लर्निंग के लिए रिग्रेशन में गहराई से जाने के लिए तैयार हैं। जबकि विज़ुअलाइज़ेशन आपको डेटा को समझने में मदद करता है, मशीन लर्निंग की असली शक्ति _मॉडल प्रशिक्षण_ से आती है। मॉडल ऐतिहासिक डेटा पर प्रशिक्षित होते हैं ताकि वे डेटा निर्भरताओं को स्वचालित रूप से पकड़ सकें, और ये मॉडल नए डेटा के लिए परिणामों की भविष्यवाणी कर सकते हैं, जिसे मॉडल ने पहले नहीं देखा है।
अब आप एमएल के लिए प्रतिगमन में गहराई से उतरने के लिए तैयार हैं। जबकि विज़ुअलाइज़ेशन आपको डेटा को समझने में मदद करता है, मशीन लर्निंग की असली ताकत _मॉडल का प्रशिक्षण_ है। मॉडल को ऐतिहासिक डेटा पर प्रशिक्षित किया जाता है ताकि वे स्वतः डेटा की निर्भरताओं को पकड़ सकें, और ये आपको नए डेटा के लिए पूर्वानुमान लगाने की अनुमति देते हैं, जिसे मॉडल ने पहले नहीं देखा होता।
इस पाठ में, आप दो प्रकार के रिग्रेशन सीखेंगे: _बुनियादी लाइनियर रिग्रेशन_ और _पॉलीनोमियल रिग्रेशन_, साथ ही इन तकनीकों के कुछ गणितीय पहलू। ये मॉडल हमें अलग-अलग इनपुट डेटा के आधार पर कद्दू की कीमतों की भविष्यवाणी करने की अनुमति देंगे।
इस पाठ में, आप दो प्रकार के प्रतिगमन के बारे में अधिक सीखेंगे: _मूलभूत रैखिक प्रतिगमन_ और _बहुपद प्रतिगमन_, साथ ही इन तकनीकों के पीछे कुछ गणित। ये मॉडल हमें अलग-अलग इनपुट डेटा पर निर्भर करके कद्दू की कीमतों का पूर्वानुमान लगाने की अनुमति देंगे।
[](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression")
[](https://youtu.be/CRxFT8oTDMg "शुरुआती के लिए ML - रैखिक प्रतिगमन को समझना")
> 🎥 ऊपर दी गई छवि पर क्लिक करें लाइनियर रिग्रेशन का संक्षिप्त वीडियो अवलोकन देखने के लिए।
> 🎥 रैखिक प्रतिगमन का संक्षिप्त वीडियो अवलोकन देखने के लिए ऊपर की छवि पर क्लिक करें।
> इस पाठ्यक्रम में, हम न्यूनतम गणितीय ज्ञान मानते हैं, और इसे अन्य क्षेत्रों से आने वाले छात्रों के लिए सुलभ बनाने का प्रयास करते हैं, इसलिए समझ में सहायता के लिए नोट्स, 🧮 कॉलआउट्स, आरेख, और अन्य शिक्षण उपकरण देखें।
> इस पाठ्यक्रम में, हम न्यूनतम गणितीय ज्ञान की कल्पना करते हैं, और अन्य क्षेत्रों से आने वाले छात्रों के लिए इसे सुलभ बनाने का प्रयास करते हैं, इसलिए नोट्स, 🧮 कॉलआउट्स, आरेख, और अन्य शिक्षण उपकरणों पर ध्यान दें।
### पूर्वापेक्षाएँ
### पूर्व आवश्यकताएँ
अब तक आप उस कद्दू डेटा की संरचना से परिचित हो जाएंगे, जिसे हम देख रहे हैं। आप इसे इस पाठ के _notebook.ipynb_ फ़ाइल में प्रीलोडेड और पूर्व-साफ किया हुआ पाएंगे। फ़ाइल में, कद्दू की कीमत प्रति बशल नए डेटा फ़्रेम में प्रदर्शित की गई है। सुनिश्चित करें कि आप इन नोटबुक को Visual Studio Code में कर्नेल में चलाने में सक्षम हैं।
अब तक आप उस कद्दू डेटा की संरचना से परिचित होनी चाहिए जिसे हम देख रहे हैं। इसे इस पाठ के _notebook.ipynb_ फ़ाइल में प्रीलोडेड और प्री-क्लीन किया गया है। इस फ़ाइल में, कद्दू की कीमत प्रति बुशल नई डेटा फ्रेम में प्रदर्शित है। सुनिश्चित करें कि आप इन नोटबुक्स को Visual Studio Code के कर्नेल्स में चला सकते हैं।
### तैयारी
स्मरण कराने के लिए, आप यह डेटा इस तरह की प्रश्न पूछने के लिए लोड कर रहे हैं:
एक अनुस्मारक के रूप में, आप इस डेटा को लोड कर रहे हैं ताकि आप इससे प्रश्न पूछ सकें।
- कद्दू खरीदने का सबसे अच्छा समय कब है?
- एक केस मिनिएचर कद्दुओं की क्या कीमत हो सकती है?
- क्या मुझे इन्हें आधे बशल टोकरी में खरीदना चाहिए या 1 1/9 बशल बॉक्स के अनुसार?
आइए इस डेटा में और खुदाई करते रहें।
- कद्दू खरीदने का सबसे अच्छा समय कब है?
- एक केस मिनिएचर कद्दू की कीमत क्या हो सकती है?
- क्या मुझे उन्हें आधे बुशल बास्केट में खरीदना चाहिए या 1 1/9 बुशल बॉक्स के अनुसार?
आइए इस डेटा में और गहराई से जांच करें।
पिछले पाठ में, आपने एक Pandas डेटा फ़्रेम बनाया और इसे मूल डेटा सेट के एक भाग से भरा, कीमत को बशल द्वारा मानकीकृत करते हुए। ऐसा करने से, हालांकि, आप केवल लगभग 400 डेटा पॉइंट और केवल पतझड़ के महीनों के लिए डेटा इकट्ठा कर पाए।
पिछले पाठ में, आपने एक Pandas डेटा फ्रेम बनाया था और मूल डेटासेट के एक हिस्से से इसे भर दिया था, इस प्रकार कीमत को बुशल द्वारा मानकीकृत किया था। हालांकि ऐसा करने के बाद, आप केवल लगभग 400 डेटा पॉइंट्स इकट्ठा कर पाए और वे भी केवल गिरावट के महीनों के लिए।
इस पाठ के साथ आने वाली नोटबुक में हमने जो डेटा प्रीलोड किया है, उस पर नज़र डालें। डेटा प्रीलोड किया गया है और प्रारंभिक स्कैटरप्लॉट चार्ट किया गया है जो महीनों के डेटा को दिखाता है। संभव है कि डेटा की प्रकृति के बारे में थोड़ा और विवरण प्राप्त किया जा सके, इसे और साफ करके।
इस पाठ के साथ आई नोटबुक में हमने जो डेटा प्रीलोड किया है, उस पर एक नज़र डालें। डेटा पूर्व लोडेड है और एक प्रारंभिक स्कैटरप्लॉट बनाया गया है जो महीने के डेटा को दिखाता है। शायद हम इसे और साफ़ करके डेटा की प्रकृति के बारे में थोड़ा अधिक जान सकें।
## एक लाइनियर रिग्रेशन लाइन
## एक रैखिक प्रतिगमन रेखा
जैसा कि आपने पाठ 1 में सीखा, एक लाइनियर रिग्रेशन व्यायाम का लक्ष्य यह है कि एक रेखा प्लाट की जा सके ताकि:
जैसा कि आपने पाठ 1 में सीखा, रैखिक प्रतिगमन अभ्यास का उद्देश्य एक रेखा को प्लॉट करना है ताकि:
- **चर संबंध दिखाएं**। चर के बीच संबंध दिखाएं
- **भविष्यवाणियाँ करें**। यह सही पूर्वानुमान लगाएं कि कोई नया डेटा पॉइंट उस रेखा के संबंध में कहाँ आएगा।
- **चर संबंध दिखाना**। चर के बीच के संबंध को दिखाएं।
- **पूर्वानुमान बनाना**। यह सही पूर्वानुमान लगाना कि कोई नया डेटा पॉइंट उस रेखा के संबंध में कहां आएगा।
यह सामान्य है कि **लीस्ट-स्क्वेयर रिग्रेशन** इस प्रकार की रेखा खींचे। "लीस्ट-स्क्वेयर" शब्द हमारे मॉडल में कुल त्रुटि को कम करने की प्रक्रिया को दर्शाता है। प्रत्येक डेटा पॉइंट के लिए, हम वास्तविक पॉइंट और हमारे रिग्रेशन लाइन के बीच ऊर्ध्वाधर दूरी (जिसे अवशिष्ट कहते हैं) मापते हैं।
यह **Least-Squares Regression** का सामान्य अभ्यास है कि इस प्रकार की रेखा बनाएं। "Least-Squares" शब्द हमारे मॉडल में कुल त्रुटि को न्यूनतम करने की प्रक्रिया को दर्शाता है। हर डेटा पॉइंट के लिए, हम रेखा और वास्तविक पॉइंट के बीच लंबवत दूरी को मापते हैं (जिसे 'अवशेष' कहा जाता है)।
हम इन दूरीयों को दो मुख्य कारणों से वर्ग करते हैं:
1. **आकार दिशा से अधिक महत्वपूर्ण:** हम -5 की त्रुटि को +5 की त्रुटि के समान मानना चाहते हैं। वर्गाकरण सभी मानों को सकारात्मक बना देता है।
1. **परिमाण दिशा से अधिक महत्वपूर्ण:** हम -5 की त्रुटि को +5 की त्रुटि के समान समझना चाहते हैं। वर्गीकरण सभी मानों को सकारात्मक कर देता है।
2. **आउटलेयर्स को दंडित करना:** वर्गाकरण बड़ी त्रुटियों को अधिक महत्व देता है, जिससे रेखा उन बिंदुओं के करीब रहती है जो दूर हैं।
2. **आउटलेयर्स को दंडित करना:** वर्ग करने से बड़ी त्रुटियों को अधिक वजन मिलता है, जो रेखा को दूर के पॉइंट्स के करीब बनाए रखता है।
फिर हम इन सभी वर्गीकृत मानों को जोड़ते हैं। हमारा लक्ष्य उस विशेष रेखा को खोजना है जहाँ यह अंतिम योग न्यूनतम हो (संभवतः सबसे छोटे मान पर) — इसलिए इसे "लीस्ट-स्क्वेयर" कहा जाता है।
फिर हम इन वर्गीकृत मूल्यों को एक साथ जोड़ते हैं। हमारा लक्ष्य वह विशिष्ट रेखा ढूंढ़ना है जहां यह अंतिम योग सबसे कम (सबसे छोटा संभव मान) होता है—इसीलिए इसे "Least-Squares" कहा जाता है।
> **🧮 मुझे गणित दिखाओ**
> **🧮 मुझे गणित दिखाइए**
>
> इस रेखा को, जिसे _लाइन ऑफ़ बेस्ट फिट_ कहा जाता है, [एक समीकरण](https://en.wikipedia.org/wiki/Simple_linear_regression) द्वारा व्यक्त किया जा सकता है:
> इस रेखा, जिसे _लाइन ऑफ बेस्ट फिट_ कहा जाता है, को [एक समीकरण](https://en.wikipedia.org/wiki/Simple_linear_regression) द्वारा व्यक्त किया जा सकता है:
>
> ```
> Y = a + bX
> ```
>
> `X` 'व्याख्यात्मक चर' है। `Y` 'निर्भर चर' है। रेखा का ढलान `b` है और `a` y-अवरोध (y-intercept) है, जो 'X = 0' होने पर `Y` का मान दर्शाता है।
>
>
> `X` 'व्याख्यात्मक चर' है। `Y` 'निर्भर चर' है। रेखा का उतार `b` है और `a` y-अवरोध है, जो उस समय `Y` का मान दर्शाता है जब `X = 0` होता है।
>
> पहले, ढलान `b` की गणना करें। इन्फोग्राफिक द्वारा [Jen Looper](https://twitter.com/jenlooper)
>
>
> दूसरे शब्दों में, और हमारे कद्दू डेटा के मूल प्रश्न को ध्यान में रखते हुए: "महीने के अनुसार प्रति बशल कद्दू की कीमत की भविष्यवाणी करें", `X` कीमत को संदर्भित करता है और `Y` बिक्री के महीने को।
> सबसे पहले, ढलान `b` की गणना करें। इन्फोग्राफिक [Jen Looper](https://twitter.com/jenlooper) द्वारा
>
>
> दूसरे शब्दों में, और हमारे कद्दू डेटा के मूल प्रश्न की ओर इशारा करते हुए: "महीने के अनुसार प्रति बुशल कद्दू की कीमत का पूर्वानुमान लगाएं", `X` कीमत को संदर्भित करेगा और `Y` बिक्री के महीने को।
>
>`Y` के मान की गणना करें। यदि आप लगभग $4 का भुगतान कर रहे हैं, तो वह अप्रैल होना चाहिए! इन्फोग्राफिक द्वारा [Jen Looper](https://twitter.com/jenlooper)
>
>
> जो गणित रेखा की गणना करता है, उसे ढलान दर्शानी चाहिए, जो अवरोध पर निर्भर भी होती है, अर्थात `X = 0` होने पर `Y` कहाँ होता है।
> Y का मान निकालें। यदि आप लगभग $4 दे रहे हैं, तो यह अप्रैल होना चाहिए! इन्फोग्राफिक [Jen Looper](https://twitter.com/jenlooper) द्वारा
>
> आप इन मानों की गणना की विधि को [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) वेबसाइट पर देख सकते हैं। साथ ही [यह लीस्ट-स्क्वेयर्स कैलकुलेटर](https://www.mathsisfun.com/data/least-squares-calculator.html) देखें कि कैसे मान रेखा को प्रभावित करते हैं।
> गणित जो रेखा की गणना करता है, उस रेखा का ढलान दिखाना होगा, जो अवरोध पर भी निर्भर करता है, या जहां `Y` स्थित होता है जब `X = 0` होता है।
>
> आप इन मानों की गणना की विधि को [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) वेबसाइट पर देख सकते हैं। साथ ही इस [Least-squares कैलक्युलेटर](https://www.mathsisfun.com/data/least-squares-calculator.html) पर जाकर देख सकते हैं कि नंबरों के मान लाइन को कैसे प्रभावित करते हैं।
## सहसंबंध (Correlation)
## सहसंबंध
एक और शब्द जिसे समझना आवश्यक है, वह है दिए गए X और Y चर के बीच का**सहसंबंध गुणांक**। स्कैटरप्लॉट का उपयोग करके, आप इसे जल्दी से देख सकते हैं। यदि पॉइंट्स एक साफ रेखा में फैलते हैं तो सहसंबंध अधिक होता है, परंतु यदि पॉइंट्स हर जगह फैल गए हैं, तो सहसंबंध कम होता है।
एक और शब्द जिसे समझना जरूरी है वह है दिया गया X और Y चर के बीच**सहसंबंध गुणांक**। एक स्कैटरप्लॉट का उपयोग करके, आप जल्दी से इस गुणांक को विज़ुअलाइज़ कर सकते हैं। एक ऐसा प्लॉट जिसमें डेटा पॉइंट्स एक साफ रेखा में फैले हों, उसका सहसंबंध उच्च होता है, लेकिन जो प्लॉट सभी जगह फैले डेटा पॉइंट्स दिखाता है, उसका सहसंबंध कम होता है।
एक अच्छा लाइनियर रिग्रेशन मॉडल वह होगा जिसका सहसंबंध गुणांक उच्च (0 के बजाय 1 के करीब) होगा, और वह लाइन ऑफ़ रिग्रेशन के साथ लीस्ट-स्क्वेयर्स रिग्रेशन विधि का उपयोग करता हो।
एक अच्छा रैखिक प्रतिगमन मॉडल वह होगा जिसका सहसंबंध गुणांक उच्च (0 के बजाय 1 के करीब) हो, और जो Least-Squares Regression पद्धति के साथ प्रतिगमन रेखा रखता हो।
✅ इस पाठ के साथ आने वाली नोटबुक चलाएं और महीने से कीमत स्कैटरप्लॉट को देखें। कद्दू बिक्री के लिए महीने और कीमत के डेटा का सहसंबंध आपके विज़ुअल विश्लेषण के अनुसार अधिक है या कम? क्या यदि आप `महीना` के बजाय अधिक सूक्ष्म माप का उपयोग करें, जैसे *साल का दिन* (यानी साल की शुरुआत से दिन की संख्या), तो क्या उस स्थिति में सहसंबंध बदल जाता है?
✅ इस पाठ के साथ आई नोटबुक चलाएं और महीने से मूल्य के स्कैटरप्लॉट को देखें। कद्दू बिक्री के लिए महीने और मूल्य को जोड़ने वाला डेटा आपकी स्कैटरप्लॉट की दृश्य व्याख्या के अनुसार उच्च या निम्न सहसंबंध दिखाता है? यदि आप `Month` के बजाय अधिक सूक्ष्म माप जैसे *वर्ष का दिन* (अर्थात वर्ष की शुरुआत से दिनों की संख्या) का उपयोग करते हैं, तो क्या यह परिवर्तन होता है?
नीचे के कोड में, हम मान लेंगे कि हमने डेटा को साफ़ किया है, और एक डेटा फ्रेम `new_pumpkins` प्राप्त किया है, जो निम्नलिखित जैसा है:
नीचे दिए गए कोड में, हम मानते हैं कि हमने डेटा साफ किया है, और `new_pumpkins` नामक एक डेटा फ्रेम प्राप्त किया है, जो निम्नानुसार है:
ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
> डेटा साफ़ करने के लिए कोड [`notebook.ipynb`](notebook.ipynb) में उपलब्ध है। हमने पिछले पाठ की तरह ही सफाई के चरण किए हैं, और `DayOfYear` कॉलम का मूल्य निम्नलिखित अभिव्यक्ति से निकाला है:
> डेटा साफ करने के लिए कोड [`notebook.ipynb`](notebook.ipynb) में उपलब्ध है। हमने पिछले पाठ की तरह ही सफाई के कदम उठाए हैं, और निम्नलिखित अभिव्यक्ति का उपयोग करके `DayOfYear` कॉलम की गणना की है:
अब जब आपको लाइनियर रिग्रेशन के पीछे का गणित समझ में आ गया है, तो आइए रिग्रेशन मॉडल बनाएं ताकि हम यह देख सकें कि कौन सा कद्दू पैकेज सबसे अच्छी कीमत देगा। कोई भी जो हॉलीडे कद्दू उद्घाटित करने के लिए कद्दू खरीद रहा है, यह जानकारी उनके पैच के कद्दू पैकेज की खरीद को अनुकूल बनाने में मदद कर सकती है।
अब जब आपके पास रैखिक प्रतिगमन के पीछे के गणित की समझ है, तो चलिए एक प्रतिगमन मॉडल बनाते हैं ताकि देखें कि क्या हम यह पूर्वानुमान लगा सकते हैं कि कद्दू के किस पैकेज की कीमत सबसे अच्छी होगी। कोई ऐसा व्यक्ति जो छुट्टियों के कद्दू पैच के लिए कद्दू खरीद रहा हो, उसे अपने खरीदारी को अनुकूलित करने के लिए यह जानकारी चाहिए होगी।
## सहसंबंध की खोज
## सहसंबंध की तलाश
[](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression")
[](https://youtu.be/uoRq-lW2eQo "शुरुआती के लिए ML - सहसंबंध की तलाश: रैखिक प्रतिगमन की कुंजी")
> 🎥 ऊपर दी गई छवि पर क्लिक करें सहसंबंध का संक्षिप्त वीडियो अवलोकन देखने के लिए।
> 🎥 सहसंबंध का संक्षिप्त वीडियो अवलोकन देखने के लिए ऊपर की छवि पर क्लिक करें।
पिछले पाठ से आपने शायद देखा होगा कि विभिन्न महीनों के लिए औसत कीमत कुछ इस प्रकार दिखती है:
पिछले पाठ से आपने संभवतः देखा होगा कि अलग-अलग महीनों के लिए औसत कीमत कुछ इस प्रकार दिखती है:
<imgalt="Average price by month" src="../../../../translated_images/hi/barchart.a833ea9194346d76.webp"width="50%"/>
<imgalt="महीने के अनुसार औसत कीमत" src="../../../../translated_images/hi/barchart.a833ea9194346d76.webp"width="50%"/>
यह सुझाव देता है कि कुछ सहसंबंध होना चाहिए, और हम प्रयास कर सकते हैं कि लाइनियर रिग्रेशन मॉडल प्रशिक्षित करें जो `Month` और `Price`के बीच, या `DayOfYear` और `Price` के बीच संबंध की भविष्यवाणी करे। नीचे स्कैटर प्लॉट है जो बाद के संबंध को दिखाता है:
यह सुझाव देता है कि वहाँ कुछ सहसंबंध होना चाहिए, और हम यह प्रयास कर सकते हैं कि `Month` और `Price` या `DayOfYear` और `Price` के बीच संबंध का पूर्वानुमान लगाने के लिए रैखिक प्रतिगमन मॉडल प्रशिक्षण दें। यह रहा वह स्कैटरप्लॉट जो बाद वाले संबंध को दिखाता है:
<imgalt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/hi/scatter-dayofyear.bc171c189c9fd553.webp"width="50%"/>
<imgalt="मूल्य बनाम वर्ष का दिन का स्कैटर प्लॉट" src="../../../../translated_images/hi/scatter-dayofyear.bc171c189c9fd553.webp"width="50%"/>
आइए `corr` फ़ंक्शन का उपयोग करके देखें कि क्या सहसंबंध है:
आइए `corr` फ़ंक्शन का उपयोग करके देखें कि सहसंबंध कितना है:
ऐसा लगता है कि सहसंबंध काफी छोटा है, `Month` के लिए -0.15 और `DayOfMonth` के लिए -0.17, लेकिन एक और महत्वपूर्ण संबंध हो सकता है। ऐसा लगता है कि अलग-अलग कद्दू की किस्मों के लिए कीमतों के अलग-अलग समूह हैं। इस हाइपोथीसिस को पुष्टि करने के लिए, आइए प्रत्येक कद्दू वर्ग को अलग रंग में प्लॉट करें। `scatter` प्लॉटिंग फ़ंक्शन को `ax` पैरामीटर पास करके हम सभी पॉइंट्स को एक ही ग्राफ पर प्लॉट कर सकते हैं:
ऐसा लगता है कि सहसंबंध काफी छोटा है, `Month` के अनुसार -0.15 और `DayOfYear` के अनुसार -0.17, लेकिन एक और महत्वपूर्ण संबंध हो सकता है। ऐसा लगता है कि कीमतों के विभिन्न समूह हैं जो विभिन्न कद्दू किस्मों से संबंधित हैं। इस अनुमान की पुष्टि के लिए, आइए प्रत्येक कद्दू श्रेणी को अलग रंग में प्लॉट करें। `scatter` प्लॉटिंग फ़ंक्शन को एक`ax` पैरामीटर पास करके हम सभी पॉइंट्स को एक ही ग्राफ पर प्लॉट कर सकते हैं:
```python
ax=None
@ -139,42 +140,42 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()):
<imgalt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/hi/scatter-dayofyear-color.65790faefbb9d54f.webp"width="50%"/>
<imgalt="मूल्य बनाम वर्ष के दिन का रंगीन स्कैटर प्लॉट" src="../../../../translated_images/hi/scatter-dayofyear-color.65790faefbb9d54f.webp"width="50%"/>
हमारी जांच से पता चलता है कि किस्म का कुल कीमत पर वास्तविक बिक्री तिथि से अधिक प्रभाव होता है। हम इसे बार ग्राफ से देख सकते हैं:
हमारी जांच से पता चलता है कि किस्म का समग्र कीमत पर वास्तविक बिक्री की तारीख की तुलना में अधिक प्रभाव है। हम इसे बार ग्राफ के साथ देख सकते हैं:
<imgalt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/hi/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
<imgalt="मूल्य बनाम वर्ष के दिन का स्कैटर प्लॉट" src="../../../../translated_images/hi/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
यदि हम अब `Price` और `DayOfYear` के बीच सहसंबंध `corr` फ़ंक्शन से गणना करें, तो हमें लगभग `-0.27` मिलेगा - जिसका मतलब है कि एक पूर्वानुमान मॉडल प्रशिक्षण करना समझदारी है।
यदि हम अब `Price` और `DayOfYear` के बीच सहसंबंध की गणना `corr` फ़ंक्शन का उपयोग करके करते हैं, तो मान लगभग `-0.27` होगा - जिसका अर्थ है कि एक पूर्वानुमान मॉडल का प्रशिक्षण करना समझ में आता है।
> लाइनियर रिग्रेशन मॉडल प्रशिक्षित करने से पहले, यह सुनिश्चित करना महत्वपूर्ण है कि हमारा डेटा साफ हो। लाइनियर रिग्रेशन खाली मानों के साथ अच्छा काम नहीं करता है, इसलिए सभी खाली कोशिकाओं को हटाना समझदारी है:
> एक रैखिक प्रतिगमन मॉडल को प्रशिक्षण देने से पहले, यह सुनिश्चित करना महत्वपूर्ण है कि हमारा डेटा साफ़ है। रैखिक प्रतिगमन गायब मानों के साथ अच्छा काम नहीं करता, इसलिए सभी खाली कोशिकाओं को हटाना समझदारी है:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
एक अन्य तरीका यह होगा कि उन खाली मानों को संबंधित कॉलम के औसत मान से भर दिया जाए।
एक और तरीका होगा कि उन खाली मूल्यों को संबंधित कॉलम के औसत मान से भर दिया जाए।
## सरल लाइनियर रिग्रेशन
## सरल रैखिक प्रतिगमन
[](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn")
[](https://youtu.be/e4c_UP2fSjg "शुरुआती के लिए ML - Scikit-learn का उपयोग करके रैखिक और बहुपद प्रतिगमन")
> 🎥 ऊपर दी गई छवि पर क्लिक करें लाइनियर और पॉलीनोमियल रिग्रेशन का संक्षिप्त वीडियो अवलोकन देखने के लिए।
> 🎥 रैखिक और बहुपद प्रतिगमन का संक्षिप्त वीडियो अवलोकन देखने के लिए ऊपर की छवि पर क्लिक करें।
हम अपने लाइनियर रिग्रेशन मॉडल को प्रशिक्षित करने के लिए **Scikit-learn** पुस्तकालय का उपयोग करेंगे।
हमारा रैखिक प्रतिगमन मॉडल प्रशिक्षित करने के लिए, हम**Scikit-learn** पुस्तकालय का उपयोग करेंगे।
```python
from sklearn.linear_model import LinearRegression
@ -182,31 +183,31 @@ from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
हम इनपुट मानों (फ़ीचर्स) और अपेक्षित आउटपुट (लेबल) को अलग-अलग numpy arrays में अलग करते हैं:
हम इनपुट मानों (विशेषताएँ) और अपेक्षित आउटपुट (लेबल) को अलग-अलग numpy ऐरे में अलग करते हैं:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> ध्यान दें कि हमें इनपुट डेटा पर `reshape` करना पड़ा ताकि लाइनियर रिग्रेशन पैकेज इसे सही ढंग से समझ सके। लाइनियर रिग्रेशन 2D-array के रूप में इनपुट की अपेक्षा करता है, जहाँ array की प्रत्येक पंक्ति इनपुट फीचर्स का एक वेक्टर होता है। हमारे मामले में, चूंकि हमारे पास केवल एक इनपुट है, इसलिए हमें N×1 आकार की array चाहिए, जहाँ N डेटासेट का आकार है।
> ध्यान दें कि हमें इनपुट डेटा पर `reshape` करने की आवश्यकता पड़ी ताकि Linear Regression पैकेज इसे सही ढंग से समझ सके। Linear Regression 2D ऐरे को इनपुट के रूप में अपेक्षित करता है, जिसमें ऐरे की प्रत्येक पंक्ति एक इनपुट फीचर के वेक्टर के अनुरूप होती है। हमारे मामले में, क्योंकि हमारे पास केवल एक इनपुट है - हमें N×1 आकार का ऐरे चाहिए, जहां N डेटासेट का आकार है।
फिर, हमें डेटा को ट्रेन और टेस्ट डेटासेट में विभाजित करना होगा ताकि हम प्रशिक्षण के बाद हमारे मॉडल का मान्यकरण कर सकें:
फिर, हमें मॉडल के प्रशिक्षण के बाद इसे मान्य करने के लिए डेटा को प्रशिक्षण और परीक्षण डेटा सेट में विभाजित करना होगा:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
अंत में, वास्तविक लाइनियर रिग्रेशन मॉडल को प्रशिक्षित करना केवल दो पंक्तियों कोड में होता है। हम `LinearRegression` वस्तु परिभाषित करते हैं, और `fit` विधि का उपयोग करके इसे डेटा से फिट करते हैं:
अंत में, वास्तविक Linear Regression मॉडल को प्रशिक्षित करना केवल दो कोड लाइन लेता है। हम `LinearRegression` ऑब्जेक्ट परिभाषित करते हैं, और `fit` मेथड का उपयोग करके इसे हमारे डेटा पर फिट करते हैं:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
`LinearRegression` ऑब्जेक्ट `fit` करने के बाद रिग्रेशन के सभी गुणांक (coefficients) रखता है, जिन्हें `.coef_` प्रॉपर्टी का उपयोग करके एक्सेस किया जा सकता है। हमारे मामले में, केवल एक गुणांक है, जो लगभग `-0.017`के आसपास होना चाहिए। इसका मतलब है कि समय के साथ कीमतें थोड़ा गिरती लगती हैं, लेकिन बहुत अधिक नहीं, लगभग 2 सेंट प्रति दिन। हम रिग्रेशन के Y-अक्ष के साथ इंटरसेक्शन पॉइंट को भी `lin_reg.intercept_` का उपयोग कर सकते हैं - यह हमारे मामले में लगभग `21` होगा, जो साल की शुरुआत में कीमत को दर्शाता है।
`fit` करने के बाद `LinearRegression` ऑब्जेक्ट में सभी रिग्रेशन के सहगुण होते हैं, जिन्हें `.coef_` प्रॉपर्टी का उपयोग करके एक्सेस किया जा सकता है। हमारे मामले में, केवल एक सहगुण है, जो लगभग `-0.017` होना चाहिए। इसका मतलब है कि कीमतें समय के साथ थोड़ा गिरती दिखती हैं, लेकिन ज्यादा नहीं, लगभग 2 सेंट प्रति दिन। हम रिग्रेशन के Y-अक्ष के साथ मिलने वाले इंटरसेप्शन पॉइंट को भी `lin_reg.intercept_` का उपयोग करके एक्सेस कर सकते हैं - यह हमारे मामले में लगभग `21` होगा, जो वर्ष की शुरुआत में कीमत को दर्शाता है।
अपने मॉडल की सटीकता देखने के लिए, हम टेस्ट डेटासेट पर कीमतों की भविष्यवाणी कर सकते हैं, और फिर देख सकते हैं कि हमारी भविष्यवाणियाँ अपेक्षित मानों के कितनी करीब हैं। यह रूट मीन स्क्वायर एरर (RMSE) मेट्रिक का उपयोग करके किया जा सकता है, जो कि अपेक्षित और भविष्यवाणी किए गए मानों के बीच सभी वर्गीकृत अंतर का माध्य का मूल है।
देखने के लिए कि हमारा मॉडल कितना सटीक है, हम टेस्ट डेटासेट पर कीमतें अनुमानित कर सकते हैं, और फिर यह माप सकते हैं कि हमारे अनुमान अपेक्षित मूल्यों के कितने करीब हैं। इसे रूट मीन स्क्वायर एरर (RMSE) मीट्रिक का उपयोग करके किया जा सकता है, जो अपेक्षित और अनुमानित मानों के बीच सभी वर्गीकृत अंतरों का माध्य का वर्गमूल होता है।
```python
pred = lin_reg.predict(X_test)
@ -214,38 +215,37 @@ pred = lin_reg.predict(X_test)
हमारी त्रुटि लगभग 2 पॉइंट के आसपास दिखती है, जो ~17% है। बहुत अच्छा नहीं। मॉडल क्वालिटी का एक और संकेतक **निर्धारण गुणांक (coefficient of determination)** है, जिसे इस प्रकार प्राप्त किया जा सकता है:
हमारी त्रुटि लगभग 2 पॉइंट के आसपास लगती है, जो लगभग 17% है। यह बहुत अच्छी नहीं है। मॉडल गुणवत्ता का एक अन्य संकेतक है **निर्धारण का सहगुणांक**, जिसे इस तरह से प्राप्त किया जा सकता है:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
यदि मान 0 है, तो इसका मतलब है कि मॉडल इनपुट डेटा को ध्यान में नहीं लेता, और *सबसे खराब रैखिक पूर्वानुमानक* की तरह व्यवहार करता है, जो कि परिणाम का केवल औसत मान होता है। मान 1 का अर्थ है कि हम सभी अपेक्षित आउटपुट को पूरी तरह से सही भविष्यवाणी कर सकते हैं। हमारे मामले में, गुणांक लगभग 0.06 है, जो काफी कम है।
यदि मान 0 है, तो इसका मतलब है कि मॉडल इनपुट डेटा को ध्यान में नहीं लेता है, और *सबसे खराब रैखिक भविष्यवक्ता* के रूप में कार्य करता है, जो बस परिणाम का औसत मान है। मान 1 का अर्थ है कि हम सभी अपेक्षित आउटपुट को पूरी तरह सही अनुमानित कर सकते हैं। हमारे मामले में, सहगुणांक लगभग 0.06 है, जो काफी कम है।
हम टेस्ट डेटा को रिग्रेशन लाइन के साथ प्लॉट भी कर सकते हैं ताकि यह बेहतर दिख सके कि हमारे मामले में रिग्रेशन कैसे काम करता है:
हम टेस्ट डाटा को रिग्रेशन लाइन के साथ प्लॉट भी कर सकते हैं ताकि बेहतर तरीके से देख सकें कि रिग्रेशन हमारे मामले में कैसे काम करती है:
रैखिक रिग्रेशन का एक और प्रकार पॉलीनॉमियल रिग्रेशन है। जबकि कभी-कभी वेरिएबल्स के बीच एक रैखिक संबंध होता है - जैसे कि कद्दू जितना बड़ा होगा, कीमत उतनी ही अधिक होगी - कभी-कभी ये संबंध कोई समतल या सीधी रेखा नहीं हो सकते।
रैखिक रिग्रेशन का एक अन्य प्रकार पॉलीनॉमियल रिग्रेशन है। जबकि कभी-कभी चर के बीच रैखिक संबंध होता है - जैसे कद्दू का आकार बड़ा होने पर कीमत अधिक होती है - कभी-कभी ये संबंध प्लेन या सीधे रेखा के रूप में प्रदर्शित नहीं किए जा सकते।
✅ यहाँ [कुछ और उदाहरण](https://online.stat.psu.edu/stat501/lesson/9/9.8) हैं जिनमें पॉलीनॉमियल रिग्रेशन का उपयोग हो सकता है।
✅ यहाँ [कुछ और उदाहरण](https://online.stat.psu.edu/stat501/lesson/9/9.8) हैं जिनमें पॉलीनॉमियल रिग्रेशन का उपयोग किया जा सकता है।
दिनांक (Date) और कीमत (Price) के बीच संबंध पर एक बार फिर से नज़र डालें। क्या यह स्कैटरप्लॉट ऐसा लगता है कि इसे ज़रूरी तौर पर सीधी रेखा से विश्लेषित किया जाना चाहिए? क्या कीमतें उतार-चढ़ाव नहीं कर सकतीं? इस मामले में, आप पॉलीनॉमियल रिग्रेशन आज़मा सकते हैं।
डेट और कीमत के बीच संबंध पर एक बार फिर ध्यान दें। क्या यह स्कैटरप्लॉट ऐसी रेखा से विश्लेषण किया जाना चाहिए? क्या कीमतें स्थिर नहीं रह सकतीं? इस स्थिति में, आप पॉलीनॉमियल रिग्रेशन कोशिश कर सकते हैं।
✅ पॉलीनॉमियल गणितीय अभिव्यक्तियाँ होती हैं जिनमें एक या अधिक वेरिएबल और गुणांक हो सकते हैं।
✅ पॉलीनॉमियल गणितीय अभिव्यक्तियाँ हैं जो एक या अधिक चर और सहगुणों से मिलकर बनती हैं।
पॉलीनॉमियल रिग्रेशन एक घुमावदार रेखा बनाता है जो गैर-रेखीय डेटा को बेहतर फिट करता है। हमारे मामले में, यदि हम इनपुट डेटा में वर्गीकृत `DayOfYear` वैरिएबल शामिल करें, तो हम अपने डेटा को परवलयाकार (parabolic) वक्र के साथ फिट कर पाएंगे, जिसका एक न्यूनतम बिंदु साल के भीतर कहीं होगा।
पॉलीनॉमियल रिग्रेशन गैर-रैखिक डेटा के लिए बेहतर फिटिंग के लिए एक घुमावदार रेखा बनाता है। हमारे मामले में, यदि हम इनपुट डेटा में `DayOfYear` के वर्ग को शामिल करते हैं, तो हमें अपने डेटा को एक परवलयाकार वक्र से फिट करने में सक्षम होना चाहिए, जिसके वर्ष की एक निश्चित बिंदु पर न्यूनतम होगा।
Scikit-learn में एक उपयोगी [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) शामिल है जो डेटा प्रोसेसिंग के विभिन्न चरणों को एक साथ जोड़ता है। एक **पाइपलाइन** **एस्टिमेटर्स** की श्रृंखला होती है। हमारे मामले में, हम एक पाइपलाइन बनाएंगे जो पहले मॉडल में पॉलीनॉमियल फीचर्स जोड़ता है, और फिर रिग्रेशन को प्रशिक्षित करता है:
Scikit-learn में विभिन्न डेटा प्रोसेसिंग चरणों को संयोजित करने के लिए एक सहायक [पाइपलाइन API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) शामिल है। एक **पाइपलाइन** **एस्टिमेटरों** की श्रृंखला होती है। हमारे मामले में, हम एक पाइपलाइन बनाएंगे जो पहले हमारे मॉडल में पॉलीनॉमियल फीचर्स जोड़ती है, और फिर रिग्रेशन को प्रशिक्षित करती है:
```python
from sklearn.preprocessing import PolynomialFeatures
`PolynomialFeatures(2)` का उपयोग करने का मतलब है कि हम इनपुट डेटा से सभी द्वित्वतीय (second-degree) पॉलीनॉमियल्स शामिल करेंगे। हमारे मामले में इसका मतलब केवल `DayOfYear`<sup>2</sup> होगा, लेकिन यदि दो इनपुट वेरिएबल X और Y हों, तो यह X<sup>2</sup>, XY और Y<sup>2</sup> जोड़ देगा। हम उच्च-डिग्री पॉलीनॉमियल भी उपयोग कर सकते हैं यदि चाहें।
पाइपलाइनों का उपयोग मूल `LinearRegression` ऑब्जेक्ट की तरह ही किया जा सकता है, अर्थात हम पाइपलाइन को `fit` कर सकते हैं, और फिर `predict` का उपयोग करके भविष्यवाणी के परिणाम प्राप्त कर सकते हैं। यहाँ ग्राफ है जो टेस्ट डेटा और अनुमानित वक्र दिखाता है:
`PolynomialFeatures(2)` का उपयोग करने का मतलब है कि हम इनपुट डेटा से सभी द्वितीय-डिग्री पॉलीनॉमियल को शामिल करेंगे। हमारे मामले में यह केवल `DayOfYear`<sup>2</sup> होगा, लेकिन यदि हमारे पास दो इनपुट चर X और Y हैं, तो यह X<sup>2</sup>, XY और Y<sup>2</sup> जोड़ेगा। हम यदि चाहें तो उच्च डिग्री पॉलीनॉमियल का भी उपयोग कर सकते हैं।
पाइपलाइनों का उपयोग मूल `LinearRegression` ऑब्जेक्ट की तरह ही किया जा सकता है, यानी हम पाइपलाइन को `fit` कर सकते हैं, और फिर `predict` का उपयोग करके पूर्वानुमान परिणाम प्राप्त कर सकते हैं:
स्मूद अप्रोक्सिमेशन कर्व को प्लॉट करने के लिए, हम `np.linspace` का उपयोग करते हैं ताकि इनपुट मानों की एक समान श्रेणी बनाई जा सके, बजाय सीधे अनऑर्डर किए गए टेस्ट डेटा पर प्लॉट करने के (जो एक ज़िगज़ैग रेखा उत्पन्न करेगा):
पॉलीनॉमियल रिग्रेशन का उपयोग करके, हम थोड़ा नीचे MSE और उच्च निर्धारण प्राप्त कर सकते हैं, लेकिन बहुत अधिक नहीं। हमें अन्य फीचर्स को भी ध्यान में रखना होगा!
पॉलीनॉमियल रिग्रेशन का उपयोग करते हुए, हम थोड़ा कम RMSE और उच्च निर्धारण प्राप्त कर सकते हैं, लेकिन काफी हद तक नहीं। हमें अन्य विशेषताओं को ध्यान में रखना होगा!
> आप देख सकते हैं कि न्यूनतम कद्दू की कीमतें लगभग हैलोवीन के आसपास देखी जाती हैं। आप इसे कैसे समझाएंगे?
> आप देख सकते हैं कि न्यूनतम कद्दू की कीमतें कहीं हैलोवीन के आसपास देखी गई हैं। आप इसे कैसे समझाएंगे?
🎃 बधाई हो, आपने अभी एक ऐसा मॉडल बनाया है जो पैसे कद्दू की कीमत की भविष्यवाणी करने में मदद कर सकता है। आप शायद इसी प्रक्रिया को सभी कद्दू प्रकारों के लिए दोहरा सकते हैं, लेकिन यह मुश्किल होगा। आइए अब सीखते हैं कि मॉडल में कद्दू की किस्म (variety) को कैसे शामिल करें!
🎃 बधाई हो, आपने एक ऐसा मॉडल बनाया है जो पाई कद्दू की कीमत अनुमानित करने में मदद कर सकता है। आप शायद सभी कद्दू प्रकारों के लिए वही प्रक्रिया दोहरा सकते हैं, लेकिन यह थकाऊ हो सकता है। अब चलिए सीखते हैं कि हमारी मॉडल में कद्दू की किस्म को कैसे ध्यान में रखा जाए!
## श्रेणीबद्ध फीचर्स (Categorical Features)
## श्रेणीगत विशेषताएँ
आदर्श दुनिया में, हम चाहते हैं कि हम एक ही मॉडल का उपयोग करके विभिन्न कद्दू किस्मों की कीमतें भविष्यवाणी कर सकें। हालांकि, `Variety` कॉलम `Month` जैसे कॉलमों से थोड़ा अलग है, क्योंकि इसमें गैर-संख्यात्मक (non-numeric) मान होते हैं। ऐसे कॉलम को **श्रेणीबद्ध (categorical)** कहा जाता है।
आदर्श दुनिया में, हम चाहते हैं कि हम एक ही मॉडल का उपयोग करके विभिन्न कद्दू किस्मों के लिए कीमतें अनुमानित कर सकें। हालांकि, `Variety` कॉलम `Month` जैसे कॉलम से थोड़ा अलग है, क्योंकि यह गैर-सांख्यिक मान होते हैं। ऐसे कॉलम को **श्रेणीगत** कहा जाता है।
[](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 ऊपर दिए गए इमेज पर क्लिक करें एक संक्षिप्त वीडियो अवलोकन के लिए जिसमें श्रेणीबद्ध फीचर्स के उपयोग को बताया गया है।
> 🎥 ऊपर की छवि पर क्लिक करें श्रेणीगत विशेषताओं के उपयोग पर संक्षिप्त वीडियो अवलोकन के लिए।
यहाँ आप देख सकते हैं कि औसत कीमत किस्म पर कैसे निर्भर करती है:
<imgalt="Average price by variety"src="../../../../translated_images/hi/price-by-variety.744a2f9925d9bcb4.webp"width="50%"/>
किस्म को ध्यान में लेने के लिए, हमें इसे पहले संख्यात्मक रूप में बदलना होगा, या **इन्कोड (encode)** करना होगा। इसे करने के कई तरीके हैं:
किस्म को ध्यान में लेने के लिए, हमें इसे पहले संख्यात्मक रूप में परिवर्तित करना होगा, या इसे **कोडित** करना होगा। इसके कई तरीके हैं:
* सरल **न्यूमरिक इन्कोडिंग** विभिन्न किस्मों की एक तालिका बनाता है, और फिर किस्म के नाम को उस तालिका में एक अनुक्रमांक (index) से बदल देता है। यह रैखिक रिग्रेशन के लिए सबसे अच्छा विचार नहीं है, क्योंकि रिग्रेशन अनुक्रमांक के वास्तविक संख्यात्मक मान को लेता है और इसे कुछ गुणांक से गुणा कर परिणाम में जोड़ता है। हमारे मामले में, अनुक्रमांक नंबर और कीमत के बीच संबंध स्पष्ट रूप से गैर-रेखीय है, भले ही हम सुनिश्चित करें कि अनुक्रमांक किसी विशेष क्रम में हों।
* **वन-हॉट इन्कोडिंग (One-hot encoding)** `Variety` कॉलम को 4 अलग-अलग कॉलमों से प्रतिस्थापित कर देगा, प्रत्येक किस्म के लिए एक। हर कॉलम में `1` होगा यदि संबंधित पंक्ति उस किस्म की है, और अन्यथा `0` होगा। इसका मतलब है कि रैखिक रिग्रेशन में चार गुणांक होंगे, प्रत्येक कद्दू किस्म के लिए एक, जो उस विशेष किस्म के लिए "शुरुआती कीमत" (या बल्कि "अतिरिक्त कीमत") के लिए ज़िम्मेदार होंगे।
* सरल **संख्यात्मक कोडिंग** विभिन्न किस्मों की एक तालिका बनाएगी, और फिर किस्म के नाम को उस तालिका में उसके अनुक्रमांक द्वारा बदल देगी। यह रैखिक रिग्रेशन के लिए सबसे अच्छी विधि नहीं है, क्योंकि रैखिक रिग्रेशन अनुक्रमांक के वास्तविक संख्यात्मक मान को लेता है, और इसे कुछ सहगुणक से गुणा करके परिणाम में जोड़ता है। हमारे मामले में, अनुक्रमांक संख्या और कीमत के बीच संबंध स्पष्ट रूप से गैर-रैखिक है, भले ही हम यह सुनिश्चित करें कि अनुक्रमांक किसी विशिष्ट तरीके से क्रमबद्ध हों।
* **वन-हॉट एन्कोडिंग** `Variety` कॉलम को 4 अलग-अलग कॉलम में बदल देगा, हर एक किस्म के लिए एक। प्रत्येक कॉलम में `1` होगा यदि संबंधित पंक्ति उस किस्म की है, और अन्यथा `0` होगा। इसका मतलब है कि रैखिक रिग्रेशन में चार सहगुण होंगे, हर कद्दू किस्म के लिए एक, जो उस विशेष किस्म के "शुरुआती मूल्य" (या बल्कि "अतिरिक्त मूल्य") के लिए जिम्मेदार होगा।
निचे का कोड दिखाता है कि हम किस तरह से वन-हॉट इन्कोडिंग कर सकते हैं:
निम्नलिखित कोड दिखाता है कि हम किस तरह वन-हॉट एन्कोडिंग कर सकते हैं:
```python
pd.get_dummies(new_pumpkins['Variety'])
```
ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE
वन-हॉट इन्कोडेड किस्म को इनपुट के रूप में लेकर जब हम रैखिक रिग्रेशन को ट्रेन करते हैं, तो हमें बस सही ढंग से `X` और `y` डेटा को इनिशियलाइज़ करना होता है:
वन-हॉट एन्कोडेड किस्म का उपयोग करके रैखिक रिग्रेशन को प्रशिक्षित करने के लिए, हमें केवल `X` और `y` डेटा को सही तरीके से इनीशियलाइज करना होगा:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
बाकी कोड वही है जो हमने ऊपर Linear Regression को ट्रेन करने के लिए इस्तेमाल किया था। यदि आप इसे आज़माएंगे, तो आप देखेंगे कि मेर स्क्वायर्ड एरर लगभग समान है, लेकिन हमें निर्धारण गुणांक (~77%) काफी ज्यादा मिलता है। और भी अधिक सटीक भविष्यवाणियाँ करने के लिए, हम और भी श्रेणीबद्ध फीचर्स और संख्यात्मक फीचर्स, जैसे `Month` या `DayOfYear` को ध्यान में ले सकते हैं। एक बड़ा फीचर्स सेट पाने के लिए, हम `join` का उपयोग कर सकते हैं:
बाकी कोड वही है जो हमने ऊपर रैखिक रिग्रेशन को प्रशिक्षित करने के लिए उपयोग किया। अगर आप इसे आजमाएंगे, तो आप देखेंगे कि मीन स्क्वायर्ड एरर लगभग समान है, लेकिन हामी अधिक उच्च निर्धारण (लगभग 77%) प्राप्त कर लेते हैं। और अधिक सटीक पूर्वानुमान प्राप्त करने के लिए, हम और श्रेणीगत विशेषताओं के साथ-साथ संख्यात्मक विशेषताओं, जैसे `Month` या `DayOfYear` को भी ध्यान में ले सकते हैं। एक बड़ा फीचर्स ऐरे बनाने के लिए, हम `join` का उपयोग कर सकते हैं:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -318,12 +340,12 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
```
यहाँ हम `City` और `Package` प्रकार को भी ध्यान में रखते हैं, जिससे हमें MSE 2.84 (10%) और निर्धारण 0.94 मिलता है!
## सब कुछ एक साथ जोड़ना
यहाँ हम `City` और `Package` प्रकार को भी ध्यान में लेते हैं, जो हमें RMSE 2.84 (10.5%) और निर्धारण 0.94 देता है!
## सब कुछ एक साथ रखना
सबसे अच्छा मॉडल बनाने के लिए, हम ऊपर के उदाहरण से संयुक्त (वन-हॉट इन्कोडेड श्रेणीबद्ध + संख्यात्मक) डेटा को पॉलीनॉमियल रिग्रेशन के साथ उपयोग कर सकते हैं। आपकी सुविधा के लिए यहाँ पूरा कोड है:
सबसे अच्छा मॉडल बनाने के लिए, हम ऊपर के उदाहरण से मिले संयुक्त (वन-हॉट एन्कोडेड श्रेणीगत + संख्यात्मक) डेटा का उपयोग पॉलीनॉमियल रिग्रेशन के साथ कर सकते हैं। आपकी सुविधा के लिए यहां पूर्ण कोड है:
```python
# प्रशिक्षण डेटा सेट करें
@ -333,54 +355,54 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
# ट्रेन-टेस्ट विभाजन करें
# ट्रेन-टेस्ट स्प्लिट करें
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
इससे हमें सबसे अच्छा निर्धारण गुणांक लगभग 97% और MSE=2.23 (~8% भविष्यवाणी त्रुटि) मिलेगा।
| मॉडल | MSE | निर्धारण |
|-------|-----|-----------|
| `DayOfYear` रैखिक | 2.77 (17.2%) | 0.07 |
| `DayOfYear` पॉलीनॉमियल | 2.73 (17.0%) | 0.08 |
| `Variety` रैखिक | 5.24 (19.7%) | 0.77 |
| सभी फीचर्स रैखिक | 2.84 (10.5%) | 0.94 |
| सभी फीचर्स पॉलीनॉमियल | 2.23 (8.25%) | 0.97 |
यह हमें लगभग 97% का सर्वोत्तम निर्धारण सहगुण और RMSE=2.23 (~8% पूर्वानुमान त्रुटि) देगा।
| Model | RMSE | Determination |
|-------|-----|---------------|
| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 |
| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 |
| `Variety` Linear | 5.24 (19.7%) | 0.77 |
| All features Linear | 2.84 (10.5%) | 0.94 |
| All features Polynomial | 2.23 (8.25%) | 0.97 |
🏆 बहुत बढ़िया! आपने एक पाठ में चार रिग्रेशन मॉडल बनाए, और मॉडल की गुणवत्ता को 97% तक सुधार दिया। रिग्रेशन के अंतिम खंड में, आप लॉजिस्टिक रिग्रेशन के बारे में सीखेंगे जो श्रेणियाँ निर्धारित करता है।
🏆 बहुत बढ़िया! आपने एक पाठ में चार रिग्रेशन मॉडल बनाए, और मॉडल गुणवत्ता को 97% तक सुधार दिया। अंतिम खंड में, आप वर्ग निर्धारित करने के लिए लॉजिस्टिक रिग्रेशन के बारे में जानेंगे।
---
## 🚀चुनौती
इस नोटबुक में कई विभिन्न वेरिएबल्स को टेस्ट करें यह देखने के लिए कि सह-संबंध कैसे मॉडल की सटीकता से संबंधित है।
इस नोटबुक में कई अलग-अलग चर का परीक्षण करें ताकि देखें कि सहसंबंध मॉडल की सटीकता से कैसे मेल खाता है।
## [पाठ के बाद क्विज़](https://ff-quizzes.netlify.app/en/ml/)
## समीक्षा और स्व-अध्ययन
## समीक्षा एवं स्वअध्ययन
इस पाठ में हमने Linear Regression के बारे में सीखा। रिग्रेशन के अन्य महत्वपूर्ण प्रकार भी हैं। Stepwise, Ridge, Lasso और Elasticnet तकनीकों के बारे में पढ़ें। एक अच्छा कोर्स सीखने के लिए है [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
इस पाठ में हमने रैखिक रिग्रेशन के बारे में जाना। अन्य महत्वपूर्ण प्रकार के रिग्रेशन भी हैं। स्टेपवाइज, रिज, लैसो और इलास्टिकनेट तकनीकों के बारे में पढ़ें। अधिक जानने के लिए एक अच्छा कोर्स है [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
## असाइनमेंट
[एक मॉडल बनाएं](assignment.md)
[मॉडल बनाएँ](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**अस्वीकरण**:
इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में दस्तावेज़ को ही अधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं।
इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियां या असंगतियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मातृ भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं।
"## कद्दू की कीमत के लिए रैखिक और बहुपद प्रतिगमन - पाठ 3\n",
"## कद्दू की कीमत के लिए रैखिक और बहुपदीय प्रतिगमन - पाठ 3\n",
"\n",
"आवश्यक पुस्तकालयों और डेटा सेट को लोड करें। डेटा को एक डेटा फ्रेम में बदलें जिसमें डेटा का एक उपसमूह हो:\n",
"आवश्यक लाइब्रेरीज़ और डेटासेट लोड करें। डेटा को एक डेटा फ़्रेम में परिवर्तित करें जिसमें डेटा का एक उपसमूह शामिल हो:\n",
"\n",
"- केवल उन कद्दुओं को प्राप्त करें जिनकी कीमत बुशल के आधार पर है \n",
"- तारीख को महीने में बदलें \n",
"- कीमत को उच्च और निम्न कीमतों के औसत के रूप में गणना करें\n",
"- कीमत को बुशल मात्रा के आधार पर दर्शाने के लिए परिवर्तित करें\n"
"- केवल उन कद्दू को लें जिनकी कीमत बसल (bushel) के हिसाब से है\n",
"- तिथि को एक महीने में परिवर्तित करें\n",
"- कीमत को उच्च और निम्न कीमतों के औसत के रूप में गणना करें\n",
"- कीमत को बसल मात्रा के अनुसार दर्शाने के लिए परिवर्तित करें\n"
]
},
{
@ -377,7 +377,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"एक स्कैटरप्लॉट हमें याद दिलाता है कि हमारे पास केवल अगस्त से दिसंबर तक का मासिक डेटा है। हमें संभवतः निष्कर्ष निकालने के लिए रैखिक रूप में अधिक डेटा की आवश्यकता होगी।\n"
"एक स्कैटरप्लॉट हमें याद दिलाता है कि हमारे पास केवल अगस्त से दिसंबर तक का मासिक डेटा है। संभावित रूप से, रेखीय रूप में निष्कर्ष निकालने के लिए हमें और अधिक डेटा की आवश्यकता होगी।\n"
]
},
{
@ -447,7 +447,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"आइए देखें कि क्या कोई सहसंबंध है:\n"
]
},
{
"cell_type": "code",
@ -472,7 +474,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"ऐसा लगता है कि सहसंबंध काफी छोटा है, लेकिन कुछ और अधिक महत्वपूर्ण संबंध है - क्योंकि ऊपर दिए गए प्लॉट में मूल्य बिंदु कई अलग-अलग समूहों में दिखाई देते हैं। आइए एक प्लॉट बनाते हैं जो विभिन्न कद्दू की किस्मों को दिखाएगा:\n"
"ऐसा लगता है कि सहसंबंध काफी कम है, लेकिन कुछ अन्य अधिक महत्वपूर्ण संबंध हैं - क्योंकि ऊपर के प्लॉट में कीमत के बिंदु कई अलग-अलग समूह बनाते हुए दिखाई दे रहे हैं। चलिए एक ऐसा प्लॉट बनाते हैं जो विभिन्न कद्दू की किस्मों को दिखाएगा:\n"
]
},
{
@ -535,7 +537,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"फिलहाल, आइए केवल एक प्रकार - **पाई प्रकार** पर ध्यान केंद्रित करें।\n"
]
},
{
"cell_type": "code",
@ -584,7 +588,7 @@
"source": [
"### रैखिक प्रतिगमन\n",
"\n",
"हम Scikit Learn का उपयोग करके रैखिक प्रतिगमन मॉडल को प्रशिक्षित करेंगे:\n"
"हम रैखिक प्रतिगमन मॉडल प्रशिक्षित करने के लिए Scikit Learn का उपयोग करेंगे:\n"
]
},
{
@ -662,7 +666,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"रेखा की ढलान को रैखिक प्रतिगमन गुणांक से निर्धारित किया जा सकता है:\n"
"रेखीय प्रतिगमन गुणांक से रेखा का ढाल निर्धारण किया जा सकता है:\n"
]
},
{
@ -688,7 +692,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"हम प्रशिक्षित मॉडल का उपयोग मूल्य अनुमानित करने के लिए कर सकते हैं:\n"
]
},
{
"cell_type": "code",
@ -716,11 +722,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### बहुपद प्रतिगमन\n",
"### पोलिनोमियल रिग्रेशन\n",
"\n",
"कभी-कभी विशेषताओं और परिणामों के बीच का संबंध स्वाभाविक रूप से गैर-रेखीय होता है। उदाहरण के लिए, कद्दू की कीमतें सर्दियों में (महीने=1,2) अधिक हो सकती हैं, फिर गर्मियों में (महीने=5-7) गिर सकती हैं, और फिर बढ़ सकती हैं। रैखिक प्रतिगमन इस संबंध को सटीक रूप से नहीं समझ सकता।\n",
"कभी-कभी फीचर्स और परिणामों के बीच संबंध स्वाभाविक रूप से गैर-रेखीय होता है। उदाहरण के लिए, कद्दू के दाम सर्दी में अधिक हो सकते हैं (महीने=1,2), फिर गर्मी में गिर जाते हैं (महीने=5-7), और फिर फिर से बढ़ जाते हैं। रैखिक रिग्रेशन इस संबंध को सटीक रूप से नहीं पकड़ पाती।\n",
"\n",
"इस स्थिति में, हम अतिरिक्त विशेषताओं को जोड़ने पर विचार कर सकते हैं। एक सरल तरीका यह है कि इनपुट विशेषताओं से बहुपदों का उपयोग करें, जिससे **बहुपद प्रतिगमन** प्राप्त होगा। Scikit Learn में, हम पाइपलाइनों का उपयोग करके स्वचालित रूप से बहुपद विशेषताओं की पूर्व-गणना कर सकते हैं:\n"
"इस मामले में, हम अतिरिक्त फीचर्स जोड़ने पर विचार कर सकते हैं। एक सरल तरीका इनपुट फीचर्स से बहुपद (polynomials) का उपयोग करना है, जिससे **पोलिनोमियल रिग्रेशन** होगा। Scikit Learn में, हम पाइपलाइन्स का उपयोग करके स्वचालित रूप से बहुपदीय फीचर्स पूर्व-गणना कर सकते हैं:\n"
"आदर्श स्थिति में, हम चाहते हैं कि एक ही मॉडल का उपयोग करके विभिन्न कद्दू की किस्मों की कीमतों का अनुमान लगाया जा सके। किस्म को ध्यान में रखने के लिए, सबसे पहले हमें इसे संख्यात्मक रूप में बदलना होगा, या **एन्कोड** करना होगा। इसे करने के कई तरीके हैं:\n",
"आदर्श दुनिया में, हम चाहते हैं कि एक ही मॉडल का उपयोग करके विभिन्न कद्दू की विविधताओं के लिए कीमतों का पूर्वानुमान लगाया जा सके। विविधता को ध्यान में रखने के लिए, हमें पहले इसे संख्यात्मक रूप में बदलना होगा, या **एन्कोड** करना होगा। इसे करने के कई तरीके हैं:\n",
"\n",
"* सरल संख्यात्मक एन्कोडिंग, जो विभिन्न किस्मों की एक तालिका बनाएगी, और फिर किस्म के नाम को उस तालिका में एक इंडेक्स से बदल देगी। यह रैखिक प्रतिगमन (linear regression) के लिए सबसे अच्छा तरीका नहीं है, क्योंकि रैखिक प्रतिगमन इंडेक्स के संख्यात्मक मान को ध्यान में रखता है, और यह संख्यात्मक मान कीमत के साथ संख्यात्मक रूप से मेल खाने की संभावना नहीं रखता।\n",
"* वन-हॉट एन्कोडिंग (One-hot encoding), जो `Variety` कॉलम को 4 अलग-अलग कॉलम से बदल देगी, प्रत्येक किस्म के लिए एक कॉलम। यह कॉलम 1 दिखाएगा यदि संबंधित पंक्ति दी गई किस्म की है, और अन्यथा 0 दिखाएगा।\n",
"* सरल संख्यात्मक एन्कोडिंग जो विभिन्न विविधताओं की एक तालिका बनाएगी, और फिर उस तालिका में विविधता के नाम को एक सूचकांक से बदल देगी। यह रेखीय प्रतिगमन के लिए सबसे अच्छा विचार नहीं है, क्योंकि रेखीय प्रतिगमन सूचकांक के संख्यात्मक मान को ध्यान में रखता है, और संख्यात्मक मान संभवतः कीमत के साथ संख्यात्मक रूप से संबंधित नहीं होगा।\n",
"* वन-हॉट एन्कोडिंग, जो `Variety` कॉलम को 4 अलग-अलग कॉलमों से बदल देगा, प्रत्येक विविधता के लिए एक कॉलम, जो उस पंक्ति के दिए गए विविधता की होने पर 1 रखेगा, और अन्यथा 0।\n",
"\n",
"नीचे दिया गया कोड दिखाता है कि हम किस प्रकार एक किस्म को वन-हॉट एन्कोड कर सकते हैं:\n"
"नीचे का कोड दिखाता है कि हम कैसे किसी विविधता को वन-हॉट एन्कोड कर सकते हैं:\n"
]
},
{
@ -938,9 +947,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### विविधता पर रैखिक प्रतिगमन\n",
"### विविधता पर रेखीय प्रतिगमन\n",
"\n",
"अब हम ऊपर दिए गए कोड का ही उपयोग करेंगे, लेकिन `DayOfYear` के बजाय हम अपनी वन-हॉट-एन्कोडेड विविधता को इनपुट के रूप में उपयोग करेंगे:\n"
"अब हम ऊपर दिए गए कोड का ही उपयोग करेंगे, लेकिन `DayOfYear` के बजाय हम इनपुट के रूप में हमारी वन-हॉट-एन्कोडेड विविधता का उपयोग करेंगे:\n"
]
},
{
@ -988,7 +997,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"हम उसी तरीके से अन्य विशेषताओं का उपयोग करने की कोशिश कर सकते हैं, और उन्हें संख्यात्मक विशेषताओं जैसे `Month` या `DayOfYear` के साथ संयोजित कर सकते हैं:\n"
"हम इसी तरीके से अन्य फीचर्स का उपयोग करने की भी कोशिश कर सकते हैं, और उन्हें संख्यात्मक फीचर्स के साथ जोड़ सकते हैं, जैसे कि `Month` या `DayOfYear`:\n"
]
},
{
@ -1019,9 +1028,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### बहुपद प्रतिगमन\n",
"### Polynomial Regression\n",
"\n",
"बहुपद प्रतिगमन का उपयोग उन श्रेणीबद्ध विशेषताओं के साथ भी किया जा सकता है जिन्हें वन-हॉट-एन्कोड किया गया हो। बहुपद प्रतिगमन को प्रशिक्षित करने के लिए कोड मूल रूप से वही होगा जैसा हमने ऊपर देखा है।\n"
"बहुपद प्रतिगमन का उपयोग उन श्रेणीबद्ध विशेषताओं के साथ भी किया जा सकता है जिन्हें वन-हॉट-एन्कोडेड किया गया हो। बहुपद प्रतिगमन को प्रशिक्षित करने के लिए कोड मूल रूप से वही होगा जैसा हमने ऊपर देखा है।\n"
]
},
{
@ -1068,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\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://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning")
かぼちゃデータの構造に既に慣れているはずです。このレッスンの_notebook.ipynb_に前処理済みの状態で組み込まれています。ファイル内ではバッシェル単位のかぼちゃ価格が新しいデータフレームに表示されています。Visual Studio Codeのカーネルでこれらのノートブックが動作するか必ず確認してください。
これまでに、調査しているパンプキンデータの構造に慣れているはずです。このレッスンの_notebook.ipynb_ファイルには、データが事前に読み込まれ、クリーニング済みで含まれています。パンプキンの価格はバッシェル単位で新しいデータフレームに表示されています。Visual Studio Codeのカーネル上でこれらのノートブックを実行できるようにしてください。
> [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) のサイトで計算方法を確認できます。また、[この最小二乗法計算機](https://www.mathsisfun.com/data/least-squares-calculator.html)も見て、数字の値が線にどう影響するかを観察してみてください。
✅ このレッスンに付属のノートブックを実行し、月と価格の散布図を見てみましょう。パンプキン販売の月と価格のデータは、散布図の視覚的解釈に基づくと相関は高そうですか、それとも低そうですか?`Month` ではなく、もっと細かい尺度(例えば、年始からの日数= *day of the year*)を使うとどう変わりますか?
`PolynomialFeatures(2)` を使うと、入力データからすべての2次多項式を含めます。今回の場合は `DayOfYear`<sup>2</sup> だけですが、X と Y という2つの入力変数があれば X<sup>2</sup>、XY、Y<sup>2</sup> が追加されます。より高次の多項式も使えます。
`PolynomialFeatures(2)` を使うことで、入力データのすべての2次多項式を含めることができます。今回の場合は単に `DayOfYear`<sup>2</sup> を意味しますが、2つの入力変数 X と Y がある場合は X<sup>2</sup>、XY、Y<sup>2</sup> が追加されます。必要に応じてより高い次数の多項式も使えます。
[](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 カテゴリカル特徴を使う方法を簡単に解説した動画は上の画像をクリックしてください。
> 🎥 上の画像をクリックすると、カテゴリ特徴の使用方法に関する簡単なビデオ概要が見られます。
ここでは種類ごとの平均価格がどう違うかがわかります:
ここでは品種による平均価格の違いを示しています:
<imgalt="Average price by variety"src="../../../../translated_images/ja/price-by-variety.744a2f9925d9bcb4.webp"width="50%"/>
머신 러닝 모델을 구축, 사용, 유지 관리하는 과정과 그 모델이 사용하는 데이터는 다른 개발 워크플로우와 매우 다릅니다. 이번 강의에서는 이 과정을 이해하기 쉽게 설명하고, 알아야 할 주요 기법들을 정리합니다. 여러분은 다음을 배우게 됩니다:
머신러닝 모델과 그 모델이 사용하는 데이터를 구축하고 사용하며 유지하는 과정은 다른 많은 개발 워크플로우와 매우 다른 과정입니다. 이번 수업에서는 이 과정을 쉽게 이해할 수 있도록 하고, 알아야 할 주요 기법들을 설명합니다. 여러분은 다음을 배우게 됩니다:
- 머신 러닝의 기본 과정을 높은 수준에서 이해합니다.
- '모델', '예측', '훈련 데이터'와 같은 기본 개념을 탐구합니다.
- 머신러닝의 기본 프로세스를 높은 수준에서 이해하기
- '모델', '예측', '훈련 데이터'와 같은 기본 개념 탐색하기
## [강의 전 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
## [수업 전 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
[](https://youtu.be/4NGM0U2ZSHU "초보자를 위한 머신러닝 - 머신러닝 기법")
[](https://youtu.be/4NGM0U2ZSHU "초보자를 위한 머신러닝 - 머신러닝 기법")
> 🎥 위 이미지를 클릭하면 이번 강의를 다루는 짧은 영상을 볼 수 있습니다.
> 🎥 위 이미지를 클릭하면 이번 수업 내용을 다루는 짧은 영상을 볼 수 있습니다.
## 소개
머신 러닝(ML) 프로세스를 만드는 기술은 다음과 같은 여러 단계로 구성됩니다:
높은 수준에서, 머신러닝(ML) 프로세스를 만드는 작업은 여러 단계로 구성됩니다:
1. **질문 결정하기**. 대부분의 ML 프로세스는 단순한 조건부 프로그램이나 규칙 기반 엔진으로는 답할 수 없는 질문을 던지는 것으로 시작합니다. 이러한 질문은 종종 데이터 집합을 기반으로 한 예측과 관련이 있습니다.
2. **데이터 수집 및 준비**. 질문에 답하기 위해서는 데이터가 필요합니다. 데이터의 품질과 때로는 양이 초기 질문에 얼마나 잘 답할 수 있는지를 결정합니다. 데이터를 시각화하는 것은 이 단계에서 중요한 부분입니다. 이 단계에는 데이터를 훈련 그룹과 테스트 그룹으로 나누어 모델을 구축하는 작업도 포함됩니다.
3. **훈련 방법 선택**. 질문과 데이터의 특성에 따라 데이터를 가장 잘 반영하고 정확한 예측을 할 수 있는 모델을 훈련시키는 방법을 선택해야 합니다. 이 단계는 특정 전문 지식이 필요하며, 종종 상당한 실험이 요구됩니다.
4. **모델 훈련**. 훈련 데이터를 사용하여 다양한 알고리즘을 통해 데이터의 패턴을 인식하도록 모델을 훈련시킵니다. 모델은 데이터의 특정 부분을 우선적으로 고려하여 더 나은 모델을 구축하기 위해 내부 가중치를 조정할 수 있습니다.
5. **모델 평가**. 수집된 데이터 중 이전에 본 적 없는 데이터를 사용하여 모델의 성능을 평가합니다.
6. **매개변수 조정**. 모델의 성능에 따라 알고리즘의 동작을 제어하는 매개변수 또는 변수를 변경하여 프로세스를 다시 실행할 수 있습니다.
7. **예측**. 새로운 입력을 사용하여 모델의 정확성을 테스트합니다.
1. **질문 정하기**. 대부분의 머신러닝 과정은 단순한 조건문 프로그램이나 규칙 기반 엔진으로 답할 수 없는 질문을 던지는 것에서 시작합니다. 이 질문들은 보통 여러 데이터를 기반으로 한 예측과 관련됩니다.
2. **데이터 수집 및 준비**. 질문에 답하려면 데이터가 필요합니다. 데이터의 품질과 때로는 양이 초기 질문에 얼마나 잘 답할 수 있는지를 결정합니다. 데이터 시각화는 이 단계의 중요한 부분입니다. 또한 데이터를 훈련용과 테스트용으로 나누어 모델을 구축하는 것도 포함됩니다.
3. **훈련 방법 선택**. 질문과 데이터의 성격에 따라, 데이터를 가장 잘 반영하고 정확한 예측을 하기 위해 모델을 훈련시키는 방법을 선택해야 합니다. 이 단계는 특정 전문 지식과 많은 실험이 필요한 부분입니다.
4. **모델 훈련**. 훈련 데이터를 사용해 다양한 알고리즘으로 데이터를 인식하는 모델을 훈련시킵니다. 모델은 데이터의 특정 부분을 우선시할 수 있도록 내부 가중치를 조정하여 더 나은 모델을 만들 수 있습니다.
5. **모델 평가**. 수집된 데이터 중 모델이 아직 본 적 없는 테스트 데이터를 사용해 모델의 성능을 평가합니다.
6. **파라미터 조정**. 모델의 성능을 기반으로 다양한 파라미터, 즉 모델 훈련 알고리즘의 동작을 제어하는 변수를 바꿔가며 과정을 반복할 수 있습니다.
7. <strong>예측</strong>. 새 입력값을 사용해 모델의 정확성을 테스트합니다.
## 어떤 질문을 할 것인가
## 어떤 질문을 할까
컴퓨터는 데이터에서 숨겨진 패턴을 발견하는 데 특히 능숙합니다. 이 유용성은 조건부 기반 규칙 엔진을 만들어 쉽게 답할 수 없는 특정 도메인에 대한 질문을 가진 연구자들에게 매우 유용합니다. 예를 들어, 보험 업무에서는 데이터 과학자가 흡연자와 비흡연자의 사망률에 대한 수작업 규칙을 만들 수 있습니다.
컴퓨터는 데이터 속 숨겨진 패턴을 발견하는 데 특히 뛰어납니다. 이는 조건부 규칙 엔진으로는 쉽게 답할 수 없는 도메인 내 연구자들이 질문에 매우 유용합니다. 예를 들어 보험계리 업무에서, 데이터 과학자는 흡연자와 비흡연자의 사망률에 관한 수작업 규칙을 만들 수도 있습니다.
그러나 많은 다른 변수가 방정식에 포함되면, 과거 건강 기록을 기반으로 미래 사망률을 예측하는 데 ML 모델이 더 효율적일 수 있습니다. 더 긍정적인 예로는 위도, 경도, 기후 변화, 해양 근접성, 제트 기류 패턴 등을 포함한 데이터를 기반으로 특정 지역의 4월 날씨를 예측하는 것이 있습니다.
하지만 여러 변수가 포함되면 과거 건강 기록에 기반한 미래 사망률 예측에 머신러닝 모델이 더 효율적일 수 있습니다. 더 밝은 예로는 위도, 경도, 기후 변화, 바다와의 거리, 제트기류 패턴 등의 데이터를 활용해 특정 지역 4월 날씨 예측을 하는 경우입니다.
✅ 이 [슬라이드 자료](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf)는 날씨 분석에서 ML을 사용하는 역사적 관점을 제공합니다.
✅ 이 [슬라이드 데크](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf)는 기상 모델에 관한 역사적 관점에서 머신러닝을 활용한 사례를 제공합니다.
## 모델 구축 전 작업
## 사전 준비 작업
모델을 구축하기 전에 완료해야 할 몇 가지 작업이 있습니다. 질문을 테스트하고 모델의 예측을 기반으로 가설을 형성하려면 몇 가지 요소를 식별하고 구성해야 합니다.
모델 구축을 시작하기 전에 완료해야 할 여러 작업이 있습니다. 질문을 테스트하고 모델 예측에 기반해 가설을 형성하려면 여러 요소를 식별하고 구성해야 합니다.
### 데이터
질문에 확실히 답하기 위해서는 적절한 유형의 충분한 데이터가 필요합니다. 이 단계에서 해야 할 두 가지 작업은 다음과 같습니다:
질문에 확실히 답하려면 적절한 유형의 충분한 데이터가 필요합니다. 이 시점에 해야 할 두 가지는:
- **데이터 수집**. 데이터 분석의 공정성에 대한 이전 강의를 염두에 두고 데이터를 신중히 수집합니다. 데이터의 출처, 내재된 편향, 출처를 문서화하는 것에 주의하세요.
- **데이터 준비**. 데이터 준비 과정에는 여러 단계가 포함됩니다. 다양한 출처에서 온 데이터를 통합하고 정규화해야 할 수도 있습니다. 문자열을 숫자로 변환하거나(예: [클러스터링](../../5-Clustering/1-Visualize/README.md)에서 수행) 원본 데이터를 기반으로 새로운 데이터를 생성하거나(예: [분류](../../4-Classification/1-Introduction/README.md)에서 수행) 데이터를 정리하고 편집할 수 있습니다. 또한 훈련 기법에 따라 데이터를 무작위화하고 섞어야 할 수도 있습니다.
- **데이터 수집**. 이전 수업에서 다룬 공정한 데이터 분석을 염두에 두고 조심스럽게 데이터를 수집하세요. 데이터 출처와 내재된 편향, 출처를 문서화하십시오.
- **데이터 준비**. 데이터 준비 과정에는 여러 단계가 있습니다. 서로 다른 출처에서 온 데이터를 정리하고 정규화할 필요가 있을 수 있습니다. 문자열을 숫자로 변환하는 등 다양한 방법으로 데이터 품질과 양을 개선할 수 있으며([클러스터링](../../5-Clustering/1-Visualize/README.md) 수업 참조) 원본 데이터를 기반으로 새 데이터를 생성할 수도 있습니다([분류](../../4-Classification/1-Introduction/README.md) 수업 참조). 데이터를 정리하고 편집할 수도 있으며([웹 앱](../../3-Web-App/README.md) 수업 전 작업), 훈련 기법에 따라 무작위화하고 섞을 수도 있습니다.
✅ 데이터를 수집하고 처리한 후, 데이터의 형태가 의도한 질문을 해결할 수 있는지 확인하세요. 데이터가 주어진 작업에서 잘 작동하지 않을 수도 있습니다. 이는 [클러스터링](../../5-Clustering/1-Visualize/README.md) 강의에서 발견됩니다!
✅ 데이터를 수집하고 처리한 후, 데이터의 형상(shape)이 질문에 잘 답할 수 있을지를 잠시 확인해 보세요. 데이터가 주어진 작업에 잘 작동하지 않을 수도 있다는 점은 [클러스터링](../../5-Clustering/1-Visualize/README.md) 수업에서 다룹니다!
### 특징과 목표
### 특성과 타깃
[특징](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection)은 데이터의 측정 가능한 속성입니다. 많은 데이터셋에서 '날짜', '크기', '색상'과 같은 열 제목으로 표현됩니다. 특징 변수는 일반적으로 코드에서 `X`로 표현되며, 모델을 훈련시키는 데 사용되는 입력 변수를 나타냅니다.
[특성(feature)](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection)은 데이터의 측정 가능한 속성입니다. 많은 데이터셋에서는 'date', 'size', 'color'와 같은 열 제목으로 표현됩니다. 특성 변수는 코드상 보통 `X`로 표기하며, 모델을 훈련시키기 위한 입력 변수를 나타냅니다.
목표는 예측하려는 것입니다. 목표는 일반적으로 코드에서 `y`로 표현되며, 데이터에 대해 질문하려는 것에 대한 답을 나타냅니다. 예를 들어, 12월에 가장 저렴한 **호박 색상**은 무엇인가? 샌프란시스코에서 가장 좋은 부동산 **가격**을 가진 지역은 어디인가? 목표는 때때로 레이블 속성이라고도 합니다.
타깃(target)은 예측하려는 것입니다. 타깃은 코드 내에서 보통 `y`로 표시되며, 예를 들어 12월에 어떤 <strong>색깔</strong> 호박이 가장 저렴할지, 샌프란시스코에서 어느 동네가 가장 좋은 부동산 <strong>가격</strong>을 가질지 등 데이터에 묻고자 하는 질문에 대한 답입니다. 때때로 타깃은 레이블(label) 속성이라고도 합니다.
### 특징 변수 선택
### 특성 변수 선택
🎓 **특징 선택과 특징 추출** 모델을 구축할 때 어떤 변수를 선택해야 할지 어떻게 알 수 있을까요? 아마도 특징 선택 또는 특징 추출 과정을 거쳐 가장 성능이 좋은 모델을 위한 적절한 변수를 선택하게 될 것입니다. 그러나 이 두 가지는 동일하지 않습니다: "특징 추출은 원래 특징의 함수에서 새로운 특징을 생성하는 반면, 특징 선택은 특징의 하위 집합을 반환합니다." ([출처](https://wikipedia.org/wiki/Feature_selection))
🎓 **특성 선택과 특성 추출** 모델을 만들 때 어떤 변수를 선택할지 어떻게 알까요? 최적의 성능을 위해 적절한 변수를 찾기 위해 특성 선택(feature selection) 또는 특성 추출(feature extraction) 과정을 거칩니다. 두 개념은 같지 않습니다: "특성 추출은 원래 특성의 함수에서 새로운 특성을 만드는 것이고, 특성 선택은 원래 특성의 서브셋을 선택하는 것입니다." ([출처](https://wikipedia.org/wiki/Feature_selection))
### 데이터 시각화
데이터 과학자의 도구 중 중요한 부분은 Seaborn이나 MatPlotLib과 같은 훌륭한 라이브러리를 사용하여 데이터를 시각화하는 능력입니다. 데이터를 시각적으로 표현하면 활용할 수 있는 숨겨진 상관관계를 발견할 수 있습니다. 시각화는 또한 편향이나 불균형 데이터를 발견하는 데 도움을 줄 수 있습니다(예: [분류](../../4-Classification/2-Classifiers-1/README.md) 강의에서 발견).
데이터 과학자의 툴킷에서 중요한 부분은 Seaborn이나 MatPlotLib 같은 훌륭한 라이브러리를 사용해 데이터를 시각화하는 기능입니다. 데이터 시각화는 사용할 수 있는 숨겨진 상관관계를 발견할 수 있게 도와줍니다. 또한 시각화를 통해 편향이나 불균형한 데이터도 찾아낼 수 있습니다([분류](../../4-Classification/2-Classifiers-1/README.md) 수업 참조).
### 데이터셋 분할
훈련 전에 데이터셋을 불균등한 크기로 두 부분 이상으로 나누어야 합니다. 이 데이터는 여전히 데이터를 잘 대표해야 합니다.
훈련 전에 데이터셋을 크기가 다르지만 데이터를 잘 대표할 수 있도록 두 개 이상의 부분으로 나누어야 합니다.
- **훈련**. 데이터셋의 이 부분은 모델을 훈련시키는 데 사용됩니다. 이 세트는 원래 데이터셋의 대부분을 차지합니다.
- **테스트**. 테스트 데이터셋은 원래 데이터에서 수집된 독립적인 데이터 그룹으로, 구축된 모델의 성능을 확인하는 데 사용됩니다.
- **검증**. 검증 세트는 모델의 하이퍼파라미터 또는 아키텍처를 조정하여 모델을 개선하는 데 사용되는 더 작은 독립적인 예제 그룹입니다. 데이터의 크기와 질문에 따라 이 세 번째 세트를 만들 필요가 없을 수도 있습니다(예: [시계열 예측](../../7-TimeSeries/1-Introduction/README.md) 강의에서 언급).
- **훈련(training)**. 데이터셋의 이 부분은 모델을 훈련시키는 데 적합하며 원본 데이터셋의 대부분을 차지합니다.
- **테스트(testing)**. 테스트 데이터셋은 독립적이고, 보통 원본 데이터에서 가져온 데이터 그룹이며, 구축된 모델의 성능을 확인하는 데 사용합니다.
- **검증(validating)**. 검증 세트는 하이퍼파라미터나 모델 구조를 조정하기 위한 작은 독립적 데이터 그룹입니다. 데이터 크기나 질문에 따라서는 검증 세트를 만들지 않아도 됩니다([시계열 예측](../../7-TimeSeries/1-Introduction/README.md)에서 참고).
## 모델 구축
훈련 데이터를 사용하여 목표는 다양한 알고리즘을 사용하여 데이터를 **훈련**시켜 모델, 즉 데이터의 통계적 표현을 구축하는 것입니다. 모델 훈련은 데이터를 노출시켜 발견된 패턴을 가정하고, 이를 검증하며, 수용하거나 거부할 수 있도록 합니다.
훈련 데이터를 사용해 여러 알고리즘으로 모델을 <strong>훈련</strong>시켜 데이터의 통계적 표현인 모델을 만드는 것이 목표입니다. 모델 훈련은 모델이 데이터 속의 패턴을 인식하고 가정하며 이를 검증하고 수용하거나 거부하는 과정을 포함합니다.
### 훈련 방법 결정
질문과 데이터의 특성에 따라 훈련 방법을 선택합니다. 이 강의에서 사용하는 [Scikit-learn의 문서](https://scikit-learn.org/stable/user_guide.html)를 살펴보면 모델을 훈련시키는 다양한 방법을 탐구할 수 있습니다. 경험에 따라 최적의 모델을 구축하기 위해 여러 가지 방법을 시도해야 할 수도 있습니다. 데이터 과학자들이 모델의 성능을 평가하기 위해 보지 못한 데이터를 제공하고, 정확성, 편향, 기타 품질 저하 문제를 확인하며, 주어진 작업에 가장 적합한 훈련 방법을 선택하는 과정을 거칠 가능성이 높습니다.
질문과 데이터 성격에 따라 훈련 방법을 선택합니다. 이 과정에서 본 강의에 사용되는 [Scikit-learn 문서](https://scikit-learn.org/stable/user_guide.html)에 따라 여러 훈련 방법을 탐색할 수 있습니다. 경험에 따라 최고의 모델을 구축하기 위해 여러 방법을 시도해야 할 수도 있습니다. 데이터 과학자들은 모델에 본 적 없는 데이터를 먹여 정확도, 편향, 기타 품질 저하 문제를 확인하고 가장 적절한 훈련 방법을 찾는 과정을 거칩니다.
### 모델 훈련
훈련 데이터를 가지고 모델을 '적합'시킬 준비가 되었습니다. 많은 ML 라이브러리에서 'model.fit'이라는 코드를 발견할 수 있습니다. 이 시점에서 특징 변수(일반적으로 'X')와 목표 변수(일반적으로 'y')를 값 배열로 전달합니다.
훈련 데이터를 바탕으로 모델을 '적합(fit)'시키도록 준비합니다. 많은 ML 라이브러리에서 'model.fit' 코드를 볼 수 있는데, 이때 특성 변수(X 배열)와 타깃 변수(y 배열)를 전달합니다.
### 모델 평가
훈련 과정이 완료되면(큰 모델을 훈련시키는 데는 여러 반복 또는 '에포크'가 필요할 수 있음), 테스트 데이터를 사용하여 모델의 품질을 평가할 수 있습니다. 이 데이터는 모델이 이전에 분석하지 않은 원래 데이터의 하위 집합입니다. 모델의 품질에 대한 메트릭 표를 출력할 수 있습니다.
훈련 과정이 완료되면(대형 모델은 여러 반복 또는 '에포크'가 필요) 테스트 데이터를 사용해 모델 성능을 평가할 수 있습니다. 테스트 데이터는 모델이 본 적 없는 원본 데이터의 일부입니다. 모델 품질에 관한 지표를 표로 출력할 수 있습니다.
🎓 **모델 적합**
머신 러닝의 맥락에서 모델 적합은 모델의 기본 함수가 익숙하지 않은 데이터를 분석하려는 시도의 정확성을 나타냅니다.
머신러닝 맥락에서 모델 적합은 익숙하지 않은 데이터를 분석하는 모델의 기본 함수 정확도를 의미합니다.
🎓 **과소적합**과 **과대적합**은 모델의 품질을 저하시키는 일반적인 문제로, 모델이 훈련 데이터에 대해 너무 잘 맞거나 너무 느슨하게 맞는 경우를 말합니다. 과대적합된 모델은 데이터의 세부 사항과 노이즈를 너무 잘 학습했기 때문에 훈련 데이터를 너무 잘 예측합니다. 과소적합된 모델은 훈련 데이터와 아직 '본 적 없는' 데이터를 정확히 분석할 수 없기 때문에 정확하지 않습니다.
🎓 <strong>과대적합(overfitting)</strong>과 <strong>과소적합(underfitting)</strong>은 모델 품질을 떨어뜨리는 흔한 문제입니다. 과대적합은 모델이 훈련 데이터의 세부사항과 잡음을 너무 잘 학습해 너무 밀접하게 맞춘 상태이고, 과소적합은 훈련 데이터나 본 적 없는 데이터를 모두 정확하게 분석하지 못하는 상태입니다.
> 인포그래픽 by [Jen Looper](https://twitter.com/jenlooper)
## 매개변수 조정
## 파라미터 조정
초기 훈련이 완료되면 모델의 품질을 관찰하고 '하이퍼파라미터'를 조정하여 개선을 고려합니다. 자세한 내용은 [문서](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott)를 참조하세요.
초기 훈련이 끝나면 모델 품질을 관찰하고 '하이퍼파라미터'를 조정해 성능을 개선할 수 있습니다. 관련 과정은 [문서](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott)에서 더 읽어보세요.
## 예측
이제 완전히 새로운 데이터를 사용하여 모델의 정확성을 테스트할 수 있는 순간입니다. '적용된' ML 환경에서는 모델을 프로덕션에서 사용하기 위해 웹 자산을 구축하는 과정이 포함될 수 있습니다. 이 과정은 사용자 입력(예: 버튼 클릭)을 수집하여 변수를 설정하고 모델에 추론 또는 평가를 위해 전달하는 것을 포함할 수 있습니다.
이제 완전히 새로운 데이터를 사용해 모델 정확도를 테스트할 차례입니다. 실제 ML 환경에서는 사용자 입력(예: 버튼 클릭)을 받아 변수를 설정하고 모델에 전송해 추론 또는 평가를 수행할 수 있습니다.
이 강의에서는 데이터 과학자로서의 제스처와 더불어 준비, 구축, 테스트, 평가, 예측하는 방법을 배우게 됩니다. 이는 '풀스택' ML 엔지니어로 성장하는 여정에서 중요한 단계입니다.
이번 수업 과정에서 여러분은 데이터 과학자가 하는 모든 과정—준비, 구축, 테스트, 평가, 예측—을 배우고, ‘풀스택’ ML 엔지니어로 가는 여정을 이어갑니다.
---
## 🚀도전
## 🚀도전 과제
ML 실무자의 단계들을 반영하는 흐름도를 그려보세요. 현재 프로세스에서 자신이 어디에 있다고 생각하나요? 어려움을 겪을 것으로 예상되는 부분은 어디인가요? 쉬워 보이는 부분은 무엇인가요?
ML 실무자의 단계별 플로우차트를 그려보세요. 지금 현재 자신은 어느 단계에 있다고 생각하나요? 어디서 어려움을 느낄 것 같나요? 어디가 가장 쉽다고 생각하나요?
## [강의 후 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
## [수업 후 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
## 복습 및 자기 학습
## 복습 및 자기 주도 학습
데이터 과학자가 자신의 일상 업무에 대해 이야기하는 인터뷰를 온라인에서 검색해 보세요. [여기](https://www.youtube.com/watch?v=Z3IjgbbCEfs)에 하나의 예가 있습니다.
데이터 과학자가 일상 업무에 대해 이야기하는 인터뷰를 온라인에서 찾아보세요. 여기에 [하나](https://www.youtube.com/watch?v=Z3IjgbbCEfs) 있습니다.
## 과제
[데이터 과학자 인터뷰하기](assignment.md)
[데이터 과학자 인터뷰](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**면책 조항**:
이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인한 오해나 잘못된 해석에 대해서는 책임지지 않습니다.
## [수업 전 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
> ### [이 수업은 R 버전으로도 제공됩니다!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
> ### [이 수업은 R 버전도 제공됩니다!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### 소개
지금까지 할로윈 호박 가격 데이터셋에서 샘플 데이터를 사용하며 회귀가 무엇인지 탐색했습니다. Matplotlib를 활용해 시각화도 했죠.
지금까지 호박 가격 데이터셋으로 수집한 샘플 데이터를 사용해 회귀가 무엇인지 탐구해 보았습니다. 또한 Matplotlib을 사용하여 시각화도 했습니다.
이제 머신러닝 회귀에 대해 더 깊이 들어갈 준비가 되었습니다. 시각화는 데이터를 이해하는 데 도움을 주지만, 머신러닝의 진정한 힘은 _모델 학습_에 있습니다. 모델은 역사적 데이터를 기반으로 학습하여 자동으로 데이터 의존성을 포착하고, 모델이 본 적 없는 새 데이터의 결과를 예측할 수 있도록 해줍니다.
이제 ML 회귀를 더 깊게 파고들 준비가 되었습니다. 시각화는 데이터를 이해하는 데 도움을 주지만, 머신러닝의 진짜 힘은 _모델 학습_에 있습니다. 모델은 과거 데이터를 기반으로 학습하여 데이터 간 종속 관계를 자동으로 파악하며, 모델이 본 적 없는 새로운 데이터에 대해서도 결과를 예측할 수 있습니다.
이번 수업에서는 _기본 선형 회귀_와 _다항 회귀_ 두 가지 회귀 유형과 관련 수학을 배웁니다. 이 모델들은 다양한 입력 데이터에 따라 호박 가격을 예측할 수 있게 해줍니다.
이번 수업에서는 _기본 선형 회귀_와 _다항 회귀_ 두 가지 유형과 이 기술들의 수학적 배경을 다룹니다. 이 모델들은 다양한 입력 데이터에 따라 호박 가격을 예측할 수 있게 해줍니다.
[](https://youtu.be/CRxFT8oTDMg "초보자를 위한 ML - 선형 회귀 이해")
[](https://youtu.be/CRxFT8oTDMg "ML 초보자를 위한 - 선형 회귀 이해")
> 🎥 위 이미지 클릭 시 선형 회귀 짧은 동영상 개요를 볼 수 있습니다.
> 🎥 위 이미지를 클릭하여 선형 회귀에 대한 짧은 영상 개요를 시청하세요.
> 이 교육 과정 전반에 걸쳐 수학 지식을 최소화하고, 타 분야 학생도 이해하기 쉽게 만들고자 합니다. 노트, 🧮 계산 설명, 다이어그램 등 다양한 학습 도구를 참고하세요.
> 이번 커리큘럼 전체에서 수학 지식은 최소한으로 가정하며, 다른 분야 배경의 학생들도 접근하기 쉽도록 노트, 🧮 설명, 도표 등 다양한 학습 도구를 제공합니다.
### 필수 준비 사항
### 선수 조건
지금까지 살펴본 할로윈 호박 데이터 구조에 익숙해졌을 것입니다. 본 수업의 _notebook.ipynb_ 파일에는 미리 불러오고 정제한 데이터가 있습니다. 여기서 호박 가격은 부셸 단위로 새 데이터프레임에 표시되어 있습니다. Visual Studio Code의 커널에서 이 노트북들을 실행할 수 있어야 합니다.
지금쯤이면 우리가 검토 중인 호박 데이터 구조에 익숙해야 합니다. 이 수업의 _notebook.ipynb_ 파일에 사전 로드되고 전처리된 데이터가 들어 있습니다. 해당 파일에서는 호박 가격을 버셜 단위로 나타내는 새 데이터프레임이 있습니다. Visual Studio Code 내 커널에서 이 노트북들을 실행할 수 있어야 합니다.
### 준비
데이터를 불러온 목적은 질문을 던지는 데 있습니다.
다시 상기시키자면, 이 데이터는 질문을 던지기 위해 로드됩니다.
- 언제가 호박을 사기에 가장 좋은 시기일까요?
- 미니어처 호박 한 케이스 가격은 얼마일까요?
- 반 부셸 바구니로 사야 할까요, 아니면 1 1/9 부셸 상자로 사야 할까요?
더 깊이 탐색해 봅시다.
- 호박을 사기에 가장 좋은 시기는 언제인가요?
- 미니어처 호박 한 상자의 예상 가격은 얼마인가요?
- 반 버셜 바구니로 사야 할까요, 아니면 1 1/9 버셜 박스로 사야 할까요?
지난 수업에서는 Pandas 데이터프레임을 만들고 원본 데이터셋 일부로 채우며, 부셸 단위 가격을 표준화했습니다. 하지만 이렇게 하다 보니 가을 몇 개월에 대해서만 약 400개의 데이터 포인트만 얻을 수 있었습니다.
계속 이 데이터를 탐구해 봅시다.
본 수업의 동봉된 노트북에 미리 불러온 데이터를 살펴보세요. 전처리가 완료되었고, 초기 산점도가 월별 데이터를 보여줍니다. 데이터를 더 정제하면 보다 상세한 통찰을 얻을 수 있을지도 모릅니다.
이전 수업에서는 Pandas 데이터프레임을 만들고 원본 데이터셋의 일부를 채우면서 가격을 버셜 당 단위로 표준화했습니다. 그러나 그렇게 하면서 약 400개의 데이터 포인트만 수집했고, 가을철 데이터만 다뤘습니다.
## 선형 회귀 직선
이번 수업과 함께 제공되는 노트북에 사전 로드된 데이터를 살펴보세요. 데이터가 로드되어 있고, 월별 데이터를 보여주는 초기 산점도가 그려져 있습니다. 데이터를 좀 더 정제해서 데이터의 성격에 대해 더 자세히 알아볼 수 있을지도 모릅니다.
1장에서 배운 바와 같이 선형 회귀 목표는 다음을 할 수 있는 직선을 그리는 것입니다:
## 선형 회귀선
- **변수 간 관계 표시**: 변수 간 관계를 보여줍니다.
- **예측 수행**: 새 데이터가 그 직선에서 어디에 위치할지 정확히 예측합니다.
수업 1에서 배웠듯, 선형 회귀의 목표는 다음과 같은 선을 그릴 수 있게 하는 것입니다.
일반적으로 <strong>최소 제곱 회귀</strong>에서 이런 선을 그립니다. "최소 제곱"이란 모델에서 전체 오류를 최소화하는 과정을 의미합니다. 각 데이터 포인트마다 실제 점과 회귀선 사이의 수직 거리(잔차라고 함)를 측정합니다.
- **변수 관계 표시**. 변수들 간의 관계를 보여줍니다.
- <strong>예측하기</strong>. 새 데이터가 그 선과 어떤 관계에 있을지 정확히 예측합니다.
여기서 제곱하는 이유는 두 가지입니다:
이 선을 그릴 때 보통 **최소 제곱 회귀** 방식을 사용합니다. "최소 제곱"이라는 용어는 모델의 전체 오차를 최소화하는 과정을 의미합니다. 각 데이터 포인트에서 실제 점과 회귀선 사이의 수직 거리를 잔차(residual)라 부르는데요,
1. **방향 무시, 크기만 고려:** -5와 +5의 오차를 동일하게 취급하기 위해 모든 값을 양수로 만듭니다.
2. **이상치 패널티:** 큰 오차가 더 크게 반영되어 선이 멀리 떨어진 점에 더 가깝게 위치하도록 합니다.
이 거리를 제곱하는 이유는 두 가지입니다:
이렇게 제곱한 값들을 모두 더한 합을 최소화하는 선을 찾는 것이 목표입니다.
1. **크기는 유지하고 방향은 무시**: -5의 오차를 +5와 동일하게 취급하기 위해 모든 값을 양수로 만듭니다.
> **🧮 수학 공식 보여드리기**
>
> 최적 직선은 [다음 식](https://en.wikipedia.org/wiki/Simple_linear_regression)으로 나타낼 수 있습니다:
>
2. **이상치에 가중치 부여**: 큰 오차에 더 많은 페널티를 줘서 선이 멀리 떨어진 점들에 가까이 머무르도록 합니다.
이 제곱 거리들을 모두 합산하고, 그 합이 가장 작은 특정 선을 찾는 것이 목표입니다. 그래서 "최소 제곱"이라는 이름이 붙었습니다.
> **🧮 수학적으로 보기**
> 이 선은 _최적 적합선_이라 불리며, 다음과 같은 [방정식](https://en.wikipedia.org/wiki/Simple_linear_regression)으로 표현됩니다:
> `Y` 값을 계산하세요. 약 $4라면 4월일 것입니다! 인포그래픽: [Jen Looper](https://twitter.com/jenlooper)
>
> 기울기뿐 아니라, `X=0`인 경우 `Y` 위치를 의미하는 절편도 계산식에 포함됩니다.
>
> 이 값 계산법은 [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) 사이트에서 상세히 볼 수 있습니다. [이 최소제곱 계산기](https://www.mathsisfun.com/data/least-squares-calculator.html)로 숫자 변화가 선에 미치는 영향도 확인하세요.
## 상관관계
더 알아야 할 용어는 주어진 X와 Y 변수 간의 <strong>상관계수</strong>입니다. 산점도를 통해 쉽게 시각화할 수 있습니다. 데이터 포인트가 정렬된 직선에 가깝게 흩어져 있으면 강한 상관관계이고, 산만히 흩어져 있으면 약한 상관관계입니다.
좋은 선형 회귀 모델은 최소 제곱 회귀 방식으로 높은(0보다 1에 가까운) 상관계수를 갖습니다.
✅ 이번 수업 노트북을 실행하여 월별 가격 산점도를 봅시다. 호박 판매의 월별 가격 데이터가 산점도 시각판단상 상관관계가 높은가요, 아니면 낮은가요? `Month` 대신 연중 날짜(즉, 연도 시작부터의 일수) 같은 더 세분화된 변수를 이용하면 결과가 바뀔까요?
다음 코드는 데이터 정제 후 `new_pumpkins`라는 데이터프레임을 얻었다고 가정합니다:
ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
> `Y` 값을 계산합니다. 가격이 약 $4라면 아마도 4월일 것입니다! 인포그래픽 제공: [Jen Looper](https://twitter.com/jenlooper)
>
> 이 선을 계산하는 수학은 기울기를 기준으로 하며, 절편 또는 `X=0`일 때 `Y`가 어디에 위치하는지를 반영합니다.
>
> 계산 방법은 [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) 사이트를 참고하세요. 또한 [이 최소제곱 계산기](https://www.mathsisfun.com/data/least-squares-calculator.html)에서 숫자 값이 선에 어떻게 영향을 미치는지 시각적으로 보실 수 있습니다.
## 상관관계
한 가지 더 이해해야 할 용어는 주어진 X와 Y 변수 간의 <strong>상관계수</strong>입니다. 산점도를 사용하면 이 계수를 빠르게 시각화할 수 있습니다. 점들이 깔끔한 직선상에 흩어져 있으면 높은 상관관계이고, 점들이 X와 Y 사이에 무작위로 분포하면 상관관계가 낮다고 볼 수 있습니다.
좋은 선형 회귀 모델은 최소제곱 회귀법을 적용했을 때 상관계수가 높게(0보다는 1에 가까운 값) 나와야 합니다.
✅ 이 수업과 함께 제공되는 노트북을 실행하여 월별-가격 산점도를 확인해 보세요. 월별과 가격 사이의 호박 판매 데이터가 산점도 시각적 해석에 따라 상관관계가 높아 보이나요, 아니면 낮아 보이나요? 만약 `Month` 대신 연중 며칠째인지(*day of the year*)와 같은 상세한 측정치를 사용하면 결과가 달라지나요?
아래 코드에서는 데이터가 깨끗이 전처리되어, `new_pumpkins`라는 이름의 데이터프레임이 생성된 것으로 가정하겠습니다. 해당 데이터프레임 예시는 다음과 같습니다:
ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
`Month` 상관계수는 -0.15, `DayOfMonth`는 -0.17로 낮은 편입니다. 하지만 호박 품종별로 가격 군집이 다른 관계가 있을 수도 있습니다. 이를 확인하기 위해 각 호박 종류를 다른 색깔로 표시해 봅시다. `scatter` 함수에 `ax` 매개변수를 주어 한 그래프에 모든 점을 표시할 수 있습니다:
상관관계는 `Month` 기준으로 -0.15, `DayOfYear` 기준으로 -0.17로 꽤 작지만, 중요한 또 다른 관계가 있을 수 있습니다. 가격이 서로 다른 호박 품종별로 군집을 이루는 것처럼 보이기 때문입니다. 이 가설을 확인하려면 호박 카테고리별로 다른 색상을 사용하는 산점도를 함께 그려 봅니다. `scatter` 함수에 `ax` 매개변수를 전달해서 모든 점을 하나의 그래프에 그릴 수 있습니다:
```python
ax=None
@ -139,42 +140,43 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()):
<imgalt="가격 vs 연중 일수 산점도"src="../../../../translated_images/ko/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
<imgalt="연중일 대 가격 산점도 (파이 호박)"src="../../../../translated_images/ko/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
`Price`와 `DayOfYear` 상관관계를 `corr` 함수로 계산하면 약 `-0.27`이 나옵니다. 이는 예측 모델 학습이 타당함을 의미합니다.
`corr` 함수를 이용해 `Price`와 `DayOfYear` 간의 상관관계를 계산하면 약 `-0.27`이 나와 예측 모델 학습에 의미가 있음을 알 수 있습니다.
> 선형 회귀 모델을 훈련하기 전, 데이터 정리가 중요합니다. 선형 회귀는 결측치가 있으면 잘 작동하지 않으므로, 빈 셀을 제거하는 것이 좋습니다:
> 선형 회귀 모델을 학습시키기 전에 데이터가 깨끗한지 확인하는 것이 중요합니다. 선형 회귀는 결측값에 취약하기 때문에 빈 셀을 모두 제거하는 것이 좋습니다:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
결측치를 해당 열 평균값으로 채우는 방법도 있습니다.
또는 해당 열의 평균값으로 빈 값을 채우는 방법도 있습니다.
## 단순 선형 회귀
[](https://youtu.be/e4c_UP2fSjg "초보자를 위한 ML - Scikit-learn을 사용한 선형 및 다항 회귀")
[](https://youtu.be/e4c_UP2fSjg "ML 초보자를 위한 - Scikit-learn을 사용한 선형 및 다항 회귀")
> 🎥 위 이미지 클릭 시 선형 및 다항 회귀 짧은 동영상 개요 시청
> 🎥 위 이미지를 클릭하여 선형 및 다항 회귀에 대한 짧은 영상 개요를 시청하세요.
선형 회귀 모델 훈련에 **Scikit-learn** 라이브러리를 사용하겠습니다.
선형 회귀 모델 학습에는 **Scikit-learn** 라이브러리를 사용합니다.
```python
from sklearn.linear_model import LinearRegression
@ -182,31 +184,31 @@ from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
입력값(특징)과 결과값(레이블)을 별개의 numpy 배열로 나눕니다:
입력값(특징)과 출력값(레이블)을 별개의 numpy 배열로 분리합니다:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> Linear Regression 패키지가 데이터를 올바로 인식하려면 입력 데이터를 `reshape` 해야 합니다. Linear Regression은 입력을 2D 배열로 기대하며, 배열의 각 행이 입력 특징 벡터입니다. 여기선 입력이 하나뿐이므로, 크기 N×1 배열이어야 합니다(N은 데이터셋 크기).
> 선형 회귀 패키지가 데이터를 제대로 인식하도록 입력 데이터를 `reshape` 했다는 점에 유의하세요. 선형 회귀는 2차원 배열을 입력으로 받으며, 배열의 각 행은 하나의 입력 벡터입니다. 여기서는 입력이 하나뿐이므로 배열의 형태는 N×1이어야 하며, N은 데이터셋 크기입니다.
그다음, 훈련 데이터와 테스트 데이터로 나누어 모델 검증에 사용합니다:
그 다음, 데이터를 훈련용과 테스트용으로 분리하여 학습 후 모델을 검증할 수 있게 합니다:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
마지막으로 Linear Regression 모델을 훈련하는 코드는 단 두 줄입니다. `LinearRegression` 객체를 만들고, `fit` 메서드로 데이터를 학습합니다:
마지막으로 실제 선형 회귀 모델을 학습시키는 코드는 아주 간단합니다. `LinearRegression` 객체를 정의하고, `fit` 메서드로 데이터를 학습시킵니다:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
`fit` 후의 `LinearRegression` 객체는 회귀의 모든 계수를 포함하며 `.coef_` 속성을 사용해 접근할 수 있습니다. 우리 경우에는 계수가 하나뿐이며, 약 `-0.017` 정도일 것입니다. 이는 가격이 시간이 지남에 따라 약간씩 떨어지는 경향이 있지만 하루에 약 2센트 정도로 크게 떨어지지는 않는다는 뜻입니다. 또한 회귀의 Y축과의 교차점은 `lin_reg.intercept_`로 접근할 수 있는데, 우리 경우에는 약 `21`이 되어 연초의 가격을 나타냅니다.
`LinearRegression` 객체는 `fit` 후에 회귀 계수를 모두 포함하며, `.coef_` 속성을 통해 접근할 수 있습니다. 우리의 경우, 계수는 하나이고 대략 `-0.017` 정도일 것입니다. 이는 가격이 시간이 지남에 따라 약간 떨어지는 경향이 있음을 의미하며, 하루에 약 2센트 정도 하락하는 것으로 해석할 수 있습니다. 또한 `lin_reg.intercept_`를 사용하여 회귀선이 Y축과 만나는 교차점을 확인할 수 있는데, 이 값은 우리 예제에서 대략 `21` 정도로 연초 가격을 나타냅니다.
모델의 정확도를 확인하려면 테스트 데이터셋에 대해 가격을 예측하고, 예측값이 기대값과 얼마나 가까운지 측정하면 됩니다. 이는 예상값과 예측값 사이 모든 제곱 차이의 평균의 제곱근인 root mean square error(RMSE) 지표로 측정할 수 있습니다.
모델이 얼마나 정확한지 확인하려면, 테스트 데이터셋에 대해 가격을 예측하고, 예측 값과 실제 값이 얼마나 가까운지 측정할 수 있습니다. 이는 RMSE(root mean square error) 지표를 사용해 할 수 있는데, RMSE는 예상 값과 예측 값의 모든 제곱 차이의 평균의 제곱근입니다.
오차는 약 2포인트, 즉 약 17% 정도로 보입니다. 그리 좋지 않군요. 모델 품질의 또 다른 지표는 <strong>결정 계수(coefficient of determination)</strong>로, 다음과 같이 얻을 수 있습니다:
우리의 오류는 대략 2점 정도로, 약 17% 정도입니다. 그렇게 좋지 않네요. 모델 품질의 또 다른 지표는 **결정 계수(coefficient of determination)** 로, 다음과 같이 구할 수 있습니다:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
결정 계수가 0이라면 모델이 입력 데이터를 전혀 고려하지 않고 결과의 단순 평균값만을 예측하는 <em>최악의 선형 예측자</em>임을 의미합니다. 1이라면 모든 기대 출력값을 완벽하게 예측한다는 뜻입니다. 우리 경우 결정 계수는 약 0.06으로 꽤 낮습니다.
값이 0이라면, 모델이 입력 데이터를 전혀 반영하지 않고 결과의 단순 평균으로만 작동하는 <em>최악의 선형 예측기</em>임을 의미합니다. 값이 1이면 모든 예상 결과를 완벽히 예측할 수 있다는 뜻입니다. 우리 경우 결정 계수는 약 0.06으로, 상당히 낮은 편입니다.
선형 회귀의 또 다른 유형은 다항 회귀입니다. 때때로 변수들 간에 선형 관계가 존재할 수 있지만 — 예를 들어 호박 부피가 크면 가격이 높아지는 것처럼 — 때로는 관계가 평면이나 직선으로 나타내기 어려울 때가 있습니다.
선형 회귀의 또 다른 유형은 다항 회귀입니다. 변수들 사이에 선형 관계가 있을 때도 있지만, 예를 들어 호박 부피가 클수록 가격이 높아지는 것처럼, 어떤 경우는 이러한 관계가 평면이나 직선으로 표현되지 않을 수도 있습니다.
✅ 여기에 [다항 회귀에 적합한 데이터의 몇 가지 예](https://online.stat.psu.edu/stat501/lesson/9/9.8)가 있습니다.
✅ 다항 회귀가 필요한 [더 많은 예시](https://online.stat.psu.edu/stat501/lesson/9/9.8)를 확인해보세요.
다시 `Date`와 `Price` 관계를 살펴봅시다. 이 산점도가 반드시 직선으로 분석되어야 할까요? 가격이 변동할 수는 없을까요? 이런 경우에는 다항 회귀를 시도할 수 있습니다.
Date와 Price 사이 관계를 다시 보세요. 이 산점도가 꼭 직선으로 분석되어야 할까요? 가격이 오르락내리락 할 수도 있지 않을까요? 이런 경우 다항 회귀를 시도해볼 수 있습니다.
✅ 다항식은 하나 이상의 변수와 계수로 구성된 수학적 표현입니다.
✅ 다항식은 하나 이상의 변수와 계수로 구성될 수 있는 수학 표현식입니다.
다항 회귀는 비선형 데이터를 더 잘 맞추기 위해 곡선을 생성합니다. 우리 경우에 `DayOfYear`의 제곱 변수를 입력 데이터에 포함하면, 연중 특정 시점에 최소값이 있는 포물선 곡선으로 데이터를 맞출 수 있습니다.
다항 회귀는 곡선을 만들어 비선형 데이터에 더 잘 맞춥니다. 우리 경우, 입력 데이터에 제곱된 `DayOfYear` 변수를 포함하면, 연도 내 특정 지점에 최소값을 갖는 포물선 형태를 데이터에 맞출 수 있습니다.
Scikit-learn에는 여러 데이터 처리 단계를 결합하는 데 유용한 [파이프라인 API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline)가 포함되어 있습니다. <strong>파이프라인</strong>은 <strong>추정기(estimators)</strong>의 연결 고리입니다. 우리 경우 다항 특성을 먼저 추가하고 회귀를 학습하는 파이프라인을 생성할 것입니다:
Scikit-learn에는 여러 데이터 처리 단계를 결합하는 유용한 [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline)가 포함되어 있습니다. <strong>파이프라인</strong>은 **추정기(estimator)** 체인입니다. 우리 경우에는 먼저 다항 특성을 추가하고 회귀를 학습하는 파이프라인을 만들 것입니다:
```python
from sklearn.preprocessing import PolynomialFeatures
`PolynomialFeatures(2)`를 사용하면 입력 데이터의 모든 2차 다항식이 포함됩니다. 우리 경우는 `DayOfYear`<sup>2</sup>가 될 것이며, 만약 두 입력 변수 X, Y가 있다면 X<sup>2</sup>, XY, Y<sup>2</sup>가 추가됩니다. 필요하다면 더 높은 차수의 다항식도 사용할 수 있습니다.
`PolynomialFeatures(2)`를 사용하면 입력 데이터에서 모든 2차 다항식을 포함하겠다는 뜻입니다. 우리 예에서는 `DayOfYear`<sup>2</sup>뿐이지만, 두 변수 X와 Y가 있다면 X<sup>2</sup>, XY, Y<sup>2</sup>를 포함할 것입니다. 더 높은 차수 다항식도 사용할 수 있습니다.
파이프라인은 원래의 `LinearRegression` 객체처럼 사용할 수 있습니다. 즉, 파이프라인을 `fit`한 뒤 `predict`를 통해 예측값을 얻을 수 있습니다:
다항 회귀를 사용하면 MSE가 약간 낮아지고 결정 계수가 높아지긴 하지만 크게 차이나진 않습니다. 더 정확한 예측을 위해서는 다른 피처도 고려해야 합니다!
다항 회귀를 사용하면 RMSE는 약간 낮아지고 결정 계수는 약간 올라가지만 큰 차이는 없습니다. 다른 특성들도 고려할 필요가 있습니다!
> 할로윈 무렵 최소 호박 가격이 관찰된다는 점을 알 수 있습니다. 어떻게 설명할 수 있을까요?
> 최소 호박 가격이 할로윈 즈음에 관찰되는 것을 볼 수 있네요. 이를 어떻게 설명할 수 있을까요?
🎃 축하합니다, 당신은 호박 가격을 예측하는 모델을 만들었습니다. 아마도 모든 호박 종류에 대해 같은 절차를 반복할 수 있겠지만 이는 매우 번거롭습니다. 이제 호박 품종을 모델에 반영하는 방법을 배우겠습니다!
🎃 축하합니다! 여러분은 파이 호박 가격 예측에 도움이 되는 모델을 만들었습니다. 모든 호박 종류에 대해 같은 과정을 반복할 수 있지만, 그것은 번거로울 수 있습니다. 이제 호박 품종을 모델에 반영하는 방법을 배워봅시다!
## 범주형 특성 (Categorical Features)
## 범주형 특성(Categorical Features)
이상적으로는 동일한 모델로 다양한 호박 품종의 가격을 예측할 수 있길 원합니다. 하지만 `Variety` 열은 `Month` 같은 열과 달리 수치 데이터가 아닌 값을 포함합니다. 이런 열을 **범주형(categorical)** 이라고 합니다.
이상적인 세계에서는 같은 모델로 다양한 호박 품종의 가격을 예측할 수 있길 원합니다. 하지만 `Variety` 열은 `Month` 같은 숫자형 열과 달리 비숫자 값을 포함하고 있어 <strong>범주형</strong> 열로 불립니다.
[](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 위 이미지를 클릭하면 범주형 특성 활용에 대한 간단한 동영상을 볼 수 있습니다.
> 🎥 위 이미지 클릭하면 범주형 특성 사용에 관한 짧은 영상 개요를 볼 수 있습니다.
다음은 품종별 평균 가격입니다:
<imgalt="Average price by variety"src="../../../../translated_images/ko/price-by-variety.744a2f9925d9bcb4.webp"width="50%"/>
품종을 고려하려면 먼저 품종을 숫자형으로 변환하거나<strong>인코딩</strong>해야 합니다. 인코딩하는 방법은 여러 가지가 있습니다:
품종을 반영하려면 먼저 숫자 형태로 변환하거나, 즉<strong>인코딩</strong> 해야 합니다. 여러 인코딩 방법이 있습니다:
* 간단한 **숫자 인코딩(numeric encoding)** 은 다른 품종을 테이블로 만들고 품종명을 해당 인덱스로 대체하는 방법입니다. 이는 선형 회귀에는 적합하지 않은데, 선형 회귀는 인덱스의 수치값을 실제 값으로 받아들이고 계수를 곱해 결과에 더하기 때문입니다. 우리 경우 인덱스 번호와 가격의 관계는 명백히 비선형이므로 인덱스 순서가 선형 회귀에 적합하지 않습니다.
* **원-핫 인코딩(one-hot encoding)** 은 `Variety` 열을 각 품종마다 한 개씩 총 4개의 열로 분리합니다. 각 열은 해당 행이 그 품종이면 `1`, 아니면 `0`을 가집니다. 이로 인해 선형 회귀는 네 개의 결정 계수를 갖게 되어 각각 품종마다 "기본 가격"(또는 "추가 가격")을 나타내게 됩니다.
* 간단한 <strong>숫자 인코딩</strong>은 서로 다른 품종 테이블을 만들고, 품종 이름을 테이블 내 인덱스로 대체합니다. 하지만 선형 회귀에는 최적의 방법이 아닙니다. 선형 회귀는 인덱스의 숫자 값을 실제 수치로 받아들이고 계수를 곱해 결과에 더하기 때문입니다. 인덱스와 가격 사이의 관계는 비선형적일 가능성이 큽니다.
* <strong>원-핫 인코딩</strong>은 `Variety` 열을 4개 열로 나누고, 각 품종마다 한 열씩 만듭니다. 해당 행이 특정 품종이면 1, 아니면 0을 넣습니다. 이렇게 하면 각 품종마다 계수가 하나씩 생겨, 각기 다른 "기본 가격"(정확히는 각각 품종의 "추가 가격")을 나타내는 계수가 생깁니다.
원-핫 인코딩된 품종을 입력으로 하여 선형 회귀를 학습시키려면, `X`와 `y` 데이터를 적절히 초기화하기만 하면 됩니다:
원-핫 인코딩한 품종을 입력으로 하여 선형 회귀를 훈련하려면, `X`와 `y` 데이터를 올바르게 초기화하기만 하면 됩니다:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
나머지 코드는 위에서 선형 회귀를 학습할 때 사용한 것과 동일합니다. 시도해 보면 평균 제곱 오차는 비슷하지만 결정 계수가 훨씬 높아져 약 77%에 이릅니다. 더욱 정확한 예측을 위해서는 추가 범주형 특성과 `Month`, `DayOfYear` 같은 숫자 특성도 함께 고려할 수 있습니다. 모든 피처를 하나의 큰 배열로 합치려면 `join`을 사용할 수 있습니다:
나머지 코드는 위에서 쓴 선형 회귀 학습 코드와 같습니다. 실행해 보면 평균 제곱 오차는 비슷하지만 결정 계수가 훨씬 높아진 것을 볼 수 있습니다 (~77%). 더 정확한 예측을 위해서는 더 많은 범주형 특성과 `Month` 혹은 `DayOfYear` 같은 숫자형 특성도 함께 고려해야 합니다. 하나의 큰 특성 배열로 만들려면 `join`을 사용할 수 있습니다:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -318,14 +342,14 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
y = new_pumpkins['Price']
```
여기서는 `City`와 `Package` 타입도 포함하여 MSE 2.84 (10%), 결정 계수 0.94가 나옵니다!
여기서는 `City`와 `Package` 타입도 반영해 RMSE는 2.84 (10.5%), 결정 계수는 0.94가 되었습니다!
## 모두 함께 합치기
## 모두 합치기
최종 모델에는 위의 범주형 원-핫 인코딩 데이터와 숫자 데이터를 다항 회귀와 함께 사용합니다. 편의를 위해 전체 코드는 다음과 같습니다:
가장 좋은 모델을 만들기 위해 위 예시에서처럼 (원-핫 인코딩된 범주형 + 숫자형) 데이터를 다항 회귀와 함께 사용할 수 있습니다. 아래는 편의를 위한 완전한 코드입니다:
```python
# 학습 데이터 설정
# 훈련 데이터 설정
X = pd.get_dummies(new_pumpkins['Variety']) \
.join(new_pumpkins['Month']) \
.join(pd.get_dummies(new_pumpkins['City'])) \
@ -335,43 +359,43 @@ y = new_pumpkins['Price']
# 학습-테스트 분할 수행
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
이렇게 하면 거의 97%의 최고 결정 계수와 MSE=2.23 (약 8% 예측 오차)를 얻을 수 있습니다.
이렇게 하면 결정 계수가 거의 97%에 도달하고, RMSE는 2.23 (예측 오류 약 8%)이 됩니다.
| 모델 | MSE | 결정 계수 |
| 모델 | RMSE | 결정 계수 |
|-------|-----|---------------|
| `DayOfYear` 선형 | 2.77 (17.2%) | 0.07 |
| `DayOfYear` 다항 | 2.73 (17.0%) | 0.08 |
| `Variety` 선형 | 5.24 (19.7%) | 0.77 |
| 전체 특성 선형 | 2.84 (10.5%) | 0.94 |
| 전체 특성 다항 | 2.23 (8.25%) | 0.97 |
| 모든 특성 선형 | 2.84 (10.5%) | 0.94 |
| 모든 특성 다항 | 2.23 (8.25%) | 0.97 |
🏆 훌륭합니다! 한 수업에서 네 가지 회귀 모델을 만들고 모델 품질을 97%까지 향상시켰습니다. 마지막 회귀 섹션에서는 범주 분류를 위한 로지스틱 회귀에 대해 배울 것입니다.
🏆 잘했습니다! 한 강의에서 네 가지 회귀 모델을 만들고 모델 품질을 97% 수준으로 끌어올렸습니다. 회귀의 마지막 부분에서는 분류를 위한 로지스틱 회귀를 배울 것입니다.
---
## 🚀도전 과제
이 노트북에서 여러 변수를 시험하여 상관관계가 모델 정확도에 어떻게 대응하는지 확인해 보세요.
이 노트북에서 여러 변수를 테스트하여 상관관계가 모델 정확도와 어떻게 연결되는지 확인해보세요.
## [강의 후 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
## 복습 및 자기 주도 학습
## 복습 및 자습
이번 수업에서는 선형 회귀에 대해 배웠습니다. 회귀에는 다른 중요한 유형도 있습니다. 단계별 회귀(Stepwise), 릿지(Ridge), 라쏘(Lasso), 엘라스틱넷(Elasticnet) 기법을 공부해 보세요. 더 자세히 배우고 싶다면 [스탠퍼드 통계학습 과정](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)이 좋은 코스입니다.
이번 강의에서는 선형 회귀를 배웠습니다. 회귀에는 다른 중요한 유형들도 있습니다. 단계별, 릿지, 라쏘, 엘라스틱넷 기법에 대해 공부해보세요. 더 배우고 싶다면 [스탠포드 통계학습 과정](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)을 추천합니다.
이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있으나 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의해 주시기 바랍니다. 원본 문서는 해당 원어로 된 문서가 권위 있는 출처로 간주되어야 합니다. 중요한 정보의 경우 전문 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해서는 당사가 책임지지 않습니다.
이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 양지하시기 바랍니다. 원본 문서는 원어로 된 원본 문서를 권위 있는 출처로 간주해야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 본 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
"이상적인 상황에서는 동일한 모델을 사용하여 다양한 호박 품종의 가격을 예측할 수 있기를 원합니다. 품종을 고려하기 위해서는 먼저 이를 숫자 형태로 변환하거나 **인코딩**해야 합니다. 이를 수행하는 방법은 여러 가지가 있습니다:\n",
"이상적인 세상에서는 동일한 모델을 사용하여 다양한 호박 품종의 가격을 예측할 수 있기를 원합니다. 품종을 고려하려면 먼저 이를 숫자 형태로 변환하거나, <strong>인코딩</strong>해야 합니다. 이를 수행하는 방법은 여러 가지가 있습니다:\n",
"\n",
"* 간단한 숫자 인코딩은 다양한 품종의 테이블을 생성한 다음, 품종 이름을 해당 테이블의 인덱스로 대체하는 방식입니다. 하지만 선형 회귀에는 적합하지 않은 방법입니다. 왜냐하면 선형 회귀는 인덱스의 숫자 값을 고려하는데, 이 숫자 값이 가격과 수치적으로 상관관계가 없을 가능성이 높기 때문입니다.\n",
"* 원-핫 인코딩은 `Variety` 열을 4개의 다른 열로 대체하며, 각 품종에 대해 하나의 열을 생성합니다. 해당 행이 특정 품종에 속하면 1을, 그렇지 않으면 0을 포함합니다.\n",
"* 간단한 숫자 인코딩은 서로 다른 품종의 테이블을 만들고, 품종 이름을 그 테이블 내 인덱스로 대체합니다. 이는 선형 회귀에는 최선의 방법이 아닙니다. 왜냐하면 선형 회귀는 인덱스의 숫자 값을 고려하는데, 숫자 값이 가격과 수치적으로 상관관계가 있을 가능성이 낮기 때문입니다.\n",
"* 원-핫 인코딩은 `Variety` 열을 4개의 서로 다른 열로 대체하는 방법으로, 각 품종마다 하나씩의 열을 가지며, 해당 행이 특정 품종일 경우 1, 그렇지 않으면 0을 포함합니다.\n",
"\n",
"아래 코드는 품종을 원-핫 인코딩하는 방법을 보여줍니다:\n"
]
@ -938,9 +947,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### 다양한 품종에 대한 선형 회귀\n",
"### 품종에 대한 선형 회귀\n",
"\n",
"이제 위와 동일한 코드를 사용할 것이지만, `DayOfYear` 대신 원-핫 인코딩된 품종을 입력으로 사용하겠습니다:\n"
"이제 위의 코드와 동일한 코드를 사용하지만, `DayOfYear` 대신 원-핫 인코딩된 품종을 입력으로 사용할 것입니다:\n"
]
},
{
@ -988,7 +997,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"우리는 또한 동일한 방식으로 다른 기능들을 사용해보고, `Month`나 `DayOfYear`와 같은 수치형 기능들과 결합할 수 있습니다:\n"
"우리는 또한 동일한 방식으로 다른 특징들을 사용해보고, `Month`나 `DayOfYear`와 같은 수치형 특징들과 결합할 수 있습니다:\n"
]
},
{
@ -1021,7 +1030,7 @@
"source": [
"### 다항 회귀\n",
"\n",
"다항 회귀는 원-핫 인코딩된 범주형 특성과 함께 사용할 수도 있습니다. 다항 회귀를 학습시키는 코드는 위에서 본 것과 본질적으로 동일합니다.\n"
"다항 회귀는 원-핫 인코딩된 범주형 특성에도 사용할 수 있습니다. 다항 회귀를 학습하는 코드는 위에서 본 것과 본질적으로 동일합니다.\n"
]
},
{
@ -1068,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\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-OPTRANSLATOR DISCLAIMER END -->\n"