chore(i18n): sync translations with latest source changes (chunk 1/1, 12 changes)

pull/974/head
localizeflow[bot] 4 months ago
parent d540bd85cd
commit a4a49aa873

@ -36,8 +36,8 @@
"language_code": "hi"
},
"1-Introduction/4-techniques-of-ML/README.md": {
"original_hash": "9d91f3af3758fdd4569fb410575995ef",
"translation_date": "2025-09-05T10:23:54+00:00",
"original_hash": "84b1715a6be62ef1697351dcc5d7b567",
"translation_date": "2026-04-26T20:43:41+00:00",
"source_file": "1-Introduction/4-techniques-of-ML/README.md",
"language_code": "hi"
},
@ -90,8 +90,8 @@
"language_code": "hi"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "26c53a922f1f1e8542b0ea41ff52221a",
"translation_date": "2026-04-20T16:46:03+00:00",
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T20:43:13+00:00",
"source_file": "2-Regression/3-Linear/README.md",
"language_code": "hi"
},
@ -107,6 +107,12 @@
"source_file": "2-Regression/3-Linear/solution/Julia/README.md",
"language_code": "hi"
},
"2-Regression/3-Linear/solution/notebook.ipynb": {
"original_hash": "6781223ffbe8cfdaa38d0200f08e1288",
"translation_date": "2026-04-26T20:38:37+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "hi"
},
"2-Regression/4-Logistic/README.md": {
"original_hash": "abf86d845c84330bce205a46b382ec88",
"translation_date": "2025-09-05T10:14:06+00:00",

@ -1,117 +1,117 @@
# मशीन लर्निंग की तकनीकें
मशीन लर्निंग मॉडल और उनके उपयोग और रखरखाव की प्रक्रिया अन्य विकास वर्कफ़्लो से काफी अलग होती है। इस पाठ में, हम इस प्रक्रिया को सरल बनाएंगे और उन मुख्य तकनीकों को समझाएंगे जिन्हें आपको जानना चाहिए। आप:
मशीन लर्निंग मॉडल बनाने, उपयोग करने, और बनाए रखने की प्रक्रिया और उनके द्वारा उपयोग किए गए डेटा की प्रक्रिया कई अन्य विकास वर्कफ़्लो से बहुत अलग होती है। इस पाठ में, हम इस प्रक्रिया को सरल बनाएंगे और मुख्य तकनीकों का सारांश प्रस्तुत करेंगे जिन्हें आपको जानना आवश्यक है। आप:
- मशीन लर्निंग की प्रक्रियाओं को उच्च स्तर पर समझेंगे।
- 'मॉडल', 'प्रेडिक्शन', और 'ट्रेनिंग डेटा' जैसे मूलभूत अवधारणाओं का अन्वेषण करेंगे।
- उच्च स्तर पर मशीन लर्निंग के पीछे की प्रक्रियाओं को समझेंगे।
- 'मॉडल', 'पूर्वानुमान', और 'प्रशिक्षण डेटा' जैसे मूल अवधारणाओं का अन्वेषण करेंगे।
## [प्री-लेक्चर क्विज़](https://ff-quizzes.netlify.app/en/ml/)
[![मशीन लर्निंग के लिए शुरुआती - मशीन लर्निंग की तकनीकें](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "मशीन लर्निंग के लिए शुरुआती - मशीन लर्निंग की तकनीकें")
[![ML for beginners - Techniques of Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](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', लग सकते हैं), आप टेस्ट डेटा का उपयोग करके मॉडल की गुणवत्ता का मूल्यांकन करने में सक्षम होंगे ताकि इसके प्रदर्शन का आकलन किया जा सके। यह डेटा मूल डेटा का एक उपसमुच्चय है जिसे मॉडल ने पहले कभी विश्लेषण नहीं किया है। आप अपने मॉडल की गुणवत्ता के बारे में मेट्रिक्स की एक तालिका प्रिंट कर सकते हैं।
जब प्रशिक्षण प्रक्रिया पूरी हो जाती है (एक बड़े मॉडल को प्रशिक्षित करने में कई पुनरावृत्तियां, या 'एपोक' लग सकते हैं), आप परीक्षण डेटा का उपयोग करके मॉडल की गुणवत्ता का मूल्यांकन कर पाएंगे। यह डेटा मूल डेटा का एक उपसमुच्चय होता है जिसे मॉडल ने पहले कभी विश्लेषित नहीं किया होता। आप अपने मॉडल की गुणवत्ता पर मेट्रिक्स की तालिका भी प्रिंट कर सकते हैं।
🎓 **मॉडल फिटिंग**
मशीन लर्निंग के संदर्भ में, मॉडल फिटिंग उस मॉडल की अंतर्निहित फ़ंक्शन की सटीकता को संदर्भित करता है क्योंकि यह उस डेटा का विश्लेषण करने का प्रयास करता है जिससे यह परिचित नहीं है।
मशीन लर्निंग के संदर्भ में, मॉडल फिटिंग उस मॉडल के अंतर्निहित फ़ंक्शन की सटीकता को दर्शाती है जो अनजाने डेटा का विश्लेषण करने का प्रयास करता है।
🎓 **अंडरफिटिंग** और **ओवरफिटिंग** आम समस्याएं हैं जो मॉडल की गुणवत्ता को खराब करती हैं, क्योंकि मॉडल या तो पर्याप्त रूप से फिट नहीं होता है या बहुत अधिक फिट होता है। इससे मॉडल या तो अपने ट्रेनिंग डेटा के साथ बहुत अधिक संरेखित भविष्यवाणियां करता है या बहुत कम संरेखित करता है। एक ओवरफिट मॉडल ट्रेनिंग डेटा को बहुत अच्छी तरह से भविष्यवाणी करता है क्योंकि उसने डेटा के विवरण और शोर को बहुत अच्छी तरह से सीखा है। एक अंडरफिट मॉडल सटीक नहीं है क्योंकि यह न तो अपने ट्रेनिंग डेटा का सही तरीके से विश्लेषण कर सकता है और न ही उस डेटा का जिसे उसने अभी तक 'देखा' नहीं है।
🎓 **अंडरफिटिंग** और **ओवरफिटिंग** सामान्य समस्याएं हैं जो मॉडल की गुणवत्ता को कम करती हैं, क्योंकि मॉडल या तो ठीक से फिट नहीं होता या बहुत अधिक फिट हो जाता है। इससे मॉडल की भविष्यवाणियाँ या तो प्रशिक्षण डेटा के बहुत निकट होती हैं या बहुत दूर। एक ओवरफिट मॉडल प्रशिक्षण डेटा को बहुत अच्छी तरह से भविष्यवाणी करता है क्योंकि उसने डेटा के विवरण और शोर को बहुत अच्छी तरह सीख लिया है। एक अंडरफिट मॉडल सटीक नहीं होता क्योंकि वह न तो अपने प्रशिक्षण डेटा को और न ही अभी देखा नहीं गया डेटा को सही ढंग से विश्लेषित कर पाता है।
![ओवरफिटिंग मॉडल](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png)
> [Jen Looper](https://twitter.com/jenlooper) द्वारा इन्फोग्राफिक
![overfitting model](../../../../translated_images/hi/overfitting.1c132d92bfd93cb6.webp)
> इन्फोग्राफिक [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://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) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या असंगतियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सलाह दी जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,96 +1,97 @@
# Scikit-learn का उपयोग करके रिग्रेशन मॉडल बनाएं: चार तरीकों से रिग्रेशन
# Scikit-learn का उपयोग करके एक प्रतिगमन मॉडल बनाएं: प्रतिगमन के चार तरीके
## शुरुआती नोट
जब हम एक **सांख्यिकीय मान** की भविष्यवाणी करना चाहते हैं (उदाहरण के लिए, घर की कीमत, तापमान, या बिक्री), तब लाइनियर रिग्रेशन का उपयोग किया जाता है। यह इनपुट फ़ीचर्स और आउटपुट के बीच संबंध का सर्वश्रेष्ठ प्रतिनिधित्व करने वाली एक सीधी रेखा खोजकर काम करता है।
रैखिक प्रतिगमन का उपयोग तब किया जाता है जब हम एक **संख्यात्मक मान** का पूर्वानुमान लगाना चाहते हैं (उदाहरण के लिए, घर का मूल्य, तापमान, या बिक्री)।
यह इनपुट विशेषताओं और आउटपुट के बीच के संबंध का सबसे अच्छा प्रतिनिधित्व करने वाली एक सीधी रेखा खोजकर काम करता है।
इस पाठ में, हम अधिक उन्नत रिग्रेशन तकनीकों का पता लगाने से पहले अवधारणा को समझने पर ध्यान केंद्रित करते हैं।
![Linear vs polynomial regression infographic](../../../../translated_images/hi/linear-polynomial.5523c7cb6576ccab.webp)
> इन्फोग्राफिक द्वारा [Dasani Madipalli](https://twitter.com/dasani_decoded)
इस पाठ में, हम अधिक उन्नत प्रतिगमन तकनीकों का पता लगाने से पहले अवधारणा को समझने पर ध्यान केंद्रित करते हैं।
![रैखिक बनाम बहुपद प्रतिगमन इन्फोग्राफिक](../../../../translated_images/hi/linear-polynomial.5523c7cb6576ccab.webp)
> इन्फोग्राफिक [Dasani Madipalli](https://twitter.com/dasani_decoded) द्वारा
## [प्री-लेक्चर क्विज़](https://ff-quizzes.netlify.app/en/ml/)
> ### [यह पाठ R में उपलब्ध है!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### परिचय
अब तक आपने रिग्रेशन क्या है इसका अन्वेषण किया है, जिसमें कद्दू की कीमतों के डेटासेट के साथ नमूना डेटा शामिल है, जिसे हम इस पाठ में प्रयोग करेंगे। आपने इसे Matplotlib का उपयोग करके भी विज़ुअलाइज़ किया है।
अब तक आपने प्रतिगमन क्या है, इसे कद्दू के मूल्य निर्धारण डेटासेट से लिए गए नमूना डेटा के साथ एक्सप्लोर किया है, जिसे हम इस पाठ में लगातार उपयोग करेंगे। आपने इसे Matplotlib का उपयोग करके विज़ुअलाइज़ भी किया है।
अब आप मशीन लर्निंग के लिए रिग्रेशन में गहराई से जाने के लिए तैयार हैं। जबकि विज़ुअलाइज़ेशन आपको डेटा को समझने में मदद करता है, मशीन लर्निंग की असली शक्ति _मॉडल प्रशिक्षण_ से आती है। मॉडल ऐतिहासिक डेटा पर प्रशिक्षित होते हैं ताकि वे डेटा निर्भरताओं को स्वचालित रूप से पकड़ सकें, और ये मॉडल नए डेटा के लिए परिणामों की भविष्यवाणी कर सकते हैं, जिसे मॉडल ने पहले नहीं देखा है
अब आप एमएल के लिए प्रतिगमन में गहराई से उतरने के लिए तैयार हैं। जबकि विज़ुअलाइज़ेशन आपको डेटा को समझने में मदद करता है, मशीन लर्निंग की असली ताकत _मॉडल का प्रशिक्षण_ है। मॉडल को ऐतिहासिक डेटा पर प्रशिक्षित किया जाता है ताकि वे स्वतः डेटा की निर्भरताओं को पकड़ सकें, और ये आपको नए डेटा के लिए पूर्वानुमान लगाने की अनुमति देते हैं, जिसे मॉडल ने पहले नहीं देखा होता
इस पाठ में, आप दो प्रकार के रिग्रेशन सीखेंगे: _बुनियादी लाइनियर रिग्रेशन_ और _पॉलीनोमियल रिग्रेशन_, साथ ही इन तकनीकों के कुछ गणितीय पहलू। ये मॉडल हमें अलग-अलग इनपुट डेटा के आधार पर कद्दू की कीमतों की भविष्यवाणी करने की अनुमति देंगे।
इस पाठ में, आप दो प्रकार के प्रतिगमन के बारे में अधिक सीखेंगे: _मूलभूत रैखिक प्रतिगमन_ और _बहुपद प्रतिगमन_, साथ ही इन तकनीकों के पीछे कुछ गणित। ये मॉडल हमें अलग-अलग इनपुट डेटा पर निर्भर करके कद्दू की कीमतों का पूर्वानुमान लगाने की अनुमति देंगे।
[![ML for beginners - Understanding Linear Regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression")
[![शुरुआती के लिए ML - रैखिक प्रतिगमन को समझना](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](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` का मान दर्शाता है।
>
>![calculate the slope](../../../../translated_images/hi/slope.f3c9d5910ddbfcf9.webp)
> `X` 'व्याख्यात्मक चर' है। `Y` 'निर्भर चर' है। रेखा का उतार `b` है और `a` y-अवरोध है, जो उस समय `Y` का मान दर्शाता है जब `X = 0` होता है।
>
> पहले, ढलान `b` की गणना करें। इन्फोग्राफिक द्वारा [Jen Looper](https://twitter.com/jenlooper)
>![ढलान की गणना](../../../../translated_images/hi/slope.f3c9d5910ddbfcf9.webp)
>
> दूसरे शब्दों में, और हमारे कद्दू डेटा के मूल प्रश्न को ध्यान में रखते हुए: "महीने के अनुसार प्रति बशल कद्दू की कीमत की भविष्यवाणी करें", `X` कीमत को संदर्भित करता है और `Y` बिक्री के महीने को।
> सबसे पहले, ढलान `b` की गणना करें। इन्फोग्राफिक [Jen Looper](https://twitter.com/jenlooper) द्वारा
>
>![complete the equation](../../../../translated_images/hi/calculation.a209813050a1ddb1.webp)
> दूसरे शब्दों में, और हमारे कद्दू डेटा के मूल प्रश्न की ओर इशारा करते हुए: "महीने के अनुसार प्रति बुशल कद्दू की कीमत का पूर्वानुमान लगाएं", `X` कीमत को संदर्भित करेगा और `Y` बिक्री के महीने को।
>
> `Y` के मान की गणना करें। यदि आप लगभग $4 का भुगतान कर रहे हैं, तो वह अप्रैल होना चाहिए! इन्फोग्राफिक द्वारा [Jen Looper](https://twitter.com/jenlooper)
>![समीकरण पूर्ण करें](../../../../translated_images/hi/calculation.a209813050a1ddb1.webp)
>
> जो गणित रेखा की गणना करता है, उसे ढलान दर्शानी चाहिए, जो अवरोध पर निर्भर भी होती है, अर्थात `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
---|-------|-----------|---------|------|---------|-----------|------------|-------
@ -100,36 +101,36 @@ ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Pri
73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
> डेटा साफ करने के लिए कोड [`notebook.ipynb`](notebook.ipynb) में उपलब्ध है। हमने पिछले पाठ की तरह ही सफाई के चरण किए हैं, और `DayOfYear` कॉलम का मूल्य निम्नलिखित अभिव्यक्ति से निकाला है:
> डेटा साफ करने के लिए कोड [`notebook.ipynb`](notebook.ipynb) में उपलब्ध है। हमने पिछले पाठ की तरह ही सफाई के कदम उठाए हैं, और निम्नलिखित अभिव्यक्ति का उपयोग करके `DayOfYear` कॉलम की गणना की है:
```python
day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
```
अब जब आपको लाइनियर रिग्रेशन के पीछे का गणित समझ में आ गया है, तो आइए रिग्रेशन मॉडल बनाएं ताकि हम यह देख सकें कि कौन सा कद्दू पैकेज सबसे अच्छी कीमत देगा। कोई भी जो हॉलीडे कद्दू उद्घाटित करने के लिए कद्दू खरीद रहा है, यह जानकारी उनके पैच के कद्दू पैकेज की खरीद को अनुकूल बनाने में मदद कर सकती है
अब जब आपके पास रैखिक प्रतिगमन के पीछे के गणित की समझ है, तो चलिए एक प्रतिगमन मॉडल बनाते हैं ताकि देखें कि क्या हम यह पूर्वानुमान लगा सकते हैं कि कद्दू के किस पैकेज की कीमत सबसे अच्छी होगी। कोई ऐसा व्यक्ति जो छुट्टियों के कद्दू पैच के लिए कद्दू खरीद रहा हो, उसे अपने खरीदारी को अनुकूलित करने के लिए यह जानकारी चाहिए होगी
## सहसंबंध की खोज
## सहसंबंध की तलाश
[![ML for beginners - Looking for Correlation: The Key to Linear Regression](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression")
[![शुरुआती के लिए ML - सहसंबंध की तलाश: रैखिक प्रतिगमन की कुंजी](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "शुरुआती के लिए ML - सहसंबंध की तलाश: रैखिक प्रतिगमन की कुंजी")
> 🎥 ऊपर दी गई छवि पर क्लिक करें सहसंबंध का संक्षिप्त वीडियो अवलोकन देखने के लिए।
> 🎥 सहसंबंध का संक्षिप्त वीडियो अवलोकन देखने के लिए ऊपर की छवि पर क्लिक करें
पिछले पाठ से आपने शायद देखा होगा कि विभिन्न महीनों के लिए औसत कीमत कुछ इस प्रकार दिखती है:
पिछले पाठ से आपने संभवतः देखा होगा कि अलग-अलग महीनों के लिए औसत कीमत कुछ इस प्रकार दिखती है:
<img alt="Average price by month" src="../../../../translated_images/hi/barchart.a833ea9194346d76.webp" width="50%"/>
<img alt="महीने के अनुसार औसत कीमत" src="../../../../translated_images/hi/barchart.a833ea9194346d76.webp" width="50%"/>
यह सुझाव देता है कि कुछ सहसंबंध होना चाहिए, और हम प्रयास कर सकते हैं कि लाइनियर रिग्रेशन मॉडल प्रशिक्षित करें जो `Month` और `Price` के बीच, या `DayOfYear` और `Price` के बीच संबंध की भविष्यवाणी करे। नीचे स्कैटर प्लॉट है जो बाद के संबंध को दिखाता है:
यह सुझाव देता है कि वहाँ कुछ सहसंबंध होना चाहिए, और हम यह प्रयास कर सकते हैं कि `Month` और `Price` या `DayOfYear` और `Price` के बीच संबंध का पूर्वानुमान लगाने के लिए रैखिक प्रतिगमन मॉडल प्रशिक्षण दें। यह रहा वह स्कैटरप्लॉट जो बाद वाले संबंध को दिखाता है:
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/hi/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
<img alt="मूल्य बनाम वर्ष का दिन का स्कैटर प्लॉट" src="../../../../translated_images/hi/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
आइए `corr` फ़ंक्शन का उपयोग करके देखें कि क्या सहसंबंध है:
आइए `corr` फ़ंक्शन का उपयोग करके देखें कि सहसंबंध कितना है:
```python
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
```
ऐसा लगता है कि सहसंबंध काफी छोटा है, `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()):
ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)
```
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/hi/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
<img alt="मूल्य बनाम वर्ष के दिन का रंगीन स्कैटर प्लॉट" src="../../../../translated_images/hi/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
हमारी जांच से पता चलता है कि किस्म का कुल कीमत पर वास्तविक बिक्री तिथि से अधिक प्रभाव होता है। हम इसे बार ग्राफ से देख सकते हैं:
हमारी जांच से पता चलता है कि किस्म का समग्र कीमत पर वास्तविक बिक्री की तारीख की तुलना में अधिक प्रभाव है। हम इसे बार ग्राफ के साथ देख सकते हैं:
```python
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
```
<img alt="Bar graph of price vs variety" src="../../../../translated_images/hi/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
<img alt="कीमत बनाम किस्म का बार ग्राफ" src="../../../../translated_images/hi/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
अभी के लिए चलिए केवल एक कद्दू किस्म, 'pie type' पर ध्यान केंद्रित करें, और देखें कि तारीख का कीमत पर क्या प्रभाव है:
हम इस समय केवल एक कद्दू किस्म, 'pie type' पर ध्यान केंद्रित कर हैं, और देख हैं कि तारीख का कीमत पर क्या प्रभाव है:
```python
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price')
```
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/hi/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
<img alt="मूल्य बनाम वर्ष के दिन का स्कैटर प्लॉट" 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()
```
एक अन्य तरीका यह होगा कि उन खाली मानों को संबंधित कॉलम के औसत मान से भर दिया जाए।
एक और तरीका होगा कि उन खाली मूल्यों को संबंधित कॉलम के औसत मान से भर दिया जाए।
## सरल लाइनियर रिग्रेश
## सरल रैखिक प्रतिगम
[![ML for beginners - Linear and Polynomial Regression using Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn")
[![शुरुआती के लिए ML - Scikit-learn का उपयोग करके रैखिक और बहुपद प्रतिगमन](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](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)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
```
हमारी त्रुटि लगभग 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 है, जो काफी कम है।
हम टेस्ट डटा को रिग्रेशन लाइन के साथ प्लॉट भी कर सकते हैं ताकि यह बेहतर दिख सके कि हमारे मामले में रिग्रेशन कैसे काम करता है:
हम टेस्ट डटा को रिग्रेशन लाइन के साथ प्लॉट भी कर सकते हैं ताकि बेहतर तरीके से देख सकें कि रिग्रेशन हमारे मामले में कैसे काम करती है:
```python
plt.scatter(X_test,y_test)
plt.plot(X_test,pred)
```
<img alt="Linear regression" src="../../../../translated_images/hi/linear-results.f7c3552c85b0ed1c.webp" width="50%" />
## पॉलीनॉमियल रिग्रेशन
रैखिक रिग्रेशन का एक और प्रकार पॉलीनॉमियल रिग्रेशन है। जबकि कभी-कभी वेरिएबल्स के बीच एक रैखिक संबंध होता है - जैसे कि कद्दू जितना बड़ा होगा, कीमत उतनी ही अधिक होगी - कभी-कभी ये संबंध कोई समतल या सीधी रेखा नहीं हो सकते।
रैखिक रिग्रेशन का एक अन्य प्रकार पॉलीनॉमियल रिग्रेशन है। जबकि कभी-कभी चर के बीच रैखिक संबंध होता है - जैसे कद्दू का आकार बड़ा होने पर कीमत अधिक होती है - कभी-कभी ये संबंध प्लेन या सीधे रेखा के रूप में प्रदर्शित नहीं किए जा सकते।
✅ यहाँ [कुछ और उदाहरण](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
@ -255,61 +255,83 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
```
`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` का उपयोग करके पूर्वानुमान परिणाम प्राप्त कर सकते हैं:
```python
pred = pipeline.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
स्मूद अप्रोक्सिमेशन कर्व को प्लॉट करने के लिए, हम `np.linspace` का उपयोग करते हैं ताकि इनपुट मानों की एक समान श्रेणी बनाई जा सके, बजाय सीधे अनऑर्डर किए गए टेस्ट डेटा पर प्लॉट करने के (जो एक ज़िगज़ैग रेखा उत्पन्न करेगा):
```python
X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)
y_range = pipeline.predict(X_range)
plt.scatter(X_test, y_test)
plt.plot(X_range, y_range)
```
यहाँ ग्राफ दिखा रहा है टेस्ट डेटा और अपरोक्ष कर्व:
<img alt="Polynomial regression" src="../../../../translated_images/hi/poly-results.ee587348f0f1f60b.webp" width="50%" />
पॉलीनॉमियल रिग्रेशन का उपयोग करके, हम थोड़ा नीचे MSE और उच्च निर्धारण प्राप्त कर सकते हैं, लेकिन बहुत अधिक नहीं। हमें अन्य फीचर्स को भी ध्यान में रखना होगा!
पॉलीनॉमियल रिग्रेशन का उपयोग करते हुए, हम थोड़ा कम RMSE और उच्च निर्धारण प्राप्त कर सकते हैं, लेकिन काफी हद तक नहीं। हमें अन्य विशेषताओं को ध्यान में रखना होगा!
> आप देख सकते हैं कि न्यूनतम कद्दू की कीमतें लगभग हैलोवीन के आसपास देखी जाती हैं। आप इसे कैसे समझाएंगे?
> आप देख सकते हैं कि न्यूनतम कद्दू की कीमतें कहीं हैलोवीन के आसपास देखी गई हैं। आप इसे कैसे समझाएंगे?
🎃 बधाई हो, आपने अभी एक ऐसा मॉडल बनाया है जो पैसे कद्दू की कीमत की भविष्यवाणी करने में मदद कर सकता है। आप शायद इसी प्रक्रिया को सभी कद्दू प्रकारों के लिए दोहरा सकते हैं, लेकिन यह मुश्किल होगा। आइए अब सीखते हैं कि मॉडल में कद्दू की किस्म (variety) को कैसे शामिल करें!
🎃 बधाई हो, आपने एक ऐसा मॉडल बनाया है जो पाई कद्दू की कीमत अनुमानित करने में मदद कर सकता है। आप शायद सभी कद्दू प्रकारों के लिए वही प्रक्रिया दोहरा सकते हैं, लेकिन यह थकाऊ हो सकता है। अब चलिए सीखते हैं कि हमारी मॉडल में कद्दू की किस्म को कैसे ध्यान में रखा जाए!
## श्रेणीबद्ध फीचर्स (Categorical Features)
## श्रेणीगत विशेषताएँ
आदर्श दुनिया में, हम चाहते हैं कि हम एक ही मॉडल का उपयोग करके विभिन्न कद्दू किस्मों की कीमतें भविष्यवाणी कर सकें। हालांकि, `Variety` कॉलम `Month` जैसे कॉलमों से थोड़ा अलग है, क्योंकि इसमें गैर-संख्यात्मक (non-numeric) मान होते हैं। ऐसे कॉलम को **श्रेणीबद्ध (categorical)** कहा जाता है।
आदर्श दुनिया में, हम चाहते हैं कि हम एक ही मॉडल का उपयोग करके विभिन्न कद्दू किस्मों के लिए कीमतें अनुमानित कर सकें। हालांकि, `Variety` कॉलम `Month` जैसे कॉलम से थोड़ा अलग है, क्योंकि यह गैर-सांख्यिक मान होते हैं। ऐसे कॉलम को **श्रेणीगत** कहा जाता है।
[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 ऊपर दिए गए इमेज पर क्लिक करें एक संक्षिप्त वीडियो अवलोकन के लिए जिसमें श्रेणीबद्ध फीचर्स के उपयोग को बताया गया है।
> 🎥 ऊपर की छवि पर क्लिक करें श्रेणीगत विशेषताओं के उपयोग पर संक्षिप्त वीडियो अवलोकन के लिए।
यहाँ आप देख सकते हैं कि औसत कीमत किस्म पर कैसे निर्भर करती है:
<img alt="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
----|-----------|-----------|--------------------------|----------
70 | 0 | 0 | 0 | 1
71 | 0 | 0 | 0 | 1
... | ... | ... | ... | ...
1738 | 0 | 1 | 0 | 0
1739 | 0 | 1 | 0 | 0
1740 | 0 | 1 | 0 | 0
1741 | 0 | 1 | 0 | 0
ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE
----|-----------|-----------|--------------------------|----------
70 | 0 | 0 | 0 | 1
71 | 0 | 0 | 0 | 1
... | ... | ... | ... | ...
1738 | 0 | 1 | 0 | 0
1739 | 0 | 1 | 0 | 0
1740 | 0 | 1 | 0 | 0
1741 | 0 | 1 | 0 | 0
1742 | 0 | 1 | 0 | 0
वन-हॉट इन्कोडेड किस्म को इनपुट के रूप में लेकर जब हम रैखिक रिग्रेशन को ट्रेन करते हैं, तो हमें बस सही ढंग से `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)
# पाइपलाइन सेटअप करें और प्रशिक्षित करें
# पाइपलाइन सेटअप और प्रशिक्षण करें
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
# टेस्ट डेटा के लिए परिणाम अनुमानित करें
# परीक्षण डेटा के लिए परिणाम अनुमानित करें
pred = pipeline.predict(X_test)
# MSE और निर्धारण की गणना करें
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
# RMSE और निर्धारण गणना करें
rmse = mean_squared_error(y_test, pred, squared=False)
print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
इससे हमें सबसे अच्छा निर्धारण गुणांक लगभग 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% तक सुधार दिया। अंतिम खंड में, आप वर्ग निर्धारित करने के लिए लॉजिस्टिक रिग्रेशन के बारे में जानेंगे
---
## 🚀चुनौती
इस नोटबुक में कई विभिन्न वेरिएबल्स को टेस्ट करें यह देखने के लिए कि सह-संबंध कैसे मॉडल की सटीकता से संबंधित है।
इस नोटबुक में कई अलग-अलग चर का परीक्षण करें ताकि देखें कि सहसंबंध मॉडल की सटीकता से कैसे मेल खाता है।
## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/)
## [पाठ के बाद क्विज़](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) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियां या असंगतियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मातृ भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं।
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -4,14 +4,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## कद्दू की कीमत के लिए रैखिक और बहुपद प्रतिगमन - पाठ 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"
]
},
{
@ -775,22 +781,25 @@
"score = pipeline.score(X_train,y_train)\n",
"print('Model determination: ', score)\n",
"\n",
"plt.scatter(X_test,y_test)\n",
"plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))"
"X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n",
"y_range = pipeline.predict(X_range)\n",
"\n",
"plt.scatter(X_test, y_test)\n",
"plt.plot(X_range, y_range)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### विभिन्न प्रकारों को एन्कोड करना\n",
"### एन्कोडिंग विविधताएं\n",
"\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"
]
}
],
@ -1098,13 +1107,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "d77bd89ae7e79780c68c58bab91f13f8",
"translation_date": "2025-09-04T01:05:06+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "hi"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -36,8 +36,8 @@
"language_code": "ja"
},
"1-Introduction/4-techniques-of-ML/README.md": {
"original_hash": "9d91f3af3758fdd4569fb410575995ef",
"translation_date": "2025-09-06T09:34:02+00:00",
"original_hash": "84b1715a6be62ef1697351dcc5d7b567",
"translation_date": "2026-04-26T20:40:04+00:00",
"source_file": "1-Introduction/4-techniques-of-ML/README.md",
"language_code": "ja"
},
@ -90,8 +90,8 @@
"language_code": "ja"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "26c53a922f1f1e8542b0ea41ff52221a",
"translation_date": "2026-04-20T16:34:32+00:00",
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T20:39:34+00:00",
"source_file": "2-Regression/3-Linear/README.md",
"language_code": "ja"
},
@ -107,6 +107,12 @@
"source_file": "2-Regression/3-Linear/solution/Julia/README.md",
"language_code": "ja"
},
"2-Regression/3-Linear/solution/notebook.ipynb": {
"original_hash": "6781223ffbe8cfdaa38d0200f08e1288",
"translation_date": "2026-04-26T20:37:37+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "ja"
},
"2-Regression/4-Logistic/README.md": {
"original_hash": "abf86d845c84330bce205a46b382ec88",
"translation_date": "2025-09-06T09:26:24+00:00",

@ -1,123 +1,125 @@
# 機械学習の技
# 機械学習の技
機械学習モデルとその使用データを構築、利用、維持するプロセスは、他の多くの開発ワークフローとは大きく異なります。このレッスンでは、そのプロセスを明し、知っておくべき主要な技術を概説します。以下を学びます:
機械学習モデルとそれが利用するデータを構築、使用、維持するプロセスは、多くの他の開発ワークフローとは非常に異なるプロセスです。このレッスンでは、そのプロセスを明らかにし、知っておくべき主要な技術を概説します。あなたは以下を達成します:
- 機械学習の基盤となるプロセスを高いレベルで理解する。
- 「モデル」、「予測」、「トレーニングデータ」などの基本概念を探る。
- 機械学習の基礎となるプロセスを高レベルで理解する。
- 「モデル」「予測」「訓練データ」などの基本概念を探求する。
## [講義前のクイズ](https://ff-quizzes.netlify.app/en/ml/)
## [事前講義クイズ](https://ff-quizzes.netlify.app/en/ml/)
[![初心者向けML - 機械学習の技術](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "初心者向けML - 機械学習の技術")
[![ML for beginners - Techniques of Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning")
> 🎥 上の画像をクリックして、このレッスンの短い動画をご覧ください
> 🎥 上の画像をクリックすると、このレッスンの解説動画をご覧いただけます
## はじめに
機械学習MLプロセスを作成する技術は、以下のステップで構成されています:
機械学習MLプロセスを作成する技術は、大まかに次のいくつかのステップで構成されます:
1. **質問を決める**。ほとんどのMLプロセスは、単純な条件付きプログラムやルールベースのエンジンでは答えられない質問をすることから始まります。これらの質問は、データの集合に基づいた予測に関することが多いです。
2. **データを収集し準備する**。質問に答えるためにはデータが必要です。データの質や量が、最初の質問にどれだけうまく答えられるかを決定します。この段階ではデータの可視化が重要です。また、データをトレーニング用とテスト用に分割してモデルを構築することも含まれます。
3. **トレーニング方法を選ぶ**。質問やデータの性質に応じて、データを最もよく反映し、正確な予測を行うためのトレーニング方法を選ぶ必要があります。この部分は専門知識が必要であり、実験を繰り返すことが多いです。
4. **モデルをトレーニングする**。トレーニングデータを使用して、さまざまなアルゴリズムを用いてデータのパターンを認識するモデルをトレーニングします。モデルは内部の重みを調整して、データの特定部分を優先することで、より良いモデルを構築することがあります。
5. **モデルを評価する**。収集したデータの中から未使用のテストデータを使用して、モデルの性能を確認します。
6. **パラメータ調整**。モデルの性能に基づいて、アルゴリズムの動作を制御する異なるパラメータや変数を使用してプロセスをやり直すことができます。
7. **予測する**。新しい入力を使用してモデルの精度をテストします。
1. <strong>問いを決める</strong>。多くのMLプロセスは、単純な条件プログラムやルールベースのエンジンでは答えられない問いを設定することから始まります。これらの問いは、多くの場合、データの集合に基づく予測に関するものです。
2. <strong>データ収集と準備</strong>。問いに答えるためにはデータが必要です。データの質や時には量が、最初の問いにどれだけ正確に答えられるかを決定します。データの可視化はこの段階の重要な側面です。この段階には、モデル構築のためにデータを訓練用とテスト用に分割することも含まれます。
3. <strong>訓練方法を選ぶ</strong>。問いとデータの性質に応じて、データを最もよく反映し、正確な予測を行うためにモデルを訓練する方法を選択します。これはMLプロセスで最も専門知識を要し、多くの実験を伴う部分です。
4. <strong>モデルを訓練する</strong>。訓練データを使って、様々なアルゴリズムでパターンを認識するモデルを訓練します。モデルは内部の重みを調整して、データの特定部分を優先し、よりよいモデルを作ります。
5. <strong>モデルを評価する</strong>。収集した中で今まで使っていなかったデータ(テストデータ)を使い、モデルの性能を評価します。
6. <strong>パラメータ調整</strong>。モデルの性能に基づいて、アルゴリズムの動作を制御する異なるパラメータや変数を使って再度プロセスを行います。
7. <strong>予測する</strong>。新しい入力を使ってモデルの精度をテストします。
## 質問を決める
## 問うべき問い
コンピュータはデータの隠れたパターンを発見するのが得意です。この能力は、条件付きルールエンジンを作成するだけでは簡単に答えられない質問を持つ研究者にとって非常に役立ちます。例えば、保険数理のタスクでは、データサイエンティストが喫煙者と非喫煙者の死亡率に関する手作りのルールを構築することができるかもしれません。
コンピュータはデータの中に隠れたパターンを発見するのが得意です。この利点は、条件付きルールエンジンで容易には答えられない領域の問いを持つ研究者にとって非常に有用です。例えば保険数理の課題であれば、データサイエンティストは喫煙者と非喫煙者の死亡率について手作業でルールを構築できるかもしれません。
しかし、他の多くの変数が加わると、過去の健康履歴に基づいて将来の死亡率を予測するためにMLモデルの方が効率的である可能性があります。より楽しい例としては、緯度、経度、気候変動、海への近さ、ジェット気流のパターンなどのデータを基に、特定の場所で4月の天気を予測することが挙げられます。
しかし、多くの他の変数が関係してくると、過去の健康履歴に基づいて将来の死亡率を予測するにはMLモデルの方が効率的かもしれません。より楽しい例としては、与えられた場所の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)は天気モデルの歴史的観点から、気象解析におけるMLの利用を紹介しています。
## モデル構築前のタスク
## 構築前の準備タスク
モデルを構築する前に、いくつかのタスクを完了する必要があります。質問をテストし、モデルの予測に基づいて仮説を形成するためには、いくつかの要素を特定し設定する必要があります。
モデル構築を始める前に、いくつか完了すべきタスクがあります。問いを検証し、モデルの予測に基づく仮説を形成するには、いくつかの要素を特定して設定する必要があります。
### データ
質問に確実に答えるためには、適切な種類の十分な量のデータが必要です。この時点で以下のことを行う必要があります:
問いにある程度の確度で答えるためには、適切な種類の十分なデータが必要です。この時点で行うべきことは2つあります:
- **データを収集する**。前回のレッスンで学んだデータ分析の公平性を念頭に置き、データを慎重に収集します。このデータの出所、潜在的なバイアス、出所の記録に注意してください。
- **データを準備する**。データ準備プロセスにはいくつかのステップがあります。異なるソースからのデータを統合し正規化する必要があるかもしれません。データの質と量を向上させるために、文字列を数値に変換する([クラスタリング](../../5-Clustering/1-Visualize/README.md)で行うように)などの方法を使用することがあります。また、元のデータに基づいて新しいデータを生成する([分類](../../4-Classification/1-Introduction/README.md)で行うように)こともあります。データをクリーンアップし編集する([Webアプリ](../../3-Web-App/README.md)レッスンの前に行うように)こともあります。最後に、トレーニング技術に応じてデータをランダム化しシャッフルする必要があるかもしれません。
- <strong>データ収集</strong>。以前のレッスンで学んだデータ分析の公平性を念頭に置き、データの収集を行います。このデータの出所や、それに伴う偏りがないか注意深く把握し、それを記録してください。
- <strong>データ準備</strong>。データ準備にはいくつかのステップがあります。複数の異なるソースから来たデータをまとめて正規化する必要があるかもしれません。文字列を数値に変換してデータの質や量を改善する方法もあります[クラスタリング](../../5-Clustering/1-Visualize/README.md)での方法を参照)。元のデータを基に新たなデータを生成することもあります([分類](../../4-Classification/1-Introduction/README.md)での例)。データをクリーニングや編集することもあります([Webアプリ](../../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`として表され、データに対して尋ねようとしている質問の答えを表します。例えば、12月に最も安いカボチャの**色**は何か?サンフランシスコで最も良い不動産**価格**を持つ地域はどこか?ターゲットはラベル属性とも呼ばれることがあります。
ターゲットは予測したい対象です。コードでは通常`y`で表し、問いに対する答えを示します12月にどの<strong></strong>のカボチャが最も安いか?サンフランシスコで不動産の<strong>価格</strong>が最も良い地区はどこか?ターゲットはラベル属性とも呼ばれます。
### 特徴変数の選択
### 特徴変数の選択
🎓 **特徴量選択と特徴量抽出** モデルを構築する際にどの変数を選ぶべきかどうやって判断しますか?特徴量選択または特徴量抽出のプロセスを経て、最もパフォーマンスの高いモデルに適した変数を選ぶことになります。ただし、これらは同じものではありません。「特徴量抽出は元の特徴量の関数から新しい特徴量を作成するのに対し、特徴量選択は特徴量のサブセットを返します。」([出典](https://wikipedia.org/wiki/Feature_selection)
🎓 <strong>特徴選択と特徴抽出</strong> モデルを構築するとき、どの変数を選ぶべきかどうやって決めますか?おそらく特徴選択や特徴抽出の過程を経て、最も性能の良いモデルに適した変数を選びます。ただし両者は同じではありません。「特徴抽出は元の特徴から新しい特徴を関数的に生成するもので、特徴選択は特徴の部分集合を返すものです。」([出典](https://wikipedia.org/wiki/Feature_selection)
### データを可視化する
### データの可視化
データサイエンティストのツールキットの重要な側面は、SeabornやMatPlotLibなどの優れたライブラリを使用してデータを可視化する力です。データを視覚的に表現することで、活用できる隠れた相関関係を発見することができます。また、偏りや不均衡なデータを発見する助けにもなります([分類](../../4-Classification/2-Classifiers-1/README.md)でそのことを発見します)。
データサイエンティストのツールキットで重要な側面は、SeabornやMatPlotLibのような優れたライブラリを使ってデータを可視化する力です。データを視覚的に表現することで、活用できる隠れた相関を発見できるかもしれません。可視化はまた、バイアスや不均衡なデータの発見にも役立ちます([分類](../../4-Classification/2-Classifiers-1/README.md)で発見します)。
### データセットを分割する
### データセットの分割
トレーニングの前に、データセットを不均等なサイズの2つ以上の部分に分割し、それでもデータをよく表現する必要があります。
訓練の前に、データセットを異なるサイズの2つ以上の部分に分割し、それぞれが全体のデータをよく代表する必要があります。
- **トレーニング**。データセットのこの部分はモデルに適合させてトレーニングします。このセットは元のデータセットの大部分を構成します。
- **テスト**。テストデータセットは、元のデータから収集された独立したデータ群であり、構築されたモデルの性能を確認するために使用されます。
- **検証**。検証セットは、モデルのハイパーパラメータやアーキテクチャを調整してモデルを改善するために使用される、より小さな独立した例のグループです。データのサイズや質問によっては、この第3のセットを構築する必要がない場合もあります[時系列予測](../../7-TimeSeries/1-Introduction/README.md)でそのことを指摘します)。
- <strong>訓練用</strong>。モデルを訓練するために使うデータセットの部分です。元のデータセットの大部分を占めます。
- <strong>テスト用</strong>。独立したデータ群で、しばしば元データの中から集められ、構築したモデルの性能検証に使います。
- <strong>検証用</strong>。モデルのハイパーパラメータや構造を調整するために使う小さい独立したデータ群です。データのサイズや問いにより、この第三のセットは不要な場合もあります([時系列予測](../../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>モデルの適合</strong>
機械学習の文脈では、モデルの適合とは、モデルの基礎となる関数が未知のデータを分析しようとする際の精度を指します。
機械学習の文脈では、モデル適合は未知のデータ分析に対するモデルの基礎関数の正確さを指します。
🎓 **過学習**と**未学習**は、モデルの品質を低下させる一般的な問題です。モデルがトレーニングデータに対して十分に適合しない、または適合しすぎることで、トレーニングデータに対して予測が正確すぎたり、逆に正確でなかったりします。過学習したモデルは、データの詳細やノイズを過剰に学習してしまうため、トレーニングデータを非常に正確に予測します。一方、未学習のモデルは、トレーニングデータや未知のデータを正確に分析することができません
🎓 <strong>アンダーフィッティング</strong><strong>オーバーフィッティング</strong>はモデルの質を悪化させる一般的問題で、モデルがデータに適合しすぎても不足しても起こります。オーバーフィッティングは訓練データの細部やノイズまで学習しすぎたため、訓練データには非常に正確に予測するが未見のデータへの一般化能力が低い状態。アンダーフィッティングはモデルが訓練データも未知データも正確に分析できない状態です
![過学習モデル](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png)
> [Jen Looper](https://twitter.com/jenlooper)によるインフォグラフィック
![overfitting model](../../../../translated_images/ja/overfitting.1c132d92bfd93cb6.webp)
> インフォグラフィック 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の設定では、モデルを本番環境で使用するためのWeb資産を構築する場合、このプロセスにはユーザー入力例えばボタンの押下を収集して変数を設定し、モデルに推論または評価を送信することが含まれるかもしれません
この段階で全く新しいデータを使い、モデルの精度をテストできます。実運用の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) を使用して翻訳されています。正確性を期していますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご了承ください。原文のネイティブ言語版が権威ある情報源とみなされます。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用に起因するいかなる誤解や誤訳に対しても責任を負いかねます。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,99 +1,99 @@
# Scikit-learnを使った回帰モデルの構築4つの回帰手
# Scikit-learnを使って回帰モデルを構築する回帰の4つの方
## 初心者向けノート
線形回帰は、<strong>数値的な値</strong>(例えば、家の価格、気温、売上高)を予測したいときに使われます。
入力特徴量と出力の関係を最もよく表す直線を見つけることで動作します。
線形回帰は、<strong>数値的な値</strong>(例えば、家の価格、気温、売上など)を予測したいときに使用します。
これは、入力特徴量と出力の関係を最もよく表す直線を見つけることで機能します。
このレッスンでは、より高度な回帰手法に進む前に、概念の理解に重点を置きます。
![線形回帰と多項式回帰のインフォグラフィック](../../../../translated_images/ja/linear-polynomial.5523c7cb6576ccab.webp)
このレッスンでは、高度な回帰手法を探る前に、概念の理解に焦点を当てます。
![線形回帰と多項式回帰のインフォグラフィック](../../../../translated_images/ja/linear-polynomial.5523c7cb6576ccab.webp)
> インフォグラフィック作成者:[Dasani Madipalli](https://twitter.com/dasani_decoded)
## [事前講義クイズ](https://ff-quizzes.netlify.app/en/ml/)
## [事前クイズ](https://ff-quizzes.netlify.app/en/ml/)
> ### [このレッスンはRでも利用可能です](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### はじめに
これまで、かぼちゃの価格設定データセットから収集したサンプルデータを使って回帰とは何かを探りました。このレッスン全体でこのデータセットを使用します。また、Matplotlibを使って可視化も行いました。
これまでに、パンプキンプライシングのデータセットから収集したサンプルデータで回帰について探ってきました。このレッスン全体で使うデータセットです。またMatplotlibを使ってそれを視覚化もしました。
いよいよ機械学習の回帰をより深く掘り下げる準備ができました。可視化によりデータの内容を理解することはできますが、機械学習の真の強みは_モデルのトレーニング_にあります。モデルは過去のデータで学習し、自動的にデータの依存関係を捉え、新しいデータに対して予測を行うことができます。
今度はMLの回帰についてより深く掘り下げる準備ができました。視覚化はデータを理解するのに役立ちますが、機械学習の真の力は_モデルを訓練すること_にあります。モデルは過去のデータで訓練され、データの依存関係を自動的に捉え、新しいデータモデルが見たことのないに対して結果を予測できるようになります。
このレッスンでは、_基本的な線形回帰_と_多項式回帰_の2種類の回帰について詳しく学び、それらの手法の背後にある数学も一部扱います。これらのモデルを利用して、さまざまな入力データに基づいたかぼちゃの価格を予測します。
このレッスンでは、_基本的な線形回帰__多項式回帰_ の2種類の回帰と、それらの技術の基礎となる数学について学びます。これらのモデルを使って、入力データに応じたパンプキンの価格を予測できるようになります。
[![初心者のための機械学習 - 線形回帰の理解](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "初心者のための機械学習 - 線形回帰の理解")
[![初心者向けML - 線形回帰の理解](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "初心者向けML - 線形回帰の理解")
> 🎥 上の画像をクリックすると線形回帰の簡単な動画概要が見られます。
> 🎥 上の画像をクリックすると、線形回帰の短いビデオ概要が視聴できます。
> このカリキュラム全体を通じて、数学の知識は最小限に抑え、他分野から来た学生でも理解しやすいよう工夫しています。メモ、🧮 コールアウト、図解などの学習支援も随所にあります
> このカリキュラム全体では、数学の知識は最小限に抑え、他分野から来た学生でも理解しやすいようにしています。理解に役立つノートや🧮解説、図、その他学習ツールにも注目してください
### 前提条件
かぼちゃデータの構造に既に慣れているはずです。このレッスンの_notebook.ipynb_に前処理済みの状態で組み込まれています。ファイル内ではバッシェル単位のかぼちゃ価格が新しいデータフレームに表示されています。Visual Studio Codeのカーネルでこれらのートブックが動作するか必ず確認してください。
これまでに、調査しているパンプキンデータの構造に慣れているはずです。このレッスンの_notebook.ipynb_ファイルには、データが事前に読み込まれ、クリーニング済みで含まれています。パンプキンの価格はバッシェル単位で新しいデータフレームに表示されています。Visual Studio Codeのカーネル上でこれらのートブックを実行できるようにしてください。
### 準備
念のために言えば、このデータを読み込み、そこから質問を立てることが目的です。
- かぼちゃを買うベストな時期はいつか?
- ミニかぼちゃのケースの価格はいくらか?
- 半バッシェルのバスケットと1 1/9バッシェルの箱、どちらで買うべきか
さらにデータを深掘りしていきましょう。
改めて言いますが、あなたはこのデータを読み込んで、そこから質問をしていきます。
前回のレッスンで、Pandasのデータフレームを作成し、元のデータセットの一部を抽出、バッシェル単位で価格を標準化しました。しかしその際、約400件のデータポイントしか得られず、対象は秋の月だけでした。
- パンプキンを買うのに最適な時期はいつか?
- ミニチュアパンプキンのケースはどのくらいの価格になるのか?
- 半バッシェルのバスケットで買うべきか、1 1/9 バッシェルの箱で買うべきか?
このレッスンのノートブックにプリロードされたデータを見てみましょう。データは既に読み込まれ、月ごとの散布図が作成されています。データの性質をもう少し詳しく理解するため、データをさらにクリーニングすることができるかもしれません。
このデータをさらに掘り下げていきましょう
## 線形回帰直線
前のレッスンで、Pandasのデータフレームを作成し、元のデータセットの一部を取り込み、価格をバッシェルで標準化しました。しかし、この方法では約400のデータポイントと秋の月のみしか集められていませんでした。
レッスン1で学んだように、線形回帰の目的は直線をプロットして、
このレッスンに付属のノートブックに事前に読み込まれたデータを見てみましょう。データは事前読み込みされ、初期の散布図も作成されていて、月データが表示されています。もっと詳細にデータの性質を調べるために、さらにクリーニングしてみましょう。
- <strong>変数間の関係を示すこと</strong>。変数間の関係を表現する
- <strong>予測を行うこと</strong>。新しいデータ点がその直線に対してどこに位置するかを正確に予測する
## 線形回帰線
ことです。
レッスン1で学んだ通り、線形回帰の目的は次のような直線を描くことです
この種の直線を引くのは通常、<strong>最小二乗回帰</strong>と呼ばれる手法です。「最小二乗」はモデル内の誤差(残差)を最小化するプロセスを指します。各データポイントに対して、実際の点と回帰直線との垂直距離(残差)を測ります。
- **変数間の関係を示す。** 変数同士の関係性を示す。
- **予測を行う。** 新しいデータ点が線上のどこに位置するかを正確に予測する。
二乗和を使う理由は主に2つです
このような線を引く代表的な方法は<strong>最小二乗法回帰</strong>です。「最小二乗」はモデルの全体的な誤差を最小化するプロセスを指します。すべてのデータ点に対し、実際の点と回帰線の縦方向の距離(残差と呼ばれます)を測ります。
1. <strong>大きさを重視し方向は無視</strong>:誤差の-5も+5も同じ扱いにしたいため、全て正の値にするために二乗します。
これらの距離を二乗する理由は主に2つあります
2. <strong>外れ値へのペナルティ</strong>:大きな誤差により大きな重みを与えることで、遠く離れた点に線が近づくようにします。
1. **大きさは方向に優先。** -5の誤差と+5の誤差を同じ扱いにしたいためです。二乗することで全ての値が正になります。
2. **外れ値の罰則。** 二乗すると大きな誤差がより重要視され、線が遠い点に近づくように調整されます。
これらの二乗値の合計を計算し、その合計が最小となる直線を探します。これが「最小二乗法」の名前の由来です。
これらの二乗誤差を全て合計し、その合計が最小になる線を見つけるのが「最小二乗法」です。
> **🧮 数学を見てみましょう**
>
> この直線は_最適適合直線_と呼ばれ、[次の式](https://en.wikipedia.org/wiki/Simple_linear_regression)で表されます:
>
> **🧮 数学を見てみう**
>
> この線は_最良適合直線_ と呼ばれ、[以下の式](https://en.wikipedia.org/wiki/Simple_linear_regression)で表されます:
>
> ```
> Y = a + bX
> ```
>
> `X`は「説明変数」、`Y`は「目的変数」です。直線の傾きは`b`、`a`は切片で、`X=0`のときの`Y`の値を指します。
>
>![傾き計算](../../../../translated_images/ja/slope.f3c9d5910ddbfcf9.webp)
>
> まず傾き`b`を計算します。インフォグラフィックは [Jen Looper](https://twitter.com/jenlooper) さん作成
>
> 言い換えれば、「月ごとのかぼちゃ価格を予測する」というオリジナルの問題に関連するとき、`X`が価格、`Y`が販売月を表します。
>
>![計算の完成](../../../../translated_images/ja/calculation.a209813050a1ddb1.webp)
>
> `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` は「従属変数」を表します。傾きは `b`、切片は `a` で、`X=0` の時の `Y` の値を指します。
>
>![傾き計算](../../../../translated_images/ja/slope.f3c9d5910ddbfcf9.webp)
>
> まず傾き `b` を計算します。インフォグラフィック作成者:[Jen Looper](https://twitter.com/jenlooper)
>
> 言い換えると、パンプキンデータの元の問い「月ごとにパンプキンのバッシェル単価を予測する」に対して、`X` が価格を、`Y` が販売月を表します。
>
>![式を完成させる](../../../../translated_images/ja/calculation.a209813050a1ddb1.webp)
>
> `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の間で点がバラバラに散らばっていれば相関は低いです。
もう一つ理解しておきたい用語は、与えられたXとYの変数間の<strong>相関係数</strong>です。散布図を使うと、この係数を簡単に視覚化できます。点がきれいな直線上に並んでいる散布図は相関が高く、点がXとYの間にばらけている散布図は相関が低いことを示します。
良い線形回帰モデルとは、最小二乗法の回帰直線で高い0より1に近い相関係数を持つモデルです。
良い線形回帰モデルは、最小二乗法回帰での相関係数が高い0に近いより1に近いものです。
✅ このレッスンのノートブックを実行して、月と価格の散布図を見てください。かぼちゃの月と価格の関連は、散布図の視覚的解釈から見ると高い相関でしょうか?それとも低いでしょうか?また、`Month`ではなく、より細かい指標(例えば、年始からの通算日数)を使うとどう変わるか確認してください。
✅ このレッスンに付属のノートブックを実行し、月と価格の散布図を見てみましょう。パンプキン販売の月と価格のデータは、散布図の視覚的解釈に基づくと相関は高そうですか、それとも低そうですか?`Month` ではなく、もっと細かい尺度(例えば、年始からの日数= *day of the year*)を使うとどう変わりますか?
以下のコードでは、データがクリーニングされ、`new_pumpkins`という名前のデータフレームが得られていると仮定します。以下のようなデータです:
以下のコードでは、データをクリーニングしたうえで、以下のようなデータフレーム `new_pumpkins` が得られていると仮定します:
ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
---|-------|-----------|---------|------|---------|-----------|------------|-------
@ -101,38 +101,38 @@ ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Pri
71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
> データクリーニングのコードは[`notebook.ipynb`](notebook.ipynb)にあります。前回のレッスンと同様のクリーニング手順を行い、`DayOfYear`カラムは以下の式で算出しています:
> データをクリーニングするコードは [`notebook.ipynb`](notebook.ipynb) にあります。前のレッスンと同様のクリーニング処理を行い、以下の式で `DayOfYear` 列を算出しています:
```python
day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
```
線形回帰の数学的背景が分かったところで、パンプキンの最適なパッケージ価格を予測できるか試すために、回帰モデルを作成しましょう。ホリデーパンプキンパッチ向けにパンプキンを買う人が、購入パッケージの選択を最適化するための情報が必要かもしれません。
線形回帰の数学的背景を理解したので、回帰モデルを作成し、どのかぼちゃパッケージが最も価格的に有利か予測できるか試してみましょう。かぼちゃパッチのためにかぼちゃを買う人にとって、この情報はパッチ用のかぼちゃ購入最適化に役立つでしょう。
## 相関を探す
## 相関を探る
[![初心者のための機械学習 - 相関関係の探求:線形回帰の鍵](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "初心者のための機械学習 - 相関関係の探求:線形回帰の鍵")
[![初心者向けML - 相関の探し方:線形回帰の鍵](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "初心者向けML - 相関の探し方:線形回帰の鍵")
> 🎥 上の画像をクリックすると相関関係の簡単な動画概要が見られます。
> 🎥 上の画像をクリックすると、相関の短いビデオ概要が視聴できます。
回のレッスンでは月ごとの平均価格は以下のようでした
のレッスンで見たように、月ごとの平均価格は以下のようになっています
<img alt="月ごとの平均価格" src="../../../../translated_images/ja/barchart.a833ea9194346d76.webp" width="50%"/>
これは一定の相関関係があることを示唆しています。そこで、`Month`と`Price`間、もしくは`DayOfYear`と`Price`間の関係性を予測する線形回帰モデルのトレーニングを試みます。以下がその後者の散布図です:
これは、相関が存在するはずだと示唆しています。`Month` と `Price` の関係、または `DayOfYear``Price` の関係を線形回帰モデルで予測することができます。以下は後者の散布図です:
<img alt="価格と年初からの日数の散布図" src="../../../../translated_images/ja/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
`corr`関数で相関を見てみましょう:
`corr` 関数で相関があるか見てみましょう:
```python
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
```
を使った場合-0.15、日数を使った場合-0.17と相関は小さいように見えますが、別の重要な関係もありそうです。どうやら価格のクラスターはかぼちゃの品種によって異なっているようです。この仮説を確かめるため、品種ごとに色分けしてプロットします。`scatter`関数に`ax`パラメータを渡すことで全ての点を同じグラフ上に描画できます:
単位では約-0.15、年初からの日数単位では約-0.17と相関は低めに見えますが、別の重要な関係があるかもしれません。異なるパンプキンの品種によって価格のクラスターができているように見えます。この仮説を確かめるために、品種ごとに異なる色でプロットしてみましょう。`scatter` プロット関数に `ax` パラメータを渡してすべての点を同じグラフ上に描画できます:
```python
ax=None
@ -141,75 +141,76 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()):
df = new_pumpkins[new_pumpkins['Variety']==var]
ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)
```
<img alt="価格と年初からの日数の品種別散布図" src="../../../../translated_images/ja/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
<img alt="価格と年初からの日数の散布図(色分けあり)" src="../../../../translated_images/ja/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
調査の結果、品種が販売日の影響よりも総価格に影響を与えていることが示されました。棒グラフでもわかります:
調査の結果、品種の方が販売日よりも全体の価格に影響を与えていることが分かりました。棒グラフでも確認できます:
```python
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
```
<img alt="品種別価格の棒グラフ" src="../../../../translated_images/ja/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
<img alt="品種ごとの価格の棒グラフ" src="../../../../translated_images/ja/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
ここでは一旦、かぼちゃ品種の一つである「パイタイプ」に焦点を当て、日付が価格に与える影響を見てみましょう:
今は「pie type」というパンプキン品種にだけ注目して、日付が価格に及ぼす影響を見てみましょう
```python
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price')
```
<img alt="価格と年初からの日数の散布図(パイタイプのみ)" src="../../../../translated_images/ja/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
<img alt="pie typeパンプキン価格と年初からの日数の散布図" src="../../../../translated_images/ja/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()
```
別の方法としては、空のセルを対応する列の平均値で埋める方法もあります。
欠損値を、その列の平均値で埋めるアプローチもあります。
## 単純線形回帰
[![初心者のための機械学習 - Scikit-learnによる線形回帰と多項式回帰](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "初心者のための機械学習 - Scikit-learnによる線形回帰と多項式回帰")
[![初心者向けML - Scikit-learnを使った線形回帰と多項式回帰](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "初心者向けML - Scikit-learnを使った線形回帰と多項式回帰")
> 🎥 上の画像をクリックすると線形回帰と多項式回帰の簡単な動画概要が見られます。
> 🎥 上の画像をクリックすると、線形回帰と多項式回帰の短いビデオ概要が視聴できます。
線形回帰モデルのトレーニングには<strong>Scikit-learn</strong>ライブラリを使用します。
線形回帰モデルの訓練には、**Scikit-learn** ライブラリを使います。
```python
from sklearn.linear_model import LinearRegression
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']
```
> 入力データに`reshape`を用いた点に注意してください。Linear Regressionは2次元配列を入力と想定しており、配列の各行が特徴量ベクトルに対応します。今回は特徴量が1つだけなので、データセットサイズNに対して形状N×1の配列が必要になります。
> 入力データに`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)
```
最後に、線形回帰モデルのトレーニングはたった2行のコードです。`LinearRegression`オブジェクトを定義し、その`fit`メソッドでデータにフィットさせます:
最後に、線形回帰モデルの実際の訓練は2行のコードで済みます。`LinearRegression` オブジェクトを定義し、`fit` メソッドでデータに適合させます:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
`fit` 後の `LinearRegression` オブジェクトには回帰のすべての係数が含まれており、`.coef_` プロパティを使ってアクセスできます。今回の場合、係数はひとつだけで、約 `-0.017` です。これは価格が時間とともに少しずつ下がる傾向があることを示しており、1日あたり約2セントの減少を意味します。また、回帰直線のY軸との交点には `lin_reg.intercept_` を使ってアクセスでき、今回の場合は約 `21` で、年初の価格を示しています。
`fit` 後の `LinearRegression` オブジェクトには回帰のすべての係数が含まれており、これは `.coef_` プロパティを使ってアクセスできます。今回の場合、係数は1つだけで、約 `-0.017` であるはずです。これは、価格が時間の経過とともに少しずつ下がっているように見えますが、1日あたり約2セントとそれほど大きくないことを意味します。また、回帰のY軸との交点には `lin_reg.intercept_` を使ってアクセスでき、今回の場合は約 `21` となり、年の初めの価格を示しています。
モデルの精度を確認するために、テストデータセットで価格を予測し、その予測値が期待値にどれだけ近いかを測定できます。これは二乗平均平方根誤差RMSEという指標を使って行い、期待値と予測値のすべての二乗差の平均の平方根を計算します。
モデルの精度を確認するために、テストデータセット上で価格を予測し、それから予測値が期待値にどれだけ近いかを測定できます。これは平方根平均二乗誤差RMSEという指標を使って行われ、期待値と予測値のすべての二乗差の平均の平方根です。
```python
pred = lin_reg.predict(X_test)
@ -218,16 +219,16 @@ rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
```
誤差は約2ポイント、すなわち約17%となり、あまり良くありません。モデル品質の別の指標として <strong>決定係数</strong> があります。これは次のように取得できます:
誤差は約2ポイント約17%)で、あまり良くありません。モデル品質の別の指標として、<strong>決定係数</strong> があり、これは次のようにして得られます:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
値が0の場合、モデルは入力データを考慮せず、結果の単純な平均値として振る舞う「最悪の線形予測子」となります。値が1の場合、すべての期待出力を完全に予測できることを意味します。今回の決定係数は約0.06で、かなり低い値です。
値が0の場合、モデルは入力データを考慮しておらず、結果の平均値を返すだけの最悪の線形予測器として機能していることを意味します。値が1の場合は、すべての期待される出力を完全に予測できることを意味します。今回の場合、決定係数は約0.06と低い値です。
テストデータと回帰直線を一緒にプロットすると、回帰の仕組みがよりわかりやすくなります:
回帰線とテストデータを一緒にプロットして、回帰がどのように機能しているかをよりよく確認することもできます:
```python
plt.scatter(X_test,y_test)
@ -238,17 +239,17 @@ plt.plot(X_test,pred)
## 多項式回帰
線形回帰の別のタイプとして多項式回帰があります。変数間に必ずしも線形関係があるとは限らず、たとえばカボチャの体積が大きいほど価格が高くなる場合でも、それが平面や直線として表現できないことがあります。
線形回帰の別のタイプが多項式回帰です。変数間の関係が線形であることもあります — 例えば体積が大きいパンプキンは価格が高い — が、時にはこれらの関係を平面や直線としてプロットできないこともあります。
✅ こちらに [多項式回帰が有効な他の例](https://online.stat.psu.edu/stat501/lesson/9/9.8) があります
✅ こちらは多項式回帰を使うことができる [他のいくつかの例](https://online.stat.psu.edu/stat501/lesson/9/9.8) です。
再度、日付と価格の関係を見てみましょう。この散布図は必ずしも直線で分析すべきものに見えますか?価格が変動することはありませんか?この場合、多項式回帰を試すことができます。
Date と Price の関係をもう一度見てみましょう。この散布図は必ずしも直線で解析すべきものに見えますか?価格は変動してもよいのではありませんか?このような場合には多項式回帰を試すことができます。
✅ 多項式は一つまたは複数の変数と係数からなる数学的表現です
✅ 多項式は1つ以上の変数と係数から成る数学的な式です。
多項式回帰は非線形データにより適合するカーブを作ります。今回の場合、入力データに二乗した `DayOfYear` 変数を含めれば、パラボラカーブによりデータを近似でき、年のある時点で最小値を持つ曲線ができます。
多項式回帰は非線形データにうまく適合するために曲線を作ります。今回の場合、入力データに2乗の `DayOfYear` 変数を含めるなら、1年内のある点で極小となる放物線でデータをフィットさせることができるはずです。
Scikit-learn にはデータ処理の複数ステップを結合できる便利な [パイプラインAPI](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) があります。<strong>パイプライン</strong>は一連の<strong>推定器</strong>から構成されます。ここでは最初に多項式特徴を追加し、その後回帰の学習を行うパイプラインを作成します:
Scikit-learn にはデータ処理の複数のステップを1つにまとめるのに便利な [パイプラインAPI](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) があります。<strong>パイプライン</strong><strong>推定器のチェーン</strong> です。今回の場合、最初に多項式特徴を追加し、その後回帰をトレーニングするパイプラインを作成します:
```python
from sklearn.preprocessing import PolynomialFeatures
@ -259,36 +260,58 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
```
`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> が追加されます。必要に応じてより高い次数の多項式も使えます。
パイプラインは元の `LinearRegression` オブジェクトと同じ方法で使えます。すなわちパイプラインを `fit` し、`predict` を使って予測結果を得られます:
パイプラインは元の `LinearRegression` オブジェクトと同様に使えるので、`fit` で学習し `predict` で予測結果を得られます。以下の図はテストデータと近似曲線です:
```python
pred = pipeline.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
滑らかな近似曲線をプロットするために、`np.linspace` を使って均一な入力範囲を作成します。これは無秩序なテストデータ上に直接プロットする(ジグザグ線になる)より良い方法です:
```python
X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)
y_range = pipeline.predict(X_range)
plt.scatter(X_test, y_test)
plt.plot(X_range, y_range)
```
こちらがテストデータと近似曲線を示すグラフです:
<img alt="Polynomial regression" src="../../../../translated_images/ja/poly-results.ee587348f0f1f60b.webp" width="50%" />
多項式回帰を使うことで、わずかにMSEは下がり、決定係数は上がりますが、大きな変化ではありません。他の特徴量も考慮する必要があります
多項式回帰を使うと、RMSEが僅かに下がり決定係数が高くなりますが、大幅な改善はありません。他の特徴量を考慮する必要があります!
> 最低のカボチャ価格がハロウィーン付近に現れることがわかります。これはどう説明できますか?
> パンプキンの最低価格がハロウィンあたりで観察されることに気づきましたか?これはどう説明できますか?
🎃 おめでとうございます。パイ用カボチャの価格を予測できるモデルを作成できました。同じ手順をすべてのカボチャの種類に繰り返せるはずですが、それは面倒でしょう。次は品種をモデルに組み込む方法を学びましょう!
🎃 おめでとうございます、これでパイパンプキンの価格を予測するモデルを作成できました。おそらく同じ手順を他のパンプキン種別にも繰り返せますが、それは面倒です。次にモデルにパンプキンの品種を取り込む方法を学びましょう!
## カテゴリカル特徴量
## カテゴリ特徴
理想的には、同じモデルで異なるカボチャの品種の価格を予測したいです。ただし `Variety` 列は `Month` のように数値ではなく、数値以外の値を含みます。このような列は <strong>カテゴリカル</strong> と呼ばれます。
理想的には、同じモデルを使って異なるパンプキン品種の価格を予測したいです。しかし、`Variety` 列は `Month` などの数値列とは異なり、数値以外の値を含むため、<strong>カテゴリ特徴</strong> と呼ばれます。
[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 カテゴリカル特徴を使う方法を簡単に解説した動画は上の画像をクリックしてください。
> 🎥 上の画像をクリックすると、カテゴリ特徴の使用方法に関する簡単なビデオ概要が見られます
ここでは種類ごとの平均価格がどう違うかがわかります:
ここでは品種による平均価格の違いを示しています:
<img alt="Average price by variety" src="../../../../translated_images/ja/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
品種を考慮するには、まず数値形式に変換(<strong>エンコード</strong>)する必要があります。方法はいくつかあります:
品種を考慮するためには、まず数値形式に変換、すなわち<strong>エンコード</strong>する必要があります。エンコード方法は複数あります:
* 単純な <strong>数値エンコード</strong> は異なる品種の一覧を作り、その品種名をインデックスに置き換えます。線形回帰ではこれはあまりよくありません。なぜなら線形回帰がインデックスの数値を実際の値として使い、それに係数を掛けて結果に加えるからです。今回の場合、インデックス番号と価格の関係は明らかに非線形で、インデックスの順序をどう決めてもそうです
* <strong>ワンホットエンコー</strong>`Variety` 列を4つの別列に置き換え、それぞれが品種の一つを表します。各列には該当品種なら `1`、そうでなければ `0` が入ります。これにより、線形回帰は4つの係数を持ち、それぞれが特定品種の「基準価格」より正確には「追加価格」を表します。
* 単純な<strong>数値エンコード</strong>は異なる品種をリストにし、品種名をそのリストのインデックスに置き換えます。これは線形回帰にはあまり適していません。線形回帰はインデックスの数値をそのまま取り扱い、係数と乗算して結果に加えるためです。インデックス番号と価格の関係が明らかに非線形であっても、この方法ではその非線形性を反映できません
* <strong>ワンホットエンコーディング</strong>`Variety` 列を4つの別々の列に置き換えます。各列は対応する品種に対して `1`、そうでなければ `0` となります。これにより、線形回帰においてパンプキンの品種ごとに4つの係数ができ、その品種の「基本価格」または「価格への追加分」を表すことになります。
以下のコードはワンホットエンコードのサンプルです:
以下のコードはワンホットエンコードの例を示しています:
```python
pd.get_dummies(new_pumpkins['Variety'])
@ -296,23 +319,23 @@ pd.get_dummies(new_pumpkins['Variety'])
ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE
----|-----------|-----------|--------------------------|----------
70 | 0 | 0 | 0 | 1
71 | 0 | 0 | 0 | 1
... | ... | ... | ... | ...
1738 | 0 | 1 | 0 | 0
1739 | 0 | 1 | 0 | 0
1740 | 0 | 1 | 0 | 0
1741 | 0 | 1 | 0 | 0
1742 | 0 | 1 | 0 | 0
70 | 0 | 0 | 0 | 1
71 | 0 | 0 | 0 | 1
... | ... | ... | ... | ...
1738| 0 | 1 | 0 | 0
1739| 0 | 1 | 0 | 0
1740| 0 | 1 | 0 | 0
1741| 0 | 1 | 0 | 0
1742| 0 | 1 | 0 | 0
ワンホットエンコードした品種を入力にして線形回帰を学習するには、適切に `X``y` データを初期化すればよいです:
ワンホットエンコードした品種を入力として線形回帰をトレーニングするためには、`X` と `y` のデータを正しく初期化するだけで十分です:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
それ以外のコードはこれまでの線形回帰の学習時と同じです。これを試すと平均二乗誤差はほぼ同じながら、決定係数はかなり高く約77%)なります。さらに精度を上げるには、ほかのカテゴリカル特徴や数値特徴(例:`Month` や `DayOfYear`)も考慮します。特徴量をひとつの大きな配列にまとめるには `join` を使います:
残りのコードは上で使った線形回帰のトレーニングと同じです。実際に試すと、平均二乗誤差はほぼ同じですが、決定係数ははるかに高くなり (約77%)、さらに正確な予測が可能になります。他のカテゴリ特徴や `Month``DayOfYear` などの数値特徴も考慮し、特徴量を1つの大きな配列にまとめるために `join` を使うことができます:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -322,11 +345,11 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
y = new_pumpkins['Price']
```
ここでは `City``Package` の種類も考慮し、MSEは2.8410%、決定係数は0.94となりました
ここでは `City``Package` タイプも加味しており、RMSE は2.8410.5%、決定係数は0.94となっています
## 総合的なモデル作成
## まとめて使う
高のモデルを作るため、上記の組み合わせ(ワンホットエンコードしたカテゴリカル+数値)データを多項式回帰と組み合わせます。以下はその完全なコードです:
良のモデルを作成するには、上述の結合された(ワンホットエンコードされたカテゴリ + 数値)特徴量と多項式回帰を一緒に使います。便宜上、完全なコードを載せます:
```python
# トレーニングデータを設定する
@ -339,51 +362,51 @@ y = new_pumpkins['Price']
# トレイン・テスト分割を行う
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# パイプラインを設定し、トレーニングする
# パイプラインの設定とトレーニングを行う
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
# テストデータの結果を予測する
pred = pipeline.predict(X_test)
# MSEと決定係数を計算する
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
# RMSEと決定係数を計算する
rmse = mean_squared_error(y_test, pred, squared=False)
print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
これで決定係数は約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 |
🏆 お疲れ様でしたこのレッスンで4つの回帰モデルを作り、モデル精度を97%まで高めました。回帰の最後のセクションでは、ロジスティック回帰について学びカテゴリ分類を行います。
🏆 お見事ですこのレッスンで4つの回帰モデルを作成し、モデルの精度を97%まで高めました。回帰の最終セクションでは、カテゴリを判別するためのロジスティック回帰について学びます。
---
## 🚀チャレンジ
このノートブックで異なる変数をいくつか試し、相関がモデル精度にどう影響するかを調べてみましょう
このノートブックでいくつかの異なる変数を試してみて、相関とモデル精度の関係を調べてみてください
## [講義後クイズ](https://ff-quizzes.netlify.app/en/ml/)
## [講義後クイズ](https://ff-quizzes.netlify.app/en/ml/)
## 復習と自主学
## 復習&自
本レッスンでは線形回帰について学びました。ほかにも重要な回帰手法があります。Stepwise、Ridge、Lasso、Elasticnet などの手法を調べてみましょう。深く学びたい場合は [スタンフォード大学の統計学習コース](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) が良い教材です。
このレッスンでは線形回帰について学びました。他にも重要な種類の回帰があります。Stepwise, Ridge, Lasso, Elasticnet の手法について読んでみましょう。詳しく学びたい方には [スタンフォード統計学習コース](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) を使用して翻訳されています。正確さを期していますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知ください。原文は原語の書類が権威ある情報源とみなされます。重要な情報については専門の人間による翻訳を推奨します。本翻訳の使用により生じたいかなる誤解や誤訳についても一切の責任を負いかねます。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -4,14 +4,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## かぼちゃの価格設定における線形回帰と多項式回帰 - レッスン3\n",
"## かぼちゃの価格に対する線形回帰と多項式回帰 - レッスン3\n",
"\n",
"必要なライブラリとデータセットを読み込みます。データを以下の条件を満たすデータフレームに変換します:\n",
"必要なライブラリとデータセットを読み込みます。データをデータフレームに変換し、データのサブセットを含めます:\n",
"\n",
"- ブッシェル単位で価格が設定されているかぼちゃのみを取得する\n",
"- 日付を月に変換する\n",
"- 価格を高値と安値の平均として計算する\n",
"- 価格をブッシェル単位の数量に基づいた価格に変換する\n"
"- バッシェル単位で価格が付けられたかぼちゃのみ取得\n",
"- 日付を月に変換\n",
"- 価格を最高値と最低値の平均として計算\n",
"- 価格をバッシェル単位の価格に反映するように変換\n"
]
},
{
@ -377,7 +377,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"散布図は、8月から12月までの月のデータしかないことを思い出させてくれます。結論を線形的に導き出すには、もっと多くのデータが必要かもしれません。\n"
"散布図は、私たちが持っている月データが8月から12月までであることを思い出させてくれます。線形的に結論を導くためには、おそらくもっと多くのデータが必要です。\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": [
"とりあえず、1つの種類、<strong>パイタイプ</strong>にだけ集中しましょう。\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",
@ -718,9 +724,9 @@
"source": [
"### 多項式回帰\n",
"\n",
"特徴と結果の間の関係が本質的に非線形である場合があります。例えば、カボチャの価格は冬1月、2月に高くなり、夏5月7月に下がり、その後再び上昇することがあります。線形回帰ではこの関係を正確に捉えることができません。\n",
"特徴と結果の関係が本質的に非線形である場合があります。例えば、カボチャの価格は冬1、2月に高くなり、その後夏57月に減少し、再び上昇することがあります。線形回帰ではこの関係を正確に見つけることができません。\n",
"\n",
"この場合、追加の特徴を加えることを検討できます。簡単な方法として、入力特徴から多項式を使用することで、**多項式回帰**を実現できます。Scikit Learnでは、パイプラインを使用して多項式特徴を自動的に前計算することができます。\n"
"この場合、追加の特徴量を追加することを検討できます。簡単な方法は、入力特徴量から多項式を使用することで、これにより<strong>多項式回帰</strong>が得られます。Scikit Learnでは、パイプラインを使用して多項式特徴を自動的に前計算できます。\n"
]
},
{
@ -775,8 +781,11 @@
"score = pipeline.score(X_train,y_train)\n",
"print('Model determination: ', score)\n",
"\n",
"plt.scatter(X_test,y_test)\n",
"plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))"
"X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n",
"y_range = pipeline.predict(X_range)\n",
"\n",
"plt.scatter(X_test, y_test)\n",
"plt.plot(X_range, y_range)"
]
},
{
@ -785,12 +794,12 @@
"source": [
"### エンコーディングの種類\n",
"\n",
"理想的な世界では、同じモデルを使って異なるカボチャの品種の価格を予測できるようにしたいと考えています。品種を考慮するためには、まずそれを数値形式、つまり**エンコード**する必要があります。これにはいくつかの方法があります:\n",
"理想的な世界では、同じモデルを使って異なるかぼちゃの品種の価格を予測できるようにしたいです。品種を考慮に入れるためには、まずそれを数値形式に変換、つまり<strong>エンコード</strong>する必要があります。エンコードする方法はいくつかあります:\n",
"\n",
"* 単純な数値エンコーディングでは、異なる品種のテーブルを作成し、そのテーブル内のインデックスで品種名を置き換えます。しかし、これは線形回帰には最適な方法ではありません。なぜなら、線形回帰はインデックスの数値を考慮しますが、その数値が価格と数値的に相関している可能性は低いからです。\n",
"* ワンホットエンコーディングは、`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"
]
},
{
@ -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-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -1098,13 +1107,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "d77bd89ae7e79780c68c58bab91f13f8",
"translation_date": "2025-09-04T01:03:01+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "ja"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -36,8 +36,8 @@
"language_code": "ko"
},
"1-Introduction/4-techniques-of-ML/README.md": {
"original_hash": "9d91f3af3758fdd4569fb410575995ef",
"translation_date": "2025-09-05T10:48:28+00:00",
"original_hash": "84b1715a6be62ef1697351dcc5d7b567",
"translation_date": "2026-04-26T20:41:17+00:00",
"source_file": "1-Introduction/4-techniques-of-ML/README.md",
"language_code": "ko"
},
@ -90,8 +90,8 @@
"language_code": "ko"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "26c53a922f1f1e8542b0ea41ff52221a",
"translation_date": "2026-04-20T16:41:12+00:00",
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T20:40:54+00:00",
"source_file": "2-Regression/3-Linear/README.md",
"language_code": "ko"
},
@ -107,6 +107,12 @@
"source_file": "2-Regression/3-Linear/solution/Julia/README.md",
"language_code": "ko"
},
"2-Regression/3-Linear/solution/notebook.ipynb": {
"original_hash": "6781223ffbe8cfdaa38d0200f08e1288",
"translation_date": "2026-04-26T20:38:06+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "ko"
},
"2-Regression/4-Logistic/README.md": {
"original_hash": "abf86d845c84330bce205a46b382ec88",
"translation_date": "2025-09-05T10:40:02+00:00",

@ -1,123 +1,125 @@
# 머신 러닝 기법
# 머신러닝 기법
머신 러닝 모델을 구축, 사용, 유지 관리하는 과정과 그 모델이 사용하는 데이터는 다른 개발 워크플로우와 매우 다릅니다. 이번 강의에서는 이 과정을 이해하기 쉽게 설명하고, 알아야 할 주요 기법들을 정리합니다. 여러분은 다음을 배우게 됩니다:
머신러닝 모델과 그 모델이 사용하는 데이터를 구축하고 사용하며 유지하는 과정은 다른 많은 개발 워크플로우와 매우 다른 과정입니다. 이번 수업에서는 이 과정을 쉽게 이해할 수 있도록 하고, 알아야 할 주요 기법들을 설명합니다. 여러분은 다음을 배우게 됩니다:
- 머신 러닝의 기본 과정을 높은 수준에서 이해합니다.
- '모델', '예측', '훈련 데이터'와 같은 기본 개념을 탐구합니다.
- 머신러닝의 기본 프로세스를 높은 수준에서 이해하기
- '모델', '예측', '훈련 데이터'와 같은 기본 개념 탐색하기
## [강의 전 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
## [수업 전 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
[![초보자를 위한 머신 러닝 - 머신 러닝 기법](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "초보자를 위한 머신 러닝 - 머신 러닝 기법")
[![초보자를 위한 머신러닝 - 머신러닝 기법](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](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>은 모델 품질을 떨어뜨리는 흔한 문제입니다. 과대적합은 모델이 훈련 데이터의 세부사항과 잡음을 너무 잘 학습해 너무 밀접하게 맞춘 상태이고, 과소적합은 훈련 데이터나 본 적 없는 데이터를 모두 정확하게 분석하지 못하는 상태입니다.
![과대적합 모델](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png)
> [Jen Looper](https://twitter.com/jenlooper)의 인포그래픽
![과대적합 모델](../../../../translated_images/ko/overfitting.1c132d92bfd93cb6.webp)
> 인포그래픽 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)를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인한 오해나 잘못된 해석에 대해서는 책임지지 않습니다.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,135 +1,136 @@
# Scikit-learn을 사용하여 회귀 모델 구축: 회귀 네 가지 방법
# Scikit-learn을 사용하여 회귀 모델 만들기: 회귀 4가지 방법
## 초보자 참고사항
## 초보자 노트
선형 회귀는 **숫자 값**(예: 주택 가격, 온도 또는 판매량)을 예측하려 할 때 사용됩니다.
이는 입력 특성과 출력 간의 관계를 최적으로 나타내는 직선을 찾는 방식으로 작동합니다.
선형 회귀는 **수치 값**(예: 주택 가격, 온도, 또는 매출)을 예측하려 할 때 사용됩니다.
입력 특성과 출력 간의 관계를 가장 잘 나타내는 직선을 찾아 작동합니다.
이 수업에서는 고급 회귀 기법을 다루기 전에 개념 이해에 집중합니다.
![선형 회귀 vs 다항 회귀 인포그래픽](../../../../translated_images/ko/linear-polynomial.5523c7cb6576ccab.webp)
> 인포그래픽: [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [전 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
이 수업에서는 고급 회귀 기법을 탐구하기 전에 개념 이해에 집중합니다.
![선형 다항 회귀 인포그래픽](../../../../translated_images/ko/linear-polynomial.5523c7cb6576ccab.webp)
> 인포그래픽 제공자: [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [수업 전 퀴즈](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 회귀를 더 깊게 파고들 준비가 되었습니다. 시각화는 데이터를 이해하는 데 도움을 주지만, 머신러닝의 진짜 힘은 _모델 학습_에 있습니다. 모델은 과거 데이터를 기반으로 학습하여 데이터 간 종속 관계를 자동으로 파악하며, 모델이 본 적 없는 새로운 데이터에 대해서도 결과를 예측할 수 있습니다.
이번 수업에서는 _기본 선형 회귀__다항 회귀_ 두 가지 회귀 유형과 관련 수학을 배웁니다. 이 모델들은 다양한 입력 데이터에 따라 호박 가격을 예측할 수 있게 해줍니다.
이번 수업에서는 _기본 선형 회귀__다항 회귀_ 두 가지 유형과 이 기술들의 수학적 배경을 다룹니다. 이 모델들은 다양한 입력 데이터에 따라 호박 가격을 예측할 수 있게 해줍니다.
[![초보자를 위한 ML - 선형 회귀 이해](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "초보자를 위한 ML - 선형 회귀 이해")
[![ML 초보자를 위한 - 선형 회귀 이해](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](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 = a + bX
> ```
>
> `X`는 설명 변수, `Y`는 종속 변수입니다. 기울기는 `b`이고, y절편은 `a`로, `X=0`일 때 `Y` 값입니다.
>
>![기울기 계산](../../../../translated_images/ko/slope.f3c9d5910ddbfcf9.webp)
>
> 먼저 기울기 `b`를 계산합니다. 인포그래픽: [Jen Looper](https://twitter.com/jenlooper)
>
> 다시 말해, 본 호박 데이터 질문 "월별 부셸당 호박 가격 예측"에서 `X`는 가격, `Y`는 판매 월을 의미합니다.
>
>![방정식 완성](../../../../translated_images/ko/calculation.a209813050a1ddb1.webp)
>
> `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
---|-------|-----------|---------|------|---------|-----------|------------|-------
70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
> 데이터 정제 코드는 [`notebook.ipynb`](notebook.ipynb)에서 확인할 수 있습니다. 이전 수업과 같은 정제 단계를 수행했고, 아래 식으로 `DayOfYear` 열을 계산했습니다:
>
>
> 여기서 `X`는 설명 변수이며, `Y`는 종속 변수입니다. 선의 기울기는 `b`, y절편은 `a`로, `X=0`일 때 `Y`의 값을 의미합니다.
>
>![기울기 계산](../../../../translated_images/ko/slope.f3c9d5910ddbfcf9.webp)
>
> 우선 기울기 `b`를 계산합니다. 인포그래픽 제공: [Jen Looper](https://twitter.com/jenlooper)
>
> 다시 말해, 호박 데이터 질문 "월별 버셜당 호박 가격 예측"에서 `X`는 가격을, `Y`는 판매 월을 나타냅니다.
>
>![방정식 완성](../../../../translated_images/ko/calculation.a209813050a1ddb1.webp)
>
> `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
---|-------|-----------|---------|------|---------|-----------|------------|-------
70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
> 데이터 정리 코드는 [`notebook.ipynb`](notebook.ipynb)에 있습니다. 이전 수업과 같은 클리닝 단계를 거쳤으며, `DayOfYear` 컬럼은 다음 표현식을 사용해 계산했습니다:
>
```python
day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
```
선형 회귀의 수학적 이해를 마쳤으니, 어떤 호박 패키지가 최적의 가격을 가질지 예측하는 회귀 모델을 만들어 보겠습니다. 호박 밭을 위해 호박을 구매하는 사람은 최적의 구매를 위해 이 정보를 원할 것입니다.
이제 선형 회귀의 수학적 배경을 이해했으니, 어느 호박 패키지가 가장 좋은 가격을 제공할지 예측하는 회귀 모델을 만들어 봅시다. 명절 호박 농장 주인은 이 정보를 활용해 호박 구매를 최적화할 수 있을 것입니다.
## 상관 관계 찾아보
## 상관관계 찾기
[![초보자를 위한 ML - 상관관계 찾기: 선형 회귀의 핵심](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "초보자를 위한 ML - 상관관계 찾기: 선형 회귀의 핵심")
[![ML 초보자를 위한 - 상관관계 찾기: 선형 회귀의 핵심](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML 초보자를 위한 - 상관관계 찾기: 선형 회귀의 핵심")
> 🎥 위 이미지 클릭 시 상관관계 짧은 동영상 개요 시청
> 🎥 위 이미지를 클릭해 상관관계에 대한 짧은 영상 개요를 시청하세요.
이전 수업에서 월별 평균 가격이 다음과 같음을 보았을 것입니다:
이전 수업에서 월별 평균 가격이 대략 다음과 같다는 걸 보았습니다:
<img alt="월별 평균 가격" src="../../../../translated_images/ko/barchart.a833ea9194346d76.webp" width="50%"/>
월별 가격 차이에서 상관 관계가 있어 보이고, `Month``Price` 또는 `DayOfYear``Price` 간의 관계를 예측하는 선형 회귀 모델을 훈련할 수 있겠습니다. 아래 그래프는 후자를 보여줍니다:
이로 보아 상관관계가 있을 것으로 예상되며, `Month``Price` 사이, 혹은 `DayOfYear``Price` 사이의 관계를 예측하기 위해 선형 회귀 모델을 시도할 수 있습니다. 아래는 후자의 관계를 보여주는 산점도입니다:
<img alt="가격 vs 연중 일수 산점도" src="../../../../translated_images/ko/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
<img alt="가격 대 연중일 산점도" src="../../../../translated_images/ko/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
`corr` 함수를 이용해 상관관계가 있는지 확인해 봅시다:
`corr` 함수를 사용해 상관관계를 살펴보면:
```python
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['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()):
ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)
```
<img alt="가격 vs 연중 일수 산점도 (색상별)" src="../../../../translated_images/ko/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
<img alt="가격 대 연중일 색상별 산점도" src="../../../../translated_images/ko/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
품종이 실제 판매일보다 가격에 더 큰 영향을 미치는 것 같습니다. 막대 그래프로도 볼 수 있습니다:
조사 결과 품종이 실제 판매 날짜보다 가격에 더 큰 영향을 미치는 것으로 보입니다. 막대 그래프로도 볼 수 있습니다:
```python
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
```
<img alt="품종에 따른 가격 막대그래프" src="../../../../translated_images/ko/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
<img alt="품종별 가격 막대 그래프" src="../../../../translated_images/ko/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
현재는 'pie type' 품종 하나만 집중해, 날짜가 가격에 미치는 영향을 봅시다:
지금은 '파이 타입' 품종 하나에만 집중하여 날짜가 가격에 미치는 영향을 살펴봅시다:
```python
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price')
```
<img alt="가격 vs 연중 일수 산점도" src="../../../../translated_images/ko/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
<img alt="연중일 대 가격 산점도 (파이 호박)" 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()
```
결측치를 해당 열 평균값으로 채우는 방법도 있습니다.
또는 해당 열의 평균값으로 빈 값을 채우는 방법도 있습니다.
## 단순 선형 회귀
[![초보자를 위한 ML - Scikit-learn을 사용한 선형 및 다항 회귀](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "초보자를 위한 ML - Scikit-learn을 사용한 선형 및 다항 회귀")
[![ML 초보자를 위한 - Scikit-learn을 사용한 선형 및 다항 회귀](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](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는 예상 값과 예측 값의 모든 제곱 차이의 평균의 제곱근입니다.
```python
pred = lin_reg.predict(X_test)
@ -215,15 +217,15 @@ rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
```
오차는 약 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으로, 상당히 낮은 편입니다.
테스트 데이터와 회귀선을 함께 그리면 회귀가 어떻게 동작하는지 더 잘 알 수 있습니다:
회귀가 어떻게 작동하는지 더 잘 보기 위해 테스트 데이터와 회귀선을 함께 그려봅시다:
```python
plt.scatter(X_test,y_test)
@ -232,19 +234,19 @@ plt.plot(X_test,pred)
<img alt="Linear regression" src="../../../../translated_images/ko/linear-results.f7c3552c85b0ed1c.webp" width="50%" />
## 다항 회귀 (Polynomial Regression)
## 다항 회귀(Polynomial Regression)
선형 회귀의 또 다른 유형은 다항 회귀입니다. 때때로 변수들 간에 선형 관계가 존재할 수 있지만 — 예를 들어 호박 부피가 크면 가격이 높아지는 것처럼 — 때로는 관계가 평면이나 직선으로 나타내기 어려울 때가 있습니다.
선형 회귀의 또 다른 유형은 다항 회귀입니다. 변수들 사이에 선형 관계가 있을 때도 있지만, 예를 들어 호박 부피가 클수록 가격이 높아지는 것처럼, 어떤 경우는 이러한 관계가 평면이나 직선으로 표현되지 않을 수도 있습니다.
여기에 [다항 회귀에 적합한 데이터의 몇 가지 예](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
@ -255,36 +257,58 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
```
`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`를 통해 예측값을 얻을 수 있습니다:
```python
pred = pipeline.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
부드러운 근사 곡선을 그리기 위해 `np.linspace`로 균등한 입력 값 범위를 생성합니다. 이는 무작위로 배열된 테스트 데이터 위에 바로 그릴 경우 지그재그 모양이 되기 때문입니다:
```python
X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)
y_range = pipeline.predict(X_range)
plt.scatter(X_test, y_test)
plt.plot(X_range, y_range)
```
파이프라인은 원래의 `LinearRegression` 객체처럼 사용할 수 있습니다. 즉, 파이프라인을 `fit`하고 `predict`를 사용해 예측 결과를 얻을 수 있습니다. 아래 그래프는 테스트 데이터와 근사 곡선을 보여줍니다:
다음은 테스트 데이터와 근사 곡선을 보여주는 그래프입니다:
<img alt="Polynomial regression" src="../../../../translated_images/ko/poly-results.ee587348f0f1f60b.webp" width="50%" />
다항 회귀를 사용하면 MSE가 약간 낮아지고 결정 계수가 높아지긴 하지만 크게 차이나진 않습니다. 더 정확한 예측을 위해서는 다른 피처도 고려해야 합니다!
다항 회귀를 사용하면 RMSE는 약간 낮아지고 결정 계수는 약간 올라가지만 큰 차이는 없습니다. 다른 특성들도 고려할 필요가 있습니다!
> 할로윈 무렵 최소 호박 가격이 관찰된다는 점을 알 수 있습니다. 어떻게 설명할 수 있을까요?
> 최소 호박 가격이 할로윈 즈음에 관찰되는 것을 볼 수 있네요. 이를 어떻게 설명할 수 있을까요?
🎃 축하합니다, 당신은 호박 가격을 예측하는 모델을 만들었습니다. 아마도 모든 호박 종류에 대해 같은 절차를 반복할 수 있겠지만 이는 매우 번거롭습니다. 이제 호박 품종을 모델에 반영하는 방법을 배우겠습니다!
🎃 축하합니다! 여러분은 파이 호박 가격 예측에 도움이 되는 모델을 만들었습니다. 모든 호박 종류에 대해 같은 과정을 반복할 수 있지만, 그것은 번거로울 수 있습니다. 이제 호박 품종을 모델에 반영하는 방법을 배워봅시다!
## 범주형 특성 (Categorical Features)
## 범주형 특성(Categorical Features)
이상적으로는 동일한 모델로 다양한 호박 품종의 가격을 예측할 수 있길 원합니다. 하지만 `Variety` 열은 `Month` 같은 열과 달리 수치 데이터가 아닌 값을 포함합니다. 이런 열을 **범주형(categorical)** 이라고 합니다.
이상적인 세계에서는 같은 모델로 다양한 호박 품종의 가격을 예측할 수 있길 원합니다. 하지만 `Variety` 열은 `Month` 같은 숫자형 열과 달리 비숫자 값을 포함하고 있어 <strong>범주형</strong> 열로 불립니다.
[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 위 이미지를 클릭하면 범주형 특성 활용에 대한 간단한 동영상을 볼 수 있습니다.
> 🎥 위 이미지 클릭하면 범주형 특성 사용에 관한 짧은 영상 개요를 볼 수 있습니다.
다음은 품종별 평균 가격입니다:
<img alt="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을 넣습니다. 이렇게 하면 각 품종마다 계수가 하나씩 생겨, 각기 다른 "기본 가격"(정확히는 각각 품종의 "추가 가격")을 나타내는 계수가 생깁니다.
다음 코드는 품종을 원-핫 인코딩하는 방법을 보여줍니다:
다음은 품종을 원-핫 인코딩하는 예입니다:
```python
pd.get_dummies(new_pumpkins['Variety'])
@ -301,14 +325,14 @@ pd.get_dummies(new_pumpkins['Variety'])
1741 | 0 | 1 | 0 | 0
1742 | 0 | 1 | 0 | 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)
# 파이프라인 설정 및 학습
# 파이프라인 설정 및 훈련
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
# 테스트 데이터에 대한 결과 예측
pred = pipeline.predict(X_test)
# MSE 및 결정계수 계산
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
# RMSE 및 결정 계수 계산
rmse = mean_squared_error(y_test, pred, squared=False)
print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
이렇게 하면 거의 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)을 추천합니다.
## 과제
@ -381,5 +405,5 @@ print('Model determination: ', score)
<!-- 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)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 양지하시기 바랍니다. 원본 문서는 원어로 된 원본 문서를 권위 있는 출처로 간주해야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 본 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -4,14 +4,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## 호박 가격 책정을 위한 선형 및 다항 회귀 - 3\n",
"## 호박 가격 책정을 위한 선형 및 다항 회귀 - 3\n",
"\n",
"필요한 라이브러리와 데이터셋을 로드합니다. 데이터를 다음 조건을 만족하는 데이터프레임으로 변환합니다:\n",
"필요한 라이브러리와 데이터셋을 불러옵니다. 데이터를 데이터프레임으로 변환하되 데이터의 일부만 포함합니다:\n",
"\n",
"- 부셸 단위로 가격이 매겨진 호박만 가져오기\n",
"- 날짜를 월로 변환하기\n",
"- 높은 가격과 낮은 가격의 평균으로 가격 계산하기\n",
"- 가격을 부셸 수량 기준으로 변환하기\n"
"- 부셸(bushel)로 가격이 책정된 호박만 가져오기\n",
"- 날짜를 월(month)로 변환하기\n",
"- 가격을 고가와 저가의 평균으로 계산하기\n",
"- 가격이 부셸 단위 가격을 반영하도록 변환하기\n"
]
},
{
@ -377,7 +377,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"산점도는 우리가 8월부터 12월까지의 월 데이터만 가지고 있음을 상기시켜줍니다. 선형적으로 결론을 내리기 위해서는 아마도 더 많은 데이터가 필요할 것입니다.\n"
"산점도는 우리가 8월부터 12월까지의 월 데이터만 가지고 있음을 상기시켜줍니다. 선형적으로 결론을 내리기 위해서는 아마도 더 많은 데이터가 필요할 것입니다.\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": [
"당분간은 한 가지 종류인 <strong>파이 타입</strong>에만 집중합시다.\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",
@ -718,9 +724,9 @@
"source": [
"### 다항 회귀\n",
"\n",
"특성과 결과 간의 관계가 본질적으로 비선형일 때가 있습니다. 예를 들어, 호박 가격은 겨울(1월, 2월)에 높았다가 여름(5월~7월)에 떨어지고 다시 상승할 수 있습니다. 선형 회귀는 이러한 관계를 정확히 찾아내지 못할 수 있습니다.\n",
"때때로 특성과 결과 간의 관계는 본질적으로 비선형적입니다. 예를 들어, 호박 가격은 겨울(월=1,2)에 높다가 여름(월=5-7)에 떨어졌다가 다시 상승할 수 있습니다. 선형 회귀는 이 관계를 정확하게 찾을 수 없습니다.\n",
"\n",
"이 경우 추가적인 특성을 고려할 수 있습니다. 간단한 방법은 입력 특성에서 다항식을 사용하는 것으로, 이를 통해 **다항 회귀**를 수행할 수 있습니다. Scikit Learn에서는 파이프라인을 사용하여 다항 특성을 자동으로 미리 계산할 수 있습니다.\n"
"이 경우, 추가 특징을 고려할 수 있습니다. 간단한 방법은 입력 특징에서 다항식을 사용하는 것으로, 이것은 <strong>다항 회귀</strong>를 일으킵니다. Scikit Learn에서는 파이프라인을 사용하여 다항 특징을 자동으로 미리 계산할 수 있습니다:\n"
]
},
{
@ -775,20 +781,23 @@
"score = pipeline.score(X_train,y_train)\n",
"print('Model determination: ', score)\n",
"\n",
"plt.scatter(X_test,y_test)\n",
"plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))"
"X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n",
"y_range = pipeline.predict(X_range)\n",
"\n",
"plt.scatter(X_test, y_test)\n",
"plt.plot(X_range, y_range)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 다양한 품종 인코딩\n",
"### 인코딩 종류\n",
"\n",
"이상적인 상에서는 동일한 모델을 사용하여 다양한 호박 품종의 가격을 예측할 수 있기를 원합니다. 품종을 고려하기 위해서는 먼저 이를 숫자 형태로 변환하거나 **인코딩**해야 합니다. 이를 수행하는 방법은 여러 가지가 있습니다:\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-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -1098,13 +1107,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "d77bd89ae7e79780c68c58bab91f13f8",
"translation_date": "2025-09-04T01:03:27+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "ko"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

Loading…
Cancel
Save