diff --git a/translated_images/hi/.co-op-translator.json b/translated_images/hi/.co-op-translator.json
index 8ec0c5fc0..3f16b4271 100644
--- a/translated_images/hi/.co-op-translator.json
+++ b/translated_images/hi/.co-op-translator.json
@@ -101,6 +101,12 @@
"source_file": "8-Reinforcement/2-Gym/images/cartpole.png",
"language_code": "hi"
},
+ "catplot.e73fc35fdf96242b.webp": {
+ "original_hash": "90cd4782a2f9b40dec8218b224b29c1c",
+ "translation_date": "2026-07-14T05:05:33+00:00",
+ "source_file": "2-Regression/2-Data/images/catplot.png",
+ "language_code": "hi"
+ },
"centroid.097fde836cf6c918.webp": {
"original_hash": "c8f866ed446563d8e59087f1bca1f97d",
"translation_date": "2026-01-16T10:15:30+00:00",
@@ -383,6 +389,12 @@
"source_file": "2-Regression/3-Linear/images/heatmap.png",
"language_code": "hi"
},
+ "heatmap.bd98dce43b404c57.webp": {
+ "original_hash": "7f2f2fbd993018bc01346e1eb8ae692e",
+ "translation_date": "2026-07-14T05:05:50+00:00",
+ "source_file": "2-Regression/2-Data/images/heatmap.png",
+ "language_code": "hi"
+ },
"hierarchical.bf59403aa43c8c47.webp": {
"original_hash": "50b9bc3298659c463ae76564ca645b12",
"translation_date": "2026-01-16T10:15:13+00:00",
@@ -473,6 +485,12 @@
"source_file": "2-Regression/3-Linear/images/linear.png",
"language_code": "hi"
},
+ "lineplot.f9034ba47b1e30ee.webp": {
+ "original_hash": "b3959c0ed0f02f668009c76b95c4ebbb",
+ "translation_date": "2026-07-14T05:05:58+00:00",
+ "source_file": "2-Regression/2-Data/images/lineplot.png",
+ "language_code": "hi"
+ },
"lobe.2fa0806408ef9923.webp": {
"original_hash": "e6ec71dbe350aef39135dbf88bc89163",
"translation_date": "2026-01-16T10:12:42+00:00",
@@ -743,6 +761,12 @@
"source_file": "2-Regression/3-Linear/images/recipes.png",
"language_code": "hi"
},
+ "relplot.a03837d8f0329cec.webp": {
+ "original_hash": "4733544cb1c2e58e987087283e66b4a5",
+ "translation_date": "2026-07-14T05:05:41+00:00",
+ "source_file": "2-Regression/2-Data/images/relplot.png",
+ "language_code": "hi"
+ },
"scaled.91897dfbaa26ca4a.webp": {
"original_hash": "789c70fafe6f6dd6e377a90b66e7d740",
"translation_date": "2026-01-16T10:25:42+00:00",
diff --git a/translated_images/hi/catplot.e73fc35fdf96242b.webp b/translated_images/hi/catplot.e73fc35fdf96242b.webp
new file mode 100644
index 000000000..31c6030ff
Binary files /dev/null and b/translated_images/hi/catplot.e73fc35fdf96242b.webp differ
diff --git a/translated_images/hi/heatmap.bd98dce43b404c57.webp b/translated_images/hi/heatmap.bd98dce43b404c57.webp
new file mode 100644
index 000000000..8cf70dfda
Binary files /dev/null and b/translated_images/hi/heatmap.bd98dce43b404c57.webp differ
diff --git a/translated_images/hi/lineplot.f9034ba47b1e30ee.webp b/translated_images/hi/lineplot.f9034ba47b1e30ee.webp
new file mode 100644
index 000000000..2bfc5c94a
Binary files /dev/null and b/translated_images/hi/lineplot.f9034ba47b1e30ee.webp differ
diff --git a/translated_images/hi/relplot.a03837d8f0329cec.webp b/translated_images/hi/relplot.a03837d8f0329cec.webp
new file mode 100644
index 000000000..d06a5da9f
Binary files /dev/null and b/translated_images/hi/relplot.a03837d8f0329cec.webp differ
diff --git a/translated_images/ja/.co-op-translator.json b/translated_images/ja/.co-op-translator.json
index 529c816f1..7600ca772 100644
--- a/translated_images/ja/.co-op-translator.json
+++ b/translated_images/ja/.co-op-translator.json
@@ -101,6 +101,12 @@
"source_file": "8-Reinforcement/2-Gym/images/cartpole.png",
"language_code": "ja"
},
+ "catplot.e73fc35fdf96242b.webp": {
+ "original_hash": "90cd4782a2f9b40dec8218b224b29c1c",
+ "translation_date": "2026-07-14T05:05:30+00:00",
+ "source_file": "2-Regression/2-Data/images/catplot.png",
+ "language_code": "ja"
+ },
"centroid.097fde836cf6c918.webp": {
"original_hash": "c8f866ed446563d8e59087f1bca1f97d",
"translation_date": "2026-01-16T10:15:24+00:00",
@@ -383,6 +389,12 @@
"source_file": "2-Regression/3-Linear/images/heatmap.png",
"language_code": "ja"
},
+ "heatmap.bd98dce43b404c57.webp": {
+ "original_hash": "7f2f2fbd993018bc01346e1eb8ae692e",
+ "translation_date": "2026-07-14T05:05:44+00:00",
+ "source_file": "2-Regression/2-Data/images/heatmap.png",
+ "language_code": "ja"
+ },
"hierarchical.bf59403aa43c8c47.webp": {
"original_hash": "50b9bc3298659c463ae76564ca645b12",
"translation_date": "2026-01-16T10:15:04+00:00",
@@ -473,6 +485,12 @@
"source_file": "2-Regression/3-Linear/images/linear.png",
"language_code": "ja"
},
+ "lineplot.f9034ba47b1e30ee.webp": {
+ "original_hash": "b3959c0ed0f02f668009c76b95c4ebbb",
+ "translation_date": "2026-07-14T05:05:51+00:00",
+ "source_file": "2-Regression/2-Data/images/lineplot.png",
+ "language_code": "ja"
+ },
"lobe.2fa0806408ef9923.webp": {
"original_hash": "e6ec71dbe350aef39135dbf88bc89163",
"translation_date": "2026-01-16T10:12:27+00:00",
@@ -743,6 +761,12 @@
"source_file": "2-Regression/3-Linear/images/recipes.png",
"language_code": "ja"
},
+ "relplot.a03837d8f0329cec.webp": {
+ "original_hash": "4733544cb1c2e58e987087283e66b4a5",
+ "translation_date": "2026-07-14T05:05:36+00:00",
+ "source_file": "2-Regression/2-Data/images/relplot.png",
+ "language_code": "ja"
+ },
"scaled.91897dfbaa26ca4a.webp": {
"original_hash": "789c70fafe6f6dd6e377a90b66e7d740",
"translation_date": "2026-01-16T10:25:40+00:00",
diff --git a/translated_images/ja/catplot.e73fc35fdf96242b.webp b/translated_images/ja/catplot.e73fc35fdf96242b.webp
new file mode 100644
index 000000000..94fae08e1
Binary files /dev/null and b/translated_images/ja/catplot.e73fc35fdf96242b.webp differ
diff --git a/translated_images/ja/heatmap.bd98dce43b404c57.webp b/translated_images/ja/heatmap.bd98dce43b404c57.webp
new file mode 100644
index 000000000..24fe98760
Binary files /dev/null and b/translated_images/ja/heatmap.bd98dce43b404c57.webp differ
diff --git a/translated_images/ja/lineplot.f9034ba47b1e30ee.webp b/translated_images/ja/lineplot.f9034ba47b1e30ee.webp
new file mode 100644
index 000000000..544d15beb
Binary files /dev/null and b/translated_images/ja/lineplot.f9034ba47b1e30ee.webp differ
diff --git a/translated_images/ja/relplot.a03837d8f0329cec.webp b/translated_images/ja/relplot.a03837d8f0329cec.webp
new file mode 100644
index 000000000..5a90ba7f3
Binary files /dev/null and b/translated_images/ja/relplot.a03837d8f0329cec.webp differ
diff --git a/translated_images/ko/.co-op-translator.json b/translated_images/ko/.co-op-translator.json
index 4e55f4369..c0db827f5 100644
--- a/translated_images/ko/.co-op-translator.json
+++ b/translated_images/ko/.co-op-translator.json
@@ -101,6 +101,12 @@
"source_file": "8-Reinforcement/2-Gym/images/cartpole.png",
"language_code": "ko"
},
+ "catplot.e73fc35fdf96242b.webp": {
+ "original_hash": "90cd4782a2f9b40dec8218b224b29c1c",
+ "translation_date": "2026-07-14T05:05:32+00:00",
+ "source_file": "2-Regression/2-Data/images/catplot.png",
+ "language_code": "ko"
+ },
"centroid.097fde836cf6c918.webp": {
"original_hash": "c8f866ed446563d8e59087f1bca1f97d",
"translation_date": "2026-01-16T10:15:27+00:00",
@@ -383,6 +389,12 @@
"source_file": "2-Regression/3-Linear/images/heatmap.png",
"language_code": "ko"
},
+ "heatmap.bd98dce43b404c57.webp": {
+ "original_hash": "7f2f2fbd993018bc01346e1eb8ae692e",
+ "translation_date": "2026-07-14T05:05:47+00:00",
+ "source_file": "2-Regression/2-Data/images/heatmap.png",
+ "language_code": "ko"
+ },
"hierarchical.bf59403aa43c8c47.webp": {
"original_hash": "50b9bc3298659c463ae76564ca645b12",
"translation_date": "2026-01-16T10:15:09+00:00",
@@ -473,6 +485,12 @@
"source_file": "2-Regression/3-Linear/images/linear.png",
"language_code": "ko"
},
+ "lineplot.f9034ba47b1e30ee.webp": {
+ "original_hash": "b3959c0ed0f02f668009c76b95c4ebbb",
+ "translation_date": "2026-07-14T05:05:55+00:00",
+ "source_file": "2-Regression/2-Data/images/lineplot.png",
+ "language_code": "ko"
+ },
"lobe.2fa0806408ef9923.webp": {
"original_hash": "e6ec71dbe350aef39135dbf88bc89163",
"translation_date": "2026-01-16T10:12:34+00:00",
@@ -743,6 +761,12 @@
"source_file": "2-Regression/3-Linear/images/recipes.png",
"language_code": "ko"
},
+ "relplot.a03837d8f0329cec.webp": {
+ "original_hash": "4733544cb1c2e58e987087283e66b4a5",
+ "translation_date": "2026-07-14T05:05:39+00:00",
+ "source_file": "2-Regression/2-Data/images/relplot.png",
+ "language_code": "ko"
+ },
"scaled.91897dfbaa26ca4a.webp": {
"original_hash": "789c70fafe6f6dd6e377a90b66e7d740",
"translation_date": "2026-01-16T10:25:41+00:00",
diff --git a/translated_images/ko/catplot.e73fc35fdf96242b.webp b/translated_images/ko/catplot.e73fc35fdf96242b.webp
new file mode 100644
index 000000000..fc11803b1
Binary files /dev/null and b/translated_images/ko/catplot.e73fc35fdf96242b.webp differ
diff --git a/translated_images/ko/heatmap.bd98dce43b404c57.webp b/translated_images/ko/heatmap.bd98dce43b404c57.webp
new file mode 100644
index 000000000..bc9018f08
Binary files /dev/null and b/translated_images/ko/heatmap.bd98dce43b404c57.webp differ
diff --git a/translated_images/ko/lineplot.f9034ba47b1e30ee.webp b/translated_images/ko/lineplot.f9034ba47b1e30ee.webp
new file mode 100644
index 000000000..86d8afbed
Binary files /dev/null and b/translated_images/ko/lineplot.f9034ba47b1e30ee.webp differ
diff --git a/translated_images/ko/relplot.a03837d8f0329cec.webp b/translated_images/ko/relplot.a03837d8f0329cec.webp
new file mode 100644
index 000000000..f06a930a0
Binary files /dev/null and b/translated_images/ko/relplot.a03837d8f0329cec.webp differ
diff --git a/translations/hi/.co-op-translator.json b/translations/hi/.co-op-translator.json
index 313a160d9..ff2278473 100644
--- a/translations/hi/.co-op-translator.json
+++ b/translations/hi/.co-op-translator.json
@@ -24,8 +24,8 @@
"language_code": "hi"
},
"1-Introduction/3-fairness/README.md": {
- "original_hash": "9a6b702d1437c0467e3c5c28d763dac2",
- "translation_date": "2025-09-05T10:22:56+00:00",
+ "original_hash": "0f00d72169a0d37eecfd16d71e01700a",
+ "translation_date": "2026-07-14T05:05:20+00:00",
"source_file": "1-Introduction/3-fairness/README.md",
"language_code": "hi"
},
@@ -54,8 +54,8 @@
"language_code": "hi"
},
"2-Regression/1-Tools/README.md": {
- "original_hash": "fa81d226c71d5af7a2cade31c1c92b88",
- "translation_date": "2025-09-05T10:15:47+00:00",
+ "original_hash": "0b8635427b582d03ea4ab7089b93e505",
+ "translation_date": "2026-07-14T05:00:51+00:00",
"source_file": "2-Regression/1-Tools/README.md",
"language_code": "hi"
},
@@ -72,8 +72,8 @@
"language_code": "hi"
},
"2-Regression/2-Data/README.md": {
- "original_hash": "7c077988328ebfe33b24d07945f16eca",
- "translation_date": "2025-09-05T10:16:34+00:00",
+ "original_hash": "a58b2c4d16c6b122643391745ac15af6",
+ "translation_date": "2026-07-14T05:02:04+00:00",
"source_file": "2-Regression/2-Data/README.md",
"language_code": "hi"
},
@@ -89,6 +89,12 @@
"source_file": "2-Regression/2-Data/solution/Julia/README.md",
"language_code": "hi"
},
+ "2-Regression/2-Data/solution/notebook.ipynb": {
+ "original_hash": "96b95f8cf473481f2f371de8156f1571",
+ "translation_date": "2026-07-14T04:38:28+00:00",
+ "source_file": "2-Regression/2-Data/solution/notebook.ipynb",
+ "language_code": "hi"
+ },
"2-Regression/3-Linear/README.md": {
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T20:43:13+00:00",
@@ -457,7 +463,7 @@
},
"8-Reinforcement/1-QLearning/README.md": {
"original_hash": "911efd5e595089000cb3c16fce1beab8",
- "translation_date": "2025-09-05T10:29:57+00:00",
+ "translation_date": "2026-07-14T05:03:20+00:00",
"source_file": "8-Reinforcement/1-QLearning/README.md",
"language_code": "hi"
},
@@ -481,7 +487,7 @@
},
"8-Reinforcement/2-Gym/README.md": {
"original_hash": "107d5bb29da8a562e7ae72262d251a75",
- "translation_date": "2025-09-05T10:30:41+00:00",
+ "translation_date": "2026-07-14T05:04:24+00:00",
"source_file": "8-Reinforcement/2-Gym/README.md",
"language_code": "hi"
},
@@ -581,6 +587,19 @@
"source_file": "TROUBLESHOOTING.md",
"language_code": "hi"
},
+ "__translation_failures__": {
+ "sketchnotes/LICENSE.md": {
+ "original_hash": "fba3b94d88bfb9b81369b869a1e9a20f",
+ "source_file": "sketchnotes/LICENSE.md",
+ "language_code": "hi",
+ "failure_date": "2026-07-14T04:59:56+00:00",
+ "status": "failed",
+ "error_type": "TranslationIncompleteError",
+ "error_message": "Markdown translation remained incomplete for chunk 1.1.1 of 'LICENSE.md', and the chunk could not be split further.",
+ "translator_version": "0.20.0",
+ "failure_policy_version": 1
+ }
+ },
"docs/_sidebar.md": {
"original_hash": "68dd06c685f6ce840e0acfa313352e7c",
"translation_date": "2025-09-03T23:14:17+00:00",
diff --git a/translations/hi/1-Introduction/3-fairness/README.md b/translations/hi/1-Introduction/3-fairness/README.md
index faed8ad46..e9280fa3a 100644
--- a/translations/hi/1-Introduction/3-fairness/README.md
+++ b/translations/hi/1-Introduction/3-fairness/README.md
@@ -1,161 +1,167 @@
-# जिम्मेदार AI के साथ मशीन लर्निंग समाधान बनाना
-
-
-> स्केच नोट: [Tomomi Imura](https://www.twitter.com/girlie_mac)
-
-## [पाठ से पहले का क्विज़](https://ff-quizzes.netlify.app/en/ml/)
+# जिम्मेदार AI के साथ मशीन लर्निंग समाधानों का निर्माण
+
+
+> स्केचनोट द्वारा [Tomomi Imura](https://www.twitter.com/girlie_mac)
+## [प्री-लेक्चर क्विज़](https://ff-quizzes.netlify.app/en/ml/)
+
## परिचय
-इस पाठ्यक्रम में, आप जानेंगे कि मशीन लर्निंग हमारे दैनिक जीवन को कैसे प्रभावित कर रही है। आज भी, सिस्टम और मॉडल स्वास्थ्य देखभाल निदान, ऋण स्वीकृति, या धोखाधड़ी का पता लगाने जैसे दैनिक निर्णय लेने के कार्यों में शामिल हैं। इसलिए यह महत्वपूर्ण है कि ये मॉडल भरोसेमंद परिणाम प्रदान करने के लिए अच्छी तरह से काम करें। जैसे किसी भी सॉफ़्टवेयर एप्लिकेशन में, AI सिस्टम भी अपेक्षाओं से चूक सकते हैं या अवांछनीय परिणाम दे सकते हैं। यही कारण है कि AI मॉडल के व्यवहार को समझना और समझाना आवश्यक है।
+इस पाठ्यक्रम में, आप खोज शुरू करेंगे कि मशीन लर्निंग हमारे दैनिक जीवन को कैसे प्रभावित कर रही है और कर सकती है। अभी भी, प्रणालियाँ और मॉडल रोज़मर्रा के निर्णय लेने के कार्यों में शामिल हैं, जैसे स्वास्थ्य देखभाल निदान, ऋण स्वीकृतियां या धोखाधड़ी का पता लगाना। इसलिए, यह महत्वपूर्ण है कि ये मॉडल विश्वसनीय परिणाम प्रदान करने के लिए अच्छी तरह से काम करें। किसी भी सॉफ़्टवेयर एप्लिकेशन की तरह, AI सिस्टम अपेक्षाओं पर खरे नहीं उतर सकते या अवांछित परिणामों का कारण बन सकते हैं। इसलिए, AI मॉडल के व्यवहार को समझना और समझाना आवश्यक है।
-कल्पना करें कि जब आप इन मॉडलों को बनाने के लिए उपयोग किए जा रहे डेटा में कुछ जनसांख्यिकी, जैसे जाति, लिंग, राजनीतिक दृष्टिकोण, धर्म, या असमान रूप से प्रतिनिधित्व करने वाले जनसांख्यिकी की कमी हो, तो क्या हो सकता है। अगर मॉडल का आउटपुट किसी विशेष जनसांख्यिकी को प्राथमिकता देता है, तो इसका एप्लिकेशन पर क्या प्रभाव पड़ेगा? इसके अलावा, जब मॉडल का परिणाम हानिकारक हो और लोगों को नुकसान पहुंचाए, तो क्या होगा? AI सिस्टम के व्यवहार के लिए कौन जिम्मेदार होगा? ये कुछ सवाल हैं जिनकी हम इस पाठ्यक्रम में जांच करेंगे।
+कल्पना कीजिए कि जब आप जिन डेटा का उपयोग इन मॉडलों के निर्माण के लिए कर रहे हैं, उनमें कुछ जनसांख्यिकी जैसे जाति, लिंग, राजनीतिक दृष्टिकोण, धर्म की कमी हो, या वे असंतुलित रूप से कुछ जनसांख्यिकीय समूहों का प्रतिनिधित्व करते हों। जब मॉडल का आउटपुट किसी जनसांख्यिकीय पक्षपात को प्रोत्साहित करता है तो क्या होता है? आवेदन के लिए इसका क्या परिणाम है? इसके अलावा, जब मॉडल का परिणाम प्रतिकूल होता है और लोगों के लिए हानिकारक होता है, तो क्या होता है? AI सिस्टम के व्यवहार के लिए कौन जिम्मेदार है? ये कुछ प्रश्न हैं जिनका हम इस पाठ्यक्रम में पता लगाएंगे।
इस पाठ में, आप:
-- मशीन लर्निंग में निष्पक्षता और इससे संबंधित हानियों के महत्व के बारे में जागरूकता बढ़ाएंगे।
-- असामान्य परिदृश्यों और बाहरी मूल्यों की जांच करने की प्रक्रिया से परिचित होंगे ताकि विश्वसनीयता और सुरक्षा सुनिश्चित की जा सके।
-- समावेशी सिस्टम डिज़ाइन करके सभी को सशक्त बनाने की आवश्यकता को समझेंगे।
-- डेटा और लोगों की गोपनीयता और सुरक्षा की रक्षा करने के महत्व का पता लगाएंगे।
-- AI मॉडल के व्यवहार को समझाने के लिए एक पारदर्शी दृष्टिकोण अपनाने के महत्व को देखेंगे।
-- यह समझेंगे कि AI सिस्टम में विश्वास बनाने के लिए जवाबदेही क्यों आवश्यक है।
+- मशीन लर्निंग में निष्पक्षता के महत्व और निष्पक्षता-संबंधी हानियों के बारे में जागरूकता बढ़ाएंगे।
+- विश्वसनीयता और सुरक्षा सुनिश्चित करने के लिए अपवादों और असामान्य परिदृश्यों की खोज के अभ्यास से परिचित होंगे।
+- समावेशी सिस्टम डिजाइन करके सभी को सशक्त बनाने की आवश्यकता को समझेंगे।
+- डेटा और लोगों की गोपनीयता और सुरक्षा की रक्षा के महत्व की जांच करेंगे।
+- AI मॉडलों के व्यवहार को समझाने के लिए ग्लास बॉक्स दृष्टिकोण की आवश्यकता को देखेंगे।
+- AI सिस्टमों में भरोसा बनाने के लिए जवाबदेही के महत्व के प्रति सावधान रहना सीखेंगे।
## पूर्वापेक्षा
-इस पाठ से पहले, कृपया "जिम्मेदार AI सिद्धांत" सीखने का पथ पूरा करें और नीचे दिए गए वीडियो को देखें:
+पूर्वापेक्षा के रूप में, कृपया "Responsible AI Principles" लर्न पाथ लें और नीचे दिए गए वीडियो को देखें:
-जिम्मेदार AI के बारे में अधिक जानने के लिए इस [लर्निंग पाथ](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) का अनुसरण करें।
+जिम्मेदार AI के बारे में अधिक जानने के लिए इस [लर्निंग पाथ](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) का अनुसरण करें
-[](https://youtu.be/dnC8-uUZXSc "Microsoft का जिम्मेदार AI के प्रति दृष्टिकोण")
+[](https://youtu.be/dnC8-uUZXSc "Microsoft का Responsible AI के प्रति दृष्टिकोण")
-> 🎥 ऊपर दी गई छवि पर क्लिक करें: Microsoft का जिम्मेदार AI के प्रति दृष्टिकोण
+> 🎥 ऊपर छवि पर क्लिक करें वीडियो के लिए: Microsoft का Responsible AI के प्रति दृष्टिकोण
## निष्पक्षता
-AI सिस्टम को सभी के साथ निष्पक्ष व्यवहार करना चाहिए और समान समूहों के लोगों को अलग-अलग तरीके से प्रभावित करने से बचना चाहिए। उदाहरण के लिए, जब AI सिस्टम चिकित्सा उपचार, ऋण आवेदन, या रोजगार पर मार्गदर्शन प्रदान करते हैं, तो उन्हें समान लक्षण, वित्तीय परिस्थितियों, या पेशेवर योग्यताओं वाले सभी लोगों को समान सिफारिशें देनी चाहिए। हम सभी मनुष्य अपनी निर्णय लेने की प्रक्रिया में अंतर्निहित पूर्वाग्रह रखते हैं। ये पूर्वाग्रह उस डेटा में भी दिखाई दे सकते हैं जिसका उपयोग हम AI सिस्टम को प्रशिक्षित करने के लिए करते हैं। कभी-कभी यह हेरफेर अनजाने में हो सकता है। यह जानबूझकर पहचानना कठिन हो सकता है कि आप डेटा में पूर्वाग्रह कब पेश कर रहे हैं।
+AI सिस्टम सभी के साथ निष्पक्ष व्यवहार करें और समान समूहों के लोगों के साथ भिन्न तरीकों से प्रभाव न डालें। उदाहरण के लिए, जब AI सिस्टम चिकित्सा उपचार, ऋण आवेदन या रोजगार पर मार्गदर्शन प्रदान करते हैं, तो वे समान लक्षण, वित्तीय परिस्थितियाँ या व्यावसायिक योग्यताओं वाले सभी को समान सिफारिशें करें। हममें से प्रत्येक मनुष्य विरासत में मिली पूर्वाग्रह लेकर चलता है, जो हमारे निर्णयों और कार्यों को प्रभावित करता है। ये पूर्वाग्रह उस डेटा में स्पष्ट हो सकते हैं जिसका हम AI सिस्टम के प्रशिक्षण के लिए उपयोग करते हैं। कभी-कभी ऐसा अनजाने में होता है। यह जानना अक्सर कठिन होता है कि आप डेटा में कब पूर्वाग्रह लाकर उसे प्रभावित कर रहे हैं।
-**"असमानता"** का मतलब है किसी समूह के लिए नकारात्मक प्रभाव या "हानियां", जैसे कि जाति, लिंग, आयु, या विकलांगता की स्थिति के संदर्भ में परिभाषित समूह। मुख्य निष्पक्षता-संबंधी हानियों को निम्नलिखित श्रेणियों में वर्गीकृत किया जा सकता है:
+**"अन्याय"** नकारात्मक प्रभावों या "हानियों" को दर्शाता है, जो किसी समूह के लिए हो सकती हैं, जैसे जाति, लिंग, उम्र या विकलांगता स्थिति के संदर्भ में परिभाषित। मुख्य निष्पक्षता-संबंधी हानियाँ निम्नलिखित प्रकार से वर्गीकृत की जा सकती हैं:
-- **आवंटन**: यदि किसी लिंग या जातीयता को दूसरे पर प्राथमिकता दी जाती है।
-- **सेवा की गुणवत्ता**: यदि आप डेटा को केवल एक विशिष्ट परिदृश्य के लिए प्रशिक्षित करते हैं, लेकिन वास्तविकता अधिक जटिल होती है, तो यह खराब प्रदर्शन वाली सेवा की ओर ले जाता है। उदाहरण के लिए, एक साबुन डिस्पेंसर जो गहरे रंग की त्वचा वाले लोगों को पहचानने में असमर्थ था। [संदर्भ](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
-- **अपमान**: किसी चीज़ या व्यक्ति की अनुचित आलोचना और लेबलिंग। उदाहरण के लिए, एक छवि लेबलिंग तकनीक ने काले रंग की त्वचा वाले लोगों की छवियों को गोरिल्ला के रूप में गलत लेबल किया।
-- **अधिक या कम प्रतिनिधित्व**: यह विचार कि एक निश्चित समूह को किसी पेशे में नहीं देखा जाता है, और कोई भी सेवा या कार्य जो इसे बढ़ावा देता है, वह नुकसान में योगदान देता है।
-- **रूढ़िबद्धता**: किसी दिए गए समूह को पूर्व-निर्धारित विशेषताओं के साथ जोड़ना। उदाहरण के लिए, अंग्रेजी और तुर्की के बीच एक भाषा अनुवाद प्रणाली में लिंग से संबंधित रूढ़ियों के कारण गलतियां हो सकती हैं।
+- **आवंटन**, यदि उदाहरण के लिए कोई लिंग या जातीयता दूसरे की तुलना में अधिक पसंद की जाए।
+- **सेवा की गुणवत्ता**। अगर आप किसी विशेष परिदृश्य के लिए डेटा का प्रशिक्षण करते हैं लेकिन वास्तविकता अधिक जटिल है, तो यह खराब प्रदर्शन वाली सेवा को जन्म देता है। उदाहरण के लिए, एक हाथ धोने का साबुन डिस्पेंसर जो गहरे रंग की त्वचा वाले लोगों को महसूस नहीं कर पाता। [संदर्भ](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
+- **अपमानजनक टिप्पणी**। किसी चीज़ या किसी के प्रति अन्यायपूर्ण आलोचना और लेबल लगाना। उदाहरण के लिए, एक इमेज लेबलिंग तकनीक ने कुख्यात रूप से गहरे रंग की त्वचा वाले लोगों की तस्वीरों को गोरिल्ला के रूप में गलत लेबल किया।
+- **अधिप्रतिनिधित्व या अतिप्रतिनिधित्व**। धारणा यह है कि किसी निश्चित समूह को किसी पेशे में नहीं देखा जाता, और कोई भी सेवा या फ़ंक्शन जो इसे बढ़ावा देता है वह हानि का योगदान देता है।
+- **स्टीरियोटाइपिंग**। किसी निर्दिष्ट समूह का पूर्व निर्धारित विशेषताओं के साथ जुड़ाव। उदाहरण के लिए, अंग्रेज़ी और तुर्की भाषा के बीच अनुवाद प्रणाली में ऐसे शब्दों के कारण गलतियां हो सकती हैं, जिनके लिंग से जुड़े पूर्वाग्रह होते हैं।
-
+
> तुर्की में अनुवाद
-
-> फिर से अंग्रेजी में अनुवाद
+
+> अंग्रेज़ी में वापस अनुवाद
-AI सिस्टम को डिज़ाइन और परीक्षण करते समय, हमें यह सुनिश्चित करना चाहिए कि AI निष्पक्ष हो और इसे पूर्वाग्रही या भेदभावपूर्ण निर्णय लेने के लिए प्रोग्राम न किया गया हो, जो मनुष्यों के लिए भी निषिद्ध हैं। AI और मशीन लर्निंग में निष्पक्षता सुनिश्चित करना एक जटिल सामाजिक-तकनीकी चुनौती बनी हुई है।
+AI सिस्टम डिजाइन और परीक्षण करते समय, हमें यह सुनिश्चित करना चाहिए कि AI निष्पक्ष हो और पक्षपातपूर्ण या भेदभावपूर्ण निर्णय लेने के लिए प्रोग्राम न किया गया हो, जो मनुष्यों को भी निषिद्ध है। AI और मशीन लर्निंग में निष्पक्षता को गारंटीकृत करना एक जटिल सामाजिक-तकनीकी चुनौती है।
### विश्वसनीयता और सुरक्षा
-विश्वास बनाने के लिए, AI सिस्टम को सामान्य और अप्रत्याशित परिस्थितियों में विश्वसनीय, सुरक्षित और सुसंगत होना चाहिए। यह जानना महत्वपूर्ण है कि AI सिस्टम विभिन्न परिस्थितियों में कैसा व्यवहार करेगा, विशेष रूप से जब वे असामान्य हों। AI समाधान बनाते समय, उन सभी संभावित परिस्थितियों को संभालने पर ध्यान केंद्रित करना आवश्यक है जिनका सामना AI समाधान कर सकता है। उदाहरण के लिए, एक स्वचालित कार को लोगों की सुरक्षा को सर्वोच्च प्राथमिकता देनी चाहिए। इसलिए, कार को चलाने वाले AI को सभी संभावित परिदृश्यों पर विचार करना चाहिए, जैसे रात, तूफान, बर्फ़ीला तूफ़ान, सड़क पर दौड़ते बच्चे, पालतू जानवर, सड़क निर्माण आदि। AI सिस्टम कितनी अच्छी तरह से विभिन्न परिस्थितियों को विश्वसनीय और सुरक्षित रूप से संभाल सकता है, यह डेटा वैज्ञानिक या AI डेवलपर द्वारा डिज़ाइन या परीक्षण के दौरान विचार किए गए पूर्वानुमान के स्तर को दर्शाता है।
+भरोसा बनाने के लिए, AI सिस्टम विश्वसनीय, सुरक्षित और सामान्य तथा अप्रत्याशित परिस्थितियों में स्थिर होने चाहिए। यह जानना महत्वपूर्ण है कि AI सिस्टम विभिन्न परिस्थितियों में कैसे व्यवहार करेंगे, विशेषकर जब वे अपवाद(आउटलेयर) हों। AI समाधान बनाते समय, विभिन्न प्रकार की परिस्थितियों का सामना करने के तरीके पर पर्याप्त ध्यान देना आवश्यक है। उदाहरण के लिए, स्वचालित चलने वाली कार को लोगों की सुरक्षा सर्वोच्च प्राथमिकता देनी चाहिए। इसलिए, उस कार को चलाने वाले AI को सभी संभावित परिदृश्यों पर विचार करना चाहिए, जैसे रात, तूफान या हिमपात, सड़क पार करते बच्चे, पालतू जानवर, सड़क निर्माण आदि। AI सिस्टम कितनी अच्छी तरह से इन विभिन्न परिस्थितियों को विश्वसनीय और सुरक्षित तरीके से हैंडल कर सकता है, यह इस बात पर निर्भर करता है कि डेटा वैज्ञानिक या AI डेवलपर ने डिजाइन या परीक्षण के दौरान कितनी अच्छी तरह से पूर्वानुमान लगाया।
-> [🎥 वीडियो के लिए यहां क्लिक करें: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
+> [🎥 वीडियो के लिए यहाँ क्लिक करें: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
-### समावेशिता
+### समावेशन
-AI सिस्टम को सभी को शामिल करने और सशक्त बनाने के लिए डिज़ाइन किया जाना चाहिए। AI सिस्टम को डिज़ाइन और लागू करते समय, डेटा वैज्ञानिक और AI डेवलपर सिस्टम में संभावित बाधाओं की पहचान करते हैं और उन्हें संबोधित करते हैं जो अनजाने में लोगों को बाहर कर सकती हैं। उदाहरण के लिए, दुनिया भर में 1 बिलियन लोग विकलांग हैं। AI की प्रगति के साथ, वे अपने दैनिक जीवन में अधिक आसानी से जानकारी और अवसरों तक पहुंच सकते हैं। बाधाओं को दूर करके, यह नवाचार के अवसर पैदा करता है और बेहतर अनुभवों के साथ AI उत्पादों को विकसित करता है जो सभी को लाभान्वित करते हैं।
+AI सिस्टम को इस तरह डिजाइन किया जाना चाहिए कि वे सभी को शामिल करें और सशक्त बनाएं। AI सिस्टम डिजाइन और क्रियान्वयन करते समय डेटा वैज्ञानिक और AI डेवलपर संभावित बाधाओं की पहचान कर उन्हें दूर करते हैं, जो अनजाने में लोगों को बाहर कर सकती हैं। उदाहरण के लिए, दुनिया भर में 1 अरब से अधिक लोग विकलांग हैं। AI के विकास के साथ, वे अपने दैनिक जीवन में आसानी से सूचना और अवसरों तक पहुंच सकते हैं। बाधाओं को दूर करके, बेहतर अनुभव के साथ AI उत्पाद विकसित करने और नवाचार के अवसर पैदा किए जा सकते हैं जो सभी के लिए लाभकारी हों।
-> [🎥 वीडियो के लिए यहां क्लिक करें: AI में समावेशिता](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
+> [🎥 AI में समावेशन के लिए यहाँ क्लिक करें वीडियो पर](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
### सुरक्षा और गोपनीयता
-AI सिस्टम को सुरक्षित होना चाहिए और लोगों की गोपनीयता का सम्मान करना चाहिए। लोग उन सिस्टमों पर कम विश्वास करते हैं जो उनकी गोपनीयता, जानकारी, या जीवन को जोखिम में डालते हैं। मशीन लर्निंग मॉडल को प्रशिक्षित करते समय, हम सर्वोत्तम परिणाम प्राप्त करने के लिए डेटा पर निर्भर करते हैं। ऐसा करते समय, डेटा की उत्पत्ति और अखंडता पर विचार करना आवश्यक है। उदाहरण के लिए, क्या डेटा उपयोगकर्ता द्वारा प्रस्तुत किया गया था या सार्वजनिक रूप से उपलब्ध था? इसके बाद, डेटा के साथ काम करते समय, यह महत्वपूर्ण है कि AI सिस्टम गोपनीय जानकारी की रक्षा कर सके और हमलों का विरोध कर सके। जैसे-जैसे AI अधिक प्रचलित होता जा रहा है, गोपनीयता की रक्षा करना और महत्वपूर्ण व्यक्तिगत और व्यावसायिक जानकारी को सुरक्षित रखना अधिक महत्वपूर्ण और जटिल होता जा रहा है। गोपनीयता और डेटा सुरक्षा के मुद्दों को AI के लिए विशेष रूप से ध्यान देने की आवश्यकता है क्योंकि डेटा तक पहुंच AI सिस्टम को लोगों के बारे में सटीक और सूचित भविष्यवाणियां और निर्णय लेने के लिए आवश्यक है।
+AI सिस्टम सुरक्षित होने चाहिए और लोगों की गोपनीयता का सम्मान करना चाहिए। लोग ऐसे सिस्टम पर कम भरोसा करते हैं जो उनकी गोपनीयता, जानकारी या जीवन को खतरे में डालते हैं। मशीन लर्निंग मॉडल को प्रशिक्षित करते समय, हम सर्वोत्तम परिणाम पाने के लिए डेटा पर निर्भर करते हैं। ऐसा करते समय, डेटा की उत्पत्ति और अखंडता पर विचार करना आवश्यक है। उदाहरण के लिए, क्या डेटा उपयोगकर्ता द्वारा प्रस्तुत किया गया था या सार्वजनिक रूप से उपलब्ध था? अगला, डेटा के साथ काम करते समय, ऐसे AI सिस्टम विकसित करना महत्वपूर्ण है जो गोपनीय जानकारी की रक्षा कर सके और हमलों का सामना कर सके। जैसे-जैसे AI अधिक प्रचलित हो रहा है, गोपनीयता की सुरक्षा और महत्वपूर्ण व्यक्तिगत और व्यावसायिक जानकारी की सुरक्षा अधिक महत्वपूर्ण और जटिल होती जा रही है। गोपनीयता और डेटा सुरक्षा के मुद्दे AI के लिए विशेष रूप से ध्यान देने योग्य हैं क्योंकि AI सिस्टमों को लोगों के बारे में सटीक और सूचित पूर्वानुमान और निर्णय लेने के लिए डेटा तक पहुंच आवश्यक है।
-> [🎥 वीडियो के लिए यहां क्लिक करें: AI में सुरक्षा](https://www.microsoft.com/videoplayer/embed/RE4voJF)
+> [🎥 AI में सुरक्षा के लिए यहाँ क्लिक करें वीडियो पर](https://www.microsoft.com/videoplayer/embed/RE4voJF)
-- उद्योग के रूप में हमने गोपनीयता और सुरक्षा में महत्वपूर्ण प्रगति की है, जो मुख्य रूप से GDPR (जनरल डेटा प्रोटेक्शन रेगुलेशन) जैसे नियमों द्वारा संचालित है।
-- फिर भी AI सिस्टम के साथ हमें यह स्वीकार करना होगा कि सिस्टम को अधिक व्यक्तिगत और प्रभावी बनाने के लिए अधिक व्यक्तिगत डेटा की आवश्यकता और गोपनीयता के बीच तनाव है।
-- जैसे इंटरनेट के साथ जुड़े कंप्यूटरों के जन्म के साथ, हम AI से संबंधित सुरक्षा मुद्दों की संख्या में भारी वृद्धि देख रहे हैं।
-- साथ ही, हमने सुरक्षा में सुधार के लिए AI का उपयोग होते देखा है। उदाहरण के लिए, अधिकांश आधुनिक एंटी-वायरस स्कैनर आज AI ह्यूरिस्टिक्स द्वारा संचालित हैं।
-- हमें यह सुनिश्चित करने की आवश्यकता है कि हमारे डेटा विज्ञान प्रक्रियाएं नवीनतम गोपनीयता और सुरक्षा प्रथाओं के साथ सामंजस्यपूर्ण रूप से मिश्रित हों।
+- एक उद्योग के रूप में, हमने GDPR (General Data Protection Regulation) जैसे नियमों के चलते गोपनीयता और सुरक्षा में उल्लेखनीय प्रगति की है।
+- फिर भी AI सिस्टमों के साथ हमें अधिक व्यक्तिगत डेटा की आवश्यकता और गोपनीयता के बीच टकराव को स्वीकार करना होगा।
+- ठीक वैसे ही जैसे इंटरनेट के साथ जुड़े कंप्यूटरों के जन्म के दौरान, AI से संबंधित सुरक्षा मुद्दों की संख्या में भी भारी वृद्धि देखी जा रही है।
+- साथ ही, हमने देखा है कि सुरक्षा सुधारने के लिए AI का उपयोग किया जा रहा है। उदाहरण के लिए, अधिकांश आधुनिक एंटी-वायरस स्कैनर आज AI ह्यूरिस्टिक्स द्वारा संचालित हैं।
+- हमें सुनिश्चित करना होगा कि हमारा डेटा साइंस प्रक्रियाएँ नवीनतम गोपनीयता और सुरक्षा प्रथाओं के साथ तालमेल में हों।
-### पारदर्शिता
-AI सिस्टम को समझने योग्य होना चाहिए। पारदर्शिता का एक महत्वपूर्ण हिस्सा AI सिस्टम और उनके घटकों के व्यवहार को समझाना है। AI सिस्टम की समझ में सुधार के लिए यह आवश्यक है कि हितधारक यह समझें कि वे कैसे और क्यों कार्य करते हैं ताकि वे संभावित प्रदर्शन मुद्दों, सुरक्षा और गोपनीयता चिंताओं, पूर्वाग्रहों, बहिष्करण प्रथाओं, या अनपेक्षित परिणामों की पहचान कर सकें। हम यह भी मानते हैं कि जो लोग AI सिस्टम का उपयोग करते हैं, उन्हें यह स्पष्ट और ईमानदारी से बताना चाहिए कि वे कब, क्यों, और कैसे उनका उपयोग करते हैं। साथ ही, उनके उपयोग की सीमाओं के बारे में भी जानकारी होनी चाहिए। उदाहरण के लिए, यदि कोई बैंक अपने उपभोक्ता ऋण निर्णयों का समर्थन करने के लिए AI सिस्टम का उपयोग करता है, तो यह महत्वपूर्ण है कि परिणामों की जांच की जाए और यह समझा जाए कि कौन सा डेटा सिस्टम की सिफारिशों को प्रभावित करता है। सरकारें उद्योगों में AI को विनियमित करना शुरू कर रही हैं, इसलिए डेटा वैज्ञानिकों और संगठनों को यह समझाना होगा कि AI सिस्टम नियामक आवश्यकताओं को पूरा करता है या नहीं, विशेष रूप से जब कोई अवांछनीय परिणाम होता है।
+### पारदर्शिता
+AI सिस्टम को समझने योग्य होना चाहिए। पारदर्शिता का एक महत्वपूर्ण हिस्सा AI सिस्टमों और उनके घटकों के व्यवहार की व्याख्या करना है। AI सिस्टमों की समझ में सुधार के लिए यह आवश्यक है कि हितधारक यह समझें कि वे कैसे और क्यों कार्य करते हैं ताकि वे संभावित प्रदर्शन समस्याओं, सुरक्षा और गोपनीयता चिंताओं, पूर्वाग्रह, बहिष्करण संबंधी प्रथाओं या अनपेक्षित परिणामों की पहचान कर सकें। हम यह भी मानते हैं कि जो लोग AI सिस्टमों का उपयोग करते हैं, उन्हें ईमानदार और स्पष्ट होना चाहिए कि वे कब, क्यों और कैसे इन्हें लागू करते हैं। साथ ही, जिन सिस्टमों का वे उपयोग करते हैं उनकी सीमाओं को समझाना भी आवश्यक है। उदाहरण के लिए, यदि कोई बैंक अपने उपभोक्ता ऋण निर्णयों का समर्थन करने के लिए AI सिस्टम का उपयोग करता है, तो परिणामों की जांच करना और यह समझना महत्वपूर्ण है कि कौन सा डेटा सिस्टम की सिफारिशों को प्रभावित करता है। सरकारें उद्योगों में AI को विनियमित करना शुरू कर रही हैं, इसलिए डेटा वैज्ञानिकों और संगठनों को यह समझाना होगा कि क्या कोई AI सिस्टम नियामक आवश्यकताओं को पूरा करता है, विशेष रूप से जब कोई अवांछित परिणाम होता है।
-> [🎥 वीडियो के लिए यहां क्लिक करें: AI में पारदर्शिता](https://www.microsoft.com/videoplayer/embed/RE4voJF)
+> [🎥 AI में पारदर्शिता के लिए यहाँ क्लिक करें वीडियो पर](https://www.microsoft.com/videoplayer/embed/RE4voJF)
-- क्योंकि AI सिस्टम इतने जटिल हैं, यह समझना कठिन है कि वे कैसे काम करते हैं और उनके परिणामों की व्याख्या कैसे करें।
-- इस समझ की कमी इन सिस्टमों के प्रबंधन, संचालन, और प्रलेखन को प्रभावित करती है।
-- यह समझ की कमी, विशेष रूप से, उन निर्णयों को प्रभावित करती है जो इन सिस्टमों द्वारा उत्पन्न परिणामों का उपयोग करके किए जाते हैं।
+- क्योंकि AI सिस्टम इतने जटिल हैं, यह समझना कठिन है कि वे कैसे काम करते हैं और परिणामों की व्याख्या कैसे करें।
+- इस समझ के अभाव का प्रभाव इन सिस्टमों के प्रबंधन, संचालन और प्रलेखन पर पड़ता है।
+- यह समझ के अभाव का सबसे महत्वपूर्ण प्रभाव उन निर्णयों पर पड़ता है जो इन सिस्टमों द्वारा उत्पन्न परिणामों के आधार पर लिए जाते हैं।
### जवाबदेही
+
+वे लोग जो AI सिस्टम डिजाइन और तैनात करते हैं, उन्हें अपने सिस्टम के संचालन के लिए जवाबदेह होना चाहिए। जवाबदेही की आवश्यकता विशेष रूप से संवेदनशील उपयोग जैसी तकनीकों के साथ महत्वपूर्ण होती है जैसे चेहरे की पहचान। हाल ही में, कानून प्रवर्तन संगठनों की ओर से चेहरे की पहचान तकनीक की मांग बढ़ रही है, जो इससे खोए हुए बच्चों को खोजने जैसे उपयोग देखते हैं। हालांकि, ये तकनीकें संभावित रूप से सरकार द्वारा अपने नागरिकों की मौलिक स्वतंत्रताओं को जोखिम में डालने के लिए उपयोग की जा सकती हैं, उदाहरण के लिए, विशिष्ट व्यक्तियों की निरंतर निगरानी सक्षम करके। इसलिए, डेटा वैज्ञानिकों और संगठनों को जिम्मेदार होना चाहिए कि उनका AI सिस्टम व्यक्तियों या समाज पर कैसे प्रभाव डालता है।
-जो लोग AI सिस्टम डिज़ाइन और तैनात करते हैं, उन्हें यह सुनिश्चित करना चाहिए कि उनके सिस्टम कैसे काम करते हैं, इसके लिए वे जवाबदेह हों। जवाबदेही की आवश्यकता विशेष रूप से संवेदनशील उपयोग प्रौद्योगिकियों जैसे चेहरे की पहचान के साथ महत्वपूर्ण है। हाल ही में, चेहरे की पहचान तकनीक की मांग बढ़ रही है, विशेष रूप से कानून प्रवर्तन संगठनों से जो इस तकनीक की क्षमता को लापता बच्चों को खोजने जैसे उपयोगों में देखते हैं। हालांकि, इन तकनीकों का उपयोग सरकार द्वारा नागरिकों की मौलिक स्वतंत्रताओं को खतरे में डालने के लिए किया जा सकता है, जैसे कि विशिष्ट व्यक्तियों की निरंतर निगरानी को सक्षम करना। इसलिए, डेटा वैज्ञानिकों और संगठनों को यह सुनिश्चित करना चाहिए कि उनके AI सिस्टम का प्रभाव व्यक्तियों या समाज पर जिम्मेदार हो।
+[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft का Responsible AI के प्रति दृष्टिकोण")
-[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft का जिम्मेदार AI के प्रति दृष्टिकोण")
+> 🎥 ऊपर छवि पर क्लिक करें वीडियो के लिए: चेहरे की पहचान के जरिए व्यापक निगरानी की चेतावनियाँ
-> 🎥 ऊपर दी गई छवि पर क्लिक करें: चेहरे की पहचान के माध्यम से बड़े पैमाने पर निगरानी की चेतावनी
+अंततः, हमारी पीढ़ी के लिए सबसे बड़ा सवाल यह है, जो AI को समाज में ला रही है, कि यह कैसे सुनिश्चित करें कि कंप्यूटर लोगों के प्रति जवाबदेह बने रहें और वे लोग जो कंप्यूटर डिजाइन करते हैं, वे सभी के प्रति जवाबदेह बने रहें।
-आखिरकार, हमारे युग के लिए सबसे बड़े सवालों में से एक यह है कि, AI को समाज में लाने वाली पहली पीढ़ी के रूप में, हम यह कैसे सुनिश्चित करेंगे कि कंप्यूटर लोगों के प्रति जवाबदेह बने रहें और यह सुनिश्चित करें कि कंप्यूटर डिज़ाइन करने वाले लोग बाकी सभी के प्रति जवाबदेह बने रहें।
+## प्रभाव आकलन
-## प्रभाव मूल्यांकन
+मशीन लर्निंग मॉडल प्रशिक्षित करने से पहले, यह महत्वपूर्ण है कि प्रभाव आकलन किया जाए ताकि AI सिस्टम के उद्देश्य, इसके उपयोग क्षेत्र, कहां लागू किया जाएगा और कौन इस सिस्टम के साथ बातचीत करेगा, ये समझा जा सके। समीक्षा करने वाले या परीक्षणकर्ता यह जान पाते हैं कि संभावित जोखिम और अपेक्षित परिणामों की पहचान करते समय किन पहलुओं पर ध्यान देना है।
-मशीन लर्निंग मॉडल को प्रशिक्षित करने से पहले, AI सिस्टम के उद्देश्य को समझने के लिए प्रभाव मूल्यांकन करना महत्वपूर्ण है; इसका इरादा उपयोग क्या है; इसे कहाँ तैनात किया जाएगा; और कौन सिस्टम के साथ इंटरैक्ट करेगा। ये समीक्षक या परीक्षक के लिए सहायक होते हैं ताकि वे संभावित जोखिमों और अपेक्षित परिणामों की पहचान करते समय किन कारकों पर विचार करें, यह जान सकें।
+प्रभाव आकलन करते समय निम्न क्षेत्र ध्यान केंद्रित किए जाते हैं:
-प्रभाव मूल्यांकन करते समय ध्यान केंद्रित करने के क्षेत्र निम्नलिखित हैं:
+* **व्यक्तियों पर प्रतिकूल प्रभाव**। किसी भी प्रतिबंध, आवश्यकताओं, अनुचित उपयोग या ज्ञात सीमाओं के प्रति जागरूक रहना आवश्यक है ताकि यह सुनिश्चित किया जा सके कि सिस्टम का उपयोग ऐसे तरीके से न हो जो व्यक्तियों को हानि पहुंचाए।
+* **डेटा आवश्यकताएँ**। यह समझना कि सिस्टम डेटा का उपयोग कैसे और कहां करेगा, समीक्षकों को डेटा आवश्यकताओं (जैसे, GDPR या HIPAA डेटा नियम) के प्रति जागरूक होने में सक्षम बनाता है। इसके अलावा, जांचें कि प्रशिक्षण के लिए स्रोत या डेटा की मात्रा पर्याप्त है या नहीं।
+* **प्रभाव का सारांश**। सिस्टम के उपयोग से उत्पन्न होने वाली संभावित हानियों की सूची एकत्र करें। ML जीवनचक्र के दौरान, जाँचे कि पहचानी गई समस्याएँ कम या सुलझाई गई हैं या नहीं।
+* छह प्रमुख सिद्धांतों में से प्रत्येक के लिए **लागू उद्देश्यों**। यह आकलन करें कि सिद्धांतों के लक्ष्य पूरे होते हैं या कोई अंतराल है।
-* **व्यक्तियों पर प्रतिकूल प्रभाव**: किसी भी प्रतिबंध या आवश्यकताओं, असमर्थित उपयोग, या किसी भी ज्ञात सीमाओं के बारे में जागरूक होना जो सिस्टम के प्रदर्शन को बाधित कर सकती हैं, यह सुनिश्चित करने के लिए महत्वपूर्ण है कि सिस्टम का उपयोग इस तरह से न हो जो व्यक्तियों को नुकसान पहुंचा सके।
-* **डेटा आवश्यकताएं**: यह समझना कि सिस्टम डेटा का उपयोग कैसे और कहाँ करेगा, समीक्षकों को उन डेटा आवश्यकताओं का पता लगाने में सक्षम बनाता है जिनका आपको ध्यान रखना चाहिए (जैसे, GDPR या HIPPA डेटा नियम)। इसके अलावा, यह जांचें कि क्या डेटा का स्रोत या मात्रा प्रशिक्षण के लिए पर्याप्त है।
-* **प्रभाव का सारांश**: संभावित हानियों की एक सूची एकत्र करें जो सिस्टम का उपयोग करने से उत्पन्न हो सकती हैं। ML जीवनचक्र के दौरान, यह समीक्षा करें कि पहचानी गई समस्याओं को कम किया गया है या संबोधित किया गया है।
-* **प्रत्येक छह मुख्य सिद्धांतों के लिए लागू लक्ष्य**: मूल्यांकन करें कि क्या प्रत्येक सिद्धांत के लक्ष्यों को पूरा किया गया है और क्या कोई अंतराल है।
## जिम्मेदार AI के साथ डिबगिंग
-जैसे सॉफ़्टवेयर एप्लिकेशन को डिबग करना आवश्यक है, वैसे ही AI सिस्टम को डिबग करना भी आवश्यक है ताकि सिस्टम में समस्याओं की पहचान की जा सके और उन्हें हल किया जा सके। कई कारक हैं जो एक मॉडल को अपेक्षित या जिम्मेदार तरीके से प्रदर्शन करने से रोक सकते हैं। अधिकांश पारंपरिक मॉडल प्रदर्शन मेट्रिक्स मॉडल के प्रदर्शन के मात्रात्मक समुच्चय होते हैं, जो यह विश्लेषण करने के लिए पर्याप्त नहीं हैं कि मॉडल जिम्मेदार AI सिद्धांतों का उल्लंघन कैसे करता है। इसके अलावा, मशीन लर्निंग मॉडल एक ब्लैक बॉक्स है जो यह समझना कठिन बनाता है कि इसके परिणामों को क्या प्रेरित करता है या जब यह गलती करता है तो स्पष्टीकरण प्रदान करता है। इस पाठ्यक्रम में बाद में, हम जिम्मेदार AI डैशबोर्ड का उपयोग करना सीखेंगे ताकि AI सिस्टम को डिबग करने में मदद मिल सके। डैशबोर्ड डेटा वैज्ञानिकों और AI डेवलपर्स के लिए एक समग्र उपकरण प्रदान करता है ताकि वे निम्नलिखित कार्य कर सकें:
+किसी सॉफ़्टवेयर एप्लिकेशन की तरह ही, AI सिस्टम की डिबगिंग आवश्यक प्रक्रिया है जो सिस्टम की समस्याओं की पहचान और समाधान करती है। कई ऐसे कारक होते हैं जो एक मॉडल को अपेक्षित या जिम्मेदार तरीके से प्रदर्शन न करने पर प्रभाव डालते हैं। अधिकांश पारंपरिक मॉडल प्रदर्शन मीट्रिक्स मॉडल के प्रदर्शन के मात्रात्मक सारांश हैं, जो यह विश्लेषण करने के लिए पर्याप्त नहीं हैं कि मॉडल जिम्मेदार AI सिद्धांतों का उल्लंघन कैसे करता है। इसके अलावा, एक मशीन लर्निंग मॉडल एक ब्लैक बॉक्स होता है जिससे यह समझना मुश्किल हो जाता है कि उसके परिणाम को क्या प्रेरित करता है या जब वह गलती करता है तो उसकी व्याख्या देना कठिन होता है। इस कोर्स के आगे के भाग में, हम जिम्मेदार AI डैशबोर्ड का उपयोग करना सीखेंगे जो AI सिस्टम डिबग करने में मदद करता है। यह डैशबोर्ड डेटा वैज्ञानिकों और AI डेवलपर्स के लिए एक समग्र उपकरण प्रदान करता है:
-* **त्रुटि विश्लेषण**: मॉडल की त्रुटि वितरण की पहचान करने के लिए जो सिस्टम की निष्पक्षता या विश्वसनीयता को प्रभावित कर सकता है।
-* **मॉडल अवलोकन**: यह पता लगाने के लिए कि डेटा समूहों में मॉडल के प्रदर्शन में असमानताएं कहाँ हैं।
-* **डेटा विश्लेषण**: डेटा वितरण को समझने और डेटा में किसी भी संभावित पूर्वाग्रह की पहचान करने के लिए जो निष्पक्षता, समावेशिता, और विश्वसनीयता के मुद्दों को जन्म दे सकता है।
-* **मॉडल व्याख्या**: यह समझने के लिए कि मॉडल की भविष्यवाणियों को क्या प्रभावित करता है। यह मॉडल के व्यवहार को समझाने में मदद करता है, जो पारदर्शिता और जवाबदेही के लिए महत्वपूर्ण है।
+* **त्रुटि विश्लेषण**। मॉडल की त्रुटियों का वितरण पहचानने के लिए जो सिस्टम की निष्पक्षता या विश्वसनीयता प्रभावित कर सकते हैं।
+* **मॉडल अवलोकन**। यह जानने के लिए कि डेटा समूहों के प्रदर्शन में कहाँ असमानताएं हैं।
+* **डेटा विश्लेषण**। डेटा वितरण को समझने और ऐसे संभावित पूर्वाग्रह की पहचान करने के लिए जो निष्पक्षता, समावेशन और विश्वसनीयता से संबंधित समस्याएँ पैदा कर सकता है।
+* **मॉडल व्याख्यात्मकता**। यह समझने के लिए कि मॉडल के पूर्वानुमानों को क्या प्रभावित करता है। यह मॉडल के व्यवहार को समझाने में मदद करता है, जो पारदर्शिता और जवाबदेही के लिए महत्वपूर्ण है।
-## 🚀 चुनौती
-हानियों को पहली जगह में पेश होने से रोकने के लिए, हमें:
+## 🚀 चुनौती
+
+हानियों को शुरू में ही रोकने के लिए, हमें:
-- सिस्टम पर काम करने वाले लोगों में पृष्ठभूमि और दृष्टिकोण की विविधता होनी चाहिए।
-- ऐसे डेटासेट में निवेश करना चाहिए जो हमारे समाज की विविधता को दर्शाते हों।
-- मशीन लर्निंग जीवनचक्र के दौरान जिम्मेदार AI का पता लगाने और सुधारने के लिए बेहतर तरीकों का विकास करना चाहिए।
+- सिस्टम पर काम करने वाले लोगों के बीच पृष्ठभूमि और दृष्टिकोण में विविधता होनी चाहिए।
+- ऐसे डेटासेट्स में निवेश करें जो हमारे समाज की विविधता को दर्शाते हों।
+- मशीन लर्निंग जीवनचक्र के दौरान जिम्मेदार AI के किसी भी उल्लंघन का पता लगाने और सुधारने के लिए बेहतर विधियाँ विकसित करें।
-उन वास्तविक जीवन परिदृश्यों के बारे में सोचें जहां मॉडल की अविश्वसनीयता मॉडल-निर्माण और उपयोग में स्पष्ट है। हमें और क्या विचार करना चाहिए?
+वास्तविक जीवन के परिदृश्यों के बारे में सोचें जहाँ मॉडल की अविश्वसनीयता मॉडल निर्माण और उपयोग में स्पष्ट हो। हमें और क्या विचार करना चाहिए?
-## [पाठ के बाद का क्विज़](https://ff-quizzes.netlify.app/en/ml/)
+## [पोस्ट-लेक्चर क्विज़](https://ff-quizzes.netlify.app/en/ml/)
-## समीक्षा और स्व-अध्ययन
+## पुनरावलोकन और स्व-अध्ययन
+
-इस पाठ में, आपने मशीन लर्निंग में निष्पक्षता और असमानता की अवधारणाओं की कुछ मूल बातें सीखी हैं।
-इस कार्यशाला को देखें ताकि विषयों को गहराई से समझा जा सके:
+इस पाठ में, आपने मशीन लर्निंग में निष्पक्षता और अन्याय के कुछ मूलभूत सिद्धांतों के बारे में सीखा है।
+
+इन विषयों में गहराई से जाने के लिए इस कार्यशाला को देखें:
-- जिम्मेदार AI की खोज में: सिद्धांतों को व्यवहार में लाने पर Besmira Nushi, Mehrnoosh Sameki और Amit Sharma द्वारा प्रस्तुति
+- जिम्मेदार एआई के प्रयास में: सिद्धांतों को अभ्यास में लाना, लेखक: बेस्मिरा नूशी, मेहरनूश सामेकी और अमित शर्मा
-[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: जिम्मेदार AI बनाने के लिए एक ओपन-सोर्स फ्रेमवर्क")
+[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: An open-source framework for building responsible AI")
-> 🎥 ऊपर दी गई छवि पर क्लिक करें वीडियो के लिए: RAI Toolbox: जिम्मेदार AI बनाने के लिए एक ओपन-सोर्स फ्रेमवर्क, Besmira Nushi, Mehrnoosh Sameki और Amit Sharma द्वारा
+> 🎥 वीडियो के लिए ऊपर दिए गए चित्र पर क्लिक करें: RAI Toolbox: बेस्मिरा नूशी, मेहरनूश सामेकी, और अमित शर्मा द्वारा जिम्मेदार एआई के लिए एक ओपन-सोर्स फ्रेमवर्क
-साथ ही पढ़ें:
+साथ ही, पढ़ें:
-- Microsoft का RAI संसाधन केंद्र: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
+- माइक्रोसॉफ्ट का RAI संसाधन केंद्र: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
-- Microsoft का FATE अनुसंधान समूह: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
+- माइक्रोसॉफ्ट का FATE अनुसंधान समूह: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
-RAI Toolbox:
+RAI टूलबॉक्स:
-- [Responsible AI Toolbox GitHub रिपॉजिटरी](https://github.com/microsoft/responsible-ai-toolbox)
+- [Responsible AI Toolbox GitHub repository](https://github.com/microsoft/responsible-ai-toolbox)
-Azure Machine Learning के उपकरणों के बारे में पढ़ें जो निष्पक्षता सुनिश्चित करते हैं:
+निष्पक्षता सुनिश्चित करने के लिए Azure Machine Learning के उपकरणों के बारे में पढ़ें:
-- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
+- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
## असाइनमेंट
-[RAI Toolbox का अन्वेषण करें](assignment.md)
+[RAI टूलबॉक्स खोजें](assignment.md)
---
-**अस्वीकरण**:
-यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
\ No newline at end of file
+
+**अस्वीकरण**:
+इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
+
\ No newline at end of file
diff --git a/translations/hi/2-Regression/1-Tools/README.md b/translations/hi/2-Regression/1-Tools/README.md
index f4e043828..afd79bbb6 100644
--- a/translations/hi/2-Regression/1-Tools/README.md
+++ b/translations/hi/2-Regression/1-Tools/README.md
@@ -1,8 +1,8 @@
-# Python और Scikit-learn के साथ रिग्रेशन मॉडल्स शुरू करें
+# रिग्रेशन मॉडल्स के लिए पाइथन और साइकीट-लर्न के साथ शुरुआत करें
-
+
-> स्केच नोट [Tomomi Imura](https://www.twitter.com/girlie_mac) द्वारा
+> स्केचनोट द्वारा [तोमौमी इमूरा](https://www.twitter.com/girlie_mac)
## [प्री-लेक्चर क्विज़](https://ff-quizzes.netlify.app/en/ml/)
@@ -10,111 +10,112 @@
## परिचय
-इन चार पाठों में, आप सीखेंगे कि रिग्रेशन मॉडल्स कैसे बनाए जाते हैं। हम जल्द ही चर्चा करेंगे कि इनका उपयोग किस लिए किया जाता है। लेकिन कुछ भी शुरू करने से पहले, सुनिश्चित करें कि आपके पास सही उपकरण हैं ताकि आप प्रक्रिया शुरू कर सकें!
+इन चार पाठों में, आप सीखेंगे कि रिग्रेशन मॉडल कैसे बनाएं। हम थोड़ी देर में चर्चा करेंगे कि ये क्या हैं। लेकिन इससे पहले कि आप कुछ भी करें, सुनिश्चित करें कि आपके पास प्रक्रिया शुरू करने के लिए सही उपकरण हैं!
-इस पाठ में, आप सीखेंगे:
+इस पाठ में, आप सीखेंगे कि कैसे:
-- अपने कंप्यूटर को स्थानीय मशीन लर्निंग कार्यों के लिए कॉन्फ़िगर करना।
-- Jupyter नोटबुक्स के साथ काम करना।
-- Scikit-learn का उपयोग करना, जिसमें इंस्टॉलेशन शामिल है।
-- एक हैंड्स-ऑन अभ्यास के साथ लीनियर रिग्रेशन का अन्वेषण करना।
+- अपने कंप्यूटर को स्थानीय मशीन लर्निंग कार्यों के लिए कॉन्फ़िगर करें।
+- जुपिटर नोटबुक्स के साथ काम करें।
+- साइकीट-लर्न का उपयोग करें, इंस्टॉलेशन सहित।
+- एक हैंड्स-ऑन अभ्यास के साथ लीनियर रिग्रेशन का अन्वेषण करें।
## इंस्टॉलेशन और कॉन्फ़िगरेशन
-[](https://youtu.be/-DfeD2k2Kj0 "मशीन लर्निंग के लिए शुरुआती - अपने उपकरण सेटअप करें")
+[](https://youtu.be/-DfeD2k2Kj0 "शुरुआती के लिए एमएल - मशीन लर्निंग मॉडल बनाने के लिए अपने उपकरण तैयार करें")
-> 🎥 ऊपर दी गई छवि पर क्लिक करें ताकि आप अपने कंप्यूटर को मशीन लर्निंग के लिए कॉन्फ़िगर करने की प्रक्रिया देख सकें।
+> 🎥 ऊपर दिए गए चित्र पर क्लिक करें एक लघु वीडियो के लिए, जो आपके कंप्यूटर को एमएल के लिए कॉन्फ़िगर करने की प्रक्रिया दिखाता है।
-1. **Python इंस्टॉल करें**। सुनिश्चित करें कि [Python](https://www.python.org/downloads/) आपके कंप्यूटर पर इंस्टॉल है। आप डेटा साइंस और मशीन लर्निंग कार्यों के लिए Python का उपयोग करेंगे। अधिकांश कंप्यूटर सिस्टम में पहले से ही Python इंस्टॉल होता है। कुछ उपयोगकर्ताओं के लिए सेटअप को आसान बनाने के लिए उपयोगी [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) भी उपलब्ध हैं।
+1. **पायथन इंस्टॉल करें**। सुनिश्चित करें कि [पायथन](https://www.python.org/downloads/) आपके कंप्यूटर पर इंस्टॉल है। आप कई डेटा साइंस और मशीन लर्निंग कार्यों के लिए पायथन का उपयोग करेंगे। अधिकांश कंप्यूटर सिस्टम में पहले से पायथन इंस्टॉल होता है। कुछ उपयोगकर्ताओं के लिए सेटअप को आसान बनाने के लिए उपयोगी [पायथन कोडिंग पैक्स](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) भी उपलब्ध हैं।
- हालांकि, Python के कुछ उपयोगों के लिए सॉफ़्टवेयर का एक संस्करण आवश्यक होता है, जबकि अन्य के लिए अलग संस्करण। इस कारण से, [वर्चुअल एनवायरनमेंट](https://docs.python.org/3/library/venv.html) में काम करना उपयोगी होता है।
+ पायथन के कुछ उपयोग एक सॉफ्टवेयर संस्करण की मांग करते हैं, जबकि दूसरे उपयोग किसी भिन्न संस्करण की। इसलिए, एक [वर्चुअल एन्वायरनमेंट](https://docs.python.org/3/library/venv.html) के भीतर काम करना उपयोगी होता है।
-2. **Visual Studio Code इंस्टॉल करें**। सुनिश्चित करें कि आपके कंप्यूटर पर Visual Studio Code इंस्टॉल है। [Visual Studio Code इंस्टॉल करने](https://code.visualstudio.com/) के लिए इन निर्देशों का पालन करें। इस पाठ्यक्रम में आप Visual Studio Code में Python का उपयोग करेंगे, इसलिए आप [Python विकास के लिए Visual Studio Code को कॉन्फ़िगर करने](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) के बारे में जानकारी प्राप्त कर सकते हैं।
+2. **विज़ुअल स्टूडियो कोड इंस्टॉल करें**। सुनिश्चित करें कि आपके कंप्यूटर पर विज़ुअल स्टूडियो कोड इंस्टॉल है। बुनियादी इंस्टॉलेशन के लिए इन निर्देशों का पालन करें [विज़ुअल स्टूडियो कोड इंस्टॉल करें](https://code.visualstudio.com/)। इस पाठ्यक्रम में आप विज़ुअल स्टूडियो कोड में पायथन का उपयोग करेंगे, इसलिए आप सीख सकते हैं कि कैसे [विज़ुअल स्टूडियो कोड को पायथन विकास के लिए कॉन्फ़िगर करें](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott)।
- > Python के साथ सहज होने के लिए इस [Learn modules](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) संग्रह को देखें।
+ > इस संग्रह के माध्यम से काम करके पायथन के साथ सहज हो जाएं [लर्न मॉड्यूल्स](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
>
- > [](https://youtu.be/yyQM70vi7V8 "Python को Visual Studio Code के साथ सेटअप करें")
+ > [](https://youtu.be/yyQM70vi7V8 "विज़ुअल स्टूडियो कोड के साथ पायथन सेटअप करें")
>
- > 🎥 ऊपर दी गई छवि पर क्लिक करें ताकि आप Python को VS Code में उपयोग करने की प्रक्रिया देख सकें।
+ > 🎥 ऊपर दिए गए चित्र पर क्लिक करें एक वीडियो के लिए: VS कोड में पायथन का उपयोग करना।
-3. **Scikit-learn इंस्टॉल करें**, [इन निर्देशों](https://scikit-learn.org/stable/install.html) का पालन करके। चूंकि आपको Python 3 का उपयोग सुनिश्चित करना है, इसलिए वर्चुअल एनवायरनमेंट का उपयोग करने की सिफारिश की जाती है। ध्यान दें, यदि आप इस लाइब्रेरी को M1 Mac पर इंस्टॉल कर रहे हैं, तो ऊपर दिए गए पृष्ठ पर विशेष निर्देश हैं।
+3. **साइकीट-लर्न इंस्टॉल करें**, इन [निर्देशों](https://scikit-learn.org/stable/install.html) का पालन करते हुए। चूंकि आपको पायथन 3 का उपयोग सुनिश्चित करना है, इसलिए वर्चुअल एन्वायरनमेंट का उपयोग करने की सलाह दी जाती है। ध्यान दें, अगर आप इसे M1 Mac पर इंस्टॉल कर रहे हैं, तो ऊपर दिए लिंक पर विशेष निर्देश हैं।
-4. **Jupyter Notebook इंस्टॉल करें**। आपको [Jupyter पैकेज](https://pypi.org/project/jupyter/) इंस्टॉल करना होगा।
+1. **जुपिटर नोटबुक इंस्टॉल करें**। आपको [जुपिटर पैकेज इंस्टॉल करना](https://pypi.org/project/jupyter/) होगा।
-## आपका मशीन लर्निंग लेखन वातावरण
+## आपका एमएल लेखन वातावरण
-आप **नोटबुक्स** का उपयोग करके Python कोड विकसित करेंगे और मशीन लर्निंग मॉडल बनाएंगे। यह प्रकार की फाइल डेटा वैज्ञानिकों के लिए एक सामान्य उपकरण है, और इन्हें उनके `.ipynb` एक्सटेंशन से पहचाना जा सकता है।
+आप **नोटबुक्स** का उपयोग करेंगे अपने पायथन कोड का विकास करने और मशीन लर्निंग मॉडल बनाने के लिए। इस प्रकार की फाइल डेटा वैज्ञानिकों के लिए एक सामान्य उपकरण है, और इन्हें उनकी प्रत्यय या एक्सटेंशन `.ipynb` से पहचाना जा सकता है।
-नोटबुक्स एक इंटरैक्टिव वातावरण हैं जो डेवलपर को कोड लिखने और उसके आसपास नोट्स और दस्तावेज़ जोड़ने की अनुमति देते हैं, जो शोध-उन्मुख परियोजनाओं के लिए काफी उपयोगी है।
+नोटबुक्स एक इंटरैक्टिव वातावरण हैं जो डेवलपर को कोड लिखने के साथ ही उसके आसपास नोट्स और दस्तावेज़ भी जोड़ने की अनुमति देते हैं, जो प्रयोगात्मक या शोध-उन्मुख परियोजनाओं के लिए बहुत सहायक होता है।
-[](https://youtu.be/7E-jC8FLA2E "मशीन लर्निंग के लिए शुरुआती - Jupyter नोटबुक्स सेटअप करें")
+[](https://youtu.be/7E-jC8FLA2E "शुरुआती के लिए एमएल - रिग्रेशन मॉडल बनाने के लिए जुपिटर नोटबुक सेटअप करें")
-> 🎥 ऊपर दी गई छवि पर क्लिक करें ताकि आप इस अभ्यास की प्रक्रिया देख सकें।
+> 🎥 ऊपर दिए गए चित्र पर क्लिक करें इस अभ्यास के माध्यम से एक लघु वीडियो के लिए।
-### अभ्यास - नोटबुक के साथ काम करें
+### अभ्यास - एक नोटबुक के साथ काम करें
-इस फ़ोल्डर में, आपको _notebook.ipynb_ नामक फाइल मिलेगी।
+इस फ़ोल्डर में, आपको फाइल _notebook.ipynb_ मिलेगी।
-1. _notebook.ipynb_ को Visual Studio Code में खोलें।
+1. विज़ुअल स्टूडियो कोड में _notebook.ipynb_ खोलें।
- एक Jupyter सर्वर Python 3+ के साथ शुरू होगा। आप नोटबुक के उन क्षेत्रों को पाएंगे जिन्हें `run` किया जा सकता है, यानी कोड के टुकड़े। आप कोड ब्लॉक को चलाने के लिए उस आइकन का चयन कर सकते हैं जो प्ले बटन जैसा दिखता है।
+ एक जुपिटर सर्वर पायथन 3+ के साथ शुरू हो जाएगा। आपको नोटबुक के ऐसे भाग मिलेंगे जिन्हें `run` किया जा सकता है, कोड के टुकड़े। आप किसी कोड ब्लॉक को चलाने के लिए उस आइकन का चयन कर सकते हैं जो प्ले बटन जैसा दिखता है।
-2. `md` आइकन का चयन करें और थोड़ा मार्कडाउन जोड़ें, और निम्नलिखित टेक्स्ट लिखें **# Welcome to your notebook**।
+1. `md` आइकन चुनें और थोड़ा मार्कडाउन जोड़ें, साथ ही निम्नलिखित टेक्स्ट **# Welcome to your notebook**।
- इसके बाद, कुछ Python कोड जोड़ें।
+ इसके बाद कुछ पायथन कोड जोड़ें।
-3. कोड ब्लॉक में **print('hello notebook')** टाइप करें।
-4. कोड चलाने के लिए तीर का चयन करें।
+1. कोड ब्लॉक में टाइप करें **print('hello notebook')**।
+1. कोड चलाने के लिए ऊपर तीर दबाएं।
- आपको प्रिंट किया गया कथन दिखाई देना चाहिए:
+ आपको मुद्रित कथन दिखाई देना चाहिए:
```output
hello notebook
```
-
+
-आप अपने कोड के साथ टिप्पणियां जोड़ सकते हैं ताकि नोटबुक को स्वयं दस्तावेज़ित किया जा सके।
+आप अपने कोड के बीच टिप्पणियां (comments) जोड़ सकते हैं ताकि नोटबुक स्वयं दस्तावेज़ हो जाए।
-✅ एक मिनट के लिए सोचें कि एक वेब डेवलपर का कार्य वातावरण डेटा वैज्ञानिक के कार्य वातावरण से कितना अलग है।
+✅ एक मिनट सोचिए, एक वेब डेवलपर का कार्य वातावरण डेटा वैज्ञानिक के कार्य वातावरण से कितना भिन्न होता है।
-## Scikit-learn के साथ शुरुआत
+## साइकीट-लर्न के साथ शुरुआत और चलाना
-अब जब Python आपके स्थानीय वातावरण में सेटअप हो गया है, और आप Jupyter नोटबुक्स के साथ सहज हैं, तो आइए Scikit-learn के साथ भी उतना ही सहज हो जाएं। (इसे `sci` के रूप में उच्चारित करें, जैसे `science`)। Scikit-learn आपको मशीन लर्निंग कार्यों को करने में मदद करने के लिए एक [विस्तृत API](https://scikit-learn.org/stable/modules/classes.html#api-ref) प्रदान करता है।
+अब जब पाइथन आपके लोकल वातावरण में सेटअप हो चुका है, और आप जुपिटर नोटबुक्स के साथ आरामदायक हैं, आइए साइकीट-लर्न (उच्चारण: `sci` जैसा `science`) के साथ भी सहज हो जाएं। साइकीट-लर्न एक [विस्तृत API](https://scikit-learn.org/stable/modules/classes.html#api-ref) प्रदान करता है जो आपको एमएल कार्य करने में मदद करता है।
-उनकी [वेबसाइट](https://scikit-learn.org/stable/getting_started.html) के अनुसार, "Scikit-learn एक ओपन सोर्स मशीन लर्निंग लाइब्रेरी है जो सुपरवाइज्ड और अनसुपरवाइज्ड लर्निंग का समर्थन करती है। यह मॉडल फिटिंग, डेटा प्रीप्रोसेसिंग, मॉडल चयन और मूल्यांकन, और कई अन्य उपयोगिताओं के लिए विभिन्न उपकरण भी प्रदान करती है।"
+उनकी [वेबसाइट](https://scikit-learn.org/stable/getting_started.html) के अनुसार, "साइकीट-लर्न एक ओपन सोर्स मशीन लर्निंग लाइब्रेरी है जो सुपरवाइज्ड और अनसुपरवाइज्ड लर्निंग का समर्थन करती है। यह मॉडल फिटिंग, डेटा प्रीप्रोसेसिंग, मॉडल चयन और मूल्यांकन, और कई अन्य उपयोगिताओं के लिए विभिन्न टूल भी प्रदान करता है।"
-इस पाठ्यक्रम में, आप Scikit-learn और अन्य उपकरणों का उपयोग करके मशीन लर्निंग मॉडल बनाएंगे ताकि 'पारंपरिक मशीन लर्निंग' कार्यों को अंजाम दिया जा सके। हमने जानबूझकर न्यूरल नेटवर्क्स और डीप लर्निंग को शामिल नहीं किया है, क्योंकि इन्हें हमारे आगामी 'AI for Beginners' पाठ्यक्रम में बेहतर तरीके से कवर किया जाएगा।
+इस कोर्स में, आप मशीन लर्निंग मॉडल बनाने के लिए साइकीट-लर्न और अन्य टूल का उपयोग करेंगे, जिन्हें हम 'पारंपरिक मशीन लर्निंग' कार्य कहते हैं। हमने जानबूझकर न्यूरल नेटवर्क और डीप लर्निंग से बचाव किया है क्योंकि वे हमारे आगामी 'बिगिनर्स के लिए एआई' पाठ्यक्रम में बेहतर कवर किए जाएंगे।
-Scikit-learn मॉडल्स को बनाना और उनका मूल्यांकन करना आसान बनाता है। यह मुख्य रूप से संख्यात्मक डेटा का उपयोग करता है और सीखने के उपकरण के रूप में उपयोग के लिए कई तैयार किए गए डेटासेट्स प्रदान करता है। इसमें छात्रों के लिए आज़माने के लिए प्री-बिल्ट मॉडल्स भी शामिल हैं। आइए पहले Scikit-learn के साथ प्रीपैकेज्ड डेटा को लोड करने और एक बिल्ट-इन एस्टीमेटर का उपयोग करके पहला मशीन लर्निंग मॉडल बनाने की प्रक्रिया का अन्वेषण करें।
+साइकीट-लर्न मॉडल बनाने और उनका मूल्यांकन करने को सरल बनाता है। यह मुख्य रूप से संख्यात्मक डेटा का उपयोग करता है और सीखने के लिए कुछ पहले से बने डेटासेट भी शामिल करता है। इसमें विद्यार्थियों के प्रयोग के लिए पूर्वनिर्मित मॉडल भी शामिल हैं। आइए पहले कुछ बुनियादी डेटा के साथ प्रीपैकेज्ड डेटा लोड करने और एक अंतर्निर्मित एस्टीमेटर का उपयोग करके पहला ML मॉडल बनाने की प्रक्रिया देखें।
-## अभ्यास - आपका पहला Scikit-learn नोटबुक
+## अभ्यास - आपका पहला साइकीट-लर्न नोटबुक
-> यह ट्यूटोरियल Scikit-learn की वेबसाइट पर [लीनियर रिग्रेशन उदाहरण](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) से प्रेरित है।
+> यह ट्यूटोरियल साइकीट-लर्न की वेबसाइट पर [लीनियर रिग्रेशन उदाहरण](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) से प्रेरित है।
-[](https://youtu.be/2xkXL5EUpS0 "मशीन लर्निंग के लिए शुरुआती - Python में आपका पहला लीनियर रिग्रेशन प्रोजेक्ट")
-> 🎥 ऊपर दी गई छवि पर क्लिक करें ताकि आप इस अभ्यास की प्रक्रिया देख सकें।
+[](https://youtu.be/2xkXL5EUpS0 "शुरुआती के लिए एमएल - पाइथन में आपका पहला लीनियर रिग्रेशन प्रोजेक्ट")
-इस पाठ से संबंधित _notebook.ipynb_ फाइल में, सभी सेल्स को 'trash can' आइकन दबाकर साफ़ करें।
+> 🎥 ऊपर दिए गए चित्र पर क्लिक करें इस अभ्यास के माध्यम से एक लघु वीडियो के लिए।
-इस सेक्शन में, आप Scikit-learn में सीखने के उद्देश्यों के लिए बनाए गए एक छोटे से डायबिटीज डेटासेट के साथ काम करेंगे। कल्पना करें कि आप डायबिटीज रोगियों के लिए एक उपचार का परीक्षण करना चाहते हैं। मशीन लर्निंग मॉडल्स आपको यह निर्धारित करने में मदद कर सकते हैं कि कौन से रोगी उपचार के लिए बेहतर प्रतिक्रिया देंगे, चर के संयोजनों के आधार पर। यहां तक कि एक बहुत ही बुनियादी रिग्रेशन मॉडल, जब विज़ुअलाइज़ किया जाता है, तो चर के बारे में जानकारी दिखा सकता है जो आपको अपने सैद्धांतिक क्लिनिकल ट्रायल्स को व्यवस्थित करने में मदद कर सकता है।
+_notebook.ipynb_ फ़ाइल में, इस पाठ से संबंधित, सभी सेल को 'ट्रैश कैन' आइकन दबाकर साफ़ करें।
-✅ रिग्रेशन विधियों के कई प्रकार होते हैं, और आप कौन सा चुनते हैं यह उस उत्तर पर निर्भर करता है जिसे आप ढूंढ रहे हैं। यदि आप किसी दिए गए उम्र के व्यक्ति की संभावित ऊंचाई की भविष्यवाणी करना चाहते हैं, तो आप लीनियर रिग्रेशन का उपयोग करेंगे, क्योंकि आप एक **संख्यात्मक मान** की तलाश कर रहे हैं। यदि आप यह पता लगाना चाहते हैं कि किसी प्रकार के भोजन को शाकाहारी माना जाना चाहिए या नहीं, तो आप एक **श्रेणी असाइनमेंट** की तलाश कर रहे हैं, इसलिए आप लॉजिस्टिक रिग्रेशन का उपयोग करेंगे। आप बाद में लॉजिस्टिक रिग्रेशन के बारे में अधिक जानेंगे। डेटा से कुछ प्रश्न पूछने के बारे में सोचें, और इनमें से कौन सी विधि अधिक उपयुक्त होगी।
+इस अनुभाग में, आप स्किकट-लर्न में सीखने के उद्देश्य से बने मधुमेह (डायबिटीज) के एक छोटे डेटासेट के साथ काम करेंगे। कल्पना करें कि आप मधुमेह रोगियों के लिए एक उपचार जांचना चाहते हैं। मशीन लर्निंग मॉडल मदद कर सकते हैं यह निर्धारित करने में कि कौन से रोगी उपचार पर बेहतर प्रतिक्रिया देंगे, विभिन्न वेरिएबल्स के संयोजन के आधार पर। एक बहुत ही बुनियादी रिग्रेशन मॉडल भी, जब विज़ुअलाइज़ किया जाए, तो उन वेरिएबल्स के बारे में जानकारी दे सकता है जो चिकित्सीय परीक्षणों की योजना बनाने में मदद कर सकते हैं।
+
+✅ कई प्रकार के रिग्रेशन तरीकों होते हैं, और कौन सा चुनना है यह आपके प्रश्न के उत्तर पर निर्भर करता है। यदि आप किसी व्यक्ति की उम्र के अनुसार उसकी संभावित ऊंचाई का पूर्वानुमान लगाना चाहते हैं, तो आप लीनियर रिग्रेशन का उपयोग करेंगे, क्योंकि आप एक **संख्यात्मक मान** तलाश रहे हैं। यदि आप पता लगाना चाहते हैं कि कोई भोजन शाकाहारी (वेजन) माना जाना चाहिए या नहीं, तो आप **श्रेणी निर्धारण** तलाश रहे हैं इसलिए आप लॉजिस्टिक रिग्रेशन का उपयोग करेंगे। आप लॉजिस्टिक रिग्रेशन के बारे में बाद में अधिक जानेंगे। डेटा से पूछे जाने वाले कुछ प्रश्नों के बारे में सोचें और कौन सा तरीका अधिक उपयुक्त होगा।
आइए इस कार्य को शुरू करें।
-### लाइब्रेरीज़ इंपोर्ट करें
+### पुस्तकालयों का इम्पोर्ट करें
-इस कार्य के लिए हम कुछ लाइब्रेरीज़ इंपोर्ट करेंगे:
+इस कार्य के लिए हम कुछ पुस्तकालय इम्पोर्ट करेंगे:
-- **matplotlib**। यह एक उपयोगी [ग्राफिंग टूल](https://matplotlib.org/) है और हम इसका उपयोग लाइन प्लॉट बनाने के लिए करेंगे।
-- **numpy**। [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) Python में संख्यात्मक डेटा को संभालने के लिए एक उपयोगी लाइब्रेरी है।
-- **sklearn**। यह [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) लाइब्रेरी है।
+- **matplotlib**। यह एक उपयोगी [ग्राफिंग टूल](https://matplotlib.org/) है और हम इसे लाइन प्लॉट बनाने के लिए उपयोग करेंगे।
+- **numpy**। [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) पाइथन में संख्यात्मक डेटा संभालने के लिए उपयोगी पुस्तकालय है।
+- **sklearn**। यह [साइकीट-लर्न](https://scikit-learn.org/stable/user_guide.html) पुस्तकालय है।
-अपने कार्यों में मदद के लिए कुछ लाइब्रेरीज़ इंपोर्ट करें।
+अपने कार्यों में सहायता के लिए कुछ लाइब्रेरी आयात करें।
-1. निम्नलिखित कोड टाइप करके इंपोर्ट्स जोड़ें:
+1. निम्न कोड टाइप करके आयात जोड़ें:
```python
import matplotlib.pyplot as plt
@@ -122,26 +123,26 @@ Scikit-learn मॉडल्स को बनाना और उनका म
from sklearn import datasets, linear_model, model_selection
```
- ऊपर आप `matplotlib`, `numpy` और `sklearn` से `datasets`, `linear_model` और `model_selection` इंपोर्ट कर रहे हैं। `model_selection` का उपयोग डेटा को ट्रेनिंग और टेस्ट सेट्स में विभाजित करने के लिए किया जाता है।
+ ऊपर आप `matplotlib`, `numpy` आयात कर रहे हैं और `sklearn` से `datasets`, `linear_model` और `model_selection` आयात कर रहे हैं। `model_selection` का उपयोग डेटा को प्रशिक्षण और परीक्षण सेटों में विभाजित करने के लिए किया जाता है।
-### डायबिटीज डेटासेट
+### मधुमेह डेटासेट
-बिल्ट-इन [डायबिटीज डेटासेट](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) में डायबिटीज से संबंधित 442 नमूनों का डेटा है, जिसमें 10 फीचर वेरिएबल्स शामिल हैं, जिनमें से कुछ हैं:
+अंतर्निर्मित [मधुमेह डेटासेट](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) में मधुमेह से संबंधित 442 नमूने होते हैं, जिनमें 10 फीचर चर होते हैं, जिनमें से कुछ हैं:
-- age: उम्र वर्षों में
+- उम्र: वर्षों में उम्र
- bmi: बॉडी मास इंडेक्स
- bp: औसत रक्तचाप
-- s1 tc: टी-सेल्स (सफेद रक्त कोशिकाओं का एक प्रकार)
+- s1 tc: T-सेल्स (सफेद रक्त कोशिकाओं का एक प्रकार)
-✅ इस डेटासेट में 'sex' की अवधारणा एक फीचर वेरिएबल के रूप में शामिल है, जो डायबिटीज के शोध के लिए महत्वपूर्ण है। कई मेडिकल डेटासेट्स में इस प्रकार का बाइनरी वर्गीकरण शामिल होता है। सोचें कि इस प्रकार की श्रेणियां आबादी के कुछ हिस्सों को उपचार से कैसे बाहर कर सकती हैं।
+✅ इस डेटासेट में 'लिंग' का विचार एक फीचर चर के रूप में शामिल है, जो मधुमेह अनुसंधान के लिए महत्वपूर्ण है। कई चिकित्सा डेटासेट में इस प्रकार की द्विआधारी श्रेणीकरण शामिल होती है। इस तरह की श्रेणीबद्धता इसे ध्यान में रखते हुए सोचें कि कैसे यह जनसंख्या के कुछ हिस्सों को उपचारों से बाहर कर सकती है।
अब, X और y डेटा लोड करें।
-> 🎓 याद रखें, यह सुपरवाइज्ड लर्निंग है, और हमें एक नामित 'y' टारगेट की आवश्यकता है।
+> 🎓 याद रखें, यह सुपरवाइज्ड लर्निंग है, और हमें 'y' टारगेट चाहिए।
-एक नए कोड सेल में, डायबिटीज डेटासेट को `load_diabetes()` कॉल करके लोड करें। इनपुट `return_X_y=True` संकेत देता है कि `X` एक डेटा मैट्रिक्स होगा, और `y` रिग्रेशन टारगेट होगा।
+नई कोड सेल में, मधुमेह डेटासेट को `load_diabetes()` कॉल करके लोड करें। इनपुट `return_X_y=True` से संकेत मिलता है कि `X` डेटा मैट्रिक्स होगा, और `y` रिग्रेशन टारगेट होगा।
-1. डेटा मैट्रिक्स के आकार और इसके पहले तत्व को दिखाने के लिए कुछ प्रिंट कमांड जोड़ें:
+1. डेटा मैट्रिक्स के आकार और उसके पहले तत्व को दिखाने के लिए कुछ प्रिंट कमांड जोड़ें:
```python
X, y = datasets.load_diabetes(return_X_y=True)
@@ -149,9 +150,9 @@ Scikit-learn मॉडल्स को बनाना और उनका म
print(X[0])
```
- जो प्रतिक्रिया आपको मिल रही है, वह एक ट्यूपल है। आप जो कर रहे हैं वह ट्यूपल के पहले दो मानों को क्रमशः `X` और `y` को असाइन करना है। [ट्यूपल्स](https://wikipedia.org/wiki/Tuple) के बारे में अधिक जानें।
+ आपको जो प्रतिक्रिया मिल रही है वह एक टपल है। आप टपल के पहले दो मानों को क्रमशः `X` और `y` को सौंप रहे हैं। टपल के बारे में अधिक जानें [यहां](https://wikipedia.org/wiki/Tuple)।
- आप देख सकते हैं कि इस डेटा में 442 आइटम हैं जो 10 तत्वों के एरे में आकारित हैं:
+ आप देख सकते हैं कि इस डेटा में 442 आइटम हैं जो 10 तत्वों वाले एरे में आकारित हैं:
```text
(442, 10)
@@ -159,39 +160,39 @@ Scikit-learn मॉडल्स को बनाना और उनका म
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
- ✅ डेटा और रिग्रेशन टारगेट के बीच संबंध के बारे में सोचें। लीनियर रिग्रेशन फीचर X और टारगेट वेरिएबल y के बीच संबंधों की भविष्यवाणी करता है। क्या आप डायबिटीज डेटासेट के लिए [टारगेट](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) को दस्तावेज़ में पा सकते हैं? यह डेटासेट क्या प्रदर्शित कर रहा है, टारगेट को देखते हुए?
+ ✅ डेटा और रिग्रेशन टारगेट के बीच संबंध के बारे में थोड़ा सोचें। लीनियर रिग्रेशन फीचर X और टारगेट वेरिएबल y के बीच संबंध की भविष्यवाणी करता है। क्या आप मधुमेह डेटासेट के लिए [टारगेट](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) को डॉक्यूमेंटेशन में देख सकते हैं? यह डेटासेट उस टारगेट के आधार पर क्या प्रदर्शित कर रहा है?
-2. इसके बाद, इस डेटासेट के एक हिस्से को प्लॉट करने के लिए चुनें, डेटासेट के तीसरे कॉलम का चयन करके। आप `:` ऑपरेटर का उपयोग करके सभी पंक्तियों का चयन कर सकते हैं, और फिर इंडेक्स (2) का उपयोग करके तीसरे कॉलम का चयन कर सकते हैं। आप डेटा को 2D एरे में आकार देने के लिए `reshape(n_rows, n_columns)` का उपयोग कर सकते हैं - जैसा कि प्लॉटिंग के लिए आवश्यक है। यदि पैरामीटर में से एक -1 है, तो संबंधित आयाम स्वचालित रूप से गणना किया जाता है।
+2. अगला, इस डेटासेट का एक हिस्सा प्लॉट करने के लिए 3री कॉलम चुनें। आप `:` ऑपरेटर का उपयोग करके सभी पंक्तियां चुन सकते हैं, फिर इंडेक्स (2) द्वारा तीसरी कॉलम चुन सकते हैं। इसके अलावा, प्लॉटिंग के लिए आवश्यक 2D एरे में डेटा को `reshape(n_rows, n_columns)` का उपयोग करके पुनः आकारित कर सकते हैं। यदि कोई पैरामीटर -1 है, तो संबंधित आयाम स्वचालित रूप से गणना किया जाएगा।
```python
X = X[:, 2]
X = X.reshape((-1,1))
```
- ✅ किसी भी समय, डेटा का आकार जांचने के लिए इसे प्रिंट करें।
+ ✅ किसी भी समय, डेटा का आकार जांचने के लिए प्रिंट करें।
-3. अब जब आपके पास डेटा प्लॉट करने के लिए तैयार है, तो आप देख सकते हैं कि क्या मशीन इस डेटासेट में संख्याओं के बीच एक तार्किक विभाजन निर्धारित करने में मदद कर सकती है। ऐसा करने के लिए, आपको डेटा (X) और टारगेट (y) दोनों को टेस्ट और ट्रेनिंग सेट्स में विभाजित करना होगा। Scikit-learn में इसे करने का एक सीधा तरीका है; आप अपने टेस्ट डेटा को एक दिए गए बिंदु पर विभाजित कर सकते हैं।
+3. अब जब आपके पास प्लॉट करने के लिए डेटा तैयार है, तो देखें कि क्या मशीन इस डेटासेट के नंबरों के बीच तार्किक विभाजन करने में मदद कर सकती है। इसके लिए, आपको दोनों डेटा (X) और टारगेट (y) को परीक्षण और प्रशिक्षण सेटों में विभाजित करना होगा। साइकीट-लर्न के पास इसे करने का सरल तरीका है; आप अपने परीक्षण डेटा को एक दिए गए बिंदु पर विभाजित कर सकते हैं।
```python
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
```
-4. अब आप अपने मॉडल को ट्रेन करने के लिए तैयार हैं! लीनियर रिग्रेशन मॉडल लोड करें और इसे अपने X और y ट्रेनिंग सेट्स के साथ `model.fit()` का उपयोग करके ट्रेन करें:
+4. अब आप अपने मॉडल को प्रशिक्षित करने के लिए तैयार हैं! लाइनियर रिग्रेशन मॉडल लोड करें और अपने X और y प्रशिक्षण सेट का उपयोग करके `model.fit()` के साथ प्रशिक्षित करें:
```python
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
```
- ✅ `model.fit()` एक फ़ंक्शन है जिसे आप TensorFlow जैसी कई ML लाइब्रेरीज़ में देखेंगे।
+ ✅ `model.fit()` एक फ़ंक्शन है जिसे आप कई एमएल लाइब्रेरियों जैसे TensorFlow में भी देखेंगे।
-5. फिर, टेस्ट डेटा का उपयोग करके एक प्रेडिक्शन बनाएं, `predict()` फ़ंक्शन का उपयोग करके। इसका उपयोग डेटा समूहों के बीच लाइन खींचने के लिए किया जाएगा।
+5. फिर, परीक्षण डेटा का उपयोग करके भविष्यवाणी बनाएं, `predict()` फ़ंक्शन का उपयोग करके। इसका उपयोग मॉडल के डेटा समूहों के बीच लाइन खींचने के लिए किया जाएगा।
```python
y_pred = model.predict(X_test)
```
-6. अब डेटा को प्लॉट में दिखाने का समय है। Matplotlib इस कार्य के लिए एक बहुत उपयोगी टूल है। सभी X और y टेस्ट डेटा का एक स्कैटरप्लॉट बनाएं, और मॉडल के डेटा समूहों के बीच सबसे उपयुक्त स्थान पर एक लाइन खींचने के लिए प्रेडिक्शन का उपयोग करें।
+6. अब डेटा को प्लॉट में दिखाने का समय है। मैटप्लॉटलिब इस कार्य के लिए एक बहुत उपयोगी उपकरण है। सभी X और y टेस्ट डेटा का एक स्कैटरप्लॉट बनाएं, और मॉडल के डेटा समूहों के बीच सबसे उपयुक्त जगह पर लाइन खींचने के लिए भविष्यवाणी का उपयोग करें।
```python
plt.scatter(X_test, y_test, color='black')
@@ -202,29 +203,32 @@ Scikit-learn मॉडल्स को बनाना और उनका म
plt.show()
```
- 
-✅ यहां क्या हो रहा है, इस पर थोड़ा विचार करें। एक सीधी रेखा कई छोटे डेटा बिंदुओं के बीच से गुजर रही है, लेकिन यह वास्तव में क्या कर रही है? क्या आप देख सकते हैं कि इस रेखा का उपयोग करके आप यह अनुमान कैसे लगा सकते हैं कि एक नया, अनदेखा डेटा बिंदु प्लॉट के y अक्ष के संबंध में कहां फिट होगा? इस मॉडल के व्यावहारिक उपयोग को शब्दों में व्यक्त करने की कोशिश करें।
+ 
+
-बधाई हो, आपने अपना पहला लीनियर रिग्रेशन मॉडल बनाया, इसके साथ एक भविष्यवाणी की, और इसे एक प्लॉट में प्रदर्शित किया!
+ ✅ यहाँ जो हो रहा है उसके बारे में थोड़ा सोचें। एक सीधी रेखा कई छोटे डेटा बिंदुओं से होकर गुजर रही है, लेकिन यह वास्तव में क्या कर रही है? क्या आप देख सकते हैं कि आपको इस रेखा का उपयोग कैसे करना चाहिए ताकि यह अनुमान लगाया जा सके कि एक नया, अब तक न देखा गया डेटा पॉइंट प्लॉट के y अक्ष के सापेक्ष कहाँ फिट होना चाहिए? इस मॉडल के व्यावहारिक उपयोग को शब्दों में व्यक्त करने की कोशिश करें।
+
+बधाई हो, आपने अपना पहला लीनियर रिग्रेशन मॉडल बनाया, इसके साथ एक पूर्वानुमान बनाया, और इसे एक प्लॉट में प्रदर्शित किया!
---
## 🚀चुनौती
-इस डेटा सेट से एक अलग वेरिएबल को प्लॉट करें। संकेत: इस लाइन को एडिट करें: `X = X[:,2]`। इस डेटा सेट के टारगेट को देखते हुए, आप डायबिटीज के एक बीमारी के रूप में प्रगति के बारे में क्या पता लगा सकते हैं?
-
-## [पोस्ट-लेक्चर क्विज़](https://ff-quizzes.netlify.app/en/ml/)
+इस डेटासेट से एक अलग चर को प्लॉट करें। सलाह: इस लाइन को संपादित करें: `X = X[:,2]`। इस डेटासेट के लक्ष्य के आधार पर, आप मधुमेह को एक रोग के रूप में प्रगति के बारे में क्या खोजने में सक्षम हैं?
+## [पाठ-पर्याप्ति क्विज़](https://ff-quizzes.netlify.app/en/ml/)
-## समीक्षा और स्व-अध्ययन
+## पुनरावलोकन और स्व-अध्ययन
-इस ट्यूटोरियल में, आपने सिंपल लीनियर रिग्रेशन के साथ काम किया, न कि यूनिवेरिएट या मल्टीपल लीनियर रिग्रेशन के साथ। इन विधियों के बीच के अंतर के बारे में थोड़ा पढ़ें, या [इस वीडियो](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) को देखें।
+इस ट्यूटोरियल में, आपने सरल लीनियर रिग्रेशन के साथ काम किया, न कि एकविवरणीय या बहुविवरणीय लीनियर रिग्रेशन के साथ। इन तरीकों के बीच के अंतर के बारे में थोड़ा पढ़ें, या इस [वीडियो](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) को देखें।
-रिग्रेशन की अवधारणा के बारे में अधिक पढ़ें और सोचें कि इस तकनीक द्वारा किस प्रकार के प्रश्नों का उत्तर दिया जा सकता है। अपनी समझ को गहरा करने के लिए यह [ट्यूटोरियल](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) लें।
+रिग्रेशन की अवधारणा के बारे में अधिक पढ़ें और सोचें कि इस तकनीक से किस तरह के प्रश्नों का उत्तर दिया जा सकता है। अपनी समझ को गहरा करने के लिए यह [ट्यूटोरियल](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) लें।
## असाइनमेंट
-[एक अलग डेटा सेट](assignment.md)
+[एक अलग डेटासेट](assignment.md)
---
-**अस्वीकरण**:
-यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
\ No newline at end of file
+
+**अस्वीकरण**:
+इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
+
\ No newline at end of file
diff --git a/translations/hi/2-Regression/2-Data/README.md b/translations/hi/2-Regression/2-Data/README.md
index 5465bd77b..1e586503d 100644
--- a/translations/hi/2-Regression/2-Data/README.md
+++ b/translations/hi/2-Regression/2-Data/README.md
@@ -1,62 +1,62 @@
-# Scikit-learn का उपयोग करके एक रिग्रेशन मॉडल बनाएं: डेटा तैयार करें और विज़ुअलाइज़ करें
+# Scikit-learn का उपयोग करके एक रिग्रेशन मॉडल बनाएं: डेटा तैयार करें और विज़ुअलाईज़ करें
-
+
-इन्फोग्राफिक: [दसानी मडिपल्ली](https://twitter.com/dasani_decoded)
+इन्फोग्राफिक द्वारा [Dasani Madipalli](https://twitter.com/dasani_decoded)
-## [प्री-लेक्चर क्विज़](https://ff-quizzes.netlify.app/en/ml/)
+## [प्रि-लेक्चर क्विज़](https://ff-quizzes.netlify.app/en/ml/)
-> ### [यह पाठ R में भी उपलब्ध है!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
+> ### [यह पाठ R में उपलब्ध है!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
## परिचय
-अब जब आपके पास Scikit-learn के साथ मशीन लर्निंग मॉडल बनाने के लिए आवश्यक टूल्स हैं, तो आप अपने डेटा से सवाल पूछने के लिए तैयार हैं। जब आप डेटा के साथ काम करते हैं और ML समाधान लागू करते हैं, तो सही सवाल पूछना बहुत महत्वपूर्ण है ताकि आप अपने डेटा सेट की संभावनाओं को सही तरीके से समझ सकें।
+अब जब आप Scikit-learn के साथ मशीन लर्निंग मॉडल निर्माण शुरू करने के लिए आवश्यक टूल्स के साथ तैयार हैं, तो आप अपने डेटा से प्रश्न पूछना शुरू करने के लिए तैयार हैं। डेटा के साथ काम करते समय और एमएल समाधान लागू करते समय, यह बहुत महत्वपूर्ण है कि सही प्रश्न पूछें ताकि आप अपने डेटासेट की संभावनाओं को सही तरीके से खोल सकें।
इस पाठ में, आप सीखेंगे:
- मॉडल बनाने के लिए अपने डेटा को कैसे तैयार करें।
-- डेटा विज़ुअलाइज़ेशन के लिए Matplotlib का उपयोग कैसे करें।
+- डेटा विज़ुअलाईज़ेशन के लिए Matplotlib का उपयोग कैसे करें।
+- अधिक अभिव्यक्तिपूर्ण डेटा विज़ुअलाईज़ेशन के लिए Seaborn का उपयोग कैसे करें।
-## अपने डेटा से सही सवाल पूछना
+## अपने डेटा से सही प्रश्न पूछना
-आपके द्वारा पूछे जाने वाले सवाल यह तय करेंगे कि आप किस प्रकार के ML एल्गोरिदम का उपयोग करेंगे। और आपको मिलने वाले उत्तर की गुणवत्ता आपके डेटा की प्रकृति पर बहुत अधिक निर्भर करेगी।
+जिस प्रश्न का आपको उत्तर चाहिए वह निर्धारित करेगा कि आप कौन सा प्रकार का एमएल एल्गोरिदम उपयोग करेंगे। और आपको जो उत्तर मिलता है उसकी गुणवत्ता आपके डेटा के स्वभाव पर भारी निर्भर करेगी।
-इस पाठ के लिए दिए गए [डेटा](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) पर एक नज़र डालें। आप इस .csv फ़ाइल को VS Code में खोल सकते हैं। एक त्वरित स्कैन से तुरंत पता चलता है कि इसमें खाली स्थान हैं और स्ट्रिंग्स और संख्यात्मक डेटा का मिश्रण है। इसमें 'Package' नाम का एक अजीब कॉलम भी है, जिसमें डेटा 'sacks', 'bins' और अन्य मानों का मिश्रण है। वास्तव में, यह डेटा थोड़ा गड़बड़ है।
+इस पाठ के लिए प्रदान किए गए [डेटा](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) पर एक नजर डालें। आप इस .csv फ़ाइल को VS कोड में खोल सकते हैं। एक त्वरित अवलोकन से पता चलता है कि वहाँ रिक्त स्थान हैं और स्ट्रिंग्स और संख्यात्मक डेटा का मिश्रण है। एक अजीब कॉलम 'Package' भी है जहाँ डेटा 'sacks', 'bins' और अन्य मानों का मिश्रण है। वास्तव में, डेटा थोड़ा अस्त-व्यस्त है।
-[](https://youtu.be/5qGjczWTrDQ "शुरुआती के लिए ML - डेटा सेट का विश्लेषण और सफाई कैसे करें")
+[](https://youtu.be/5qGjczWTrDQ "शुरुआती लोगों के लिए एमएल - डेटा सेट को कैसे विश्लेषण और साफ़ करें")
-> 🎥 ऊपर दी गई छवि पर क्लिक करें इस पाठ के लिए डेटा तैयार करने पर एक छोटा वीडियो देखने के लिए।
+> 🎥 इस पाठ के लिए डेटा तैयार करने के काम को दर्शाते एक छोटे वीडियो के लिए ऊपर की छवि पर क्लिक करें।
-वास्तव में, ऐसा बहुत कम होता है कि आपको एक ऐसा डेटा सेट मिले जो पूरी तरह से तैयार हो और जिसे सीधे ML मॉडल बनाने के लिए उपयोग किया जा सके। इस पाठ में, आप मानक Python लाइब्रेरी का उपयोग करके एक कच्चे डेटा सेट को तैयार करना सीखेंगे। आप डेटा को विज़ुअलाइज़ करने की विभिन्न तकनीकों को भी सीखेंगे।
+वास्तव में, यह बहुत आम नहीं है कि आपको एक ऐसा डेटासेट दिया जाए जो तुरंत उपयोग के लिए पूरी तरह से तैयार हो ताकि आप एमएल मॉडल बना सकें। इस पाठ में, आप मानक पायथन लाइब्रेरीज का उपयोग करके एक कच्चे डेटासेट को कैसे तैयार करें, यह सीखेंगे। आप डेटा विज़ुअलाईज़ेशन की विभिन्न तकनीकों के बारे में भी जानेंगे।
-## केस स्टडी: 'कद्दू का बाजार'
+## केस स्टडी: 'कद्दू बाजार'
-इस फ़ोल्डर में आपको रूट `data` फ़ोल्डर में [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) नामक एक .csv फ़ाइल मिलेगी, जिसमें कद्दू के बाजार के बारे में 1757 पंक्तियों का डेटा है, जो शहर के अनुसार वर्गीकृत है। यह कच्चा डेटा [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) से निकाला गया है, जिसे संयुक्त राज्य अमेरिका के कृषि विभाग द्वारा वितरित किया गया है।
+इस फ़ोल्डर में आपको रूट `data` फ़ोल्डर में [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) नाम की एक .csv फ़ाइल मिलेगी जिसमें कद्दुओं के बाजार के बारे में 1757 पंक्तियाँ हैं, जिन्हें शहरों द्वारा समूहित किया गया है। यह कच्चा डेटा संयुक्त राज्य कृषि विभाग द्वारा वितरित [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) से निकाला गया है।
-### डेटा तैयार करना
+### डेटा की तैयारी
-यह डेटा सार्वजनिक डोमेन में है। इसे USDA वेबसाइट से कई अलग-अलग फ़ाइलों में, प्रत्येक शहर के लिए, डाउनलोड किया जा सकता है। बहुत अधिक अलग-अलग फ़ाइलों से बचने के लिए, हमने सभी शहरों के डेटा को एक स्प्रेडशीट में जोड़ दिया है, इस प्रकार हमने पहले ही डेटा को थोड़ा _तैयार_ कर लिया है। अब, आइए डेटा को करीब से देखें।
+यह डेटा सार्वजनिक क्षेत्र में है। इसे USDA वेबसाइट से शहर के अनुसार कई अलग-अलग फ़ाइलों में डाउनलोड किया जा सकता है। बहुत सारी अलग-अलग फ़ाइलों से बचने के लिए, हमने सभी शहरों का डेटा एक स्प्रेडशीट में संयोजित किया है, इसलिए हमने डेटा को थोड़ा _तैयार_ किया हुआ है। अब, आइए डेटा को करीब से देखें।
-### कद्दू का डेटा - प्रारंभिक निष्कर्ष
+### कद्दू डेटा - प्रारंभिक निष्कर्ष
-आप इस डेटा के बारे में क्या नोटिस करते हैं? आपने पहले ही देखा है कि इसमें स्ट्रिंग्स, नंबर, खाली स्थान और अजीब मानों का मिश्रण है, जिसे आपको समझने की आवश्यकता है।
+आप इस डेटा के बारे में क्या नोटिस करते हैं? आपने पहले ही देखा है कि इसमें स्ट्रिंग्स, संख्याएँ, रिक्त स्थान और अजीब मानों का मिश्रण है जिन्हें आपको समझना है।
-आप इस डेटा से कौन सा सवाल पूछ सकते हैं, रिग्रेशन तकनीक का उपयोग करके? उदाहरण के लिए, "किसी दिए गए महीने में बिक्री के लिए कद्दू की कीमत का अनुमान लगाएं।" डेटा को फिर से देखते हुए, आपको डेटा संरचना बनाने के लिए कुछ बदलाव करने होंगे जो इस कार्य के लिए आवश्यक है।
+आप इस डेटा से रिग्रेशन तकनीक का उपयोग करते हुए क्या प्रश्न पूछ सकते हैं? जैसे कि "किसी दिए गए महीने में बिक्री के लिए कद्दू का मूल्य अनुमानित करें"। डेटा को पुनः देखने पर, कुछ बदलाव करने होंगे ताकि इस कार्य के लिए आवश्यक डेटा संरचना बन सके।
+## अभ्यास - कद्दू डेटा का विश्लेषण करें
-## अभ्यास - कद्दू के डेटा का विश्लेषण करें
+चलिए [Pandas](https://pandas.pydata.org/) का उपयोग करते हैं, (नाम का अर्थ है `Python Data Analysis`) जो डेटा को आकार देने के लिए बहुत उपयोगी टूल है, इस कद्दू डेटा का विश्लेषण और तैयारी करने के लिए।
-आइए [Pandas](https://pandas.pydata.org/) का उपयोग करें, (जिसका नाम `Python Data Analysis` के लिए है) जो डेटा को आकार देने के लिए बहुत उपयोगी टूल है, इस कद्दू के डेटा का विश्लेषण और तैयारी करने के लिए।
+### पहले, गायब तारीखें चेक करें
-### सबसे पहले, गायब तारीखों की जांच करें
+आपको सबसे पहले गायब तारीखों के लिए जांच करनी होगी:
-आपको सबसे पहले गायब तारीखों की जांच करने के लिए कदम उठाने होंगे:
-
-1. तारीखों को महीने के प्रारूप में बदलें (ये US तारीखें हैं, इसलिए प्रारूप `MM/DD/YYYY` है)।
+1. तारीखों को महीने के प्रारूप में बदलें (ये अमेरिकी तारीखें हैं, इसलिए प्रारूप है `MM/DD/YYYY`)।
2. महीने को एक नए कॉलम में निकालें।
-Visual Studio Code में _notebook.ipynb_ फ़ाइल खोलें और स्प्रेडशीट को एक नए Pandas डेटा फ्रेम में आयात करें।
+Visual Studio Code में _notebook.ipynb_ फ़ाइल खोलें और स्प्रेडशीट को नए Pandas dataframe में इंपोर्ट करें।
-1. पहले पांच पंक्तियों को देखने के लिए `head()` फ़ंक्शन का उपयोग करें।
+1. `head()` फ़ंक्शन का उपयोग करके पहले पाँच पंक्तियों को देखें।
```python
import pandas as pd
@@ -64,30 +64,30 @@ Visual Studio Code में _notebook.ipynb_ फ़ाइल खोलें
pumpkins.head()
```
- ✅ आप अंतिम पांच पंक्तियों को देखने के लिए कौन सा फ़ंक्शन उपयोग करेंगे?
+ ✅ अंतिम पाँच पंक्तियाँ देखने के लिए कौन सा फ़ंक्शन उपयोग करेंगे?
-1. वर्तमान डेटा फ्रेम में गायब डेटा की जांच करें:
+1. जांचें कि वर्तमान dataframe में कोई गायब डेटा है या नहीं:
```python
pumpkins.isnull().sum()
```
- डेटा गायब है, लेकिन शायद यह वर्तमान कार्य के लिए मायने नहीं रखता।
+ कुछ डेटा गायब है, लेकिन शायद यह कार्य के लिए मायने नहीं रखेगा।
-1. अपने डेटा फ्रेम को काम करने में आसान बनाने के लिए, केवल उन कॉलमों का चयन करें जिनकी आपको आवश्यकता है, `loc` फ़ंक्शन का उपयोग करके जो मूल डेटा फ्रेम से पंक्तियों (पहले पैरामीटर के रूप में पास की गई) और कॉलमों (दूसरे पैरामीटर के रूप में पास की गई) का एक समूह निकालता है। नीचे दिए गए मामले में अभिव्यक्ति `:` का अर्थ है "सभी पंक्तियाँ।"
+1. अपने dataframe के साथ काम करना आसान बनाने के लिए, केवल आवश्यक कॉलम चुनें, `loc` फ़ंक्शन का उपयोग करके जो मूल dataframe से पंक्तियों (पहला पैरामीटर) और कॉलमों (दूसरा पैरामीटर) का समूह निकालता है। नीचे के उदाहरण में `:` का अर्थ है "सभी पंक्तियाँ"।
```python
columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']
pumpkins = pumpkins.loc[:, columns_to_select]
```
-### दूसरा, कद्दू की औसत कीमत निर्धारित करें
+### दूसरा, कद्दू का औसत मूल्य निर्धारित करें
-सोचें कि किसी दिए गए महीने में कद्दू की औसत कीमत कैसे निर्धारित करें। इस कार्य के लिए आप कौन से कॉलम चुनेंगे? संकेत: आपको 3 कॉलम की आवश्यकता होगी।
+सोचें कि किसी दिए गए महीने में कद्दू का औसत मूल्य कैसे पाएँ। इस कार्य के लिए आप कौन से कॉलम चुनेंगे? संकेत: आपको 3 कॉलम चाहिए होंगे।
-समाधान: `Low Price` और `High Price` कॉलम का औसत लें और नए Price कॉलम को भरें, और Date कॉलम को केवल महीने दिखाने के लिए बदलें। सौभाग्य से, ऊपर की जांच के अनुसार, तारीखों या कीमतों के लिए कोई गायब डेटा नहीं है।
+समाधान: `Low Price` और `High Price` कॉलमों का औसत लेकर नए Price कॉलम में भरें, और Date कॉलम को केवल महीने तक सीमित करें। सौभाग्य से ऊपर की जांच के अनुसार, तारीखों या कीमतों के लिए कोई गायब डेटा नहीं है।
-1. औसत की गणना करने के लिए, निम्नलिखित कोड जोड़ें:
+1. औसत निकालने के लिए निम्न कोड जोड़ें:
```python
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2
@@ -96,37 +96,37 @@ Visual Studio Code में _notebook.ipynb_ फ़ाइल खोलें
```
- ✅ आप `print(month)` का उपयोग करके किसी भी डेटा को जांचने के लिए प्रिंट कर सकते हैं।
+ ✅ अपने डेटा को चेक करने के लिए `print(month)` से किसी भी डेटा को प्रिंट कर सकते हैं।
-2. अब, अपने परिवर्तित डेटा को एक नए Pandas डेटा फ्रेम में कॉपी करें:
+2. अब, अपने परिवर्तित डेटा को एक नए Pandas dataframe में कॉपी करें:
```python
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
```
- अपने डेटा फ्रेम को प्रिंट करने से आपको एक साफ, व्यवस्थित डेटा सेट दिखाई देगा, जिस पर आप अपना नया रिग्रेशन मॉडल बना सकते हैं।
+ अपने dataframe को प्रिंट करने पर आपको एक साफ, व्यवस्थित डेटासेट मिलेगा जिस पर आप अपना नया रिग्रेशन मॉडल बना सकते हैं।
### लेकिन रुको! यहाँ कुछ अजीब है
-यदि आप `Package` कॉलम को देखें, तो कद्दू कई अलग-अलग कॉन्फ़िगरेशन में बेचे जाते हैं। कुछ '1 1/9 bushel' माप में बेचे जाते हैं, और कुछ '1/2 bushel' माप में, कुछ प्रति कद्दू, कुछ प्रति पाउंड, और कुछ बड़े बक्सों में अलग-अलग चौड़ाई के साथ।
+यदि आप `Package` कॉलम देखें, तो कद्दू कई अलग-अलग आकारों में बेचे जाते हैं। कुछ '1 1/9 bushel' मापन में बेचे जाते हैं, कुछ '1/2 bushel' में, कुछ प्रति कद्दू, कुछ प्रति पाउंड, और कुछ बड़े डब्बों में जिनकी चौड़ाई भिन्न होती है।
-> कद्दू को लगातार तौलना बहुत कठिन लगता है
+> कद्दू को लगातार वजन करना बहुत कठिन लगता है
-मूल डेटा में गहराई से देखें, यह दिलचस्प है कि जिनका `Unit of Sale` 'EACH' या 'PER BIN' के बराबर है, उनके `Package` प्रकार प्रति इंच, प्रति बिन, या 'each' भी हैं। कद्दू को लगातार तौलना बहुत कठिन लगता है, इसलिए आइए उन्हें फ़िल्टर करें और केवल उन कद्दूओं का चयन करें जिनके `Package` कॉलम में 'bushel' शब्द है।
+मूल डेटा को देखकर दिलचस्प बात यह है कि जिनका `Unit of Sale` 'EACH' या 'PER BIN' है, उनके `Package` प्रकार में भी प्रति इंच, प्रति बिन या 'each' होता है। कद्दू का लगातार वजन करना कठिन लगता है, इसलिए चलिए केवल उन कद्दुओं को फ़िल्टर करते हैं जिनके `Package` कॉलम में 'bushel' स्ट्रिंग है।
-1. फ़ाइल के शीर्ष पर, प्रारंभिक .csv आयात के तहत एक फ़िल्टर जोड़ें:
+1. फ़ाइल की शुरुआत में, प्रारंभिक .csv इंपोर्ट के नीचे फ़िल्टर जोड़ें:
```python
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
```
- यदि आप अब डेटा प्रिंट करते हैं, तो आप देख सकते हैं कि आपको केवल लगभग 415 पंक्तियों का डेटा मिल रहा है जिसमें कद्दू बसल के अनुसार हैं।
+ यदि आप अब डेटा प्रिंट करते हैं, तो आप देखेंगे कि आप केवल लगभग 415 पंक्तियों को प्राप्त कर रहे हैं जिनमें bushel द्वारा कद्दू हैं।
-### लेकिन रुको! एक और काम करना बाकी है
+### लेकिन रुको! एक और काम करना है
-क्या आपने देखा कि बसल की मात्रा प्रति पंक्ति बदलती है? आपको मूल्य निर्धारण को सामान्य करना होगा ताकि आप बसल के अनुसार मूल्य दिखा सकें, इसलिए इसे मानकीकृत करने के लिए कुछ गणना करें।
+क्या आपने देखा कि bushel मात्रा प्रति पंक्ति भिन्न होती है? आपको मूल्य निर्धारण को सामान्यीकृत करना होगा ताकि आप मूल्य प्रति bushel दिखा सकें, इसलिए इसे मानकीकृत करने के लिए कुछ गणना करें।
-1. नए_pumpkins डेटा फ्रेम बनाने वाले ब्लॉक के बाद ये लाइनें जोड़ें:
+1. नई_pumpkins dataframe बनाने वाले ब्लॉक के बाद ये लाइनें जोड़ें:
```python
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)
@@ -134,38 +134,38 @@ Visual Studio Code में _notebook.ipynb_ फ़ाइल खोलें
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
```
-✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) के अनुसार, बसल का वजन उत्पाद के प्रकार पर निर्भर करता है, क्योंकि यह एक वॉल्यूम माप है। "उदाहरण के लिए, टमाटर का एक बसल 56 पाउंड वजन का होना चाहिए... पत्ते और साग अधिक जगह लेते हैं और कम वजन होता है, इसलिए पालक का एक बसल केवल 20 पाउंड होता है।" यह सब काफी जटिल है! आइए बसल-से-पाउंड रूपांतरण करने की बजाय बसल के अनुसार मूल्य निर्धारण करें। हालांकि, कद्दू के बसल का यह अध्ययन यह दिखाता है कि आपके डेटा की प्रकृति को समझना कितना महत्वपूर्ण है!
+✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) के अनुसार, एक bushel का वजन उत्पाद के प्रकार पर निर्भर करता है, क्योंकि यह एक आयतन मापन है। "उदाहरण के लिए टमाटर के एक bushel का वजन 56 पाउंड होना चाहिए... पत्ते और हरी पत्तेदार सब्जियाँ अधिक जगह घेरती हैं लेकिन कम वजन होती है, इसलिए पालक के एक bushel का वजन केवल 20 पाउंड होता है।" यह सब काफी जटिल है! चलिए bushel को पाउंड में परिवर्तित करने की चिंता न करें, बल्कि bushel के हिसाब से मूल्य रखें। कद्दुओं के bushel के इस अध्ययन से ऐसा साबित होता है कि अपने डेटा की प्रकृति को समझना कितना महत्वपूर्ण है!
-अब, आप उनके बसल माप के आधार पर प्रति यूनिट मूल्य का विश्लेषण कर सकते हैं। यदि आप डेटा को एक बार फिर प्रिंट करते हैं, तो आप देख सकते हैं कि यह मानकीकृत है।
+अब, आप उनके bushel मापन के आधार पर मूल्य निर्धारण का विश्लेषण कर सकते हैं। यदि आप डेटा को एक बार फिर से प्रिंट करें, तो आप देख सकते हैं कि यह कैसे मानकीकृत है।
-✅ क्या आपने देखा कि आधे बसल में बेचे जाने वाले कद्दू बहुत महंगे हैं? क्या आप इसका कारण पता लगा सकते हैं? संकेत: छोटे कद्दू बड़े कद्दू की तुलना में बहुत महंगे होते हैं, शायद इसलिए कि एक बड़े खोखले पाई कद्दू द्वारा लिए गए खाली स्थान को देखते हुए प्रति बसल उनमें बहुत अधिक होते हैं।
+✅ क्या आपने नोटिस किया कि आधे bushel में बेचे जाने वाले कद्दू बहुत महंगे हैं? क्या आप इसका कारण पता लगा सकते हैं? संकेत: छोटे कद्दू बड़े कद्दू से बहुत महंगे होते हैं, शायद इसलिए क्योंकि प्रति bushel उनमें कई अधिक होते हैं, जबकि एक बड़ा खोखला पाई कद्दू अधिक खाली जगह लेता है।
-## विज़ुअलाइज़ेशन रणनीतियाँ
+## विज़ुअलाइजेशन रणनीतियाँ
-डेटा वैज्ञानिक का एक हिस्सा यह प्रदर्शित करना है कि वे जिस डेटा के साथ काम कर रहे हैं उसकी गुणवत्ता और प्रकृति क्या है। ऐसा करने के लिए, वे अक्सर दिलचस्प विज़ुअलाइज़ेशन, जैसे प्लॉट्स, ग्राफ़्स, और चार्ट्स बनाते हैं, जो डेटा के विभिन्न पहलुओं को दिखाते हैं। इस तरह, वे दृश्य रूप से उन संबंधों और अंतरालों को दिखा सकते हैं जिन्हें अन्यथा समझना कठिन होता है।
+डेटा वैज्ञानिक की भूमिका का एक भाग यह दिखाना है कि वे जिस डेटा के साथ काम कर रहे हैं उसकी गुणवत्ता और प्रकृति कैसी है। इसके लिए, वे अक्सर रोचक विज़ुअलाइजेशन बनाते हैं, जैसे प्लॉट, ग्राफ़, और चार्ट, जो डेटा के विभिन्न पहलुओं को दिखाते हैं। इस तरह वे بصری रूप से रिश्तों और अंतर को दिखा पाते हैं जो अन्यथा पता लगाना कठिन होता है।
-[](https://youtu.be/SbUkxH6IJo0 "शुरुआती के लिए ML - Matplotlib के साथ डेटा कैसे विज़ुअलाइज़ करें")
+[](https://youtu.be/SbUkxH6IJo0 "शुरुआती लोगों के लिए एमएल - Matplotlib के साथ डेटा विज़ुअलाईज़ करें")
-> 🎥 ऊपर दी गई छवि पर क्लिक करें इस पाठ के लिए डेटा को विज़ुअलाइज़ करने पर एक छोटा वीडियो देखने के लिए।
+> 🎥 इस पाठ के लिए डेटा विज़ुअलाईज़ेशन पर एक छोटा वीडियो देखने के लिए ऊपर की छवि पर क्लिक करें।
-विज़ुअलाइज़ेशन यह निर्धारित करने में भी मदद कर सकते हैं कि डेटा के लिए कौन सी मशीन लर्निंग तकनीक सबसे उपयुक्त है। उदाहरण के लिए, एक स्कैटरप्लॉट जो एक रेखा का अनुसरण करता हुआ प्रतीत होता है, यह संकेत देता है कि डेटा एक रेखीय रिग्रेशन अभ्यास के लिए एक अच्छा उम्मीदवार है।
+विज़ुअलाइजेशन यह भी तय करने में मदद कर सकता है कि डेटा के लिए कौन सी मशीन लर्निंग तकनीक सबसे उपयुक्त है। उदाहरण के लिए, एक स्कैटरप्लॉट जो एक रेखा का पालन करता प्रतीत होता है, यह दर्शाता है कि डेटा एक रैखिक रिग्रेशन अभ्यास के लिए उपयुक्त हो सकता है।
-एक डेटा विज़ुअलाइज़ेशन लाइब्रेरी जो Jupyter नोटबुक्स में अच्छी तरह काम करती है वह है [Matplotlib](https://matplotlib.org/) (जिसे आपने पिछले पाठ में भी देखा था)।
+एक डेटा विज़ुअलाईज़ेशन लाइब्रेरी जो Jupyter नोटबुक में अच्छी तरह काम करती है वह है [Matplotlib](https://matplotlib.org/) (जिसे आपने पिछले पाठ में भी देखा था)।
-> डेटा विज़ुअलाइज़ेशन के साथ अधिक अनुभव प्राप्त करें [इन ट्यूटोरियल्स](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) में।
+> [इन ट्यूटोरियल्स](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) में डेटा विज़ुअलाईज़ेशन के साथ अधिक अनुभव प्राप्त करें।
## अभ्यास - Matplotlib के साथ प्रयोग करें
-नए डेटा फ्रेम को प्रदर्शित करने के लिए कुछ बुनियादी प्लॉट्स बनाने का प्रयास करें। एक बुनियादी लाइन प्लॉट क्या दिखाएगा?
+अभी बनाए गए नए dataframe को प्रदर्शित करने के लिए कुछ बुनियादी प्लॉट बनाने की कोशिश करें। एक बुनियादी लाइन प्लॉट क्या दिखाएगा?
-1. फ़ाइल के शीर्ष पर Pandas आयात के तहत Matplotlib आयात करें:
+1. फ़ाइल के शीर्ष पर, Pandas इंपोर्ट के नीचे Matplotlib इंपोर्ट करें:
```python
import matplotlib.pyplot as plt
```
-1. पूरे नोटबुक को फिर से चलाएं ताकि यह ताज़ा हो जाए।
-1. नोटबुक के नीचे एक सेल जोड़ें ताकि डेटा को एक बॉक्स के रूप में प्लॉट किया जा सके:
+1. नोटबुक को संपूर्ण रूप से पुनः चलाएं।
+1. नोटबुक के नीचे एक सेल जोड़ें जो डेटा को बॉक्स प्लॉट के रूप में प्रस्तुत करे:
```python
price = new_pumpkins.Price
@@ -174,44 +174,121 @@ Visual Studio Code में _notebook.ipynb_ फ़ाइल खोलें
plt.show()
```
- 
+ 
- क्या यह एक उपयोगी प्लॉट है? क्या इसमें कुछ ऐसा है जो आपको आश्चर्यचकित करता है?
+ क्या यह एक उपयोगी प्लॉट है? क्या इसमें कुछ आपको आश्चर्यचकित करता है?
- यह विशेष रूप से उपयोगी नहीं है क्योंकि यह केवल आपके डेटा को एक दिए गए महीने में बिंदुओं के फैलाव के रूप में प्रदर्शित करता है।
+ यह खास उपयोगी नहीं है क्योंकि यह केवल आपके डेटा को एक विस्तृत बिंदुओं के रूप में एक दिए गए महीने में दिखाता है।
### इसे उपयोगी बनाएं
-उपयोगी डेटा प्रदर्शित करने के लिए, आपको आमतौर पर डेटा को किसी न किसी तरह से समूहित करना होता है। आइए एक प्लॉट बनाएं जहां y अक्ष महीने दिखाए और डेटा वितरण को प्रदर्शित करे।
+उपयोगी डेटा चार्ट्स प्रदर्शित करने के लिए, आपको आम तौर पर डेटा को किसी तरह समूहित करना पड़ता है। चलिए एक ऐसा प्लॉट बनाने की कोशिश करें जहाँ y अक्ष महीनों को दिखाता है और डेटा वितरण को दर्शाता है।
-1. एक सेल जोड़ें ताकि एक समूहित बार चार्ट बनाया जा सके:
+1. एक सेल जोड़ें जो एक समूहित बार चार्ट बनाए:
```python
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')
plt.ylabel("Pumpkin Price")
```
- 
+ 
+
+ यह एक अधिक उपयोगी डेटा विज़ुअलाईज़ेशन है! यह दर्शाता है कि कद्दू के लिए उच्चतम कीमत सितंबर और अक्टूबर में होती है। क्या यह आपकी उम्मीद से मेल खाता है? क्यों या क्यों नहीं?
+
+## अभ्यास - Seaborn के साथ प्रयोग करें
+
+Matplotlib शक्तिशाली है, लेकिन एक चिकना चार्ट बनाने में काफी कोड लग सकता है। [Seaborn](https://seaborn.pydata.org/) एक लाइब्रेरी है जो Matplotlib के ऊपर बनी है और सांख्यिकीय डेटा विज़ुअलाईज़ेशन के लिए डिज़ाइन की गई है। यह सीधे Pandas dataframes के साथ काम करती है, आकर्षक डिफ़ॉल्ट शैलियाँ लागू करती है, और बहुत कम कोड के साथ सूचनात्मक प्लॉट बनाती है। चूंकि Seaborn Matplotlib ऑब्जेक्ट्स लौटाता है, आप Matplotlib के बारे में पहले से जो कुछ जानते हैं उसे परिणामों को बेहतर बनाने के लिए उपयोग कर सकते हैं।
+
+> यदि आपके पास Seaborn पहले से इंस्टॉल नहीं है, तो इसे `pip install seaborn` से इंस्टॉल करें।
+
+1. नोटबुक के शीर्ष पर अन्य इंपोर्ट्स के नीचे Seaborn इंपोर्ट करें। इसे सामान्यतः `sns` के रूप में इंपोर्ट किया जाता है:
+
+ ```python
+ import seaborn as sns
+ ```
+
+### रिश्तों को दिखाने के लिए स्कैटर प्लॉट्स
+
+मॉडल बनाने से पहले डेटा का पता लगाने का एक बड़ा हिस्सा है चर के बीच _रिश्तों_ को देखना। [स्कैटर प्लॉट](https://en.wikipedia.org/wiki/Scatter_plot) इस उद्देश्य के लिए सबसे अच्छे उपकरणों में से एक है: यदि बिंदु किसी रेखा का अनुसरण करते हुए दिखें, तो दोनों चर सहसंबद्ध हो सकते हैं, जो कि एक संकेत है कि लाइनियर रिग्रेशन मॉडल काम कर सकता है।
+
+1. पहले के मूल्य-से-महीना स्कैटर प्लॉट को फिर से बनाएं, लेकिन इस बार Seaborn के [`relplot()`](https://seaborn.pydata.org/generated/seaborn.relplot.html) (संबंधित प्लॉट) का उपयोग करते हुए, जो सीधे आपके dataframe के कॉलम के साथ काम करता है:
+
+ ```python
+ sns.relplot(x="Price", y="Month", data=new_pumpkins)
+ ```
+
+ 
+
+ ध्यान दें कि आप _कॉलम नाम_ और डेटा फ्रेम पास करते हैं, और Seaborn आपके लिए अक्ष लेबलों का ध्यान रखता है।
+
+2. आप `kind="line"` पास करके इसे लाइन प्लॉट में बदल सकते हैं। Seaborn रेखा के चारों ओर विश्वास अंतराल दिखाने वाला एक छायांकित बैंड भी बनाता है:
+
+ ```python
+ sns.relplot(x="Price", y="Month", kind="line", data=new_pumpkins)
+ ```
+
+ 
+
+ यह विशेष डेटा काफी शोर युक्त है, इसलिए लाइन प्लॉट सबसे स्पष्ट विकल्प नहीं है - लेकिन यह दिखाता है कि आप आसानी से Seaborn में चार्ट प्रकार कैसे बदल सकते हैं।
+
+### वितरण दिखाने के लिए बार चार्ट्स
+
+
+पहले आपने Matplotlib के साथ बार चार्ट बनाने के लिए डेटा को हाथ से समूहित किया था। Seaborn का [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html) (श्रेणीबद्ध प्लॉट) आपके लिए समूहण और एकत्रीकरण कर सकता है। डिफ़ॉल्ट रूप से `kind="bar"` प्रत्येक श्रेणी का औसत दिखाता है साथ ही एक काली रेखा जो विश्वास अंतराल को संकेत करती है।
+
+1. प्रति महीने औसत मूल्य का बार चार्ट बनाएं:
+
+ ```python
+ sns.catplot(x="Month", y="Price", data=new_pumpkins, kind="bar")
+ ```
+
+ 
+
+ यह पुष्टि करता है जो आपने Matplotlib के साथ देखा था — कीमतें सितंबर और अक्टूबर के आसपास चरम पर होती हैं — लेकिन Seaborn यह भी दिखाता है कि प्रत्येक महीने के भीतर कीमत कितनी _वैरिएबल_ होती है।
+
+### सहसंबंध दिखाने वाले हीटमैप्स
+
+स्कैटर प्लॉट एक बार में दो चर की तुलना करते हैं। जब आपके पास कई संख्यात्मक कॉलम होते हैं, तब एक [हीटमैप](https://en.wikipedia.org/wiki/Heat_map) आपको एक साथ _हर_ कॉलम जोड़ी के बीच संबंध की ताकत देखने देता है। यह एक सामान्य तरीका है यह देखने का कि कौन से फीचर्स सबसे अधिक संबंधित हैं इससे पहले कि आप मॉडल में कौन से फीचर फीड करें (और समान प्रकार के चार्ट का उपयोग बाद में क्लासिफिकेशन में कॉन्फ्यूजन मैट्रिक्स दिखाने के लिए किया जाता है)।
+
+1. Pandas के साथ एक सहसंबंध मैट्रिक्स बनाएं, फिर Seaborn के [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html) के साथ इसे ड्रॉ करें। `annot=True` विकल्प प्रत्येक सेल पर सहसंबंध मान प्रिंट करता है:
+
+ ```python
+ correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()
+ sns.heatmap(correlations, annot=True, cmap="coolwarm")
+ ```
+
+ 
+
+ `1` (या `-1`) के करीब मान का अर्थ है कि कॉलम सशक्त रूप से _रेखीय_ संबंधित हैं। देखें कि कैसे `Low Price` और `High Price` लगभग पूरी तरह से संबंधित हैं। दूसरी ओर, `Month` केवल कमजोर रेखीय संबंध दिखाता है — भले ही उपर्युक्त बार चार्ट ने सितंबर और अक्टूबर में एक स्पष्ट मौसमी चरम को दिखाया हो। यह एक महत्वपूर्ण सबक है: सहसंबंध गुणांक केवल _सीधी_ रेखा वाले संबंधों को मापता है, इसलिए यह मौसमी या अन्यथा गैर-रेखीय पैटर्न को छिपा सकता है। ✅ यह उपयोगी क्यों है कि हीटमैप और बार चार्ट जैसे चार्ट दोनों को देखने के बाद यह तय करें कि कौन से कॉलम का उपयोग करना है?
+
+### Matplotlib या Seaborn?
+
+दोनों पुस्तकालय जानने योग्य हैं:
+
+- **Matplotlib** आपको चार्ट के प्रत्येक तत्व पर सूक्ष्म नियंत्रण देता है और यह लगभग हर अन्य पायथन प्लॉटिंग लाइब्रेरी की नींव है।
+- **Seaborn** उच्च-स्तरीय फ़ंक्शन और सांख्यिकीय चार्ट के लिए आकर्षक पूर्वनिर्धारित सेटिंग्स प्रदान करता है, सीधे डेटा फ्रेम के साथ काम करता है, और अन्वेषणात्मक डेटा विश्लेषण के लिए अक्सर तेज़ होता है।
- यह एक अधिक उपयोगी डेटा विज़ुअलाइज़ेशन है! ऐसा लगता है कि कद्दू की सबसे अधिक कीमत सितंबर और अक्टूबर में होती है। क्या यह आपकी अपेक्षा के अनुरूप है? क्यों या क्यों नहीं?
+एक सामान्य कार्यप्रवाह यह है कि आप जल्दी से अपने डेटा का पता लगाने के लिए Seaborn तक पहुंचें, फिर जब विवरण कस्टमाइज़ेशन की ज़रूरत हो तो Matplotlib का उपयोग करें।
---
## 🚀चुनौती
-Matplotlib द्वारा प्रदान किए गए विभिन्न प्रकार के विज़ुअलाइज़ेशन का अन्वेषण करें। कौन से प्रकार रिग्रेशन समस्याओं के लिए सबसे उपयुक्त हैं?
+Matplotlib और Seaborn जो विभिन्न प्रकार के विज़ुअलाइज़ेशन प्रदान करते हैं उन्हें एक्सप्लोर करें। कौन से प्रकार सबसे उपयुक्त हैं रिग्रेशन समस्याओं के लिए?
-## [पोस्ट-लेक्चर क्विज़](https://ff-quizzes.netlify.app/en/ml/)
+## [पाठ-परिचय क्विज़](https://ff-quizzes.netlify.app/en/ml/)
## समीक्षा और स्व-अध्ययन
-डेटा को विज़ुअलाइज़ करने के कई तरीकों को देखें। उपलब्ध विभिन्न लाइब्रेरी की एक सूची बनाएं और नोट करें कि कौन सी लाइब्रेरी किस प्रकार के कार्यों के लिए सबसे अच्छी है, उदाहरण के लिए 2D विज़ुअलाइज़ेशन बनाम 3D विज़ुअलाइज़ेशन। आप क्या खोजते हैं?
+डेटा को विज़ुअलाइज़ करने के कई तरीकों को देखें। उपलब्ध विभिन्न लाइब्रेरी की सूची बनाएं और नोट करें कि कौन से कार्य के लिए सबसे उपयुक्त हैं, जैसे 2D विज़ुअलाइज़ेशन बनाम 3D विज़ुअलाइज़ेशन। आप क्या खोजते हैं?
## असाइनमेंट
-[विज़ुअलाइज़ेशन का अन्वेषण](assignment.md)
+[विज़ुअलाइज़ेशन की खोज](assignment.md)
---
-**अस्वीकरण**:
-यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
\ No newline at end of file
+
+**अस्वीकरण**:
+इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
+
\ No newline at end of file
diff --git a/translations/hi/2-Regression/2-Data/solution/notebook.ipynb b/translations/hi/2-Regression/2-Data/solution/notebook.ipynb
index 6df7d3bdd..250f0772a 100644
--- a/translations/hi/2-Regression/2-Data/solution/notebook.ipynb
+++ b/translations/hi/2-Regression/2-Data/solution/notebook.ipynb
@@ -3,7 +3,9 @@
{
"cell_type": "markdown",
"metadata": {},
- "source": []
+ "source": [
+ "## कद्दू के लिए रैखिक प्रतिगमन - पाठ 2\n"
+ ]
},
{
"cell_type": "code",
@@ -220,6 +222,7 @@
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
+ "import seaborn as sns\n",
"pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n",
"\n",
"pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n",
@@ -383,18 +386,78 @@
"plt.ylabel(\"Pumpkin Price\")"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Seaborn के साथ विज़ुअलाइज़ेशन\n",
+ "\n",
+ "[Seaborn](https://seaborn.pydata.org/) Matplotlib के ऊपर बनाया गया है और सीधे डेटा फ्रेम के साथ काम करता है, जिससे बहुत कम कोड के साथ आकर्षक सांख्यिकीय प्लॉट बनाना तेज़ हो जाता है।\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### संबंध दिखाने के लिए स्कैटर प्लॉट्स\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sns.relplot(x=\"Price\", y=\"Month\", data=new_pumpkins)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sns.relplot(x=\"Price\", y=\"Month\", kind=\"line\", data=new_pumpkins)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### वितरण दिखाने के लिए बार चार्ट\n"
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
- "source": []
+ "source": [
+ "sns.catplot(x=\"Month\", y=\"Price\", data=new_pumpkins, kind=\"bar\")"
+ ]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n---\n\n**अस्वीकरण**: \nयह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।\n"
+ "### सहसंबंध दिखाने के लिए हीटमैप्स\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()\n",
+ "sns.heatmap(correlations, annot=True, cmap=\"coolwarm\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n\n\n**अस्वीकरण**:\nइस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।\n\n"
]
}
],
@@ -424,13 +487,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
- "orig_nbformat": 2,
- "coopTranslator": {
- "original_hash": "95726f0b8283628d5356a4f8eb8b4b76",
- "translation_date": "2025-09-04T01:36:57+00:00",
- "source_file": "2-Regression/2-Data/solution/notebook.ipynb",
- "language_code": "hi"
- }
+ "orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2
diff --git a/translations/hi/8-Reinforcement/1-QLearning/README.md b/translations/hi/8-Reinforcement/1-QLearning/README.md
index 6d7cfa9a7..bdffce9d3 100644
--- a/translations/hi/8-Reinforcement/1-QLearning/README.md
+++ b/translations/hi/8-Reinforcement/1-QLearning/README.md
@@ -1,47 +1,47 @@
-# परिचय: रिइंफोर्समेंट लर्निंग और Q-लर्निंग
+# सुदृढ़ीकरण शिक्षण और क्यू-लर्निंग का परिचय
-
-> स्केच नोट: [Tomomi Imura](https://www.twitter.com/girlie_mac)
+
+> स्केचनोट द्वारा [Tomomi Imura](https://www.twitter.com/girlie_mac)
-रिइंफोर्समेंट लर्निंग तीन महत्वपूर्ण अवधारणाओं पर आधारित है: एजेंट, कुछ स्टेट्स, और प्रत्येक स्टेट के लिए एक्शन का सेट। किसी निर्दिष्ट स्टेट में एक्शन को निष्पादित करके, एजेंट को एक इनाम दिया जाता है। फिर से सुपर मारियो गेम की कल्पना करें। आप मारियो हैं, आप एक गेम लेवल में हैं, और एक चट्टान के किनारे पर खड़े हैं। आपके ऊपर एक सिक्का है। आप मारियो हैं, एक गेम लेवल में, एक विशिष्ट स्थिति में ... यही आपका स्टेट है। दाईं ओर एक कदम बढ़ाना (एक्शन) आपको किनारे से नीचे गिरा देगा, और यह आपको कम अंक देगा। हालांकि, जंप बटन दबाने से आप एक पॉइंट स्कोर करेंगे और जीवित रहेंगे। यह एक सकारात्मक परिणाम है और आपको एक सकारात्मक अंक प्रदान करना चाहिए।
+सुदृढ़ीकरण शिक्षण में तीन महत्वपूर्ण अवधारणाएँ शामिल हैं: एजेंट, कुछ अवस्थाएं, और प्रत्येक अवस्था के लिए कुछ क्रियाएं। किसी विशिष्ट अवस्था में कोई क्रिया करके, एजेंट को पुरस्कार (रिवार्ड) दिया जाता है। फिर से सोचिए कंप्यूटर गेम सुपर मारियो के बारे में। आप मारियो हैं, आप एक गेम स्तर में हैं, एक चट्टान के किनारे खड़े हैं। आपके ऊपर एक सिक्का है। आप मारियो हैं, एक गेम स्तर में, एक विशिष्ट स्थान पर ... वह आपकी अवस्था है। दाईं ओर एक कदम बढ़ाना (एक क्रिया) आपको किनारे से नीचे गिरा देगा, और इसका आपको कम अंक मिलेगा। हालांकि, जंप बटन दबाने पर आप एक पॉइंट स्कोर करेंगे और ज़िंदा रहेंगे। यह एक सकारात्मक परिणाम है और इसके लिए आपको सकारात्मक अंक मिलना चाहिए।
-रिइंफोर्समेंट लर्निंग और एक सिम्युलेटर (गेम) का उपयोग करके, आप गेम खेलने का तरीका सीख सकते हैं ताकि आप जीवित रह सकें और अधिकतम पॉइंट्स स्कोर कर सकें।
+सुदृढ़ीकरण सीखने और एक सिम्युलेटर (गेम) का उपयोग करके, आप गेम को इस तरह खेलना सीख सकते हैं ताकि पुरस्कार को अधिकतम किया जा सके, अर्थात ज़िंदा रहना और अधिक से अधिक अंक जमा करना।
-[](https://www.youtube.com/watch?v=lDq_en8RNOo)
+[](https://www.youtube.com/watch?v=lDq_en8RNOo)
-> 🎥 ऊपर दी गई छवि पर क्लिक करें और Dmitry से रिइंफोर्समेंट लर्निंग के बारे में सुनें
+> 🎥 ऊपर चित्र पर क्लिक करें और Dmitry से सुदृढ़ीकरण शिक्षण पर चर्चा सुनें
## [प्री-लेक्चर क्विज़](https://ff-quizzes.netlify.app/en/ml/)
-## आवश्यकताएँ और सेटअप
+## पूर्व आवश्यकताएँ और सेटअप
-इस पाठ में, हम Python में कुछ कोड के साथ प्रयोग करेंगे। आपको इस पाठ के Jupyter Notebook कोड को अपने कंप्यूटर पर या क्लाउड में कहीं भी चलाने में सक्षम होना चाहिए।
+इस पाठ में, हम Python में कुछ कोड के साथ प्रयोग करेंगे। आपको इस पाठ का Jupyter Notebook कोड अपने कंप्यूटर या क्लाउड में कहीं भी चला पाने में सक्षम होना चाहिए।
-आप [पाठ नोटबुक](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) खोल सकते हैं और इस पाठ को बनाने के लिए इसका अनुसरण कर सकते हैं।
+आप [पाठ नोटबुक](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) खोल सकते हैं और इस पाठ को सीखने के लिए इसका अनुसरण कर सकते हैं।
-> **नोट:** यदि आप इस कोड को क्लाउड से खोल रहे हैं, तो आपको [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) फ़ाइल भी प्राप्त करनी होगी, जो नोटबुक कोड में उपयोग की जाती है। इसे नोटबुक के समान डायरेक्टरी में जोड़ें।
+> **नोट:** यदि आप यह कोड क्लाउड से खोल रहे हैं, तो आपको [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) फाइल भी प्राप्त करनी होगी, जो नोटबुक के कोड में इस्तेमाल होती है। इसे नोटबुक के उसी डायरेक्टरी में जोड़ें।
## परिचय
-इस पाठ में, हम **[Peter and the Wolf](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)** की दुनिया का अन्वेषण करेंगे, जो एक रूसी संगीतकार [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev) की एक संगीत परी कथा से प्रेरित है। हम **रिइंफोर्समेंट लर्निंग** का उपयोग करेंगे ताकि पीटर अपने वातावरण का पता लगा सके, स्वादिष्ट सेब इकट्ठा कर सके और भेड़िये से बच सके।
+इस पाठ में, हम **[पीटर और वुल्फ](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)** की दुनिया का अन्वेषण करेंगे, जो रूसी संगीतकार, [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev) की एक संगीत परिकथा से प्रेरित है। हम **सुदृढ़ीकरण शिक्षण** का उपयोग करेंगे ताकि पीटर अपने पर्यावरण का अन्वेषण कर सके, स्वादिष्ट सेब इकट्ठा कर सके और भेड़िये से मिलना टाल सके।
-**रिइंफोर्समेंट लर्निंग** (RL) एक लर्निंग तकनीक है जो हमें कई प्रयोगों को चलाकर किसी **एजेंट** के **वातावरण** में इष्टतम व्यवहार सीखने की अनुमति देती है। इस वातावरण में एक एजेंट का कुछ **लक्ष्य** होना चाहिए, जिसे एक **इनाम फ़ंक्शन** द्वारा परिभाषित किया गया है।
+**सुदृढ़ीकरण शिक्षण** (RL) एक सीखने की तकनीक है जो हमें कई प्रयोग करके किसी **एजेंट** का किसी **पर्यावरण** में इष्टतम व्यवहार सीखने देती है। इस पर्यावरण में एजेंट का एक **लक्ष्य** होना चाहिए, जिसका निर्धारण एक **पुरस्कार फलन** द्वारा किया जाता है।
-## वातावरण
+## पर्यावरण
-सरलता के लिए, आइए पीटर की दुनिया को `width` x `height` आकार के एक वर्ग बोर्ड के रूप में मानें, जैसे:
+सरलता के लिए, आइए पीटर की दुनिया को `width` x `height` के एक वर्गाकार बोर्ड के रूप में मानते हैं, इस प्रकार:
-
+
-इस बोर्ड में प्रत्येक सेल निम्नलिखित में से एक हो सकता है:
+इस बोर्ड के प्रत्येक सेल में हो सकता है:
-* **जमीन**, जिस पर पीटर और अन्य जीव चल सकते हैं।
+* **भूमि**, जिस पर पीटर और अन्य जीव चल सकते हैं।
* **पानी**, जिस पर आप स्पष्ट रूप से नहीं चल सकते।
-* एक **पेड़** या **घास**, एक जगह जहां आप आराम कर सकते हैं।
-* एक **सेब**, जिसे पीटर खुशी से खोजेगा ताकि वह खुद को खिला सके।
-* एक **भेड़िया**, जो खतरनाक है और इससे बचा जाना चाहिए।
+* एक **पेड़** या **घास**, जहाँ आप आराम कर सकते हैं।
+* एक **सेब**, जो दर्शाता है कि पीटर अपने आप को खिलाने के लिए उसे पाकर खुश होगा।
+* एक **भेड़िया**, जो खतरनाक है और बचना चाहिए।
-एक अलग Python मॉड्यूल, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), इस वातावरण के साथ काम करने के लिए कोड को शामिल करता है। चूंकि यह कोड हमारे अवधारणाओं को समझने के लिए महत्वपूर्ण नहीं है, हम मॉड्यूल को आयात करेंगे और नमूना बोर्ड बनाने के लिए इसका उपयोग करेंगे (कोड ब्लॉक 1):
+एक अलग Python मॉड्यूल, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), इसमें इस पर्यावरण के साथ काम करने के लिए कोड है। क्योंकि यह कोड हमारे अवधारणाओं को समझने के लिए आवश्यक नहीं है, हम मॉड्यूल को इम्पोर्ट करेंगे और इसका उपयोग नमूना बोर्ड बनाने के लिए करेंगे (कोड ब्लॉक 1):
```python
from rlboard import *
@@ -52,63 +52,63 @@ m.randomize(seed=13)
m.plot()
```
-यह कोड ऊपर दिए गए चित्र के समान वातावरण का चित्र प्रिंट करेगा।
+यह कोड ऊपर के समान पर्यावरण की एक तस्वीर प्रिंट करेगा।
-## एक्शन और पॉलिसी
+## क्रियाएं और नीति
-हमारे उदाहरण में, पीटर का लक्ष्य सेब को खोजना होगा, जबकि भेड़िये और अन्य बाधाओं से बचना होगा। ऐसा करने के लिए, वह सेब को खोजने तक इधर-उधर चल सकता है।
+हमारे उदाहरण में, पीटर का लक्ष्य सेब ढूंढना होगा, जबकि भेड़िये और अन्य बाधाओं से बचना होगा। इसके लिए, वह मूल रूप से तब तक चल सकता है जब तक उसे सेब न मिल जाए।
-इसलिए, किसी भी स्थिति में, वह निम्नलिखित एक्शन में से एक चुन सकता है: ऊपर, नीचे, बाएं और दाएं।
+इसलिए, किसी भी स्थान पर, वह निम्नलिखित क्रियाओं में से एक चुन सकता है: ऊपर, नीचे, बाएँ और दाएँ।
-हम इन एक्शन को एक डिक्शनरी के रूप में परिभाषित करेंगे, और उन्हें संबंधित समन्वय परिवर्तनों के जोड़े से मैप करेंगे। उदाहरण के लिए, दाईं ओर बढ़ना (`R`) एक जोड़ी `(1,0)` के अनुरूप होगा। (कोड ब्लॉक 2):
+हम उन क्रियाओं को एक डिक्शनरी के रूप में परिभाषित करेंगे, और उन्हें संबंधित निर्देशांक परिवर्तनों के जोड़े से मैप करेंगे। उदाहरण के लिए, दाईं ओर जाना (`R`) `(1,0)` जोड़े के अनुरूप होगा। (कोड ब्लॉक 2):
```python
actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) }
action_idx = { a : i for i,a in enumerate(actions.keys()) }
```
-इस परिदृश्य की रणनीति और लक्ष्य को संक्षेप में कहें:
+संक्षेप में, इस परिदृश्य की रणनीति और लक्ष्य इस प्रकार हैं:
-- **रणनीति**, हमारे एजेंट (पीटर) की, एक तथाकथित **पॉलिसी** द्वारा परिभाषित की जाती है। पॉलिसी एक फ़ंक्शन है जो किसी भी दिए गए स्टेट पर एक्शन लौटाता है। हमारे मामले में, समस्या का स्टेट बोर्ड द्वारा दर्शाया गया है, जिसमें खिलाड़ी की वर्तमान स्थिति शामिल है।
+- **रणनीति**, हमारे एजेंट (पीटर) के लिए एक तथाकथित **नीति** द्वारा परिभाषित है। एक नीति एक फंक्शन है जो किसी भी ज्ञात अवस्था में क्रिया वापस करता है। हमारे मामले में, समस्या की स्थिति का प्रतिनिधित्व बोर्ड द्वारा किया जाता है, जिसमें खिलाड़ी का वर्तमान स्थान शामिल है।
-- **लक्ष्य**, रिइंफोर्समेंट लर्निंग का, अंततः एक अच्छी पॉलिसी सीखना है जो हमें समस्या को कुशलतापूर्वक हल करने की अनुमति देगा। हालांकि, एक आधार रेखा के रूप में, आइए सबसे सरल पॉलिसी पर विचार करें जिसे **रैंडम वॉक** कहा जाता है।
+- **लक्ष्य**, सुदृढ़ीकरण शिक्षण का उद्देश्य अंततः एक अच्छी नीति सीखना है जो हमें समस्या को कुशलतापूर्वक हल करने की अनुमति देगा। हालांकि, एक आधारभूत रूप में, चलिए सबसे सरल नीति जिसे हम कहते हैं **random walk** (यादृच्छिक चाल) को मानते हैं।
## रैंडम वॉक
-आइए पहले रैंडम वॉक रणनीति को लागू करके अपनी समस्या को हल करें। रैंडम वॉक के साथ, हम अनुमत एक्शन में से अगले एक्शन को यादृच्छिक रूप से चुनेंगे, जब तक कि हम सेब तक नहीं पहुंच जाते (कोड ब्लॉक 3)।
+पहले हम एक यादृच्छिक चाल रणनीति लागू करके हमारी समस्या को हल करेंगे। रैंडम वॉक के साथ, हम अनुमत क्रियाओं में से अगली क्रिया यादृच्छिक रूप से चुनेंगे, जब तक कि हम सेब तक न पहुँच जाएं (कोड ब्लॉक 3)।
-1. नीचे दिए गए कोड के साथ रैंडम वॉक लागू करें:
+1. नीचे दिए गए कोड से यादृच्छिक चाल लागू करें:
```python
def random_policy(m):
return random.choice(list(actions))
def walk(m,policy,start_position=None):
- n = 0 # number of steps
- # set initial position
+ n = 0 # कदमों की संख्या
+ # प्रारंभिक स्थिति सेट करें
if start_position:
m.human = start_position
else:
m.random_start()
while True:
if m.at() == Board.Cell.apple:
- return n # success!
+ return n # सफलता!
if m.at() in [Board.Cell.wolf, Board.Cell.water]:
- return -1 # eaten by wolf or drowned
+ return -1 # भेड़िये द्वारा खाया गया या डूबा हुआ
while True:
a = actions[policy(m)]
new_pos = m.move_pos(m.human,a)
if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water:
- m.move(a) # do the actual move
+ m.move(a) # वास्तविक चाल करें
break
n+=1
walk(m,random_policy)
```
- `walk` को कॉल करने से संबंधित पथ की लंबाई लौटनी चाहिए, जो एक रन से दूसरे रन में भिन्न हो सकती है।
+ `walk` कॉल संबंधित पथ की लंबाई लौटाएगी, जो रन के आधार पर भिन्न हो सकती है।
-1. वॉक प्रयोग को कई बार (कहें, 100) चलाएं, और परिणामी आँकड़े प्रिंट करें (कोड ब्लॉक 4):
+1. चल प्रयोग को कई बार (मान लें 100) चलाएं और परिणामी सांख्यिकी प्रिंट करें (कोड ब्लॉक 4):
```python
def print_statistics(policy):
@@ -125,17 +125,17 @@ action_idx = { a : i for i,a in enumerate(actions.keys()) }
print_statistics(random_policy)
```
- ध्यान दें कि पथ की औसत लंबाई लगभग 30-40 कदम है, जो काफी अधिक है, यह देखते हुए कि निकटतम सेब की औसत दूरी लगभग 5-6 कदम है।
+ ध्यान दें कि पथ की औसत लंबाई लगभग 30-40 कदम है, जो कि काफी अधिक है, जबकि निकटतम सेब की औसत दूरी लगभग 5-6 कदम है।
- आप यह भी देख सकते हैं कि रैंडम वॉक के दौरान पीटर की गति कैसी दिखती है:
+ आप यह भी देख सकते हैं कि रैंडम वॉक के दौरान पीटर की चाल कैसी दिखती है:
- 
+ 
-## इनाम फ़ंक्शन
+## पुरस्कार फ़ंक्शन
-हमारी पॉलिसी को अधिक बुद्धिमान बनाने के लिए, हमें यह समझने की आवश्यकता है कि कौन से कदम दूसरों की तुलना में "बेहतर" हैं। ऐसा करने के लिए, हमें अपना लक्ष्य परिभाषित करना होगा।
+हमारी नीति को अधिक बुद्धिमान बनाने के लिए, हमें समझना होगा कि कौन से कदम "बेहतर" हैं। इसके लिए, हमें अपना लक्ष्य परिभाषित करना होगा।
-लक्ष्य को एक **इनाम फ़ंक्शन** के संदर्भ में परिभाषित किया जा सकता है, जो प्रत्येक स्टेट के लिए कुछ स्कोर मान लौटाएगा। संख्या जितनी अधिक होगी, इनाम फ़ंक्शन उतना ही बेहतर होगा। (कोड ब्लॉक 5)
+लक्ष्य को एक **पुरस्कार फ़ंक्शन** के रूप में परिभाषित किया जा सकता है, जो प्रत्येक अवस्था के लिए कुछ स्कोर मूल्य लौटाएगा। मूल्य जितना अधिक होगा, पुरस्कार फ़ंक्शन उतना बेहतर होगा। (कोड ब्लॉक 5)
```python
move_reward = -0.1
@@ -154,39 +154,115 @@ def reward(m,pos=None):
return move_reward
```
-इनाम फ़ंक्शन के बारे में एक दिलचस्प बात यह है कि अधिकांश मामलों में, *हमें केवल खेल के अंत में एक महत्वपूर्ण इनाम दिया जाता है*। इसका मतलब है कि हमारे एल्गोरिदम को "अच्छे" कदमों को याद रखना चाहिए जो अंत में सकारात्मक इनाम की ओर ले जाते हैं, और उनकी महत्वता बढ़ानी चाहिए। इसी तरह, सभी कदम जो खराब परिणामों की ओर ले जाते हैं, उन्हें हतोत्साहित किया जाना चाहिए।
+पुरस्कार फ़ंक्शन के बारे में एक दिलचस्प बात यह है कि अधिकांश मामलों में, *हमें केवल खेल के अंत में महत्वपूर्ण पुरस्कार मिलता है*। इसका मतलब है कि हमारा एल्गोरिदम किसी तरह "अच्छे" कदमों को याद रखना चाहिए जो अंत में सकारात्मक पुरस्कार की ओर ले जाते हैं, और उनकी महत्ता बढ़ानी चाहिए। इसी तरह, सभी कदम जो बुरी परिणामों की ओर ले जाते हैं उन्हें हतोत्साहित किया जाना चाहिए।
-## Q-लर्निंग
+## क्यू-लर्निंग
-एक एल्गोरिदम जिसे हम यहां चर्चा करेंगे, उसे **Q-लर्निंग** कहा जाता है। इस एल्गोरिदम में, पॉलिसी को एक फ़ंक्शन (या डेटा संरचना) द्वारा परिभाषित किया जाता है जिसे **Q-टेबल** कहा जाता है। यह प्रत्येक स्टेट में दिए गए एक्शन की "अच्छाई" को रिकॉर्ड करता है।
+एक एल्गोरिदम जिसे हम यहाँ चर्चा करेंगे, उसे **क्यू-लर्निंग** कहा जाता है। इस एल्गोरिदम में, नीति एक फ़ंक्शन (या डेटा संरचना) द्वारा परिभाषित होती है जिसे **क्यू-टेबल** कहा जाता है। यह किसी निर्दिष्ट अवस्था में प्रत्येक क्रिया की "भलाइ" को रिकॉर्ड करता है।
-इसे Q-टेबल कहा जाता है क्योंकि इसे अक्सर एक टेबल या बहु-आयामी ऐरे के रूप में प्रस्तुत करना सुविधाजनक होता है। चूंकि हमारे बोर्ड का आयाम `width` x `height` है, हम Q-टेबल को `width` x `height` x `len(actions)` आकार के साथ एक numpy ऐरे का उपयोग करके प्रस्तुत कर सकते हैं: (कोड ब्लॉक 6)
+इसे क्यू-टेबल कहा जाता है क्योंकि इसे अक्सर एक तालिका या बहुआयामी सरणी के रूप में दर्शाना सुविधाजनक होता है। चूंकि हमारे बोर्ड के आकार `width` x `height` हैं, हम क्यू-टेबल को numpy सरणी के रूप में आकार `width` x `height` x `len(actions)` के साथ दर्शा सकते हैं: (कोड ब्लॉक 6)
```python
Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions)
```
-ध्यान दें कि हम Q-टेबल के सभी मानों को समान मान के साथ प्रारंभ करते हैं, हमारे मामले में - 0.25। यह "रैंडम वॉक" पॉलिसी के अनुरूप है, क्योंकि प्रत्येक स्टेट में सभी कदम समान रूप से अच्छे हैं। हम बोर्ड पर टेबल को विज़ुअलाइज़ करने के लिए Q-टेबल को `plot` फ़ंक्शन में पास कर सकते हैं: `m.plot(Q)`।
+ध्यान दें कि हम क्यू-टेबल के सभी मानों को समान मान के साथ प्रारंभ करते हैं, हमारे मामले में - 0.25। यह "यादृच्छिक चाल" नीति के अनुरूप है, क्योंकि प्रत्येक अवस्था में सभी चालें समान रूप से अच्छी हैं। हम इस क्यू-टेबल को `plot` फ़ंक्शन में पास कर सकते हैं ताकि बोर्ड पर इसे देखा जा सके: `m.plot(Q)`.
-
+
-प्रत्येक सेल के केंद्र में एक "तीर" होता है जो गति की पसंदीदा दिशा को इंगित करता है। चूंकि सभी दिशाएँ समान हैं, एक बिंदु प्रदर्शित होता है।
+प्रत्येक सेल के केंद्र में एक "तीर" होता है जो पसंदीदा आंदोलन दिशा को दर्शाता है। चूंकि सभी दिशाएँ समान हैं, इसलिए एक डॉट दिखाया जाता है।
-अब हमें सिमुलेशन चलाने, अपने वातावरण का पता लगाने, और Q-टेबल मानों के बेहतर वितरण को सीखने की आवश्यकता है, जो हमें सेब तक पहुंचने का रास्ता बहुत तेज़ी से खोजने की अनुमति देगा।
+अब हमें सिमुलेशन चलाना होगा, अपने पर्यावरण का अन्वेषण करना होगा, और क्यू-टेबल मानों का एक बेहतर वितरण सीखना होगा, जो हमें सेब तक तेजी से पहुंचने में मदद करेगा।
-## Q-लर्निंग का सार: बेलमैन समीकरण
+## क्यू-लर्निंग का सार: बेलमैन समीकरण
-एक बार जब हम चलना शुरू करते हैं, तो प्रत्येक एक्शन का एक संबंधित इनाम होगा, यानी हम सैद्धांतिक रूप से उच्चतम तत्काल इनाम के आधार पर अगले एक्शन का चयन कर सकते हैं। हालांकि, अधिकांश स्टेट्स में, यह कदम हमारे लक्ष्य को प्राप्त नहीं करेगा, और इसलिए हम तुरंत यह तय नहीं कर सकते कि कौन सी दिशा बेहतर है।
+जैसे ही हम चलना शुरू करेंगे, प्रत्येक क्रिया का एक संबंधित पुरस्कार होगा, अर्थात हम सैद्धांतिक रूप से सबसे उच्च तत्काल पुरस्कार के आधार पर अगली क्रिया चुन सकते हैं। लेकिन अधिकांश अवस्थाओं में, वह चाल हमारे लक्ष्य सेब तक पहुँचने को पूरा नहीं करेगी, इसलिए हम तुरंत नहीं तय कर सकते कि कौन सी दिशा बेहतर है।
-> याद रखें कि तत्काल परिणाम महत्वपूर्ण नहीं है, बल्कि अंतिम परिणाम है, जिसे हम सिमुलेशन के अंत में प्राप्त करेंगे।
+> याद रखें कि तत्काल परिणाम महत्वपूर्ण नहीं है, बल्कि अंतिम परिणाम महत्वपूर्ण है, जिसे हम सिमुलेशन के अंत में प्राप्त करेंगे।
-इस विलंबित इनाम को ध्यान में रखने के लिए, हमें **[डायनामिक प्रोग्रामिंग](https://en.wikipedia.org/wiki/Dynamic_programming)** के सिद्धांतों का उपयोग करने की आवश्यकता है, जो हमें अपनी समस्या के बारे में पुनरावर्ती रूप से सोचने की अनुमति देते हैं।
+इस विलंबित पुरस्कार को ध्यान में रखने के लिए, हमें **[डायनेमिक प्रोग्रामिंग](https://en.wikipedia.org/wiki/Dynamic_programming)** के सिद्धांतों का उपयोग करना होगा, जो हमें हमारी समस्या को पुनरावृत्तिमूलक रूप से सोचने की अनुमति देते हैं।
-मान लें कि हम अब स्टेट *s* पर हैं, और हम अगले स्टेट *s'* पर जाना चाहते हैं। ऐसा करने से, हमें तत्काल इनाम *r(s,a)* प्राप्त होगा, जिसे इनाम फ़ंक्शन द्वारा परिभाषित किया गया है, साथ ही कुछ भविष्य का इनाम भी। यदि हम मान लें कि हमारा Q-टेबल प्रत्येक एक्शन की "आकर्षकता" को सही ढंग से दर्शाता है, तो स्टेट *s'* पर हम एक्शन *a'* चुनेंगे जो *Q(s',a')* के अधिकतम मान के अनुरूप होगा। इस प्रकार, स्टेट *s* पर हमें मिलने वाला सबसे अच्छा संभावित भविष्य का इनाम `max`
+मान लीजिए हम अब अवस्था *s* में हैं, और हम अगली अवस्था *s'* में जाना चाहते हैं। ऐसा करने पर, हम तत्काल पुरस्कार *r(s,a)* प्राप्त करेंगे, जो पुरस्कार फ़ंक्शन द्वारा परिभाषित है, साथ ही कुछ भविष्य के पुरस्कार भी। यदि हम मान लें कि हमारा क्यू-टेबल प्रत्येक क्रिया की "आकर्षकता" को सही ढंग से दर्शाता है, तो अवस्था *s'* में हम ऐसी क्रिया *a* चुनेंगे जिसका मान अधिकतम होगा *Q(s',a')*। इस प्रकार, अवस्था *s* में हमारे लिए सबसे अच्छा संभव भविष्य का पुरस्कार `max`a'*Q(s',a')* होगा (यह अधिकतम सभी संभावित क्रियाओं *a'* पर अवस्था *s'* में लिया जाता है)।
-## नीति की जांच करना
+इससे क्यू-टेबल के मूल्य की गणना के लिए **बेलमैन सूत्र** मिलता है, जो अवस्था *s* में क्रिया *a* के लिए है:
-चूंकि Q-Table प्रत्येक स्थिति में प्रत्येक क्रिया की "आकर्षकता" को सूचीबद्ध करता है, इसे हमारे संसार में कुशल नेविगेशन को परिभाषित करने के लिए उपयोग करना काफी आसान है। सबसे सरल मामले में, हम उस क्रिया का चयन कर सकते हैं जो Q-Table में सबसे उच्च मान से मेल खाती है: (कोड ब्लॉक 9)
+
+
+यहाँ γ वह तथाकथित **छूट कारक** है जो यह निर्धारित करता है कि आपको वर्तमान पुरस्कार को भविष्य के पुरस्कार से कितनी प्राथमिकता देनी चाहिए।
+
+## सीखने का एल्गोरिदम
+
+उपरोक्त समीकरण के आधार पर, अब हम अपने सीखने वाले एल्गोरिदम के लिए छद्म-कोड लिख सकते हैं:
+
+* क्यू-टेबल Q को सभी अवस्थाओं और क्रियाओं के लिए समान मानों से आरंभ करें
+* सीखने की दर α ← 1 सेट करें
+* सिमुलेशन को कई बार दोहराएं
+ 1. यादृच्छिक स्थान से शुरू करें
+ 1. दोहराएं
+ 1. अवस्था *s* पर एक क्रिया *a* चुनें
+ 2. क्रिया निष्पादित करें, नई अवस्था *s'* में जाएं
+ 3. यदि हम खेल के अंत की स्थिति में पहुँच गए हैं, या कुल पुरस्कार बहुत कम है - सिमुलेशन बंद करें
+ 4. नई अवस्था पर पुरस्कार *r* गणना करें
+ 5. बेलमैन समीकरण के अनुसार क्यू-फ़ंक्शन अपडेट करें: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ maxa'Q(s',a'))*
+ 6. *s* ← *s'*
+ 7. कुल पुरस्कार अपडेट करें और α घटाएं।
+
+## विवेचना बनाम अन्वेषण
+
+ऊपर के एल्गोरिदम में, हमने यह निर्दिष्ट नहीं किया कि हम चरण 2.1 में क्रिया कैसे चुनेंगे। यदि हम क्रियाओं को यादृच्छिक रूप से चुनते हैं, तो हम पर्यावरण का यादृच्छिक **अन्वेषण** करेंगे, और हमें अक्सर मरना पड़ सकता है, साथ ही हम उन क्षेत्रों की जांच भी करेंगे जहाँ हम आमतौर पर नहीं जाते। एक वैकल्पिक दृष्टिकोण यह होगा कि हम पहले से ज्ञात क्यू-टेबल मानों का **शोषण** करें, और इसलिए अवस्था *s* पर सबसे अच्छी क्रिया (जिसके क्यू-टेबल मान अधिक हैं) चुनें। हालांकि, यह हमें अन्य अवस्थाओं का अन्वेषण करने से रोकेगा, और संभवतः हम सर्वोत्कृष्ट समाधान नहीं पा सकेंगे।
+
+इसलिए, सबसे अच्छा तरीका यह है कि अन्वेषण और शोषण के बीच संतुलन बनाया जाए। इसे किया जा सकता है कि हम अवस्था *s* पर क्रिया को उन क्यू-टेबल मानों के अनुपात में चुनें। शुरुआत में, जब क्यू-टेबल के सभी मान समान होंगे, तो यह यादृच्छिक चयन के समान होगा, लेकिन जैसे-जैसे हम पर्यावरण के बारे में अधिक सीखेंगे, हम अधिक संभावना के साथ इष्टतम मार्ग का पालन करेंगे, जबकि एजेंट को कभी-कभी अनदेखे रास्ते चुनने की अनुमति भी देंगे।
+
+## Python कार्यान्वयन
+
+अब हम सीखने वाले एल्गोरिदम को लागू करने के लिए तैयार हैं। इसके पहले, हमें ऐसी फ़ंक्शन की भी आवश्यकता है जो क्यू-टेबल में मनमाने नंबरों को संबंधित क्रियाओं के लिए संभावनाओं के वेक्टर में बदल सके।
+
+1. `probs()` नामक फ़ंक्शन बनाएं:
+
+ ```python
+ def probs(v,eps=1e-4):
+ v = v-v.min()+eps
+ v = v/v.sum()
+ return v
+ ```
+
+ हम कुछ `eps` को मूल वेक्टर में जोड़ते हैं ताकि प्रारंभिक स्थिति में, जब वेक्टर के सभी घटक समान होते हैं, तो 0 से विभाजन से बचा जा सके।
+
+इसे 5000 प्रयोगों, जिन्हें **इपोक्स** भी कहा जाता है, के माध्यम से चलाएं: (कोड ब्लॉक 8)
+```python
+ for epoch in range(5000):
+
+ # प्रारंभिक बिंदु चुनें
+ m.random_start()
+
+ # यात्रा शुरू करें
+ n=0
+ cum_reward = 0
+ while True:
+ x,y = m.human
+ v = probs(Q[x,y])
+ a = random.choices(list(actions),weights=v)[0]
+ dpos = actions[a]
+ m.move(dpos,check_correctness=False) # हम खिलाड़ी को बोर्ड के बाहर जाने की अनुमति देते हैं, जो एपिसोड को समाप्त करता है
+ r = reward(m)
+ cum_reward += r
+ if r==end_reward or cum_reward < -1000:
+ lpath.append(n)
+ break
+ alpha = np.exp(-n / 10e5)
+ gamma = 0.5
+ ai = action_idx[a]
+ Q[x,y,ai] = (1 - alpha) * Q[x,y,ai] + alpha * (r + gamma * Q[x+dpos[0], y+dpos[1]].max())
+ n+=1
+```
+
+इस एल्गोरिदम को निष्पादित करने के बाद, क्यू-टेबल उन मानों के साथ अद्यतन हो जाएगा जो प्रत्येक चरण पर विभिन्न क्रियाओं की आकर्षकता को परिभाषित करते हैं। हम क्यू-टेबल को अपने बोर्ड पर चलने की इच्छित दिशा दिखाने वाले वेक्टर को प्रत्येक सेल पर प्लॉट करके विज़ुअलाइज़ कर सकते हैं। सरलता के लिए, हम तीर के सिर की जगह एक छोटा वृत्त बनाते हैं।
+
+
+
+## नीति की जांच
+
+चूंकि क्यू-टेबल प्रत्येक अवस्था में प्रत्येक क्रिया की "आकर्षकता" सूचिबद्ध करता है, इसका उपयोग हमारे विश्व में कुशल नेविगेशन को परिभाषित करने के लिए काफी सरल है। सबसे सरल मामले में, हम सबसे उच्च क्यू-टेबल मान वाले क्रिया का चयन कर सकते हैं: (कोड ब्लॉक 9)
```python
def qpolicy_strict(m):
@@ -198,17 +274,18 @@ def qpolicy_strict(m):
walk(m,qpolicy_strict)
```
-> यदि आप ऊपर दिए गए कोड को कई बार आज़माते हैं, तो आप देख सकते हैं कि कभी-कभी यह "अटक" जाता है, और आपको इसे रोकने के लिए नोटबुक में STOP बटन दबाना पड़ता है। ऐसा इसलिए होता है क्योंकि कुछ स्थितियों में दो अवस्थाएँ "एक-दूसरे की ओर इशारा करती हैं" इष्टतम Q-Value के संदर्भ में, जिससे एजेंट उन अवस्थाओं के बीच अनिश्चितकाल तक घूमता रहता है।
+
+> यदि आप ऊपर दिया गया कोड कई बार चलाते हैं, तो आप देख सकते हैं कि कभी-कभी यह "अटक" जाता है, और आपको इसे रोकने के लिए नोटबुक में STOP बटन दबाना पड़ता है। ऐसा इसलिए होता है क्योंकि ऐसी स्थितियां हो सकती हैं जब दो राज्य अनुकूल Q-मूल्य के संदर्भ में एक-दूसरे की "मुद्दा" करते हैं, जिस स्थिति में एजेंट अनंत काल तक उन राज्यों के बीच घूमता रहता है।
## 🚀चुनौती
-> **कार्य 1:** `walk` फ़ंक्शन को संशोधित करें ताकि पथ की अधिकतम लंबाई को एक निश्चित संख्या (जैसे, 100) तक सीमित किया जा सके, और ऊपर दिया गया कोड समय-समय पर इस मान को लौटाए।
+> **कार्य 1:** `walk` फ़ंक्शन को इस प्रकार संशोधित करें कि पथ की अधिकतम लंबाई एक निश्चित संख्या के चरणों (मान लीजिए, 100) तक सीमित हो, और ऊपर दिए गए कोड को समय-समय पर यह मान लौटाते हुए देखें।
-> **कार्य 2:** `walk` फ़ंक्शन को संशोधित करें ताकि वह उन स्थानों पर वापस न जाए जहाँ वह पहले ही जा चुका है। यह `walk` को लूपिंग से रोक देगा, लेकिन एजेंट अभी भी ऐसी जगह पर "फंस" सकता है जहाँ से वह बाहर नहीं निकल सकता।
+> **कार्य 2:** `walk` फ़ंक्शन को इस तरह बदलें कि यह उन स्थानों पर वापस न जाए जहां यह पहले ही जा चुका हो। इससे `walk` के लूप में फंसने से बचा जा सकेगा, हालांकि, एजेंट फिर भी एक ऐसे स्थान पर "फंस" सकता है जहाँ से वह निकल न सके।
## नेविगेशन
-एक बेहतर नेविगेशन नीति वह होगी जो हमने प्रशिक्षण के दौरान उपयोग की थी, जो शोषण और अन्वेषण को जोड़ती है। इस नीति में, हम प्रत्येक क्रिया को एक निश्चित संभावना के साथ चुनेंगे, जो Q-Table में मानों के अनुपात में होगी। यह रणनीति अभी भी एजेंट को पहले से खोजे गए स्थान पर वापस लौटने का कारण बन सकती है, लेकिन जैसा कि आप नीचे दिए गए कोड से देख सकते हैं, यह वांछित स्थान तक बहुत छोटे औसत पथ का परिणाम देती है (याद रखें कि `print_statistics` सिमुलेशन को 100 बार चलाता है): (कोड ब्लॉक 10)
+एक बेहतर नेविगेशन नीति वही होगी जिसका हमने प्रशिक्षण के दौरान उपयोग किया था, जो शोषण और अन्वेषण का संयोजन करती है। इस नीति में, हम प्रत्येक क्रिया को निश्चित संभावना के साथ चुनेंगे, जो Q-टेबल में मानों के अनुपात में होगी। यह रणनीति एजेंट को पहले से देखे गए स्थान पर वापस लौटने का कारण बन सकती है, लेकिन जैसा कि नीचे के कोड में देख सकते हैं, यह वांछित स्थान तक बहुत छोटा औसत पथ प्रदान करती है (ध्यान दें कि `print_statistics` सिमुलेशन को 100 बार चलाता है): (कोड ब्लॉक 10)
```python
def qpolicy(m):
@@ -220,28 +297,32 @@ def qpolicy(m):
print_statistics(qpolicy)
```
-इस कोड को चलाने के बाद, आपको पहले की तुलना में बहुत छोटा औसत पथ लंबाई प्राप्त करनी चाहिए, जो 3-6 की सीमा में होगी।
+इस कोड को चलाने के बाद, आपको पहले की तुलना में बहुत छोटा औसत पथ लंबाई प्राप्त होनी चाहिए, लगभग 3-6 के बीच।
## सीखने की प्रक्रिया की जांच
-जैसा कि हमने उल्लेख किया है, सीखने की प्रक्रिया समस्या स्थान की संरचना के बारे में प्राप्त ज्ञान के अन्वेषण और उपयोग के बीच संतुलन है। हमने देखा है कि सीखने के परिणाम (एजेंट को लक्ष्य तक पहुँचने के लिए छोटा पथ खोजने की क्षमता) में सुधार हुआ है, लेकिन यह देखना भी दिलचस्प है कि सीखने की प्रक्रिया के दौरान औसत पथ लंबाई कैसे व्यवहार करती है:
+जैसा कि हमने उल्लेख किया है, सीखने की प्रक्रिया समस्या स्थान की संरचना के बारे में प्राप्त ज्ञान के अन्वेषण और उपयोग के बीच संतुलन है। हमने देखा कि सीखने के परिणाम (एजेंट को लक्ष्य तक छोटा पथ खोजने में मदद करने की क्षमता) बेहतर हुए हैं, लेकिन यह देखना भी दिलचस्प है कि सीखने की प्रक्रिया के दौरान औसत पथ लंबाई कैसे व्यवहार करती है:
+
+
-## सीखने को निम्नलिखित रूप में संक्षेपित किया जा सकता है:
+सीखने को इस प्रकार संक्षेपित किया जा सकता है:
-- **औसत पथ लंबाई बढ़ती है**। यहाँ हम देखते हैं कि शुरुआत में औसत पथ लंबाई बढ़ती है। ऐसा संभवतः इसलिए होता है क्योंकि जब हमें पर्यावरण के बारे में कुछ भी पता नहीं होता, तो हम खराब अवस्थाओं, पानी या भेड़िये में फंसने की संभावना रखते हैं। जैसे-जैसे हम अधिक सीखते हैं और इस ज्ञान का उपयोग करना शुरू करते हैं, हम पर्यावरण का अधिक समय तक अन्वेषण कर सकते हैं, लेकिन हमें अभी भी सेबों के स्थान का सही पता नहीं होता।
+- **औसत पथ लंबाई बढ़ती है।** यहाँ हम देखते हैं कि पहले औसत पथ लंबाई बढ़ती है। यह संभवतः इसलिए होता है क्योंकि जब हमें पर्यावरण के बारे में कुछ पता नहीं होता, तो हम खराब राज्यों, पानी या भेड़िये में फंस सकते हैं। जैसे-जैसे हम अधिक सीखते हैं और इस ज्ञान का उपयोग करते हैं, हम पर्यावरण का अधिक अन्वेषण कर सकते हैं, लेकिन फिर भी हमें सेबों के स्थान के बारे में पूरी जानकारी नहीं होती।
-- **पथ लंबाई घटती है, जैसे-जैसे हम अधिक सीखते हैं**। एक बार जब हम पर्याप्त सीख लेते हैं, तो एजेंट के लिए लक्ष्य प्राप्त करना आसान हो जाता है, और पथ लंबाई घटने लगती है। हालांकि, हम अभी भी अन्वेषण के लिए खुले हैं, इसलिए हम अक्सर सबसे अच्छे पथ से दूर चले जाते हैं और नए विकल्पों का अन्वेषण करते हैं, जिससे पथ आदर्श से लंबा हो जाता है।
+- **जैसे-जैसे हम अधिक सीखते हैं, पथ लंबाई घटती है।** जब हम पर्याप्त सीख जाते हैं, तो एजेंट के लिए लक्ष्य प्राप्त करना आसान हो जाता है, और पथ लंबाई घटने लगती है। फिर भी, हम अन्वेषण के लिए खुले होते हैं, इसलिए हम अक्सर सर्वोत्तम पथ से भटक जाते हैं, और नए विकल्प खोजते हैं, जिससे पथ औप्टिमल से लंबा हो जाता है।
-- **लंबाई अचानक बढ़ जाती है**। जो हम इस ग्राफ पर भी देखते हैं वह यह है कि किसी बिंदु पर, लंबाई अचानक बढ़ जाती है। यह प्रक्रिया की अनिश्चित प्रकृति को इंगित करता है, और यह कि हम किसी बिंदु पर Q-Table गुणांक को नए मानों से अधिलेखित करके "खराब" कर सकते हैं। इसे आदर्श रूप से सीखने की दर को कम करके न्यूनतम किया जाना चाहिए (उदाहरण के लिए, प्रशिक्षण के अंत में, हम केवल Q-Table मानों को एक छोटे मान से समायोजित करते हैं)।
+- **लंबाई अचानक बढ़ जाती है।** इस ग्राफ़ पर हम यह भी देखते हैं कि कुछ बिंदु पर लंबाई अचानक बढ़ गई। यह प्रक्रिया की यादृच्छिक प्रकृति को दर्शाता है, और यह कि कभी-कभी हम Q-टेबल गुणांक को नए मानों से अधिलेखित करके "खराब" कर देते हैं। आदर्श रूप से, इसे सीखने की दर को घटाकर कम किया जाना चाहिए (उदाहरण के लिए, प्रशिक्षण के अंत में, हम केवल Q-टेबल मानों को थोड़े मान से समायोजित करते हैं)।
-कुल मिलाकर, यह याद रखना महत्वपूर्ण है कि सीखने की प्रक्रिया की सफलता और गुणवत्ता काफी हद तक पैरामीटर पर निर्भर करती है, जैसे सीखने की दर, सीखने की दर में कमी, और छूट कारक। इन्हें अक्सर **हाइपरपैरामीटर** कहा जाता है, ताकि उन्हें **पैरामीटर** से अलग किया जा सके, जिन्हें हम प्रशिक्षण के दौरान अनुकूलित करते हैं (उदाहरण के लिए, Q-Table गुणांक)। सबसे अच्छे हाइपरपैरामीटर मानों को खोजने की प्रक्रिया को **हाइपरपैरामीटर अनुकूलन** कहा जाता है, और यह एक अलग विषय के योग्य है।
+कुल मिलाकर, यह याद रखना महत्वपूर्ण है कि सीखने की प्रक्रिया की सफलता और गुणवत्ता काफी हद तक कुछ पैरामीटरों पर निर्भर करती है, जैसे कि सीखने की दर, सीखने की दर में कमी, और डिस्काउंट फैक्टर। इन्हें अक्सर **हाइपरपैरामीटर** कहा जाता है, ताकि उन्हें उन **पैरामीटरों** से अलग किया जा सके जिन्हें हम प्रशिक्षण के दौरान अनुकूलित करते हैं (उदाहरण के लिए, Q-टेबल गुणांक)। सबसे अच्छे हाइपरपैरामीटर मान खोजने की प्रक्रिया को **हाइपरपैरामीटर ऑप्टिमाइज़ेशन** कहा जाता है, और यह एक अलग विषय का हकदार है।
-## [पोस्ट-लेक्चर क्विज़](https://ff-quizzes.netlify.app/en/ml/)
+## [प्रसारण के बाद क्विज़](https://ff-quizzes.netlify.app/en/ml/)
-## असाइनमेंट
-[एक अधिक यथार्थवादी संसार](assignment.md)
+## असाइनमेंट
+[एक अधिक यथार्थवादी दुनिया](assignment.md)
---
-**अस्वीकरण**:
-यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
\ No newline at end of file
+
+**अस्वीकरण**:
+इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
+
\ No newline at end of file
diff --git a/translations/hi/8-Reinforcement/2-Gym/README.md b/translations/hi/8-Reinforcement/2-Gym/README.md
index b5c4b3bb5..d935b8565 100644
--- a/translations/hi/8-Reinforcement/2-Gym/README.md
+++ b/translations/hi/8-Reinforcement/2-Gym/README.md
@@ -1,14 +1,34 @@
-## आवश्यकताएँ
+# कार्टपोल स्केटिंग
-इस पाठ में, हम **OpenAI Gym** नामक एक लाइब्रेरी का उपयोग करेंगे जो विभिन्न **पर्यावरणों** को सिमुलेट करती है। आप इस पाठ का कोड स्थानीय रूप से (जैसे Visual Studio Code से) चला सकते हैं, जिसमें सिमुलेशन एक नई विंडो में खुलेगा। ऑनलाइन कोड चलाते समय, आपको कोड में कुछ बदलाव करने की आवश्यकता हो सकती है, जैसा कि [यहां](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) वर्णित है।
+पिछली पाठ में हमने जो समस्या हल की थी, वह एक खिलौना समस्या लग सकती है, जो वास्तविक जीवन के परिदृश्यों के लिए वास्तविक रूप से लागू नहीं होती। ऐसा नहीं है, क्योंकि कई वास्तविक दुनिया की समस्याएँ भी इस परिदृश्य को साझा करती हैं - जिसमें शतरंज या गो खेलना भी शामिल है। ये समान हैं, क्योंकि हमारे पास एक बोर्ड होता है जिसमें दिए गए नियम होते हैं और एक **अवकलित स्थिति** होती है।
+
+## [पूर्व-व्याख्यान क्विज़](https://ff-quizzes.netlify.app/en/ml/)
+
+## परिचय
+
+इस पाठ में हम Q-लर्निंग के समान सिद्धांतों को एक ऐसी समस्या पर लागू करेंगे जिसमें **सतत स्थिति** होती है, अर्थात ऐसी स्थिति जो एक या अधिक वास्तविक संख्याओं द्वारा दी जाती है। हम निम्नलिखित समस्या से निपटेंगे:
+
+> **समस्या**: यदि पीटर भालू से बचना चाहता है, तो उसे तेज़ चलना होगा। हम देखेंगे कि कैसे पीटर Q-लर्निंग का उपयोग करके स्केट करना सीख सकता है, खासकर संतुलन बनाए रखना।
+
+
+
+> पीटर और उसके दोस्त भालू से बचने के लिए रचनात्मक हो जाते हैं! छवि द्वारा [Jen Looper](https://twitter.com/jenlooper)
+
+हम संतुलन बनाए रखने के एक सरल संस्करण का उपयोग करेंगे जिसे **कार्टपोल** समस्या के रूप में जाना जाता है। कार्टपोल दुनिया में, हमारे पास एक क्षैतिज स्लाइडर होता है जो बाएं या दाएं स्थानांतरित हो सकता है, और लक्ष्य स्लाइडर के शीर्ष पर एक ऊर्ध्वाधर पोल का संतुलन बनाए रखना होता है।
+
+
+
+## पूर्वापेक्षाएं
+
+इस पाठ में, हम विभिन्न **परिसरों** का अनुकरण करने के लिए **OpenAI Gym** नामक पुस्तकालय का उपयोग करेंगे। आप इस पाठ के कोड को स्थानीय रूप से चला सकते हैं (उदा. Visual Studio Code से), उस स्थिति में अनुकरण एक नई विंडो में खुलेगा। ऑनलाइन कोड चलाते समय, आपको कोड में कुछ समायोजन करने पड़ सकते हैं, जैसा कि [यहाँ](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) वर्णित है।
## OpenAI Gym
-पिछले पाठ में, खेल के नियम और स्थिति `Board` क्लास द्वारा दी गई थी जिसे हमने स्वयं परिभाषित किया था। यहां हम एक विशेष **सिमुलेशन पर्यावरण** का उपयोग करेंगे, जो बैलेंसिंग पोल के पीछे के भौतिकी को सिमुलेट करेगा। रिइंफोर्समेंट लर्निंग एल्गोरिदम को प्रशिक्षित करने के लिए सबसे लोकप्रिय सिमुलेशन पर्यावरणों में से एक [Gym](https://gym.openai.com/) है, जिसे [OpenAI](https://openai.com/) द्वारा बनाए रखा गया है। इस जिम का उपयोग करके हम विभिन्न **पर्यावरणों** को बना सकते हैं, जैसे कि कार्टपोल सिमुलेशन से लेकर Atari गेम्स तक।
+पिछली पाठ में, खेल के नियम और स्थिति `Board` वर्ग द्वारा दी गई थी जिसे हमने स्वयं परिभाषित किया था। यहाँ हम एक विशेष **अनुकरण पर्यावरण** का उपयोग करेंगे, जो संतुलन पोल के पीछे की भौतिकी का अनुकरण करेगा। प्रशिक्षण सुदृढीकरण लर्निंग एल्गोरिदम के लिए सबसे लोकप्रिय अनुकरण परिवेशों में से एक [Gym](https://gym.openai.com/) कहलाता है, जिसे [OpenAI](https://openai.com/) द्वारा रखरखाव किया जाता है। इस जिम का उपयोग करके हम विभिन्न **परिसर** बना सकते हैं, जैसे कार्टपोल अनुकरण से लेकर अटारी खेल तक।
-> **Note**: आप OpenAI Gym द्वारा उपलब्ध अन्य पर्यावरणों को [यहां](https://gym.openai.com/envs/#classic_control) देख सकते हैं।
+> **टिप्पणी**: आप OpenAI Gym के अन्य उपलब्ध परिसरों को [यहाँ](https://gym.openai.com/envs/#classic_control) देख सकते हैं।
-सबसे पहले, जिम को इंस्टॉल करें और आवश्यक लाइब्रेरी को इंपोर्ट करें (कोड ब्लॉक 1):
+पहले, चलिए जिम इंस्टॉल करें और आवश्यक पुस्तकालय आयात करें (कोड ब्लॉक 1):
```python
import sys
@@ -20,15 +40,15 @@ import numpy as np
import random
```
-## अभ्यास - कार्टपोल पर्यावरण को प्रारंभ करें
+## अभ्यास - कार्टपोल पर्यावरण आरंभ करें
-कार्टपोल बैलेंसिंग समस्या पर काम करने के लिए, हमें संबंधित पर्यावरण को प्रारंभ करना होगा। प्रत्येक पर्यावरण निम्नलिखित से जुड़ा होता है:
+कार्टपोल संतुलन समस्या पर काम करने के लिए, हमें संबंधित पर्यावरण आरंभ करना होगा। प्रत्येक पर्यावरण एक से जुड़ा होता है:
-- **Observation space** जो उस जानकारी की संरचना को परिभाषित करता है जो हमें पर्यावरण से प्राप्त होती है। कार्टपोल समस्या के लिए, हमें पोल की स्थिति, वेग और कुछ अन्य मान प्राप्त होते हैं।
+- **अवलोकन स्थान** जो उस जानकारी की संरचना को परिभाषित करता है जो हमें पर्यावरण से प्राप्त होती है। कार्टपोल समस्या में, हमें पोल की स्थिति, वेग और कुछ अन्य मान प्राप्त होते हैं।
-- **Action space** जो संभावित क्रियाओं को परिभाषित करता है। हमारे मामले में, एक्शन स्पेस डिस्क्रीट है और इसमें दो क्रियाएं शामिल हैं - **बाएं** और **दाएं**। (कोड ब्लॉक 2)
+- **कार्य स्थान** जो संभव क्रियाओं को परिभाषित करता है। हमारे मामले में, क्रिया स्थान अवकलित है, और इसमें दो क्रियाएं होती हैं - **बाएँ** और **दाएँ**। (कोड ब्लॉक 2)
-1. प्रारंभ करने के लिए, निम्नलिखित कोड टाइप करें:
+1. आरंभ करने के लिए, निम्नलिखित कोड टाइप करें:
```python
env = gym.make("CartPole-v1")
@@ -37,9 +57,9 @@ import random
print(env.action_space.sample())
```
-पर्यावरण कैसे काम करता है यह देखने के लिए, चलिए 100 चरणों के लिए एक छोटा सिमुलेशन चलाते हैं। प्रत्येक चरण में, हम एक क्रिया प्रदान करते हैं जिसे लिया जाना चाहिए - इस सिमुलेशन में हम बस `action_space` से एक क्रिया को रैंडमली चुनते हैं।
+पर्यावरण कैसे काम करता है यह देखने के लिए, चलिए 100 कदमों के लिए एक छोटा अनुकरण चलाते हैं। प्रत्येक कदम पर, हम एक क्रिया देते हैं जिसे लिया जाना है - इस अनुकरण में हम बस `action_space` से यादृच्छिक रूप से एक क्रिया चुनते हैं।
-1. नीचे दिए गए कोड को चलाएं और देखें कि इसका क्या परिणाम होता है।
+1. नीचे दिए गए कोड को चलाएँ और देखें कि इसका परिणाम क्या होता है।
✅ याद रखें कि इस कोड को स्थानीय Python इंस्टॉलेशन पर चलाना बेहतर है! (कोड ब्लॉक 3)
@@ -52,11 +72,11 @@ import random
env.close()
```
- आपको कुछ इस तरह की छवि दिखाई देनी चाहिए:
+ आपको कुछ ऐसा देखना चाहिए:
- 
+ 
-1. सिमुलेशन के दौरान, हमें यह तय करने के लिए ऑब्ज़र्वेशन प्राप्त करने की आवश्यकता होती है कि कैसे कार्य करना है। वास्तव में, स्टेप फंक्शन वर्तमान ऑब्ज़र्वेशन, एक रिवॉर्ड फंक्शन, और एक डन फ्लैग लौटाता है जो यह संकेत देता है कि सिमुलेशन जारी रखना समझदारी है या नहीं: (कोड ब्लॉक 4)
+1. अनुकरण के दौरान, हमें निर्णय लेने के लिए अवलोकन प्राप्त करना होता है। वास्तव में, step फ़ंक्शन वर्तमान अवलोकन, पुरस्कार फ़ंक्शन, और done फ़्लैग लौटाता है जो बताता है कि अनुकरण जारी रखना समझदारी है या नहीं: (कोड ब्लॉक 4)
```python
env.reset()
@@ -69,7 +89,7 @@ import random
env.close()
```
- आपको नोटबुक आउटपुट में कुछ इस तरह दिखाई देगा:
+ आपको नोटबुक आउटपुट में कुछ ऐसा दिखाई देगा:
```text
[ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0
@@ -82,11 +102,11 @@ import random
[ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0
```
- सिमुलेशन के प्रत्येक चरण में लौटाए गए ऑब्ज़र्वेशन वेक्टर में निम्नलिखित मान होते हैं:
+ हर कदम पर लौटाए गए अवलोकन वेक्टर में निम्नलिखित मान शामिल हैं:
- कार्ट की स्थिति
- - कार्ट का वेग
+ - कार्ट की गति
- पोल का कोण
- - पोल का रोटेशन दर
+ - पोल की घूर्णन दर
1. उन संख्याओं के न्यूनतम और अधिकतम मान प्राप्त करें: (कोड ब्लॉक 5)
@@ -95,30 +115,30 @@ import random
print(env.observation_space.high)
```
- आप यह भी देख सकते हैं कि प्रत्येक सिमुलेशन चरण पर रिवॉर्ड मान हमेशा 1 होता है। ऐसा इसलिए है क्योंकि हमारा लक्ष्य जितना संभव हो उतना लंबे समय तक जीवित रहना है, यानी पोल को एक उचित वर्टिकल स्थिति में सबसे लंबे समय तक बनाए रखना।
+ आप यह भी नोटिस कर सकते हैं कि प्रत्येक अनुकरण कदम पर पुरस्कार मान हमेशा 1 होता है। ऐसा इसलिए है क्योंकि हमारा लक्ष्य यथासंभव लंबे समय तक जीवित रहना है, अर्थात पोल को यथासंभव लंबवत स्थिति में रखना।
- ✅ वास्तव में, यदि हम 100 लगातार प्रयासों में औसत रिवॉर्ड 195 प्राप्त करने में सफल होते हैं, तो कार्टपोल सिमुलेशन को हल किया हुआ माना जाता है।
+ ✅ वास्तव में, यदि हम 100 लगातार परीक्षणों में औसत पुरस्कार 195 प्राप्त करने में सक्षम हैं तो CartPole अनुकरण को हल माना जाता है।
-## स्थिति का डिस्क्रीटाइजेशन
+## स्थिति का वर्गीकरण
-Q-Learning में, हमें Q-Table बनानी होती है जो यह परिभाषित करती है कि प्रत्येक स्थिति में क्या करना है। ऐसा करने के लिए, हमें स्थिति को **डिस्क्रीट** बनाना होगा, अधिक सटीक रूप से, इसमें सीमित संख्या में डिस्क्रीट मान होने चाहिए। इसलिए, हमें किसी तरह से अपने ऑब्ज़र्वेशन को **डिस्क्रीटाइज** करना होगा, उन्हें सीमित सेट की स्थितियों में मैप करना होगा।
+Q-लर्निंग में, हमें Q-टेबल बनाना होता है जो प्रत्येक स्थिति में क्या करना है यह परिभाषित करता है। ऐसा करने के लिए, हमें स्थिति को **अवकलित** (Discreet) होना चाहिए, अर्थात इसे सीमित संख्या में वर्गीकृत मानों से बनाना होगा। इसलिए हमें किसी तरह हमारे अवलोकनों को **वर्गीकृत** करना होगा, जिससे वे सीमित राज्य सेट में मैप हो जाएं।
हम इसे करने के कुछ तरीके हैं:
-- **बिन्स में विभाजित करें**। यदि हमें किसी मान का अंतराल पता है, तो हम इस अंतराल को कई **बिन्स** में विभाजित कर सकते हैं, और फिर उस मान को उस बिन नंबर से बदल सकते हैं जिसमें वह आता है। इसे numpy के [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) मेथड का उपयोग करके किया जा सकता है। इस मामले में, हम स्थिति का आकार सटीक रूप से जान पाएंगे, क्योंकि यह डिजिटलाइजेशन के लिए चुने गए बिन्स की संख्या पर निर्भर करेगा।
+- **बिन्स में विभाजित करें**। यदि हमें किसी मान के अंतराल का पता है, तो हम इस अंतराल को कई **बिन्स** में विभाजित कर सकते हैं, और फिर मान को उस बिन नंबर से बदल सकते हैं जिसमें वह आता है। यह numpy के [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) मेथड का उपयोग करके किया जा सकता है। इस मामले में, हमें स्थिति का आकार ठीक से पता होगा, क्योंकि यह उन बिन्स की संख्या पर निर्भर करेगा जो हम डिजिटलीकरण के लिए चुनते हैं।
+
+✅ हम मानों को एक सीमित अंतराल (जैसे, -20 से 20) में लाने के लिए रैखिक इंटरपोलेशन कर सकते हैं, और फिर उन्हें गोल करके पूर्णांकों में बदल सकते हैं। इससे हमें स्थिति के आकार पर कम नियंत्रण मिलेगा, खासकर यदि हमें इनपुट मानों की सटीक रेंज ज्ञात न हो। उदाहरण के लिए, हमारे मामले में 4 में से 2 मानों के मूल्य सीमित नहीं हैं, जिसका अर्थ है कि स्थिति की अनंत संख्या हो सकती है।
-✅ हम लीनियर इंटरपोलेशन का उपयोग करके मानों को किसी सीमित अंतराल (जैसे, -20 से 20 तक) में ला सकते हैं, और फिर उन्हें राउंडिंग करके पूर्णांक में बदल सकते हैं। इससे स्थिति के आकार पर थोड़ा कम नियंत्रण मिलता है, खासकर यदि हमें इनपुट मानों की सटीक सीमाएं नहीं पता हों। उदाहरण के लिए, हमारे मामले में 4 में से 2 मानों की कोई ऊपरी/निचली सीमा नहीं है, जिससे असीमित संख्या में स्थितियां हो सकती हैं।
+हमारे उदाहरण में, हम दूसरे दृष्टिकोण के साथ जाएंगे। आप बाद में देखेंगे कि अपरिभाषित ऊपरी/नीचे की सीमाओं के बावजूद, ये मान बहुत कम ही किसी निश्चित सीमित अंतराल से बाहर जाते हैं, इसलिए अत्यधिक मानों वाली अवस्थाएँ बहुत दुर्लभ होंगी।
-हमारे उदाहरण में, हम दूसरे दृष्टिकोण का उपयोग करेंगे। जैसा कि आप बाद में देख सकते हैं, अपरिभाषित ऊपरी/निचली सीमाओं के बावजूद, वे मान शायद ही कभी कुछ सीमित अंतरालों के बाहर मान लेते हैं, इसलिए उन स्थितियों के साथ चरम मान बहुत दुर्लभ होंगे।
-
-1. यहां वह फंक्शन है जो हमारे मॉडल से ऑब्ज़र्वेशन लेगा और 4 पूर्णांक मानों के टपल को उत्पन्न करेगा: (कोड ब्लॉक 6)
+1. यहाँ वह फ़ंक्शन है जो हमारे मॉडल से अवलोकन लेकर 4 पूर्णांक मानों का एक टुपल बनाएगा: (कोड ब्लॉक 6)
```python
def discretize(x):
return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int))
```
-1. चलिए बिन्स का उपयोग करके डिस्क्रीटाइजेशन के दूसरे तरीके का भी पता लगाते हैं: (कोड ब्लॉक 7)
+1. चलिए बिन्स के उपयोग से एक और वर्गीकरण विधि का अन्वेषण करते हैं: (कोड ब्लॉक 7)
```python
def create_bins(i,num):
@@ -126,17 +146,17 @@ Q-Learning में, हमें Q-Table बनानी होती है
print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10))
- ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter
- nbins = [20,20,10,10] # number of bins for each parameter
+ ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # प्रत्येक पैरामीटर के लिए मानों के अंतराल
+ nbins = [20,20,10,10] # प्रत्येक पैरामीटर के लिए बिन की संख्या
bins = [create_bins(ints[i],nbins[i]) for i in range(4)]
def discretize_bins(x):
return tuple(np.digitize(x[i],bins[i]) for i in range(4))
```
-1. अब एक छोटा सिमुलेशन चलाएं और उन डिस्क्रीट पर्यावरण मानों का निरीक्षण करें। `discretize` और `discretize_bins` दोनों को आज़माने के लिए स्वतंत्र महसूस करें और देखें कि क्या कोई अंतर है।
+1. अब चलिए एक छोटा अनुकरण चलाते हैं और इन वर्गीकृत पर्यावरण मानों को देखें। आप `discretize` और `discretize_bins` दोनों को आज़मा सकते हैं और देख सकते हैं कि क्या कोई अंतर है।
- ✅ `discretize_bins` बिन नंबर लौटाता है, जो 0-आधारित होता है। इसलिए इनपुट वैरिएबल के मानों के आसपास 0 के लिए यह अंतराल के मध्य से संख्या (10) लौटाता है। `discretize` में, हमने आउटपुट मानों की रेंज की परवाह नहीं की, जिससे वे नकारात्मक हो सकते हैं, इसलिए स्थिति मान शिफ्ट नहीं होते हैं, और 0 का मतलब 0 होता है। (कोड ब्लॉक 8)
+ ✅ discretize_bins बिन नंबर लौटाता है, जो 0-आधारित है। इसलिए 0 के आसपास के इनपुट मानों के लिए यह मध्य अंतराल (10) का नंबर लौटाता है। वहीं discretize में हमने आउटपुट मानों की सीमा की परवाह नहीं की, जिससे मान नकारात्मक भी हो सकते हैं, इसलिए स्थिति मान विस्थापित नहीं होते और 0 का मतलब 0 होता है। (कोड ब्लॉक 8)
```python
env.reset()
@@ -150,15 +170,15 @@ Q-Learning में, हमें Q-Table बनानी होती है
env.close()
```
- ✅ यदि आप देखना चाहते हैं कि पर्यावरण कैसे निष्पादित होता है, तो env.render से शुरू होने वाली लाइन को अनकमेंट करें। अन्यथा आप इसे बैकग्राउंड में निष्पादित कर सकते हैं, जो तेज़ है। हम अपने Q-Learning प्रक्रिया के दौरान इस "अदृश्य" निष्पादन का उपयोग करेंगे।
+ ✅ यदि आप देखना चाहते हैं कि पर्यावरण कैसे चलता है, तो env.render से शुरू होने वाली लाइन की टिप्पणी हटा दें। अन्यथा आप इसे पृष्ठभूमि में चला सकते हैं, जो तेज होता है। Q-लर्निंग प्रक्रिया के दौरान हम इस "अदृश्य" निष्पादन का उपयोग करेंगे।
-## Q-Table की संरचना
+## Q-टेबल संरचना
-पिछले पाठ में, स्थिति 0 से 8 तक की संख्याओं की एक साधारण जोड़ी थी, और इसलिए Q-Table को numpy टेंसर द्वारा 8x8x2 के आकार के साथ प्रस्तुत करना सुविधाजनक था। यदि हम बिन्स डिस्क्रीटाइजेशन का उपयोग करते हैं, तो हमारे स्थिति वेक्टर का आकार भी ज्ञात है, इसलिए हम वही दृष्टिकोण अपना सकते हैं और स्थिति को 20x20x10x10x2 के आकार के ऐरे द्वारा प्रस्तुत कर सकते हैं (यहां 2 एक्शन स्पेस का आयाम है, और पहले आयाम ऑब्ज़र्वेशन स्पेस में प्रत्येक पैरामीटर के लिए उपयोग किए गए बिन्स की संख्या से संबंधित हैं)।
+पिछली पाठ में, स्थिति 0 से 8 की सरल जोड़ी थी, इसलिए Q-टेबल को 8x8x2 आकार के numpy टेन्सर द्वारा दर्शाना सुविधाजनक था। यदि हम बिन्स वर्गीकरण का उपयोग करें, तो हमारे स्थिति वेक्टर का आकार भी ज्ञात होगा, इसलिए हम इसी दृष्टिकोण का उपयोग कर सकते हैं और 20x20x10x10x2 आकार के एरे से स्थिति को दर्शा सकते हैं (यहाँ 2 क्रिया स्थान का आयाम है, और पहली आयाम पर्यवेक्षण स्थान के प्रत्येक पैरामीटर के लिए चुने गए बिन्स की संख्या के अनुरूप हैं)।
-हालांकि, कभी-कभी ऑब्ज़र्वेशन स्पेस के सटीक आयाम ज्ञात नहीं होते। `discretize` फंक्शन के मामले में, हम कभी भी यह सुनिश्चित नहीं कर सकते कि हमारी स्थिति निश्चित सीमाओं के भीतर रहती है, क्योंकि कुछ मूल मान बाउंड नहीं होते। इसलिए, हम थोड़ा अलग दृष्टिकोण अपनाएंगे और Q-Table को एक डिक्शनरी द्वारा प्रस्तुत करेंगे।
+हालाँकि, कई बार अवलोकन स्थान के सटीक आयाम ज्ञात नहीं होते। `discretize` फ़ंक्शन के मामले में, हम कभी सुनिश्चित नहीं हो सकते कि हमारी स्थिति निश्चित सीमाओं के भीतर रहती है या नहीं, क्योंकि कुछ मूल मानों पर कोई सीमा नहीं है। इसलिए, हम एक थोड़ा भिन्न दृष्टिकोण अपनाएंगे और Q-टेबल को एक शब्दकोश द्वारा दर्शाएंगे।
-1. *(state,action)* जोड़ी को डिक्शनरी की कुंजी के रूप में उपयोग करें, और मान Q-Table एंट्री मान से संबंधित होगा। (कोड ब्लॉक 9)
+1. * (स्थिति, क्रिया)* जोड़ी को शब्दकोश की कुंजी के रूप में उपयोग करें, और मान Q-टेबल प्रविष्टि मान के अनुरूप होगा। (कोड ब्लॉक 9)
```python
Q = {}
@@ -168,38 +188,38 @@ Q-Learning में, हमें Q-Table बनानी होती है
return [Q.get((state,a),0) for a in actions]
```
- यहां हमने एक फंक्शन `qvalues()` भी परिभाषित किया है, जो एक दिए गए स्थिति के लिए Q-Table मानों की सूची लौटाता है जो सभी संभावित क्रियाओं से संबंधित है। यदि Q-Table में एंट्री मौजूद नहीं है, तो हम डिफ़ॉल्ट रूप से 0 लौटाएंगे।
+ यहाँ हम `qvalues()` फ़ंक्शन भी परिभाषित करते हैं, जो दिए गए स्थिति के लिए सभी संभव क्रियाओं के Q-टेबल मानों की सूची लौटाता है। यदि प्रविष्टि Q-टेबल में मौजूद नहीं होती, तो हम डिफ़ॉल्ट रूप से 0 लौटाएंगे।
-## चलिए Q-Learning शुरू करें
+## चलिए Q-लर्निंग शुरू करें
-अब हम पीटर को बैलेंस करना सिखाने के लिए तैयार हैं!
+अब हम पीटर को संतुलन बनाए रखना सिखाने के लिए तैयार हैं!
1. सबसे पहले, कुछ हाइपरपैरामीटर सेट करें: (कोड ब्लॉक 10)
```python
- # hyperparameters
+ # हाइपरपैरामीटर
alpha = 0.3
gamma = 0.9
epsilon = 0.90
```
- यहां, `alpha` **लर्निंग रेट** है जो यह परिभाषित करता है कि हमें प्रत्येक चरण में Q-Table के वर्तमान मानों को किस हद तक समायोजित करना चाहिए। पिछले पाठ में हमने 1 से शुरुआत की थी, और फिर प्रशिक्षण के दौरान `alpha` को कम मानों में घटा दिया था। इस उदाहरण में हम इसे स्थिर रखेंगे केवल सादगी के लिए, और आप बाद में `alpha` मानों को समायोजित करने के साथ प्रयोग कर सकते हैं।
+ यहाँ, `alpha` **लर्निंग रेट** है जो यह परिभाषित करता है कि हमें प्रत्येक कदम पर Q-टेबल के वर्तमान मानों को कितना समायोजित करना चाहिए। पिछली पाठ में हमने इसे 1 से शुरू किया था, और प्रशिक्षण के दौरान `alpha` को कम किया था। इस उदाहरण में हम सरलता के लिए इसे स्थिर रखेंगे, और आप बाद में `alpha` मानों का समायोजन करके प्रयोग कर सकते हैं।
- `gamma` **डिस्काउंट फैक्टर** है जो यह दिखाता है कि हमें वर्तमान रिवॉर्ड की तुलना में भविष्य के रिवॉर्ड को किस हद तक प्राथमिकता देनी चाहिए।
+ `gamma` **डिस्काउंट फैक्टर** है जो यह दर्शाता है कि हमें वर्तमान पुरस्कार की तुलना में भविष्य के पुरस्कार को कितना प्राथमिकता देनी चाहिए।
- `epsilon` **एक्सप्लोरेशन/एक्सप्लॉइटेशन फैक्टर** है जो यह निर्धारित करता है कि हमें एक्सप्लोरेशन को एक्सप्लॉइटेशन पर या इसके विपरीत प्राथमिकता देनी चाहिए। हमारे एल्गोरिदम में, हम `epsilon` प्रतिशत मामलों में Q-Table मानों के अनुसार अगली क्रिया का चयन करेंगे, और शेष मामलों में हम एक रैंडम क्रिया निष्पादित करेंगे। यह हमें खोज स्थान के उन क्षेत्रों का पता लगाने की अनुमति देगा जिन्हें हमने पहले कभी नहीं देखा।
+ `epsilon` **अन्वेषण/शोषण फैक्टर** है जो निर्धारित करता है कि हमें अन्वेषण को शोषण की तुलना में प्राथमिकता देनी चाहिए या नहीं। हमारे एल्गोरिदम में, हम `epsilon` प्रतिशत मामलों में अगले क्रिया को Q-टेबल मानों के आधार पर चुनेंगे, और शेष मामलों में यादृच्छिक क्रिया निष्पादित करेंगे। यह हमें खोज स्थान के उन हिस्सों का अन्वेषण करने की अनुमति देता है जिन्हें हमने पहले कभी नहीं देखा।
- ✅ बैलेंसिंग के संदर्भ में - रैंडम क्रिया (एक्सप्लोरेशन) चुनना गलत दिशा में एक रैंडम पंच की तरह काम करेगा, और पोल को उन "गलतियों" से बैलेंस को पुनः प्राप्त करना सीखना होगा।
+ ✅ संतुलन के संदर्भ में - यादृच्छिक क्रिया चुनना (अन्वेषण) गलत दिशा में एक यादृच्छिक पंच की तरह होगा, और पोल को उन "गलतियों" से पुनः संतुलन सीखना होगा।
### एल्गोरिदम में सुधार करें
-हम पिछले पाठ से अपने एल्गोरिदम में दो सुधार कर सकते हैं:
-
-- **औसत संचयी रिवॉर्ड की गणना करें**, कई सिमुलेशन के दौरान। हम हर 5000 इटरेशन पर प्रगति को प्रिंट करेंगे, और उस समय अवधि के दौरान अपने संचयी रिवॉर्ड को औसत करेंगे। इसका मतलब है कि यदि हमें 195 से अधिक अंक मिलते हैं - तो हम समस्या को हल किया हुआ मान सकते हैं, और आवश्यक गुणवत्ता से भी बेहतर।
+हम पिछली पाठ के हमारे एल्गोरिदम में दो सुधार भी कर सकते हैं:
-- **अधिकतम औसत संचयी परिणाम की गणना करें**, `Qmax`, और हम उस परिणाम से संबंधित Q-Table को स्टोर करेंगे। जब आप प्रशिक्षण चलाते हैं तो आप देखेंगे कि कभी-कभी औसत संचयी परिणाम गिरने लगते हैं, और हम प्रशिक्षण के दौरान देखे गए सर्वश्रेष्ठ मॉडल से संबंधित Q-Table मानों को रखना चाहते हैं।
+- **औसत संचयी पुरस्कार की गणना करें**, कई अनुकरणों में। हम प्रत्येक 5000 पुनरावृत्ति पर प्रगति को प्रिंट करेंगे, और उस अवधि में हमारे संचयी पुरस्कार का औसत लेंगे। इसका अर्थ है कि यदि हमें 195 से अधिक अंक मिलते हैं - तो हम समस्या को हल माना सकते हैं, और वह भी अपेक्षित गुणवत्ता से बेहतर।
+
+- **अधिकतम औसत संचयी परिणाम** `Qmax` की गणना करें, और हम उस परिणाम से संबंधित Q-टेबल संग्रहीत करेंगे। जब आप प्रशिक्षण चलाएंगे तो आप नोटिस करेंगे कि कभी-कभी औसत संचयी परिणाम नीचे गिरना शुरू हो जाता है, और हम प्रशिक्षण के दौरान पाए गए सर्वोत्तम मॉडल से संबंधित Q-टेबल मान रखना चाहते हैं।
-1. प्रत्येक सिमुलेशन में सभी संचयी रिवॉर्ड को `rewards` वेक्टर में एकत्र करें ताकि आगे प्लॉटिंग की जा सके। (कोड ब्लॉक 11)
+1. आगे के प्लॉटिंग के लिए प्रत्येक अनुकरण में सभी संचयी पुरस्कार को `rewards` वेक्टर में संग्रहित करें। (कोड ब्लॉक 11)
```python
def probs(v,eps=1e-4):
@@ -214,15 +234,15 @@ Q-Learning में, हमें Q-Table बनानी होती है
obs = env.reset()
done = False
cum_reward=0
- # == do the simulation ==
+ # == सिमुलेशन करें ==
while not done:
s = discretize(obs)
if random.random() Qmax:
@@ -240,25 +260,25 @@ Q-Learning में, हमें Q-Table बनानी होती है
cum_rewards=[]
```
-आप इन परिणामों से क्या देख सकते हैं:
+आप इन परिणामों से क्या नोटिस कर सकते हैं:
-- **हमारे लक्ष्य के करीब**। हम 100+ लगातार सिमुलेशन रन में 195 संचयी रिवॉर्ड प्राप्त करने के लक्ष्य को प्राप्त करने के बहुत करीब हैं, या हमने वास्तव में इसे प्राप्त कर लिया है! भले ही हमें छोटे नंबर मिलें, हमें अभी भी पता नहीं है, क्योंकि हम 5000 रन पर औसत करते हैं, और औपचारिक मानदंड में केवल 100 रन की आवश्यकता होती है।
+- **हमारे लक्ष्य के करीब**। हम उन 100+ लगातार अनुकरणों में 195 संचयी पुरस्कार प्राप्त करने के लक्ष्य के बहुत करीब हैं, या हो सकता है कि वास्तव में इसे हासिल कर भी लिया हो! भले ही हमें छोटे अंक मिलें, हमें अभी नहीं पता क्योंकि हम 5000 रन के औसत ले रहे हैं, और केवल 100 रन की औपचारिक आवश्यकता है।
+
+- **पुरस्कार गिरना शुरू हो जाता है**। कभी-कभी पुरस्कार गिरना शुरू हो जाता है, जिसका अर्थ है कि हम पहले से सीखे गए मानों को Q-टेबल में खराब मानों से "बर्बाद" कर सकते हैं।
-- **रिवॉर्ड गिरने लगते हैं**। कभी-कभी रिवॉर्ड गिरने लगते हैं, जिसका मतलब है कि हम Q-Table में पहले से सीखे गए मानों को उन मानों से "नष्ट" कर सकते हैं जो स्थिति को खराब बनाते हैं।
+यह अवलोकन प्रशिक्षण प्रगति की प्लॉटिंग में अधिक स्पष्ट रूप से दिखाई देता है।
-यह अवलोकन अधिक स्पष्ट रूप से दिखाई देता है यदि हम प्रशिक्षण प्रगति को प्लॉट करें।
+## प्रशिक्षण प्रगति का प्लॉटिंग
-## प्रशिक्षण प्रगति का प्लॉट बनाना
-
-प्रशिक्षण के दौरान, हमने प्रत्येक इटरेशन में संचयी रिवॉर्ड मान को `rewards` वेक्टर में एकत्र किया। यहां यह कैसा दिखता है जब हम इसे इटरेशन नंबर के खिलाफ प्लॉट करते हैं:
+प्रशिक्षण के दौरान, हमने प्रत्येक पुनरावृत्ति पर संचयी पुरस्कार मान `rewards` वेक्टर में संग्रहित किया। जब हम इसे पुनरावृत्ति संख्या के विरुद्ध प्लॉट करते हैं तो यह इस प्रकार दिखता है:
```python
plt.plot(rewards)
```
-
+
-इस ग्राफ से कुछ भी बताना संभव नहीं है, क्योंकि स्टोकेस्टिक प्रशिक्षण प्रक्रिया की प्रकृति के कारण प्रशिक्षण सत्रों की लंबाई बहुत भिन्न होती है। इस ग्राफ को अधिक समझने योग्य बनाने के लिए, हम 100 के एक श्रृंखला पर **रनिंग एवरेज** की गणना कर सकते हैं। इसे `np.convolve` का उपयोग करके सुविधाजनक रूप से किया जा सकता है: (कोड ब्लॉक 12)
+इस ग्राफ से कुछ कहना संभव नहीं है, क्योंकि यादृच्छिक प्रशिक्षण प्रक्रिया की प्रकृति के कारण प्रशिक्षण सत्रों की लंबाई बहुत भिन्न होती है। इस ग्राफ को समझने के लिए, हम कई प्रयोगों पर चलती औसत (running average) निकाल सकते हैं, मान लें 100। यह `np.convolve` का उपयोग करके आसानी से किया जा सकता है: (कोड ब्लॉक 12)
```python
def running_average(x,window):
@@ -267,21 +287,24 @@ def running_average(x,window):
plt.plot(running_average(rewards,100))
```
-
+
+
+## हाइपरपैरामीटर में परिवर्तन
+
+सीखने को अधिक स्थिर बनाने के लिए, प्रशिक्षण के दौरान हमारे कुछ हाइपरपैरामीटर को समायोजित करना समझदारी होगी। विशेष रूप से:
+
+- **लर्निंग रेट** `alpha` के लिए, हम लगभग 1 के मान के साथ शुरू कर सकते हैं, और फिर इस पैरामीटर को निरंतर कम करते रह सकते हैं। समय के साथ, हम Q-टेबल में अच्छे प्रायिकता मान प्राप्त करेंगे, इसलिए हमें इन्हें थोड़ा समायोजित करना चाहिए, और पूरी तरह से नए मानों से अधिलेखित नहीं करना चाहिए।
-## हाइपरपैरामीटर बदलना
+- **epsilon बढ़ाएँ**। हम `epsilon` को धीरे-धीरे बढ़ा सकते हैं, ताकि कम अन्वेषण और अधिक शोषण हो सके। शायद यह समझदारी होगी कि हम `epsilon` को कम मान से शुरू करें, और लगभग 1 तक बढ़ाएँ।
-सीखने को अधिक स्थिर बनाने के लिए, प्रशिक्षण के दौरान हमारे कुछ हाइपरपैरामीटर को समायोजित करना समझ में आता है। विशेष रूप से:
+> **कार्य 1**: हाइपरपैरामीटर मानों के साथ प्रयोग करें और देखें कि क्या आप उच्च संचयी पुरस्कार प्राप्त कर सकते हैं। क्या आप 195 से ऊपर पहुँच रहे हैं?
-- **लर्निंग रेट** `alpha` के लिए, हम 1 के करीब मानों से शुरू कर सकते हैं, और फिर पैरामीटर को कम करते रह सकते हैं। समय के साथ, हमें Q-Table में अच्छे प्रायिकता मान मिलेंगे, और इसलिए हमें उन्हें थोड़ा समायोजित करना चाहिए, और नए मानों के साथ पूरी तरह से ओवरराइट नहीं करना चाहिए।
-- **epsilon बढ़ाएं**। हम `epsilon` को धीरे-धीरे बढ़ाना चाह सकते हैं, ताकि कम एक्सप्लोरेशन और अधिक एक्सप्लॉइटेशन करें। शायद कम `epsilon` मान से शुरू करना और इसे लगभग 1 तक बढ़ाना समझ में आता है।
-> **कार्य 1**: हाइपरपैरामीटर मानों के साथ प्रयोग करें और देखें कि क्या आप उच्च संचयी इनाम प्राप्त कर सकते हैं। क्या आप 195 से ऊपर प्राप्त कर रहे हैं?
-> **कार्य 2**: समस्या को औपचारिक रूप से हल करने के लिए, आपको 100 लगातार रन के दौरान 195 औसत इनाम प्राप्त करना होगा। प्रशिक्षण के दौरान इसे मापें और सुनिश्चित करें कि आपने समस्या को औपचारिक रूप से हल कर लिया है!
+> **कार्य 2**: समस्या को औपचारिक रूप से हल करने के लिए, आपको 100 लगातार प्रयासों में 195 औसत इनाम प्राप्त करना होगा। प्रशिक्षण के दौरान इसका मापन करें और सुनिश्चित करें कि आपने समस्या को औपचारिक रूप से हल कर लिया है!
-## परिणाम को क्रियान्वित होते हुए देखना
+## परिणाम को क्रियाशील रूप में देखना
-यह देखना दिलचस्प होगा कि प्रशिक्षित मॉडल कैसे व्यवहार करता है। चलिए सिमुलेशन चलाते हैं और प्रशिक्षण के दौरान उपयोग की गई वही एक्शन चयन रणनीति अपनाते हैं, Q-Table में प्रायिकता वितरण के अनुसार सैंपलिंग करते हुए: (कोड ब्लॉक 13)
+यह वास्तव में दिलचस्प होगा कि प्रशिक्षित मॉडल कैसे व्यवहार करता है। आइए सिमुलेशन चलाते हैं और प्रशिक्षण के दौरान इसी क्रिया चयन रणनीति का पालन करें, Q-टेबल में प्रायिकता वितरण के अनुसार सैंपलिंग करते हुए: (कोड ब्लॉक 13)
```python
obs = env.reset()
@@ -295,30 +318,32 @@ while not done:
env.close()
```
-आपको कुछ ऐसा दिखाई देना चाहिए:
+आपको कुछ इस तरह दिखाई देना चाहिए:
-
+
---
## 🚀चुनौती
-> **कार्य 3**: यहां, हम Q-Table की अंतिम प्रति का उपयोग कर रहे थे, जो शायद सबसे अच्छी न हो। याद रखें कि हमने सबसे अच्छा प्रदर्शन करने वाले Q-Table को `Qbest` वेरिएबल में संग्रहीत किया है! `Qbest` को `Q` पर कॉपी करके उसी उदाहरण को आज़माएं और देखें कि क्या आपको कोई अंतर दिखाई देता है।
+> **कार्य 3**: यहां, हम Q-टेबल की अंतिम प्रति का उपयोग कर रहे थे, जो संभवतः सबसे अच्छी प्रति नहीं हो सकती। याद रखें कि हमने सर्वश्रेष्ठ प्रदर्शन करने वाली Q-टेबल को `Qbest` नामक वेरिएबल में संग्रहीत किया है! `Qbest` को `Q` पर कॉपी करके उसी उदाहरण को सर्वश्रेष्ठ प्रदर्शन करने वाली Q-टेबल के साथ आजमाएं और देखें कि क्या आपको कोई अंतर महसूस होता है।
-> **कार्य 4**: यहां हम प्रत्येक चरण पर सबसे अच्छा एक्शन नहीं चुन रहे थे, बल्कि संबंधित प्रायिकता वितरण के साथ सैंपलिंग कर रहे थे। क्या हमेशा सबसे अच्छा एक्शन चुनना अधिक समझदारी होगी, जिसमें Q-Table का सबसे उच्च मान हो? यह `np.argmax` फ़ंक्शन का उपयोग करके किया जा सकता है, जो उच्चतम Q-Table मान के अनुरूप एक्शन नंबर का पता लगाता है। इस रणनीति को लागू करें और देखें कि क्या यह बैलेंसिंग में सुधार करता है।
+> **कार्य 4**: यहाँ हम प्रत्येक कदम पर हमेशा सबसे अच्छी क्रिया का चयन नहीं कर रहे थे, बल्कि संबंधित प्रायिकता वितरण के अनुसार सैंपलिंग कर रहे थे। क्या हमेशा सबसे अच्छी क्रिया का चयन करना, जिसमें सबसे उच्च Q-टेबल मान होता है, अधिक समझदारी होगी? इसे करने के लिए `np.argmax` फ़ंक्शन का उपयोग करें ताकि उच्चतम Q-टेबल मान के अनुरूप क्रिया संख्या पता चल सके। इस रणनीति को कार्यान्वित करें और देखें कि क्या इससे संतुलन में सुधार होता है।
-## [पोस्ट-लेक्चर क्विज़](https://ff-quizzes.netlify.app/en/ml/)
+## [पाठ के बाद क्विज़](https://ff-quizzes.netlify.app/en/ml/)
## असाइनमेंट
[माउंटेन कार को प्रशिक्षित करें](assignment.md)
## निष्कर्ष
-अब हमने यह सीख लिया है कि एजेंट्स को केवल एक इनाम फ़ंक्शन प्रदान करके, जो गेम की वांछित स्थिति को परिभाषित करता है, और उन्हें खोज स्थान को बुद्धिमानी से एक्सप्लोर करने का अवसर देकर अच्छे परिणाम प्राप्त करने के लिए प्रशिक्षित कैसे किया जाए। हमने Q-Learning एल्गोरिदम को डिस्क्रीट और कंटीन्यस एनवायरनमेंट्स के मामलों में सफलतापूर्वक लागू किया है, लेकिन डिस्क्रीट एक्शन्स के साथ।
+हमने अब यह सीख लिया है कि कैसे एजेंटों को एक ऐसा इनाम फंक्शन प्रदान करके जो खेल की इच्छित स्थिति को परिभाषित करता है, और उन्हें खोज क्षेत्र का बुद्धिमानी से अन्वेषण करने का अवसर देकर अच्छे परिणाम हासिल करने के लिए प्रशिक्षित किया जा सकता है। हमने Q-लर्निंग एल्गोरिदम को सफलतापूर्वक लागू किया है, जो डिसक्रेट और कंटीन्यूअस पर्यावरणों के मामलों में था, लेकिन डिसक्रेट क्रियाओं के साथ।
-यह भी अध्ययन करना महत्वपूर्ण है कि जब एक्शन स्टेट भी कंटीन्यस हो और जब ऑब्ज़र्वेशन स्पेस अधिक जटिल हो, जैसे कि एटारी गेम स्क्रीन की छवि। इन समस्याओं में अक्सर अच्छे परिणाम प्राप्त करने के लिए अधिक शक्तिशाली मशीन लर्निंग तकनीकों, जैसे कि न्यूरल नेटवर्क्स, का उपयोग करना आवश्यक होता है। ये अधिक उन्नत विषय हमारे आगामी उन्नत AI कोर्स का विषय हैं।
+यह भी महत्वपूर्ण है कि हम उन स्थितियों का अध्ययन करें जहां क्रिया स्थिति भी कंटीन्यूअस हो, और जब प्रेक्षण स्थान अधिक जटिल हो, जैसे कि अटारी गेम स्क्रीन की छवि। उन समस्याओं में हमें अक्सर बेहतर परिणाम प्राप्त करने के लिए अधिक शक्तिशाली मशीन लर्निंग तकनीकों, जैसे कि न्यूरल नेटवर्क्स का उपयोग करना पड़ता है। ये अधिक उन्नत विषय हमारे आगामी अधिक उन्नत AI पाठ्यक्रम का विषय हैं।
---
-**अस्वीकरण**:
-यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
\ No newline at end of file
+
+**अस्वीकरण**:
+इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।
+
\ No newline at end of file
diff --git a/translations/ja/.co-op-translator.json b/translations/ja/.co-op-translator.json
index f650316a9..c8d01dde7 100644
--- a/translations/ja/.co-op-translator.json
+++ b/translations/ja/.co-op-translator.json
@@ -24,8 +24,8 @@
"language_code": "ja"
},
"1-Introduction/3-fairness/README.md": {
- "original_hash": "9a6b702d1437c0467e3c5c28d763dac2",
- "translation_date": "2025-09-06T09:33:20+00:00",
+ "original_hash": "0f00d72169a0d37eecfd16d71e01700a",
+ "translation_date": "2026-07-14T04:48:45+00:00",
"source_file": "1-Introduction/3-fairness/README.md",
"language_code": "ja"
},
@@ -54,8 +54,8 @@
"language_code": "ja"
},
"2-Regression/1-Tools/README.md": {
- "original_hash": "fa81d226c71d5af7a2cade31c1c92b88",
- "translation_date": "2025-09-06T09:27:16+00:00",
+ "original_hash": "0b8635427b582d03ea4ab7089b93e505",
+ "translation_date": "2026-07-14T04:43:07+00:00",
"source_file": "2-Regression/1-Tools/README.md",
"language_code": "ja"
},
@@ -72,8 +72,8 @@
"language_code": "ja"
},
"2-Regression/2-Data/README.md": {
- "original_hash": "7c077988328ebfe33b24d07945f16eca",
- "translation_date": "2025-09-06T09:27:59+00:00",
+ "original_hash": "a58b2c4d16c6b122643391745ac15af6",
+ "translation_date": "2026-07-14T04:45:26+00:00",
"source_file": "2-Regression/2-Data/README.md",
"language_code": "ja"
},
@@ -89,6 +89,12 @@
"source_file": "2-Regression/2-Data/solution/Julia/README.md",
"language_code": "ja"
},
+ "2-Regression/2-Data/solution/notebook.ipynb": {
+ "original_hash": "96b95f8cf473481f2f371de8156f1571",
+ "translation_date": "2026-07-14T04:38:04+00:00",
+ "source_file": "2-Regression/2-Data/solution/notebook.ipynb",
+ "language_code": "ja"
+ },
"2-Regression/3-Linear/README.md": {
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T20:39:34+00:00",
@@ -115,7 +121,7 @@
},
"2-Regression/4-Logistic/README.md": {
"original_hash": "abf86d845c84330bce205a46b382ec88",
- "translation_date": "2025-09-06T09:26:24+00:00",
+ "translation_date": "2026-07-14T04:44:13+00:00",
"source_file": "2-Regression/4-Logistic/README.md",
"language_code": "ja"
},
@@ -457,7 +463,7 @@
},
"8-Reinforcement/1-QLearning/README.md": {
"original_hash": "911efd5e595089000cb3c16fce1beab8",
- "translation_date": "2025-09-06T09:39:02+00:00",
+ "translation_date": "2026-07-14T04:46:35+00:00",
"source_file": "8-Reinforcement/1-QLearning/README.md",
"language_code": "ja"
},
@@ -481,7 +487,7 @@
},
"8-Reinforcement/2-Gym/README.md": {
"original_hash": "107d5bb29da8a562e7ae72262d251a75",
- "translation_date": "2025-09-06T09:39:42+00:00",
+ "translation_date": "2026-07-14T04:47:44+00:00",
"source_file": "8-Reinforcement/2-Gym/README.md",
"language_code": "ja"
},
@@ -581,6 +587,19 @@
"source_file": "TROUBLESHOOTING.md",
"language_code": "ja"
},
+ "__translation_failures__": {
+ "sketchnotes/LICENSE.md": {
+ "original_hash": "fba3b94d88bfb9b81369b869a1e9a20f",
+ "source_file": "sketchnotes/LICENSE.md",
+ "language_code": "ja",
+ "failure_date": "2026-07-14T04:42:06+00:00",
+ "status": "failed",
+ "error_type": "TranslationIncompleteError",
+ "error_message": "Markdown translation remained incomplete for chunk 1.1.1 of 'LICENSE.md', and the chunk could not be split further.",
+ "translator_version": "0.20.0",
+ "failure_policy_version": 1
+ }
+ },
"docs/_sidebar.md": {
"original_hash": "68dd06c685f6ce840e0acfa313352e7c",
"translation_date": "2025-09-03T23:13:39+00:00",
diff --git a/translations/ja/1-Introduction/3-fairness/README.md b/translations/ja/1-Introduction/3-fairness/README.md
index 87b7db14b..bd6be3c9d 100644
--- a/translations/ja/1-Introduction/3-fairness/README.md
+++ b/translations/ja/1-Introduction/3-fairness/README.md
@@ -1,147 +1,167 @@
-# 責任あるAIを用いた機械学習ソリューションの構築
-
-
-> スケッチノート: [Tomomi Imura](https://www.twitter.com/girlie_mac)
-
-## [講義前のクイズ](https://ff-quizzes.netlify.app/en/ml/)
+# 責任あるAIによる機械学習ソリューションの構築
+
+
+> スケッチノート作成者:[Tomomi Imura](https://www.twitter.com/girlie_mac)
+## [事前クイズ](https://ff-quizzes.netlify.app/en/ml/)
+
## はじめに
-このカリキュラムでは、機械学習が私たちの日常生活にどのように影響を与えているかを学び始めます。現在でも、システムやモデルは医療診断、ローン承認、詐欺検出などの日常的な意思決定タスクに関与しています。そのため、これらのモデルが信頼できる結果を提供することが重要です。ソフトウェアアプリケーションと同様に、AIシステムは期待を外れたり、望ましくない結果を生むことがあります。そのため、AIモデルの挙動を理解し、説明できることが不可欠です。
+このカリキュラムでは、機械学習がどのように私たちの日常生活に影響を与えているのか、その発見を始めます。現在でも、システムやモデルは日常の意思決定タスクに関与しており、医療診断、ローンの承認、不正検出などの分野で活躍しています。そのため、これらのモデルが信頼できる結果を提供するために正しく機能することが重要です。あらゆるソフトウェアアプリケーションと同様に、AIシステムも期待に応えられなかったり、望ましくない結果をもたらすことがあります。だからこそ、AIモデルの動作を理解し説明できることが不可欠です。
-例えば、モデルを構築するために使用するデータが特定の人種、性別、政治的見解、宗教などの属性を欠いている場合や、これらの属性が不均衡に表現されている場合、何が起こるでしょうか。また、モデルの出力が特定の属性を優遇するように解釈された場合、そのアプリケーションにどのような影響があるでしょうか。さらに、モデルが有害な結果を生み出した場合、その責任は誰にあるのでしょうか。このカリキュラムでは、これらの問いを探求します。
+モデル構築に使用するデータが、人種、性別、政治的見解、宗教など、特定の属性が欠落していたり、特定の属性を不均衡に代表している場合に何が起こるでしょうか?モデルの出力がある属性に偏って解釈された場合はどうでしょうか?そのアプリケーションにはどんな影響がありますか?さらに、モデルが不利益な結果を招いて人々に害を及ぼした場合はどうでしょうか?AIシステムの挙動に対する責任は誰にあるのでしょうか?これらはこのカリキュラムで探求するいくつかの問いです。
このレッスンでは以下を学びます:
-- 機械学習における公平性の重要性と公平性に関連する問題への意識を高める
-- 外れ値や異常なシナリオを探求する実践を通じて信頼性と安全性を確保する方法を学ぶ
-- 包括的なシステムを設計することで、すべての人を支援する必要性を理解する
-- データや人々のプライバシーとセキュリティを保護する重要性を探る
-- AIモデルの挙動を説明するための透明性の重要性を理解する
-- AIシステムに対する信頼を構築するために責任が不可欠であることを意識する
+- 機械学習における公平性の重要性と公平性に関連する害についての意識を高める。
+- 信頼性と安全性を確保するために異常値や異例のシナリオを探る実践を学ぶ。
+- 包摂的なシステム設計によるすべての人のエンパワーメントの必要性を理解する。
+- データと人のプライバシーおよびセキュリティ保護の重要性を探る。
+- AIモデルの挙動を説明するための透明性(ガラス箱アプローチ)の重要性を理解する。
+- AIシステムに対する信頼構築に不可欠なアカウンタビリティ(説明責任)を意識する。
## 前提条件
-前提条件として、「責任あるAIの原則」学習パスを受講し、以下のトピックに関するビデオを視聴してください:
+前提条件として、「責任あるAIの原則」ラーニングパスを受講し、以下のビデオをご覧ください:
-[学習パス](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)を通じて責任あるAIについてさらに学びましょう。
+[このラーニングパス](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)で責任あるAIについて学ぶ
-[](https://youtu.be/dnC8-uUZXSc "Microsoftの責任あるAIへのアプローチ")
+[](https://youtu.be/dnC8-uUZXSc "Microsoft's Approach to Responsible AI")
-> 🎥 上の画像をクリックしてビデオを見る: Microsoftの責任あるAIへのアプローチ
+> 🎥 上の画像をクリックしてビデオ視聴:Microsoftの責任あるAIへの取り組み
## 公平性
-AIシステムはすべての人を公平に扱い、似たようなグループの人々に異なる影響を与えないようにするべきです。例えば、AIシステムが医療治療、ローン申請、雇用に関する助言を提供する場合、同じ症状、財務状況、または職業資格を持つすべての人に同じ推奨を行うべきです。私たち人間は、意思決定や行動に影響を与える先天的な偏見を持っています。この偏見は、AIシステムを訓練するために使用するデータにも現れることがあります。このような操作は時に意図せずに起こることがあります。データに偏りを導入していることを意識的に知るのは難しいことが多いです。
+AIシステムはすべての人を公平に扱い、同じグループの人々を異なる方法で不公平に扱ってはなりません。例えば、医療治療、ローン申請、雇用に関する助言をAIシステムが提供する場合、同様の症状や経済状況、資格を持つ全員に同じ勧告をする必要があります。私たちは皆、行動や判断に影響を与える先入観を持っています。これらのバイアスは、AIシステムを学習させるためのデータに明示的に現れることがあります。こうしたバイアスの混入は意図せずに起こることもあります。データにバイアスを導入していることを意識的に知るのはしばしば難しいです。
-**「不公平」**とは、人種、性別、年齢、障害の有無などで定義される人々のグループに対する否定的な影響、つまり「害」を指します。主な公平性に関連する害は以下のように分類されます:
+「不公平」とは、人種、性別、年齢、障害状況などの特性で定義される集団に対する否定的な影響や「害」を指します。公平性に関連する主な害は以下のように分類できます:
-- **割り当て**: 例えば、性別や民族が他の属性よりも優遇される場合。
-- **サービスの質**: 特定のシナリオに対してデータを訓練したが、現実ははるかに複雑である場合、サービスの性能が低下します。例えば、暗い肌の人々を感知できないハンドソープディスペンサー。[参考](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
-- **中傷**: 不公平に批判し、何かまたは誰かをラベル付けすること。例えば、画像ラベリング技術が暗い肌の人々の画像をゴリラとして誤認したケース。
-- **過剰または過少表現**: 特定のグループが特定の職業に見られないという考えであり、それを促進し続けるサービスや機能は害を助長します。
-- **ステレオタイプ化**: 特定のグループを事前に割り当てられた属性と関連付けること。例えば、英語とトルコ語間の言語翻訳システムが性別に関連するステレオタイプによる不正確さを持つ場合。
+- 割当。例えば、性別や民族性のいずれかが他より優遇される場合。
+- サービスの質。特定のシナリオでのみデータを学習させたが、現実はもっと複雑で、性能為のサービスが低下する場合。例えば、暗い肌の人を認識できないハンドソープディスペンサーなど。[参考](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
+- 誹謗。不公平に誰かや何かを批判し、ラベル付けすること。例えば、ある画像ラベリング技術が暗い肌の人を類人猿として誤分類した有名な事例。
+- 過剰または過少表現。特定の集団が特定の職業で見られない、またはサービスや機能がそれを助長している場合。
+- 固定観念。特定の集団に対して事前に割り当てられた属性を関連付けること。例えば、英語とトルコ語間の翻訳で、性別に関する固定観念による誤訳が生じることがある。
-
+
> トルコ語への翻訳
-
-> 英語への翻訳
+
+> 英語への再翻訳
-AIシステムを設計・テストする際には、AIが公平であり、偏ったり差別的な決定を下すようにプログラムされていないことを確認する必要があります。AIと機械学習における公平性を保証することは、依然として複雑な社会技術的課題です。
+AIシステムを設計・テストする際には、人間に禁止されているバイアスや差別的判断をAIにプログラミングしないように、公平性を確保する必要があります。AIと機械学習における公平性の保証は依然として複雑な社会技術的課題です。
### 信頼性と安全性
-信頼を構築するためには、AIシステムが通常の条件や予期しない条件下でも信頼性があり、安全で一貫性がある必要があります。AIシステムがさまざまな状況でどのように振る舞うかを知ることが重要です。特に外れ値の場合です。AIソリューションを構築する際には、AIソリューションが遭遇する可能性のあるさまざまな状況に対処する方法に十分な焦点を当てる必要があります。例えば、自動運転車は人々の安全を最優先にする必要があります。その結果、車を動かすAIは、夜間、雷雨、吹雪、道路を横切る子供、ペット、道路工事など、車が遭遇する可能性のあるすべてのシナリオを考慮する必要があります。AIシステムが幅広い条件を信頼性と安全性を持って処理できるかどうかは、データサイエンティストやAI開発者が設計やテスト中にどれだけ予測を考慮したかを反映しています。
+信頼構築のために、AIシステムは通常および予期しない状況で信頼でき、安全で、一貫している必要があります。特に異常値の場合に、AIシステムがどのように振る舞うかを知ることが重要です。AIソリューションを構築する上で、多様な状況にどう対処するかに注力する必要があります。例えば、自動運転車は人の安全を最優先しなければなりません。そのため、夜間、雷雨、吹雪、子どもが道路を横断する場合、ペット、工事現場など、車が遭遇する可能性のあるすべてのシナリオを考慮する必要があります。AIシステムが幅広い状況を信頼性と安全性をもって処理できるかは、データサイエンティストやAI開発者が設計・テスト段階でどれだけ予測していたかを反映します。
-> [🎥 ビデオを見る: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
+> [🎥 ビデオはこちらをクリック: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
-### 包括性
+### 包摂性
-AIシステムはすべての人を巻き込み、支援するように設計されるべきです。AIシステムを設計・実装する際、データサイエンティストやAI開発者は、意図せずに人々を排除する可能性のあるシステム内の障壁を特定し、対処します。例えば、世界には10億人の障害を持つ人々がいます。AIの進歩により、彼らは日常生活で情報や機会により簡単にアクセスできるようになります。障壁に対処することで、すべての人に利益をもたらすより良い体験を持つAI製品を革新し、開発する機会が生まれます。
+AIシステムは、すべての人が関与し、エンパワーメントされるよう設計されるべきです。AIシステムの設計・実装時には、データサイエンティストやAI開発者は意図せず人を排除する可能性のある障壁を特定し解決します。例えば、世界には10億人の障害者がおり、AIの進歩により日常生活で幅広い情報や機会により容易にアクセスできるようになっています。障壁を取り除くことで、より良い体験をもたらすAI製品の革新と開発が可能になります。
-> [🎥 ビデオを見る: AIにおける包括性](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
+> [🎥 ビデオはこちらをクリック: AIにおける包摂性](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
### セキュリティとプライバシー
-AIシステムは安全であり、人々のプライバシーを尊重するべきです。プライバシー、情報、または生命を危険にさらすシステムには、人々は信頼を置きません。機械学習モデルを訓練する際には、最良の結果を得るためにデータに依存します。その際、データの出所と整合性を考慮する必要があります。例えば、データがユーザーによって提供されたものか、公開されているものかを確認します。次に、データを扱う際には、機密情報を保護し、攻撃に耐えるAIシステムを開発することが重要です。AIが普及するにつれて、プライバシーを保護し、重要な個人情報やビジネス情報を安全に保つことがますます重要かつ複雑になっています。AIにおけるプライバシーとデータセキュリティの問題は特に注意が必要です。なぜなら、データへのアクセスは、AIシステムが人々について正確で情報に基づいた予測や決定を行うために不可欠だからです。
+AIシステムは安全であり、人々のプライバシーを尊重するべきです。人々はプライバシーや情報、生命を危険にさらすシステムに対して信頼を持ちません。機械学習モデルをトレーニングする際には、最良の結果を得るためにデータに依存します。その際、データの出所と完全性を考慮する必要があります。例えば、データはユーザーが提供したのか公開情報か。次に、データを扱う際は機密情報を保護し攻撃に耐えるAIシステムを開発することが重要です。AIの普及に伴い、プライバシー保護と重要な個人情報や企業情報のセキュリティ確保はより重要かつ複雑になっています。AIシステムが正確で情報に基づく予測や判断を行うにはデータへのアクセスが不可欠であるため、プライバシーとデータセキュリティには特に注意が必要です。
-> [🎥 ビデオを見る: AIにおけるセキュリティ](https://www.microsoft.com/videoplayer/embed/RE4voJF)
+> [🎥 ビデオはこちらをクリック: AIのセキュリティ](https://www.microsoft.com/videoplayer/embed/RE4voJF)
-- 業界として、GDPR(一般データ保護規則)などの規制によって大きく促進されたプライバシーとセキュリティの分野で大きな進歩を遂げました。
-- しかし、AIシステムでは、システムをより個人的で効果的にするためにより多くの個人データが必要であるというニーズとプライバシーの間の緊張を認識する必要があります。
-- インターネットによる接続されたコンピュータの誕生と同様に、AIに関連するセキュリティ問題の急増も見られています。
-- 同時に、AIがセキュリティを向上させるために使用されている例もあります。例えば、ほとんどの現代のウイルス対策スキャナーはAIのヒューリスティックによって駆動されています。
-- データサイエンスプロセスが最新のプライバシーとセキュリティの実践と調和して融合することを確保する必要があります。
+- 業界として、GDPR(一般データ保護規則)などの規制に後押しされ、プライバシーとセキュリティの分野で大きな進歩を遂げてきました。
+- しかし、AIシステムでは、個人化や効果的なシステムのためにより多くの個人データを必要とすることとプライバシーとの緊張関係を認める必要があります。
+- インターネットの登場で接続コンピュータが増えたように、AI関連のセキュリティ問題も急増しています。
+- 一方で、AIはセキュリティ向上にも活用されています。例えば、現在ほとんどの最新アンチウイルススキャナーはAIのヒューリスティックで駆動されています。
+- データサイエンスのプロセスが最新のプライバシーおよびセキュリティ慣行とうまく調和するようにする必要があります。
-### 透明性
-AIシステムは理解可能であるべきです。透明性の重要な部分は、AIシステムとその構成要素の挙動を説明することです。AIシステムの理解を向上させるには、利害関係者がその機能や理由を理解し、潜在的な性能問題、安全性やプライバシーの懸念、偏り、排除的な慣行、または意図しない結果を特定できるようにする必要があります。また、AIシステムを使用する人々が、いつ、なぜ、どのようにそれを展開することを選択するかについて正直で率直であるべきだと考えています。さらに、使用するシステムの限界についても説明する必要があります。例えば、銀行が消費者の融資決定を支援するためにAIシステムを使用する場合、結果を検討し、どのデータがシステムの推奨に影響を与えるかを理解することが重要です。政府は産業全体でAIを規制し始めているため、データサイエンティストや組織は、AIシステムが規制要件を満たしているかどうかを説明する必要があります。特に望ましくない結果が生じた場合には。
+### 透明性
+AIシステムは理解しやすくあるべきです。透明性の重要な要素は、AIシステムとそのコンポーネントの動作を説明することです。AIシステムをより理解するためには、関係者が動作の仕組みや理由を把握することで、性能問題、安全性・プライバシーの懸念、バイアス、排除的慣行、意図しない結果を特定できるようにする必要があります。また、AIシステムの利用者は、いつ、なぜ、どのようにAIを導入するのか、その制限も正直に開示すべきだと考えています。例えば銀行が消費者向けローン審査のためにAIシステムを用いる場合、結果を検証しどのデータが推薦に影響しているのか理解することが重要です。政府は産業全体でAIを規制し始めているため、データサイエンティストや組織は、望ましくない結果が出た場合を含め、AIシステムが規制要件を満たすか説明する必要があります。
-> [🎥 ビデオを見る: AIにおける透明性](https://www.microsoft.com/videoplayer/embed/RE4voJF)
+> [🎥 ビデオはこちらをクリック: AIの透明性](https://www.microsoft.com/videoplayer/embed/RE4voJF)
-- AIシステムは非常に複雑であるため、どのように機能し、結果を解釈するかを理解するのが難しいです。
-- この理解の欠如は、これらのシステムが管理、運用、文書化される方法に影響を与えます。
-- この理解の欠如はさらに重要なことに、これらのシステムが生成する結果を使用して行われる意思決定に影響を与えます。
+- AIシステムは非常に複雑であるため、動作の仕組みや結果の解釈が難しいです。
+- 理解不足は管理、運用、文書化のあり方に影響を及ぼします。
+- さらに重要なのは、理解不足がこれらのシステムが出す結果に基づく意思決定に影響を与えることです。
-### 責任
+### アカウンタビリティ
+
+AIシステムを設計・展開する人々は、そのシステムの動作に責任を持つ必要があります。特に顔認識のような敏感な技術ではアカウンタビリティが重要です。最近、行方不明の子どもを見つけるなどの用途で、法執行機関から顔認識技術の需要が高まっています。しかし、この技術は政府によって特定個人の継続的な監視など、国民の基本的自由を脅かす用途に使われる可能性もあります。そのため、データサイエンティストや組織はAIシステムが個人や社会に与える影響に責任を持つ必要があります。
-AIシステムを設計・展開する人々は、そのシステムの運用方法に対して責任を負うべきです。責任の必要性は、特に顔認識のような敏感な技術を使用する場合に重要です。最近、顔認識技術に対する需要が増加しており、特に法執行機関が行方不明の子供を見つけるなどの用途でその技術の可能性を見出しています。しかし、これらの技術は、特定の個人の継続的な監視を可能にするなど、政府が市民の基本的な自由を危険にさらす可能性があります。そのため、データサイエンティストや組織は、AIシステムが個人や社会に与える影響に対して責任を負う必要があります。
+[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft's Approach to Responsible AI")
-[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoftの責任あるAIへのアプローチ")
+> 🎥 上の画像をクリックしてビデオ視聴:顔認識による大規模監視の警告
-> 🎥 上の画像をクリックしてビデオを見る: 顔認識による大量監視の警告
+最終的に、私たちの時代における最大の課題の一つは、AIを社会に導入する最初の世代として、コンピュータを人々に説明責任を持たせ、またコンピュータ設計者自身が他のすべての人に対して説明責任を持ち続ける方法をどう確立するかです。
-最終的に、私たちの世代、つまりAIを社会にもたらす最初の世代にとって最大の問いの一つは、コンピュータが人々に対して責任を持ち続ける方法と、コンピュータを設計する人々が他のすべての人々に対して責任を持ち続ける方法を確保することです。
+## インパクトアセスメント(影響評価)
-## 影響評価
+機械学習モデルのトレーニング前に、AIシステムの目的、意図された使用法、展開場所、システムとの関わりを持つ人を理解するための影響評価を行うことが重要です。これらはシステムの評価者やテスターが潜在的リスクや期待される影響を識別する際に考慮すべき要素を知るのに役立ちます。
-機械学習モデルを訓練する前に、AIシステムの目的、意図された使用法、展開場所、システムと対話する人々を理解するために影響評価を実施することが重要です。これらは、システムを評価するレビュー担当者やテスターが、潜在的なリスクや予想される結果を特定する際に考慮すべき要因を知るのに役立ちます。
+影響評価で着目すべき領域は以下の通りです:
-影響評価を実施する際の重点領域は以下の通りです:
+* 個人への悪影響。利用制限や要求事項、対応していない使用法、既知の制限を意識し、システムが個人に害を及ぼす使われ方をしないことを保証することが重要です。
+* データ要件。システムのデータ使用方法と場所を理解すると、GDPRやHIPAAのデータ規制などに注意すべき点を検討できます。また、学習に必要なデータ量やデータソースの十分性も評価します。
+* 影響の概要。システム利用による潜在的な害のリストを作成し、機械学習ライフサイクル全体で問題が緩和または対処されているか確認します。
+* 6つの核心原則ごとの適用可能な目標。各原則の目標が達成されているか、ギャップがあるか評価します。
-* **個人への悪影響**: 制限や要件、サポートされていない使用法、またはシステムの性能を妨げる既知の制限を認識することで、システムが個人に害を与える方法で使用されないようにすることが重要です。
-* **データ要件**: システムがデータをどのように、どこで使用するかを理解することで、考慮すべきデータ要件(例:GDPRやHIPPAデータ規制)を探ることができます。また、データの出所や量が訓練に十分であるかどうかを検討します。
-* **影響の概要**: システムの使用から生じる可能性のある害のリストを収集します。MLライフサイクル全体を通じて、特定された問題が軽減または対処されているかどうかを確認します。
-* **6つのコア原則に基づく適用可能な目標**: 各原則の目標が達成されているか、ギャップがあるかどうかを評価します。
## 責任あるAIによるデバッグ
-ソフトウェアアプリケーションのデバッグと同様に、AIシステムのデバッグはシステムの問題を特定し解決する必要なプロセスです。モデルが期待通りに、または責任を持って動作しない理由に影響を与える要因は多くあります。ほとんどの従来のモデル性能指標は、モデルの性能の定量的な集計であり、責任あるAI原則に違反する方法を分析するには十分ではありません。さらに、機械学習モデルはブラックボックスであり、その結果を導く要因を理解したり、誤りを説明するのが難しいです。このコースの後半では、責任あるAIダッシュボードを使用してAIシステムをデバッグする方法を学びます。このダッシュボードは、データサイエンティストやAI開発者が以下を実行するための包括的なツールを提供します:
+ソフトウェアアプリケーションのデバッグと同様に、AIシステムのデバッグは問題を特定・解決する必要なプロセスです。モデルが期待通り、また責任ある振る舞いをしない原因は多岐にわたります。従来のモデル性能指標はモデルのパフォーマンスの定量的集約値であり、責任あるAI原則違反を分析するには不十分です。さらに、機械学習モデルはブラックボックスであり、結果に影響を与えている要因や誤った判断の理由を説明するのは難しいです。本コースでは後に、責任あるAIダッシュボードの使い方を学びます。このダッシュボードは、データサイエンティストやAI開発者が包括的に実施できるツールとして以下を提供します:
+
+* 誤差分析。システムの公平性や信頼性に影響する誤差分布を特定するため。
+* モデル概要。データコホート間のパフォーマンス格差を発見するため。
+* データ分析。データの分布を理解し、公平性、包摂性、信頼性に影響する可能性のあるバイアスを特定するため。
+* モデル解釈性。モデルの予測に影響を与える要因を理解し、モデルの挙動説明に役立てることで透明性とアカウンタビリティを高めるため。
+
+
+## 🚀 チャレンジ
+
+害をそもそも生じさせないために、私たちは以下を実践すべきです:
+
+- システムに関わる人々の多様な背景や視点を持つこと
+- 社会の多様性を反映したデータセットに投資すること
+- 機械学習のライフサイクル全体で責任あるAIの検出と修正の方法を改善すること
+
+モデル構築や使用において信頼できないことが明らかな実際のシナリオについて考えてみましょう。他に考慮すべきことはありますか?
+
+## [事後クイズ](https://ff-quizzes.netlify.app/en/ml/)
+
+## 復習&自主学習
+
-* **エラー分析**
-このワークショップを視聴して、トピックをさらに深く掘り下げましょう:
+このレッスンでは、機械学習における公平性と不公平性の概念の基本について学びました。
+
+これらのトピックをさらに深く掘り下げるには、このワークショップをご覧ください:
-- 責任あるAIの追求: 原則を実践に移す方法
- 講師: Besmira Nushi、Mehrnoosh Sameki、Amit Sharma
+- 責任あるAIの追求:Besmira Nushi、Mehrnoosh Sameki、Amit Sharmaによる原則を実践に移す
-[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: 責任あるAIを構築するためのオープンソースフレームワーク")
+[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: An open-source framework for building responsible AI")
-> 🎥 上の画像をクリックして動画を視聴:
-RAI Toolbox: 責任あるAIを構築するためのオープンソースフレームワーク
-講師: Besmira Nushi、Mehrnoosh Sameki、Amit Sharma
+> 🎥 上記の画像をクリックすると、Besmira Nushi、Mehrnoosh Sameki、Amit Sharmaによる「RAI Toolbox: 責任あるAIを構築するためのオープンソースフレームワーク」のビデオが再生されます
-また、以下もご覧ください:
+また、以下もお読みください:
-- MicrosoftのRAIリソースセンター:
- [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
+- MicrosoftのRAIリソースセンター:[Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
-- MicrosoftのFATE研究グループ:
- [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
+- MicrosoftのFATE研究グループ:[FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
-RAI Toolbox:
+RAI Toolbox:
- [Responsible AI Toolbox GitHubリポジトリ](https://github.com/microsoft/responsible-ai-toolbox)
-Azure Machine Learningの公平性を確保するためのツールについて読む:
+Azure Machine Learningの公平性担保ツールについてはこちらをご覧ください:
-- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
+- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
## 課題
-[RAI Toolboxを探索する](assignment.md)
+[Explore RAI Toolbox](assignment.md)
---
-**免責事項**:
-この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な表現が含まれる可能性があります。元の言語で記載された原文が正式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の利用に起因する誤解や誤認について、当社は一切の責任を負いません。
\ No newline at end of file
+
+**免責事項**:
+本書類は AI 翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期していますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。原文の原語版が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用により生じたいかなる誤解や解釈違いについても、当方は責任を負いかねます。
+
\ No newline at end of file
diff --git a/translations/ja/2-Regression/1-Tools/README.md b/translations/ja/2-Regression/1-Tools/README.md
index ec311e18b..3c659d7b9 100644
--- a/translations/ja/2-Regression/1-Tools/README.md
+++ b/translations/ja/2-Regression/1-Tools/README.md
@@ -1,120 +1,121 @@
-# PythonとScikit-learnを使った回帰モデルの入門
+# PythonとScikit-learnで回帰モデルを始めよう
-
+
-> スケッチノート作成者: [Tomomi Imura](https://www.twitter.com/girlie_mac)
+> スケッチノート: [Tomomi Imura](https://www.twitter.com/girlie_mac)
-## [講義前のクイズ](https://ff-quizzes.netlify.app/en/ml/)
+## [事前講義クイズ](https://ff-quizzes.netlify.app/en/ml/)
> ### [このレッスンはRでも利用可能です!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
## はじめに
-この4つのレッスンでは、回帰モデルの構築方法を学びます。これらが何のために使われるのかについては後ほど説明します。しかし、その前に、プロセスを開始するための適切なツールを準備してください!
+この4つのレッスンで、回帰モデルの構築方法を学びます。これらが何のために使われるかをすぐに説明します。その前に、プロセスを始めるために適切なツールが揃っていることを確認しましょう!
-このレッスンで学ぶ内容:
+このレッスンでは、以下を学びます:
-- ローカルで機械学習タスクを実行するためのコンピュータの設定方法
-- Jupyter Notebookの使い方
-- Scikit-learnのインストールと使用方法
-- 線形回帰を実際に体験する演習
+- ローカルでの機械学習タスクのためにコンピューターの設定を行う方法。
+- Jupyterノートブックの使い方。
+- Scikit-learnの使用方法(インストールを含む)。
+- 実践演習で線形回帰を探究する。
## インストールと設定
-[](https://youtu.be/-DfeD2k2Kj0 "初心者向け機械学習 - 機械学習モデルを構築するためのツールのセットアップ")
+[](https://youtu.be/-DfeD2k2Kj0 "初心者向け機械学習 - 機械学習モデル構築準備のためのツールセットアップ")
-> 🎥 上の画像をクリックすると、コンピュータをML用に設定する短い動画が再生されます。
+> 🎥 上の画像をクリックすると、機械学習用コンピューターの設定を解説する短い動画が視聴できます。
-1. **Pythonをインストール**。コンピュータに[Python](https://www.python.org/downloads/)がインストールされていることを確認してください。Pythonは多くのデータサイエンスや機械学習タスクで使用されます。ほとんどのコンピュータシステムにはすでにPythonがインストールされています。一部のユーザー向けにセットアップを簡単にするための便利な[Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott)も利用可能です。
+1. **Pythonをインストール**。[Python](https://www.python.org/downloads/)がコンピューターにインストールされていることを確認してください。Pythonは多くのデータサイエンスや機械学習タスクに利用されます。ほとんどのコンピューターには既にPythonがインストールされています。セットアップが簡単になるように、便利な [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) も利用可能です。
- ただし、Pythonの使用方法によっては異なるバージョンが必要になる場合があります。そのため、[仮想環境](https://docs.python.org/3/library/venv.html)を使用することが便利です。
+ しかし、Pythonの用途によっては異なるバージョンが必要となる場合があり、そのために [仮想環境](https://docs.python.org/3/library/venv.html) を使うことが有効です。
-2. **Visual Studio Codeをインストール**。コンピュータにVisual Studio Codeがインストールされていることを確認してください。基本的なインストールについては、[Visual Studio Codeのインストール](https://code.visualstudio.com/)手順に従ってください。このコースではVisual Studio CodeでPythonを使用するため、[Visual Studio CodeのPython開発用設定](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott)について学んでおくと良いでしょう。
+2. **Visual Studio Codeをインストール**。コンピューターにVisual Studio Codeがインストールされていることを確認してください。基本インストールについては、[Visual Studio Codeをインストールする手順](https://code.visualstudio.com/)に従ってください。このコースではVisual Studio Code上でPythonを使うので、[Python開発用にVisual Studio Codeを設定する方法](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott)も確認しておくと良いでしょう。
- > Pythonに慣れるために、この[学習モジュールのコレクション](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)を試してみてください。
+ > このコレクションの [学習モジュール](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) に取り組みながらPythonに慣れましょう。
>
> [](https://youtu.be/yyQM70vi7V8 "Visual Studio CodeでPythonをセットアップ")
>
- > 🎥 上の画像をクリックすると、VS Code内でPythonを使用する方法の動画が再生されます。
+ > 🎥 上の画像をクリックするとVS Code内でPythonを使う動画が視聴できます。
-3. **Scikit-learnをインストール**。[こちらの手順](https://scikit-learn.org/stable/install.html)に従ってインストールしてください。Python 3を使用する必要があるため、仮想環境を使用することをお勧めします。M1 Macにこのライブラリをインストールする場合、リンク先のページに特別な手順が記載されています。
+3. **Scikit-learnをインストール**。[こちらの手順](https://scikit-learn.org/stable/install.html)に従ってください。Python 3を使う必要があるため、仮想環境の利用をお勧めします。M1 Macでインストールする場合は、リンク先に特別な指示があります。
4. **Jupyter Notebookをインストール**。[Jupyterパッケージ](https://pypi.org/project/jupyter/)をインストールしてください。
-## ML作成環境
+## あなたのML開発環境
-**ノートブック**を使用してPythonコードを開発し、機械学習モデルを作成します。このタイプのファイルはデータサイエンティストにとって一般的なツールであり、拡張子`.ipynb`で識別されます。
+ノートブックを使ってPythonコードを書き、機械学習モデルを作成します。この種のファイルはデータサイエンティストに一般的で、拡張子 `.ipynb` で識別できます。
-ノートブックは、コードを記述するだけでなく、コードに関するメモやドキュメントを追加することができるインタラクティブな環境です。これは実験的または研究指向のプロジェクトに非常に役立ちます。
+ノートブックはインタラクティブな環境で、コードだけでなくメモやドキュメントを書くことができ、実験や研究志向のプロジェクトに非常に役立ちます。
-[](https://youtu.be/7E-jC8FLA2E "初心者向け機械学習 - 回帰モデルを構築するためのJupyter Notebookのセットアップ")
+[](https://youtu.be/7E-jC8FLA2E "初心者向け機械学習 - Jupyterノートブックのセットアップで回帰モデルを構築開始")
-> 🎥 上の画像をクリックすると、この演習を進める短い動画が再生されます。
+> 🎥 上の画像をクリックすると、この演習の解説動画が視聴できます。
-### 演習 - ノートブックを操作する
+### 演習 - ノートブックを使ってみる
-このフォルダには、_notebook.ipynb_ というファイルがあります。
+このフォルダーに _notebook.ipynb_ ファイルがあります。
1. Visual Studio Codeで _notebook.ipynb_ を開きます。
- JupyterサーバーがPython 3+で起動します。ノートブック内には`run`できるコード部分があります。コードブロックを実行するには、再生ボタンのようなアイコンを選択します。
+ JupyterサーバーがPython 3+で起動します。ノートブック内には `run` 可能なコードブロックがあります。再生ボタンのようなアイコンを選択してコードブロックを実行できます。
-2. `md`アイコンを選択し、以下のテキストを追加します: **# Welcome to your notebook**。
+2. `md` アイコンを選択し、少しマークダウンを書き、次のテキストを追加します:**# Welcome to your notebook**。
次に、Pythonコードを追加します。
3. コードブロックに **print('hello notebook')** と入力します。
-4. 矢印を選択してコードを実行します。
+4. 実行矢印を選択してコードを実行します。
- 以下の出力が表示されるはずです:
+ 出力は次のように表示されるはずです:
```output
hello notebook
```
-
+
-コードとコメントを交互に記述することで、ノートブックを自己文書化することができます。
+コードにコメントを挟みながらノートブックを自己文書化することもできます。
-✅ ウェブ開発者の作業環境とデータサイエンティストの作業環境がどれほど異なるか、少し考えてみてください。
+✅ ウェブ開発者の作業環境とデータサイエンティストの環境の違いについて少し考えてみましょう。
-## Scikit-learnの準備
+## Scikit-learnを使いこなそう
-Pythonがローカル環境にセットアップされ、Jupyter Notebookに慣れたら、次はScikit-learnに慣れる番です(`sci`は`science`のように発音します)。Scikit-learnは、MLタスクを実行するための[広範なAPI](https://scikit-learn.org/stable/modules/classes.html#api-ref)を提供します。
+Pythonがローカル環境に設定され、Jupyterノートブックに慣れたら、Scikit-learn(`sci`は「サイエンス」の発音に似ています)も同様に使いこなしましょう。Scikit-learnは機械学習タスクをサポートする[豊富なAPI](https://scikit-learn.org/stable/modules/classes.html#api-ref)を提供します。
-[公式サイト](https://scikit-learn.org/stable/getting_started.html)によると、「Scikit-learnは、教師あり学習と教師なし学習をサポートするオープンソースの機械学習ライブラリです。また、モデルのフィッティング、データの前処理、モデル選択と評価、その他多くのユーティリティを提供します。」
+[公式サイト](https://scikit-learn.org/stable/getting_started.html)によると、「Scikit-learnは、教師あり学習と教師なし学習をサポートするオープンソースの機械学習ライブラリです。また、モデルフィッティング、データ前処理、モデル選択と評価、その他多くのユーティリティも提供しています。」
-このコースでは、Scikit-learnやその他のツールを使用して、いわゆる「従来型の機械学習」タスクを実行するためのモデルを構築します。ニューラルネットワークや深層学習は、今後の「AI for Beginners」カリキュラムで詳しく扱う予定です。
+このコースでは、Scikit-learnなどのツールを使って、いわゆる「伝統的な機械学習」タスクを実行するモデルを構築します。ニューラルネットワークやディープラーニングは扱わず、後の「初心者向けAI」カリキュラムで詳しく扱います。
-Scikit-learnを使えば、モデルを簡単に構築し、それらを評価して使用することができます。主に数値データを使用することに焦点を当てており、学習ツールとして使用できるいくつかの既製データセットが含まれています。また、学生が試せる事前構築済みのモデルも含まれています。まずは、事前パッケージ化されたデータをロードし、Scikit-learnを使った最初のMLモデルを基本的なデータで試してみましょう。
+Scikit-learnはモデル構築と評価を簡単に行えるよう設計されており、主に数値データを扱い、学習用の既製データセットもいくつか備えています。学生が試せる事前構築モデルも含まれています。まずは、パッケージ済みデータの読み込みと組み込み推定器を使った初めてのMLモデルを基本データで試してみましょう。
-## 演習 - 初めてのScikit-learnノートブック
+## 演習 - Scikit-learnノートブックで最初のモデルを作る
-> このチュートリアルは、Scikit-learnのウェブサイトにある[線形回帰の例](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py)に触発されています。
+> このチュートリアルはScikit-learnのウェブサイトにある[線形回帰の例](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py)を参考にしています。
-[](https://youtu.be/2xkXL5EUpS0 "初心者向け機械学習 - Pythonで初めての線形回帰プロジェクト")
-> 🎥 上の画像をクリックすると、この演習を進める短い動画が再生されます。
+[](https://youtu.be/2xkXL5EUpS0 "初心者向け機械学習 - Pythonで最初の線形回帰プロジェクト")
-このレッスンに関連する_notebook.ipynb_ファイル内のすべてのセルを、ゴミ箱アイコンを押してクリアしてください。
+> 🎥 上の画像をクリックすると、この演習を解説する短い動画が視聴できます。
-このセクションでは、学習目的でScikit-learnに組み込まれている糖尿病に関する小さなデータセットを使用します。糖尿病患者の治療をテストしたいと仮定します。機械学習モデルは、変数の組み合わせに基づいて、どの患者が治療により良い反応を示すかを判断するのに役立つかもしれません。非常に基本的な回帰モデルでも、視覚化することで、理論的な臨床試験を整理するのに役立つ変数に関する情報を示すことができます。
+_notebook.ipynb_ ファイルでは、すべてのセルを「ゴミ箱」アイコンを押してクリアしてください。
-✅ 回帰方法には多くの種類があり、どれを選ぶかは求めている答えによります。例えば、ある年齢の人の予測される身長を知りたい場合は、**数値値**を求めているため線形回帰を使用します。一方、ある料理がビーガン料理と見なされるべきかどうかを知りたい場合は、**カテゴリの割り当て**を求めているためロジスティック回帰を使用します。後ほどロジスティック回帰について詳しく学びます。データに対してどのような質問ができるか、そしてどの方法が適切か少し考えてみてください。
+このセクションでは、学習用にScikit-learnに組み込まれている糖尿病に関する小さなデータセットで作業します。糖尿病患者の治療法をテストする場合を想像してください。機械学習モデルは、複数の変数の組み合わせに基づいて、どの患者が治療により良い反応を示すかを判断するのに役立つかもしれません。とても基本的な回帰モデルでも視覚化することで、理論的な臨床試験のための変数に関する情報が得られるかもしれません。
-さっそくこのタスクを始めましょう。
+✅ 回帰方法には様々なタイプがあり、どれを選ぶかは答えたい質問によります。年齢に対する推定身長など、数値的な値を予測したい場合は線形回帰を使います。料理の種類がビーガンかどうかのカテゴリー割り当てを知りたい場合はロジスティック回帰を使います。ロジスティック回帰は後で詳しく学びます。データに対してどんな質問をできるか、どの方法が適切か少し考えてみてください。
+
+では、このタスクを始めましょう。
### ライブラリのインポート
-このタスクでは以下のライブラリをインポートします:
+このタスクのために次のライブラリをインポートします:
-- **matplotlib**。便利な[グラフ作成ツール](https://matplotlib.org/)で、線グラフを作成するために使用します。
-- **numpy**。[numpy](https://numpy.org/doc/stable/user/whatisnumpy.html)はPythonで数値データを扱うための便利なライブラリです。
+- **matplotlib**。便利な[グラフ作成ツール](https://matplotlib.org/)で、折れ線グラフを作るのに使います。
+- **numpy**。[numpy](https://numpy.org/doc/stable/user/whatisnumpy.html)はPythonで数値データを扱うライブラリです。
- **sklearn**。これは[Scikit-learn](https://scikit-learn.org/stable/user_guide.html)ライブラリです。
-タスクを助けるためにいくつかのライブラリをインポートします。
+作業に役立つライブラリをインポートします。
-1. 以下のコードを入力してインポートを追加します:
+1. 以下のコードを入力してインポートします:
```python
import matplotlib.pyplot as plt
@@ -122,26 +123,26 @@ Scikit-learnを使えば、モデルを簡単に構築し、それらを評価
from sklearn import datasets, linear_model, model_selection
```
- 上記では`matplotlib`、`numpy`をインポートし、`sklearn`から`datasets`、`linear_model`、`model_selection`をインポートしています。`model_selection`はデータをトレーニングセットとテストセットに分割するために使用されます。
+ ここでは `matplotlib` と `numpy` をインポートし、`sklearn` からは `datasets` 、 `linear_model` 、 `model_selection` をインポートしています。`model_selection` はデータを訓練用とテスト用に分割するのに使います。
### 糖尿病データセット
-組み込みの[糖尿病データセット](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)には、糖尿病に関する442件のデータサンプルが含まれており、10個の特徴変数があります。その一部は以下の通りです:
+組み込みの [糖尿病データセット](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)は、442のサンプルを含み、10の特徴変数があります。主なものは以下です:
-- age: 年齢(年単位)
-- bmi: ボディマス指数
+- age: 年齢(歳)
+- bmi: 体格指数
- bp: 平均血圧
- s1 tc: T細胞(白血球の一種)
-✅ このデータセットには、糖尿病に関する研究で重要な特徴変数として「性別」の概念が含まれています。多くの医療データセットにはこのような二分分類が含まれています。このような分類が治療から特定の人口を除外する可能性について少し考えてみてください。
+✅ このデータセットには糖尿病研究で重要な特徴変数として「性別」が含まれています。多くの医療データセットにはこの種の二値分類が含まれます。こうした分類が特定の集団を治療から排除する可能性について少し考えてみてください。
-次に、Xとyデータをロードします。
+では、Xとyのデータを読み込みます。
> 🎓 これは教師あり学習であり、名前付きの「y」ターゲットが必要です。
-新しいコードセルで、`load_diabetes()`を呼び出して糖尿病データセットをロードします。入力`return_X_y=True`は、`X`がデータマトリックスで、`y`が回帰ターゲットであることを示します。
+新しいコードセルで、`load_diabetes()` を使って糖尿病データセットを読み込みます。引数 `return_X_y=True` は `X` がデータ行列、`y` が回帰ターゲットであることを示します。
-1. データマトリックスの形状とその最初の要素を表示するためにいくつかのprintコマンドを追加します:
+1. データ行列の形状と最初の要素を表示するために、次のprint文を追加します:
```python
X, y = datasets.load_diabetes(return_X_y=True)
@@ -149,9 +150,9 @@ Scikit-learnを使えば、モデルを簡単に構築し、それらを評価
print(X[0])
```
- 返されるのはタプルです。タプルの最初の2つの値をそれぞれ`X`と`y`に割り当てています。[タプルについて詳しく学ぶ](https://wikipedia.org/wiki/Tuple)。
+ 返されるのはタプルです。最初の2つの値をそれぞれ `X` と `y` に割り当てています。[タプル](https://wikipedia.org/wiki/Tuple)について学びましょう。
- このデータには442件のアイテムがあり、10個の要素で構成される配列の形状を持つことがわかります:
+ このデータが442項目で、それぞれ10要素の配列で構成されていることがわかります:
```text
(442, 10)
@@ -159,39 +160,39 @@ Scikit-learnを使えば、モデルを簡単に構築し、それらを評価
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
- ✅ データと回帰ターゲットの関係について少し考えてみてください。線形回帰は特徴Xとターゲット変数yの間の関係を予測します。このデータセットの[ターゲット](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)をドキュメントで見つけることができますか?このデータセットは何を示していますか?
+ ✅ データと回帰ターゲットの関係について少し考えてみましょう。線形回帰は特徴量Xとターゲット変数yの関係を予測します。糖尿病データセットの[ターゲット](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)はドキュメントで何を示しているでしょうか?このデータセットが示す内容は何でしょう?
-2. 次に、このデータセットの一部をプロットするために選択します。データセットの3列目を選択します。これを行うには、`:`演算子を使用してすべての行を選択し、インデックス(2)を使用して3列目を選択します。また、`reshape(n_rows, n_columns)`を使用してデータを2D配列に再構成します。パラメータの1つが-1の場合、対応する次元が自動的に計算されます。
+2. 次に、データセットの3列目を選択してプロット用のデータを用意します。`:` 操作子で全行を選び、インデックス `2` で3列目を選択します。プロットに必要な2次元配列に変換するには `reshape(n_rows, n_columns)` を使います。 `-1` を指定すると、その次元は自動的に計算されます。
```python
X = X[:, 2]
X = X.reshape((-1,1))
```
- ✅ いつでもデータを印刷してその形状を確認できます。
+ ✅ 必要なら都度データの形状をプリントして確認しましょう。
-3. データをプロットする準備が整ったら、このデータセットの数値間に論理的な分割を決定するために機械を使用できるか確認します。これを行うには、データ(X)とターゲット(y)の両方をテストセットとトレーニングセットに分割する必要があります。Scikit-learnにはこれを簡単に行う方法があります。指定したポイントでテストデータを分割できます。
+3. プロット準備ができたら、データの論理的な分割を機械に判別させてみましょう。そのために、データ(X)とターゲット(y)を訓練用とテスト用に分割します。Scikit-learnはこれを簡単に行える方法があります。任意の点でデータを分割できます。
```python
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
```
-4. これでモデルをトレーニングする準備が整いました!線形回帰モデルをロードし、`model.fit()`を使用してXとyのトレーニングセットでトレーニングします:
+4. これでモデルの訓練準備ができました!線形回帰モデルをロードし、`model.fit()` を使ってXとyの訓練セットで学習させましょう:
```python
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
```
- ✅ `model.fit()`はTensorFlowなどの多くのMLライブラリで見られる関数です。
+ ✅ `model.fit()` はTensorFlowなど多くのMLライブラリで使われる関数です。
-5. 次に、テストデータを使用して予測を作成します。これにより、モデルのデータグループ間に最適な線を描画できます。
+5. 次に `predict()` 関数を使ってテストデータから予測を作成します。これはデータグループの間に線を描くために使います。
```python
y_pred = model.predict(X_test)
```
-6. 次に、データをプロットで表示します。Matplotlibはこのタスクに非常に便利なツールです。すべてのXとyテストデータの散布図を作成し、予測を使用してデータグループ間の最適な位置に線を描画します。
+6. 最後にデータをプロットしてみましょう。Matplotlibはこの作業に非常に便利なツールです。テスト用のXとyの散布図を作成し、予測を使ってモデルのデータグループ間に最も適切な場所に線を引きます。
```python
plt.scatter(X_test, y_test, color='black')
@@ -202,23 +203,24 @@ Scikit-learnを使えば、モデルを簡単に構築し、それらを評価
plt.show()
```
- 
-✅ 少し考えてみましょう。たくさんの小さなデータ点を通る1本の直線がありますが、この直線は一体何をしているのでしょうか?この直線を使って、新しい未確認のデータポイントがプロットのy軸に対してどこに位置するべきかを予測できる方法が見えてきませんか?このモデルの実用的な使い方を言葉で説明してみてください。
+ 
+
-おめでとうございます!初めての線形回帰モデルを構築し、それを使って予測を行い、プロットに表示することができました!
+ ✅ ここで何が起こっているのか少し考えてみてください。直線が多くの小さなデータ点の間を通っていますが、それは正確には何をしているのでしょうか? この直線を使って、新しい、見たことのないデータ点がプロットのy軸に対してどこに位置するべきか予測できることがわかりますか? このモデルの実用的な使い道を言葉にしてみましょう。
+
+おめでとうございます、あなたは最初の線形回帰モデルを構築し、それを使って予測を作成し、それをプロットに表示しました!
---
## 🚀チャレンジ
-このデータセットから別の変数をプロットしてみましょう。ヒント: この行を編集してください: `X = X[:,2]`。このデータセットのターゲットを考慮すると、糖尿病という病気の進行についてどのようなことが発見できるでしょうか?
-
-## [講義後のクイズ](https://ff-quizzes.netlify.app/en/ml/)
+このデータセットの別の変数をプロットしてみましょう。ヒント:この行を編集してください:`X = X[:,2]`。このデータセットのターゲットを考慮して、糖尿病という病気の進行について何がわかりますか?
+## [講義後クイズ](https://ff-quizzes.netlify.app/en/ml/)
## 復習と自己学習
-このチュートリアルでは、単回帰分析を扱いましたが、多変量回帰や重回帰分析ではありませんでした。これらの手法の違いについて少し調べてみるか、[この動画](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)を見てみてください。
+このチュートリアルでは、単回帰を使いましたが、多変量回帰や単変量回帰とは異なります。これらの方法の違いについて少し読んでみるか、[この動画](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)をご覧ください。
-回帰の概念についてさらに学び、この手法でどのような質問に答えられるのかを考えてみましょう。[このチュートリアル](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott)を受講して理解を深めてください。
+回帰という概念についてより深く理解し、この技術でどのような疑問に答えられるか考えてみましょう。理解を深めるためにこの[チュートリアル](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott)を受講してください。
## 課題
@@ -226,5 +228,7 @@ Scikit-learnを使えば、モデルを簡単に構築し、それらを評価
---
-**免責事項**:
-この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な表現が含まれる可能性があります。元の言語で記載された原文を公式な情報源としてご参照ください。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用に起因する誤解や誤認について、当社は一切の責任を負いません。
+
+**免責事項**:
+本書類は AI 翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期していますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。原文の原語版が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用により生じたいかなる誤解や解釈違いについても、当方は責任を負いかねます。
+
\ No newline at end of file
diff --git a/translations/ja/2-Regression/2-Data/README.md b/translations/ja/2-Regression/2-Data/README.md
index ce28bf1d6..cb1539dc8 100644
--- a/translations/ja/2-Regression/2-Data/README.md
+++ b/translations/ja/2-Regression/2-Data/README.md
@@ -1,62 +1,62 @@
-# Scikit-learnを使った回帰モデルの構築:データの準備と可視化
+# Scikit-learnを使って回帰モデルを構築する: データの準備と可視化
-
+
-インフォグラフィック作成者:[Dasani Madipalli](https://twitter.com/dasani_decoded)
+インフォグラフィック提供者: [Dasani Madipalli](https://twitter.com/dasani_decoded)
-## [講義前クイズ](https://ff-quizzes.netlify.app/en/ml/)
+## [事前講義クイズ](https://ff-quizzes.netlify.app/en/ml/)
> ### [このレッスンはRでも利用可能です!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
## はじめに
-Scikit-learnを使った機械学習モデル構築に必要なツールが整った今、データに対して質問を投げかける準備ができました。データを扱い、MLソリューションを適用する際には、データセットの可能性を最大限に引き出すために、適切な質問をする方法を理解することが非常に重要です。
+Scikit-learnを用いた機械学習モデル構築に必要なツールのセットアップが完了したので、いよいよデータに対して問いかけを始める準備ができました。データを扱いMLソリューションを適用する際には、データセットの可能性を正しく引き出すために適切な質問の仕方を理解することが非常に重要です。
-このレッスンでは以下を学びます:
+このレッスンでは、以下を学びます:
-- モデル構築のためのデータ準備方法
-- Matplotlibを使ったデータ可視化の方法
+- モデル構築のためのデータ準備方法。
+- Matplotlibを用いたデータの可視化方法。
+- より表現力のある可視化のためのSeabornの使い方。
## データに対して適切な質問をする
-解決したい質問によって、使用するMLアルゴリズムの種類が決まります。そして、得られる回答の質は、データの性質に大きく依存します。
+どんな質問をするかによって、使用する機械学習アルゴリズムの種類が決まります。また、返ってくる答えの質はデータの性質に大きく依存します。
-このレッスンで使用する[データ](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv)を見てみましょう。この.csvファイルをVS Codeで開くことができます。ざっと目を通すと、空白や文字列と数値データの混在が見られます。また、「Package」という奇妙な列があり、データが「sacks」や「bins」などの値で混在しています。実際、このデータは少し厄介です。
+このレッスンで提供されている [データ](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) を見てみましょう。この.csvファイルはVS Codeで開くことができます。ざっと見ただけでも空欄があったり、文字列と数値の混在が見られます。また、「Package」という奇妙な列があり、そこには「sacks」や「bins」などの混在した値が含まれています。実際、このデータは少しばかり乱雑です。
-[](https://youtu.be/5qGjczWTrDQ "初心者向けML - データセットの分析とクリーニング方法")
+[](https://youtu.be/5qGjczWTrDQ "初心者向けML - データセットの分析とクリーンアップ方法")
-> 🎥 上の画像をクリックすると、このレッスンのデータ準備を進める短い動画が視聴できます。
+> 🎥 画像をクリックすると、このレッスンのデータ準備の流れを解説した短い動画が見られます。
-実際、MLモデルをすぐに使える形で完全に整ったデータセットを手に入れることはあまりありません。このレッスンでは、標準的なPythonライブラリを使用して生データセットを準備する方法を学びます。また、データを可視化するさまざまな手法についても学びます。
+実際には、すぐに使える状態のデータセットが丸ごと与えられることはあまりありません。このレッスンでは、標準的なPythonライブラリを使って未加工データを準備する方法を学びます。また、様々な手法によるデータの可視化も学びます。
-## ケーススタディ:「かぼちゃ市場」
+## ケーススタディ:「カボチャ市場」
-このフォルダには、ルートの`data`フォルダ内に[US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv)という.csvファイルが含まれています。このファイルには、アメリカのかぼちゃ市場に関する1757行のデータが含まれており、都市ごとにグループ分けされています。このデータは、アメリカ農務省が配布している[Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice)から抽出された生データです。
+このフォルダには、ルートの`data`フォルダに [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) というファイルがあり、これは都市ごとに分類されたカボチャ市場に関する1757行のデータが含まれています。この生データは、米国農務省が配布している [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) から抽出されたものです。
### データの準備
-このデータはパブリックドメインに属しています。USDAのウェブサイトから都市ごとに個別のファイルとしてダウンロードできますが、ファイルが多すぎるのを避けるため、すべての都市データを1つのスプレッドシートに結合しました。このようにして、すでにデータを少し「準備」しています。次に、このデータを詳しく見てみましょう。
+このデータはパブリックドメインです。米農務省のサイトでは、多くのファイルが都市別に分かれてダウンロード可能です。多数の分割ファイルを避けるために、すべての都市データを一つのスプレッドシートに結合しており、ある程度データの「準備」は済ませています。次にデータをより詳しく見ていきましょう。
-### かぼちゃデータ - 初期の結論
+### カボチャデータ - 初期の結論
-このデータについて何に気づきますか?すでに文字列、数値、空白、奇妙な値が混在していることがわかりました。
+このデータから何が気づきますか?すでに文字列、数値、空欄、変な値の混在があることが見えていますね。
-回帰手法を使ってこのデータにどのような質問をすることができますか?例えば、「特定の月に販売されるかぼちゃの価格を予測する」という質問はどうでしょうか。このデータを再度確認すると、このタスクに必要なデータ構造を作成するためにいくつかの変更が必要であることがわかります。
+回帰技術を使ってこのデータにどんな質問ができるでしょうか?「特定の月に販売されるカボチャの価格を予測する」というのはどうでしょう。再度データを見ると、その課題に必要なデータ構造にするためにいくつか変更する必要があることがわかります。
+## 演習 - カボチャデータ分析
-## 演習 - かぼちゃデータの分析
+データ整形に便利なツールである [Pandas](https://pandas.pydata.org/) (名前は`Python Data Analysis`の頭文字)を使って、このカボチャデータを分析し準備しましょう。
-[Python Data Analysis](https://pandas.pydata.org/)を意味するPandasを使用して、このかぼちゃデータを分析・準備しましょう。Pandasはデータの整形に非常に便利なツールです。
+### まずは欠損している日付をチェックする
-### まず、欠損している日付を確認する
+最初に以下の手順で、欠損している日付がないかどうか確認します:
-最初に、欠損している日付を確認する手順を実行します:
-
-1. 日付を月形式に変換します(これらは米国の日付形式なので、`MM/DD/YYYY`です)。
-2. 月を新しい列に抽出します。
+1. 日付を月の形式に変換する(米国の日付形式のため、フォーマットは`MM/DD/YYYY`です)。
+2. 月を新しい列に抽出する。
Visual Studio Codeで_notebook.ipynb_ファイルを開き、スプレッドシートを新しいPandasデータフレームにインポートします。
-1. `head()`関数を使用して最初の5行を表示します。
+1. `head()`関数を使って最初の5行を表示しましょう。
```python
import pandas as pd
@@ -64,30 +64,30 @@ Visual Studio Codeで_notebook.ipynb_ファイルを開き、スプレッドシ
pumpkins.head()
```
- ✅ 最後の5行を表示するにはどの関数を使用しますか?
+ ✅ 最後の5行を表示するにはどの関数を使いますか?
-1. 現在のデータフレームに欠損データがあるか確認します:
+1. 現在のデータフレームに欠損データがないかチェックします:
```python
pumpkins.isnull().sum()
```
- 欠損データがありますが、今回のタスクには影響がないかもしれません。
+ 欠損データはありますが、今回の課題には影響しないかもしれません。
-1. データフレームを扱いやすくするために、必要な列だけを選択します。`loc`関数を使用して、元のデータフレームから行(最初のパラメータ)と列(2番目のパラメータ)のグループを抽出します。以下の例では、`:`は「すべての行」を意味します。
+1. 作業を簡単にするために、`loc`関数を使って必要な列だけ選択しましょう。`loc`は元のデータフレームから特定の行(第1引数)と列(第2引数)を抽出します。下記の`:`は「すべての行」を意味します。
```python
columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']
pumpkins = pumpkins.loc[:, columns_to_select]
```
-### 次に、かぼちゃの平均価格を算出する
+### 次に、カボチャの平均価格を算出する
-特定の月におけるかぼちゃの平均価格を算出する方法を考えてみましょう。このタスクにはどの列を選択しますか?ヒント:3つの列が必要です。
+特定月のカボチャの平均価格をどうやって求めるか考えてみてください。この課題に必要な列は何でしょう?ヒント: 3列必要です。
-解決策:`Low Price`列と`High Price`列の平均を取り、新しい`Price`列を作成します。また、`Date`列を月だけを表示する形式に変換します。上記の確認によると、日付や価格に欠損データはありません。
+解決策: `Low Price`列と`High Price`列の平均を新しいPrice列として作成し、Date列は月のみ表示に変換します。幸い上記チェックによると、日付や価格の欠損はありません。
-1. 平均を計算するには、以下のコードを追加します:
+1. 平均を計算するには、次のコードを追加します:
```python
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2
@@ -96,37 +96,37 @@ Visual Studio Codeで_notebook.ipynb_ファイルを開き、スプレッドシ
```
- ✅ 必要に応じて、`print(month)`を使用してデータを確認してください。
+ ✅ チェックしたいデータは`print(month)`を使って自由に出力してみてください。
-2. 変換したデータを新しいPandasデータフレームにコピーします:
+2. 変換済みデータを新しいPandasデータフレームにコピーしましょう:
```python
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
```
- データフレームを出力すると、きれいで整ったデータセットが表示され、これを基に新しい回帰モデルを構築できます。
+ データフレームを印刷すると、きれいで整理されたデータセットが表示され、新しい回帰モデルの構築に使えます。
-### しかし、ここで奇妙な点があります
+### しかし!ちょっと変な点があります
-`Package`列を見ると、かぼちゃはさまざまな形態で販売されていることがわかります。一部は「1 1/9 bushel」単位で、一部は「1/2 bushel」単位で、一部はかぼちゃ1個単位、またはポンド単位、さらには幅の異なる大きな箱単位で販売されています。
+`Package`列を見ると、カボチャが様々な形態で販売されていることがわかります。中には「1 1/9 ブッシェル」や「1/2 ブッシェル」といった単位もあれば、1個単位、1ポンド単位、大きな箱で幅の異なるものもあります。
-> かぼちゃを一貫して計量するのは非常に難しいようです
+> カボチャは一貫して重さを量るのが非常に難しいようです。
-元のデータを掘り下げると、`Unit of Sale`が「EACH」または「PER BIN」の場合、`Package`タイプもインチ単位、ビン単位、または「each」となっています。かぼちゃを一貫して計量するのは非常に難しいようです。そのため、`Package`列に「bushel」という文字列が含まれるかぼちゃだけを選択してフィルタリングしましょう。
+元データを詳しく見ると、`Unit of Sale`が 'EACH' または 'PER BIN' のものには、`Package`タイプがインチ単位、ビンごと、または 'each' となっていることがわかります。カボチャは非常に重量が一定ではないようなので、`Package`列に「bushel」という文字列が含まれるカボチャだけを選択してフィルタ処理しましょう。
-1. ファイルの冒頭、最初の.csvインポートの下にフィルタを追加します:
+1. 最初の.csvインポート下にフィルターを追加します:
```python
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
```
- データを出力すると、「bushel」を含む約415行のデータだけが取得されていることがわかります。
+ これで印刷すると、bushel単位のカボチャ約415行のみが抽出されているのがわかります。
-### しかし、もう1つやるべきことがあります
+### しかし!もう一つやることがあります
-行ごとにバスケットの量が異なることに気づきましたか?価格をバスケット単位で標準化する必要があります。そのため、価格を標準化するための計算を行います。
+bushelの量は行によって異なることに気づきましたか?価格をbushelあたりに正規化する必要があるので、標準化のための計算を行いましょう。
-1. 新しい`new_pumpkins`データフレームを作成するブロックの後に以下の行を追加します:
+1. new_pumpkinsデータフレームを作成するブロックの後に、次の行を追加します:
```python
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)
@@ -134,38 +134,38 @@ Visual Studio Codeで_notebook.ipynb_ファイルを開き、スプレッドシ
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
```
-✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308)によると、バスケットの重さは作物の種類によって異なります。バスケットは体積の測定単位であるためです。「例えば、トマトのバスケットは56ポンドとされています... 葉物野菜はスペースを多く取り、重さが少ないため、ほうれん草のバスケットはわずか20ポンドです。」これは非常に複雑です!バスケットからポンドへの変換は行わず、バスケット単位で価格を計算することにしましょう。しかし、このかぼちゃのバスケットに関する研究は、データの性質を理解することがいかに重要であるかを示しています!
+✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) によれば、ブッシェルの重量は品目によって異なり、容積単位です。例えば「トマトの1ブッシェルは56ポンド」、「葉物や青菜は容積が大きくても重量は軽く、ほうれん草の1ブッシェルは20ポンド」。非常に複雑です!ポンド換算はせずにbushel単位で価格を扱いましょう。これらのカボチャのbushel調査は、データの性質を理解することの重要性を示しています!
-これで、バスケットの測定単位に基づいて価格を分析できます。データをもう一度出力すると、標準化されたことがわかります。
+これでbushel単位の価格を分析できます。もう一度データを印刷すると、標準化された様子が見えます。
-✅ 半バスケット単位で販売されるかぼちゃが非常に高価であることに気づきましたか?その理由を考えてみてください。ヒント:小さなかぼちゃは大きなかぼちゃよりもはるかに高価です。おそらく、大きな空洞のあるパイ用かぼちゃ1個に比べて、バスケットあたりの小さなかぼちゃの数が非常に多いためです。
+✅ 半ブッシェル単位で販売されているカボチャは非常に高価なのに気づきましたか?理由を考えられますか?ヒント: 小さなカボチャは大きいものよりもずっと高価です。おそらく大きな空洞のパイ用カボチャが一つ入るスペースに、小さなカボチャがたくさん入るためです。
## 可視化の戦略
-データサイエンティストの役割の一部は、扱っているデータの質や性質を示すことです。そのために、興味深い可視化、つまりプロット、グラフ、チャートを作成して、データのさまざまな側面を示します。この方法で、視覚的に関係性やギャップを示すことができ、そうでなければ見つけにくいものを明らかにします。
+データサイエンティストの役割の一部は、扱うデータの質や性質を示すことです。そのため、しばしば興味深い可視化(プロット、グラフ、チャート)を作成し、異なる側面を示します。こうすることで、目に見えて関係性やデータの穴を明らかにできます。
-[](https://youtu.be/SbUkxH6IJo0 "初心者向けML - Matplotlibを使ったデータの可視化方法")
+[](https://youtu.be/SbUkxH6IJo0 "初心者向けML - Matplotlibによるデータ可視化方法")
-> 🎥 上の画像をクリックすると、このレッスンのデータ可視化を進める短い動画が視聴できます。
+> 🎥 画像をクリックすると、このレッスンのデータ可視化を解説した短い動画が見られます。
-可視化は、データに最も適した機械学習手法を決定するのにも役立ちます。例えば、散布図が直線に沿っているように見える場合、そのデータは線形回帰の演習に適していることを示しています。
+可視化は、データに最も適した機械学習手法を決めるのにも役立ちます。例えば、散布図が直線に沿っているようであれば、そのデータは線形回帰に適していることを示唆します。
-Jupyter Notebookでよく使われるデータ可視化ライブラリの1つが[Matplotlib](https://matplotlib.org/)です(前のレッスンでも登場しました)。
+Jupyterノートブックでよく使われるデータ可視化ライブラリの一つに[Matplotlib](https://matplotlib.org/)(前のレッスンでも登場しました)があります。
-> データ可視化の経験をさらに積むには、[これらのチュートリアル](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott)を参照してください。
+> [これらのチュートリアル](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott)でデータ可視化の経験をさらに積みましょう。
-## 演習 - Matplotlibを使って実験する
+## 演習 - Matplotlibを試してみる
-作成した新しいデータフレームを表示するために、いくつかの基本的なプロットを作成してみましょう。基本的な折れ線グラフはどのように見えるでしょうか?
+新しく作成したデータフレームを表示する基本的なプロットを作成してみましょう。基本的な線グラフではどんな表示になるでしょうか?
-1. ファイルの冒頭、Pandasのインポートの下にMatplotlibをインポートします:
+1. ファイルの先頭、Pandasのインポートの下にMatplotlibをインポートします:
```python
import matplotlib.pyplot as plt
```
1. ノートブック全体を再実行して更新します。
-1. ノートブックの最後にセルを追加して、データをボックスプロットとしてプロットします:
+1. ノートブックの下部に、箱ひげ図を描くセルを追加します:
```python
price = new_pumpkins.Price
@@ -174,38 +174,113 @@ Jupyter Notebookでよく使われるデータ可視化ライブラリの1つが
plt.show()
```
- 
+ 
- このプロットは役に立ちますか?何か驚くことはありますか?
+ これは有用なグラフでしょうか?何か驚いた点はありますか?
- 特に役に立つわけではありません。単にデータを月ごとの点の広がりとして表示しているだけです。
+ 入力データの散布図としてポイントを散らしているだけなので、特に役に立つわけではありません。
-### 有用なプロットにする
+### もっと有用にするには
-有用なチャートを表示するには、通常、データを何らかの形でグループ化する必要があります。y軸に月を表示し、データが分布を示すプロットを作成してみましょう。
+有益なデータを示すには通常、何らかの方法でデータをグループ化する必要があります。月をy軸に取り、データの分布を示すグラフを作成してみましょう。
-1. グループ化された棒グラフを作成するセルを追加します:
+1. グループ化した棒グラフを作るセルを追加します:
```python
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')
plt.ylabel("Pumpkin Price")
```
- 
+ 
+
+ これの方が有用なデータ可視化です!カボチャの最高価格は9月と10月に見られるようです。これは予想通りでしょうか?なぜそう思いますか?
+
+## 演習 - Seabornを試してみる
+
+Matplotlibは強力ですが、完成度の高いグラフを作るには多くのコードが必要になることがあります。[Seaborn](https://seaborn.pydata.org/)はMatplotlibの「上に構築された」ライブラリで、統計的データ可視化に特化しています。Pandasデータフレームと直接連携し、魅力的なデフォルトスタイルを適用し、少ないコードで分かりやすいプロットが作成できます。SeabornはMatplotlibオブジェクトを返すため、既存のMatplotlibの知識もそのまま使って細かな調整が可能です。
+
+> まだSeabornをインストールしていない場合は、`pip install seaborn`でインストールしてください。
+
+1. ノートブックの先頭、他のインポートの下にSeabornをインポートします。通常`sns`の名前でインポートします:
+
+ ```python
+ import seaborn as sns
+ ```
+
+### 散布図で関係性を示す
+
+モデル構築前のデータ探索の大部分は、変数間の_関係_を探すことです。[散布図](https://en.wikipedia.org/wiki/Scatter_plot)はそのための最良のツールのひとつで、点が直線上に並ぶようなら、その2変数間に相関があり、線形回帰モデルの適用が期待できます。
+
+1. 先ほどの価格と月の散布図を、今回はSeabornの[`relplot()`](https://seaborn.pydata.org/generated/seaborn.relplot.html)(関係プロット)を使って再作成します。`relplot()`はデータフレームの列を直接扱えます:
+
+ ```python
+ sns.relplot(x="Price", y="Month", data=new_pumpkins)
+ ```
+
+ 
+
+ 列名とデータフレームを渡すだけで、軸ラベルはSeabornが自動で付けてくれるのがわかります。
+
+2. `kind="line"`を渡して線グラフに切り替えることもできます。Seabornは線のまわりに信頼区間の帯も描いてくれます:
+
+ ```python
+ sns.relplot(x="Price", y="Month", kind="line", data=new_pumpkins)
+ ```
+
+ 
+
+ この特定のデータはノイズが多いため線グラフは最適ではありませんが、Seabornでチャートタイプを簡単に変更できる様子が示されています。
+
+### 棒グラフで分布を示す
+
+
+前に手動でデータをグループ化してMatplotlibで棒グラフを作成しました。Seabornの[`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html)(カテゴリカルプロット)は、グループ化と集約を自動で行ってくれます。デフォルトで `kind="bar"` は各カテゴリの平均値を表示し、信頼区間を示す黒い線が付加されます。
+
+1. 月ごとの平均価格の棒グラフを作成します:
+
+ ```python
+ sns.catplot(x="Month", y="Price", data=new_pumpkins, kind="bar")
+ ```
+
+ 
+
+ これはMatplotlibで見たものを確認するものです — 価格は9月と10月にピークを迎えます — しかしSeabornは各月の価格がどれほど_変動_するかも可視化しています。
+
+### 相関を示すヒートマップ
+
+散布図は2つの変数を比較しますが、複数の数値列がある場合は[ヒートマップ](https://en.wikipedia.org/wiki/Heat_map)を使うと、_すべての_列のペア間の関係の強さを一度に見ることができます。これは、モデルにどの特徴量を入力するかを選ぶ前に最も関連の強い特徴を見つける一般的な方法であり(また同じ種類のグラフは後に分類で混同行列を表示する際にも使われます)。
+
+1. Pandasで相関行列を作成し、Seabornの[`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html)で描画します。`annot=True`オプションは各セルに相関値を表示します:
+
+ ```python
+ correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()
+ sns.heatmap(correlations, annot=True, cmap="coolwarm")
+ ```
+
+ 
+
+ `1`(または `-1`)に近い値は列同士が強く_線形_に相関していることを意味します。`Low Price`と`High Price`がほぼ完全に相関しているのに注目してください。一方で`Month`は価格との線形相関が弱いことがわかります — たとえ上記の棒グラフで9月と10月に明確な季節的ピークが示されていてもです。これは重要な教訓です:相関係数は_直線的な_関係しか測定できないため、季節的あるいはその他非線形のパターンを見逃す可能性があります。 ✅ なぜヒートマップと棒グラフのようなチャートの両方を見て使う列を決定すると有効なのでしょうか?
+
+### MatplotlibとSeaborn、どちらがよい?
+
+両方のライブラリは知っておく価値があります:
+
+- **Matplotlib** はチャートのあらゆる要素を細かく制御でき、ほぼすべての他のPythonプロットライブラリが基盤にしているものです。
+- **Seaborn** は統計チャート用の高レベルな関数と魅力的なデフォルトを備え、データフレームと直接動作し、探索的データ解析により早く使えることが多いです。
- これはより有用なデータ可視化です!9月と10月にかぼちゃの最高価格が見られるようです。これは予想通りですか?なぜそう思いますか?
+一般的なワークフローは、まずSeabornで素早くデータを探査し、詳細をカスタマイズしたいときにMatplotlibに切り替えるというものです。
---
## 🚀チャレンジ
-Matplotlibが提供するさまざまな可視化タイプを探求してみましょう。回帰問題に最も適したタイプはどれですか?
+MatplotlibとSeabornが提供するさまざまな種類の可視化を調べてみましょう。どのタイプが回帰問題に最も適しているでしょうか?
## [講義後クイズ](https://ff-quizzes.netlify.app/en/ml/)
-## 復習と自己学習
+## 復習 & 自主学習
-データを可視化するさまざまな方法を調べてみましょう。利用可能なライブラリのリストを作成し、2D可視化と3D可視化など、特定のタスクに最適なライブラリをメモしてください。何を発見しましたか?
+多様なデータ可視化の方法に目を通しましょう。利用可能なさまざまなライブラリをリストアップし、2D可視化と3D可視化など、特定のタスクに最適なものを記録してみてください。何を発見しますか?
## 課題
@@ -213,5 +288,7 @@ Matplotlibが提供するさまざまな可視化タイプを探求してみま
---
-**免責事項**:
-この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な表現が含まれる可能性があります。元の言語で記載された原文を公式な情報源としてご参照ください。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用に起因する誤解や誤認について、当社は一切の責任を負いません。
+
+**免責事項**:
+本書類は AI 翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期していますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。原文の原語版が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用により生じたいかなる誤解や解釈違いについても、当方は責任を負いかねます。
+
\ No newline at end of file
diff --git a/translations/ja/2-Regression/2-Data/solution/notebook.ipynb b/translations/ja/2-Regression/2-Data/solution/notebook.ipynb
index 973fe1267..a2debd6dc 100644
--- a/translations/ja/2-Regression/2-Data/solution/notebook.ipynb
+++ b/translations/ja/2-Regression/2-Data/solution/notebook.ipynb
@@ -3,7 +3,9 @@
{
"cell_type": "markdown",
"metadata": {},
- "source": []
+ "source": [
+ "## カボチャの線形回帰 - レッスン2\n"
+ ]
},
{
"cell_type": "code",
@@ -220,6 +222,7 @@
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
+ "import seaborn as sns\n",
"pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n",
"\n",
"pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n",
@@ -383,18 +386,78 @@
"plt.ylabel(\"Pumpkin Price\")"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Seabornによる可視化\n",
+ "\n",
+ "[Seaborn](https://seaborn.pydata.org/) はMatplotlibの上に構築されており、データフレームと直接連携するため、ごく少ないコードで魅力的な統計プロットを素早く作成できます。\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 散布図による関係の表示\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sns.relplot(x=\"Price\", y=\"Month\", data=new_pumpkins)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sns.relplot(x=\"Price\", y=\"Month\", kind=\"line\", data=new_pumpkins)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 分布を示す棒グラフ\n"
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
- "source": []
+ "source": [
+ "sns.catplot(x=\"Month\", y=\"Price\", data=new_pumpkins, kind=\"bar\")"
+ ]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n---\n\n**免責事項**: \nこの文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確さが含まれる可能性があります。元の言語で記載された原文が正式な情報源と見なされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当社は一切の責任を負いません。\n"
+ "### 相関を示すヒートマップ\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()\n",
+ "sns.heatmap(correlations, annot=True, cmap=\"coolwarm\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n\n\n**免責事項**:\n本書類は AI 翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期していますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。原文の原語版が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用により生じたいかなる誤解や解釈違いについても、当方は責任を負いかねます。\n\n"
]
}
],
@@ -424,13 +487,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
- "orig_nbformat": 2,
- "coopTranslator": {
- "original_hash": "95726f0b8283628d5356a4f8eb8b4b76",
- "translation_date": "2025-09-04T01:36:34+00:00",
- "source_file": "2-Regression/2-Data/solution/notebook.ipynb",
- "language_code": "ja"
- }
+ "orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2
diff --git a/translations/ja/2-Regression/4-Logistic/README.md b/translations/ja/2-Regression/4-Logistic/README.md
index bbd7c86b7..7e89f404b 100644
--- a/translations/ja/2-Regression/4-Logistic/README.md
+++ b/translations/ja/2-Regression/4-Logistic/README.md
@@ -1,79 +1,79 @@
-# カテゴリー予測のためのロジスティック回帰
+# カテゴリを予測するためのロジスティック回帰
-
+
-## [講義前のクイズ](https://ff-quizzes.netlify.app/en/ml/)
+## [講義前クイズ](https://ff-quizzes.netlify.app/en/ml/)
> ### [このレッスンはRでも利用可能です!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html)
## はじめに
-回帰に関する最後のレッスンでは、基本的な「クラシック」な機械学習技術の一つであるロジスティック回帰について学びます。この技術を使用して、パターンを発見し、二値カテゴリーを予測することができます。このキャンディはチョコレートか否か?この病気は伝染性か否か?この顧客はこの商品を選ぶか否か?
+この回帰分析の最終レッスンでは、基本的な_古典的_機械学習技術の一つであるロジスティック回帰を見ていきます。この手法は、2値のカテゴリを予測するパターンを見つけるために使います。このキャンディはチョコレートか?この病気は伝染性か?この顧客はこの製品を選ぶか?というような予測です。
-このレッスンで学ぶ内容:
+このレッスンで学ぶこと:
-- データ可視化のための新しいライブラリ
-- ロジスティック回帰の技術
+- 新しいデータ可視化ライブラリー
+- ロジスティック回帰の技法
-✅ この[学習モジュール](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott)で、このタイプの回帰についての理解を深めましょう。
+✅ このタイプの回帰を使う理解を深めるには、この [Learn モジュール](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) をご覧ください
## 前提条件
-かぼちゃデータを扱ったことで、このデータには扱える二値カテゴリーがあることがわかりました。それは `Color` です。
+かぼちゃのデータで作業したことで、`Color`という2値カテゴリがあることは十分に理解しています。
-いくつかの変数を基にして、_特定のかぼちゃの色がオレンジ 🎃 か白 👻 かを予測する_ ロジスティック回帰モデルを構築してみましょう。
+それを予測するロジスティック回帰モデルを構築しましょう。与えられた変数から、_かぼちゃがどの色である可能性が高いか_(オレンジ 🎃か白 👻か)を予測します。
-> なぜ回帰に関するレッスンで二値分類について話しているのでしょうか?それは言語的な便宜上の理由だけであり、ロジスティック回帰は[実際には分類方法](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression)であり、線形ベースのものです。次のレッスンでは、データを分類する他の方法について学びます。
+> なぜ回帰のグループのレッスンで2値分類の話をするのか?それは言語的な便宜のためだけです。ロジスティック回帰は[実際には分類手法](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression)であり、線形ベースの分類法だからです。次のレッスングループで他のデータ分類の方法を学びます。
-## 問題を定義する
+## 質問を定義する
-今回の目的では、これを二値として表現します:'白' または '白ではない'。データセットには '縞模様' というカテゴリーもありますが、インスタンスが少ないため使用しません。データセットから欠損値を削除すると、このカテゴリーは消えてしまいます。
+ここでは、2値として「白」か「白でない」かで表します。データセットには「縞模様」というカテゴリーもありますが、事例数が少ないため使用しません。欠損値を取り除くと消えてしまいます。
-> 🎃 面白い事実として、白いかぼちゃを時々「ゴーストかぼちゃ」と呼びます。彫刻するのは難しいため、オレンジのかぼちゃほど人気はありませんが、見た目はとてもクールです!したがって、質問を次のように再構成することもできます:'ゴースト' か 'ゴーストではない'。👻
+> 🎃 面白いことに、白かぼちゃは「ゴースト」かぼちゃと呼ぶことがあります。彫るのが難しいのでオレンジより人気はありませんが見た目はかっこいいです!質問を「ゴーストか否か」に変えることもできます。👻
## ロジスティック回帰について
-ロジスティック回帰は、以前学んだ線形回帰とはいくつかの重要な点で異なります。
+ロジスティック回帰は、前に学んだ線形回帰といくつか重要な点で異なります。
-[](https://youtu.be/KpeCT6nEpBY "初心者向け機械学習 - ロジスティック回帰の理解")
+[](https://youtu.be/KpeCT6nEpBY "初心者向けML - 機械学習の分類のためのロジスティック回帰の理解")
-> 🎥 上の画像をクリックすると、ロジスティック回帰の概要を説明する短い動画が視聴できます。
+> 🎥 上の画像をクリックするとロジスティック回帰の短いビデオ概要がご覧になれます。
-### 二値分類
+### 2値分類
-ロジスティック回帰は線形回帰と同じ機能を提供しません。前者は二値カテゴリー(「白か白ではない」)についての予測を提供しますが、後者は連続値を予測することができます。例えば、かぼちゃの産地と収穫時期を基にして、_価格がどれだけ上昇するか_ を予測することができます。
+ロジスティック回帰は線形回帰と同じ特徴を提供しません。前者は2値カテゴリ(「白か白でないか」)の予測を行うのに対し、後者は連続値、例えばかぼちゃの産地や収穫時期から「価格がどれだけ上がるか」を予測できます。
-
-> インフォグラフィック作成者:[Dasani Madipalli](https://twitter.com/dasani_decoded)
+
+> インフォグラフィック [Dasani Madipalli](https://twitter.com/dasani_decoded) 提供
### 他の分類
-ロジスティック回帰には、他にも多項式や順序型などの種類があります:
+ロジスティック回帰には、多項および順序分類もあります:
-- **多項式**: 複数のカテゴリーを持つ場合 - 「オレンジ、白、縞模様」。
-- **順序型**: 順序付けられたカテゴリーを持つ場合。例えば、かぼちゃのサイズ(mini, sm, med, lg, xl, xxl)を論理的に順序付ける場合に役立ちます。
+- 多項分類は複数のカテゴリを対象にします - 「オレンジ、白、縞模様」。
+- 順序分類は順序付けられたカテゴリに対応し、かぼちゃのサイズのように(mini, sm, med, lg, xl, xxl)順序がある場合に役立ちます。
-
+
-### 変数は相関している必要はない
+### 変数は必ずしも相関している必要はない
-線形回帰がより相関のある変数でうまく機能することを覚えていますか?ロジスティック回帰はその逆で、変数が一致している必要はありません。このデータには相関が弱い変数があるため、適しています。
+線形回帰はより相関の強い変数があるほど効果的でしたが、ロジスティック回帰は逆で、変数が一致している必要はありません。このデータは相関がやや弱いので適しています。
### 多くのクリーンなデータが必要
-ロジスティック回帰は、データが多いほど正確な結果を提供します。私たちの小さなデータセットはこのタスクには最適ではないため、その点を考慮してください。
+ロジスティック回帰は多くのデータを使うほど精度が上がります。私たちの小さなデータセットは最適ではないことを念頭に置いてください。
-[](https://youtu.be/B2X4H9vcXTs "初心者向け機械学習 - ロジスティック回帰のためのデータ分析と準備")
+[](https://youtu.be/B2X4H9vcXTs "初心者向けML - ロジスティック回帰のためのデータ分析と準備")
-> 🎥 上の画像をクリックすると、線形回帰のためのデータ準備についての短い動画が視聴できます。
+> 🎥 上の画像をクリックすると線形回帰のためのデータ準備の短いビデオ概要が見られます
-✅ ロジスティック回帰に適したデータの種類について考えてみましょう。
+✅ ロジスティック回帰に適したデータの種類を考えてみましょう
-## 演習 - データを整理する
+## 演習 - データを整える
-まず、データを少し整理し、欠損値を削除していくつかの列を選択します:
+まず、欠損値を削除し、一部の列だけ選択してデータを少し清掃しましょう:
-1. 次のコードを追加してください:
+1. 以下のコードを追加:
```python
@@ -83,7 +83,7 @@
pumpkins.dropna(inplace=True)
```
- 新しいデータフレームを確認することもできます:
+ 新しいデータフレームをのぞいてみましょう:
```python
pumpkins.info
@@ -91,11 +91,11 @@
### 可視化 - カテゴリカルプロット
-これまでに、かぼちゃデータを[スターターノートブック](../../../../2-Regression/4-Logistic/notebook.ipynb)に読み込み、いくつかの変数を含むデータセットを保持するように整理しました。ノートブックでデータフレームを可視化するために、以前使用したMatplotlibを基にした異なるライブラリ:[Seaborn](https://seaborn.pydata.org/index.html) を使用してみましょう。
+ここまでに、[スターターノートブック](./notebook.ipynb)を使って再びかぼちゃのデータを読み込み、`Color`を含む数個の変数を保持するデータセットに整形しました。異なるライブラリでデータフレームを可視化しましょう。[Seaborn](https://seaborn.pydata.org/index.html)はMatplotlibを基盤としており、以前使いました。
-Seabornはデータを可視化するための便利な方法を提供します。例えば、`Variety` と `Color` のデータ分布をカテゴリカルプロットで比較することができます。
+Seabornにはデータ可視化の便利な手法がいくつかあります。例えば、`Variety`と`Color`ごとの分布をカテゴリカルプロットで比較できます。
-1. `catplot` 関数を使用して、かぼちゃデータ `pumpkins` を指定し、各かぼちゃカテゴリー(オレンジまたは白)の色マッピングを指定してプロットを作成します:
+1. `catplot`関数で、このプロットを作ります。かぼちゃデータ`pumpkins`を使い、かぼちゃの各カテゴリ(オレンジか白か)の色指定もします:
```python
import seaborn as sns
@@ -111,19 +111,18 @@ Seabornはデータを可視化するための便利な方法を提供します
)
```
- 
+ 
- データを観察することで、`Color` データが `Variety` にどのように関連しているかを確認できます。
+ データを観察すると、ColorデータがVarietyとどう関係あるか見られます。
- ✅ このカテゴリカルプロットを基に、どのような興味深い探索が考えられますか?
+ ✅ このカテゴリカルプロットを見て、どんな興味深い探索ができそうですか?
### データ前処理:特徴量とラベルのエンコーディング
+かぼちゃのデータセットは全て文字列です。カテゴリデータは人間には直感的ですが、機械にはそうではありません。機械学習アルゴリズムは数字が得意です。だからエンコードはとても重要で、情報を失わずにカテゴリデータを数値データに変換します。良いエンコードは良いモデルを作ります。
-かぼちゃデータセットのすべての列には文字列値が含まれています。人間にとってカテゴリカルデータは直感的ですが、機械にとってはそうではありません。機械学習アルゴリズムは数値データでうまく機能します。そのため、エンコーディングはデータ前処理フェーズで非常に重要なステップです。これにより、カテゴリカルデータを数値データに変換し、情報を失うことなく処理できます。適切なエンコーディングは良いモデルの構築につながります。
+特徴量エンコードには主に2種類あります:
-特徴量エンコーディングには主に2つのタイプがあります:
-
-1. 順序型エンコーダー:順序型変数に適しており、カテゴリカル変数のデータが論理的な順序に従う場合に使用します。例えば、データセットの `Item Size` 列です。このエンコーダーは各カテゴリーを数値で表し、その数値は列内のカテゴリーの順序を示します。
+1. 順序エンコーダ:順序付き変数(例えばこのデータセットの`Item Size`列)に適し、各カテゴリを列内の順序に従い番号で表します。
```python
from sklearn.preprocessing import OrdinalEncoder
@@ -133,7 +132,7 @@ Seabornはデータを可視化するための便利な方法を提供します
ordinal_encoder = OrdinalEncoder(categories=item_size_categories)
```
-2. カテゴリカルエンコーダー:名義変数に適しており、カテゴリカル変数のデータが論理的な順序に従わない場合に使用します。例えば、データセットの `Item Size` 以外のすべての特徴量です。これはワンホットエンコーディングであり、各カテゴリーがバイナリ列で表されます。エンコードされた変数は、かぼちゃがその `Variety` に属している場合は1、そうでない場合は0になります。
+2. カテゴリエンコーダ:名義変数(`Item Size`以外の特徴量)に適し、ワンホットエンコードで各カテゴリを二進の列で表します。対象のかぼちゃがそのVarietyなら1、それ以外は0です。
```python
from sklearn.preprocessing import OneHotEncoder
@@ -141,8 +140,7 @@ Seabornはデータを可視化するための便利な方法を提供します
categorical_features = ['City Name', 'Package', 'Variety', 'Origin']
categorical_encoder = OneHotEncoder(sparse_output=False)
```
-
-次に、`ColumnTransformer` を使用して複数のエンコーダーを1つのステップにまとめ、適切な列に適用します。
+次に`ColumnTransformer`を使って複数のエンコーダを1ステップにまとめて適用します。
```python
from sklearn.compose import ColumnTransformer
@@ -155,8 +153,7 @@ Seabornはデータを可視化するための便利な方法を提供します
ct.set_output(transform='pandas')
encoded_features = ct.fit_transform(pumpkins)
```
-
-一方、ラベルをエンコードするためには、scikit-learnの `LabelEncoder` クラスを使用します。このクラスはラベルを正規化し、0から n_classes-1(ここでは0と1)の値のみを含むようにします。
+ラベルのエンコードにはscikit-learnの`LabelEncoder`クラスを使います。これはラベルを0からn_classes-1(ここでは0と1)の値に正規化するユーティリティクラスです。
```python
from sklearn.preprocessing import LabelEncoder
@@ -164,19 +161,17 @@ Seabornはデータを可視化するための便利な方法を提供します
label_encoder = LabelEncoder()
encoded_label = label_encoder.fit_transform(pumpkins['Color'])
```
-
-特徴量とラベルをエンコードしたら、それらを新しいデータフレーム `encoded_pumpkins` に統合できます。
+特徴量とラベルをエンコードしたら、新しいデータフレーム`encoded_pumpkins`に結合できます。
```python
encoded_pumpkins = encoded_features.assign(Color=encoded_label)
```
-
-✅ `Item Size` 列に順序型エンコーダーを使用する利点は何ですか?
+✅ `Item Size`列に順序エンコーダを使う利点は何ですか?
### 変数間の関係を分析する
-データを前処理した後、特徴量とラベルの関係を分析して、モデルが特徴量を基にラベルをどれだけうまく予測できるかのアイデアをつかむことができます。
-この種の分析を行う最良の方法はデータをプロットすることです。再びSeabornの `catplot` 関数を使用して、`Item Size`、`Variety`、`Color` の関係をカテゴリカルプロットで可視化します。データをより良くプロットするために、エンコードされた `Item Size` 列と未エンコードの `Variety` 列を使用します。
+データを前処理したので、特徴量とラベルの関係を分析しましょう。モデルが特徴量からラベルをどれだけ正確に予測できるか把握できます。
+分析の最良の方法はデータをプロットすることです。再びSeabornの`catplot`関数で、`Item Size`、`Variety`、`Color`の関係をカテゴリカルプロットで可視化します。ここではエンコードした`Item Size`列とエンコードしていない`Variety`列を使います。
```python
palette = {
@@ -195,16 +190,15 @@ Seabornはデータを可視化するための便利な方法を提供します
g.set(xlabel="Item Size", ylabel="").set(xlim=(0,6))
g.set_titles(row_template="{row_name}")
```
+
-
+### スウォームプロットを使う
-### スウォームプロットを使用する
+Colorは2値カテゴリ(白か否か)なので、「[専門的な手法](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar)」を使って可視化する必要があります。このカテゴリと他の変数の関係を表現する他の方法もあります。
-`Color` は二値カテゴリー(白または白ではない)であるため、可視化には「[特化したアプローチ](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar)」が必要です。このカテゴリーと他の変数との関係を可視化する他の方法もあります。
+Seabornプロットを使い変数を並べて可視化できます。
-Seabornプロットを使用して変数を並べて可視化できます。
-
-1. 値の分布を示す「スウォーム」プロットを試してみましょう:
+1. 「スウォーム」プロットを試して、値の分布を示しましょう:
```python
palette = {
@@ -214,27 +208,28 @@ Seabornプロットを使用して変数を並べて可視化できます。
sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette)
```
- 
+ 
+
+注意:上のコードはデータ数が多いため警告を出す場合があります。'size'パラメーターでマーカーのサイズを小さくすると解決しますが、読みやすさが下がることに注意してください。
-**注意**: 上記のコードは警告を生成する可能性があります。Seabornが大量のデータポイントをスウォームプロットに表現するのに失敗するためです。解決策として、マーカーのサイズを 'size' パラメータで減少させることができます。ただし、これによりプロットの読みやすさが影響を受ける可能性があります。
-> **🧮 数学を見てみよう**
+> **🧮 数学的な解説**
>
-> ロジスティック回帰は「最大尤度」の概念に基づいており、[シグモイド関数](https://wikipedia.org/wiki/Sigmoid_function)を使用します。プロット上の「シグモイド関数」は「S」字型の形状をしています。この関数は値を取り、それを0から1の間のどこかにマッピングします。その曲線は「ロジスティック曲線」とも呼ばれます。その公式は次のようになります:
+> ロジスティック回帰は[シグモイド関数](https://wikipedia.org/wiki/Sigmoid_function)を使った「最尤推定」の概念に基づいています。プロット上の「シグモイド関数」はS字型をしており、値を0から1の間に写像します。この曲線は「ロジスティック曲線」とも呼ばれます。数式は以下のようになります:
>
-> 
+> 
>
-> シグモイドの中点はxの0点に位置し、Lは曲線の最大値、kは曲線の急峻さを示します。この関数の結果が0.5以上の場合、そのラベルは二値選択の「1」として分類されます。それ以外の場合は「0」として分類されます。
+> シグモイドの中点はxの0点にあり、Lは曲線の最大値、kは傾きの急さを示します。関数の出力が0.5より大きければ、そのラベルはバイナリ選択の「1」クラスに分類されます。そうでなければ「0」となります。
## モデルを構築する
-Scikit-learnでこの二値分類を見つけるモデルを構築するのは驚くほど簡単です。
+2値分類を見つけるモデル構築はScikit-learnでは驚くほど簡単です。
-[](https://youtu.be/MmZS2otPrQ8 "初心者向け機械学習 - データ分類のためのロジスティック回帰")
+[](https://youtu.be/MmZS2otPrQ8 "初心者向けML - データの分類のためのロジスティック回帰")
-> 🎥 上の画像をクリックすると、線形回帰モデルの構築についての短い動画が視聴できます。
+> 🎥 上の画像をクリックすると線形回帰モデル構築の短いビデオ概要が見られます
-1. 分類モデルで使用したい変数を選択し、`train_test_split()` を呼び出してトレーニングセットとテストセットを分割します:
+1. 分類モデルに使いたい変数を選択し、`train_test_split()`で訓練・テストデータに分割します:
```python
from sklearn.model_selection import train_test_split
@@ -246,7 +241,7 @@ Scikit-learnでこの二値分類を見つけるモデルを構築するのは
```
-2. 次に、トレーニングデータを使用して `fit()` を呼び出し、モデルをトレーニングし、その結果を出力します:
+2. 訓練データに対して`fit()`を呼び出しモデルを訓練し、その結果を表示します:
```python
from sklearn.metrics import f1_score, classification_report
@@ -261,7 +256,7 @@ Scikit-learnでこの二値分類を見つけるモデルを構築するのは
print('F1-score: ', f1_score(y_test, predictions))
```
- モデルのスコアボードを確認してください。約1000行のデータしかないことを考えると、悪くありません:
+ モデルのスコアボードを確認しましょう。約1000行のデータしかない割には悪くありません:
```output
precision recall f1-score support
@@ -282,82 +277,76 @@ Scikit-learnでこの二値分類を見つけるモデルを構築するのは
F1-score: 0.7457627118644068
```
-## 混同行列による理解の向上
+## 混同行列でより深く理解する
-上記の項目を印刷してスコアボードレポート[用語](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report)を取得することができますが、[混同行列](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix)を使用することでモデルをより簡単に理解できるかもしれません。
+スコアボード報告は[こちらの用語](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report)を印字して得られますが、[混同行列](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix)を使うとモデルの性能をより理解しやすくなります。
-> 🎓 「[混同行列](https://wikipedia.org/wiki/Confusion_matrix)」(または「エラーマトリックス」)は、モデルの真の陽性と偽の陽性、真の陰性と偽の陰性を表す表であり、予測の精度を評価します。
+> 🎓 '[混同行列](https://wikipedia.org/wiki/Confusion_matrix)'(あるいは「エラー行列」)とは、モデルの真陽性、偽陽性、真陰性、偽陰性を表す表で、予測精度を測るものです。
-1. 混同行列を使用するには、`confusion_matrix()` を呼び出します:
+1. 混同行列を使うには、`confusion_matrix()`を呼び出します:
```python
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, predictions)
```
- モデルの混同行列を確認してください:
+ モデルの混同行列を見てみましょう:
```output
array([[162, 4],
[ 11, 22]])
```
-Scikit-learnでは、混同行列の行(軸0)は実際のラベル、列(軸1)は予測されたラベルを表します。
+Scikit-learnの混同行列では行(軸0)が実際のラベル、列(軸1)が予測ラベルです。
| | 0 | 1 |
| :---: | :---: | :---: |
| 0 | TN | FP |
| 1 | FN | TP |
-ここで何が起こっているのでしょうか?モデルがかぼちゃを二値カテゴリー、つまり「白」と「白ではない」に分類するよう求められたとします。
+これはどういう意味でしょう?モデルに、かぼちゃの2つのカテゴリ「白」と「白でない」を分類するように依頼されたとします。
+
+- モデルがかぼちゃを白でないと予測し、実際も「白でない」なら真陰性で、左上の数字で示されます。
+- モデルがかぼちゃを白と予測し、実際は「白でない」なら偽陽性で、左下の数字で示されます。
+- モデルがかぼちゃを白でないと予測し、実際は「白」なら偽陰性で、右上の数字で示されます。
+- モデルがかぼちゃを白と予測し、実際も「白」なら真陽性で、右下の数字で示されます。
-- モデルがかぼちゃを「白ではない」と予測し、実際に「白ではない」カテゴリーに属している場合、それを真の陰性(TN)と呼びます。これは左上の数字で示されます。
-- モデルがかぼちゃを「白」と予測し、実際には「白ではない」カテゴリーに属している場合、それを偽の陰性(FN)と呼びます。これは左下の数字で示されます。
-- モデルがかぼちゃを「白ではない」と予測し、実際には「白」カテゴリーに属している場合、それを偽の陽性(FP)と呼びます。これは右上の数字で示されます。
-- モデルがかぼちゃを「白」と予測し、実際に「白」カテゴリーに属している場合、それを真の陽性(TP)と呼びます。これは右下の数字で示されます。
-予想される通り、真の陽性(TP)と真の陰性(TN)の数が多く、偽の陽性(FP)と偽の陰性(FN)の数が少ない方が、モデルの性能が良いことを意味します。
-混同行列は、精度と再現率とどのように関連しているのでしょうか?上記で印刷された分類レポートでは、精度(0.85)と再現率(0.67)が示されていました。
+ご想像の通り、真陽性と真陰性の数が多く、偽陽性と偽陰性の数が少ない方が望ましく、これはモデルの性能が良いことを意味します。
+
+混同行列は精度(Precision)と再現率(Recall)にどのように関連していますか?上で表示された分類レポートは、精度(0.85)と再現率(0.67)を示していましたね。
精度 = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461
再現率 = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666
-✅ Q: 混同行列によると、モデルの性能はどうでしたか?
-A: 悪くはありません。真のネガティブが多くありますが、いくつかの偽陰性も存在します。
+✅ 質問: 混同行列によるとモデルはどうでしたか? 答え: 悪くはありません。真陰性は十分にありますが、いくつか偽陰性もあります。
-混同行列のTP/TNとFP/FNのマッピングを使って、以前見た用語を再確認しましょう:
+混同行列のTP/TNとFP/FNの対応を使って、以前見た用語を再確認しましょう:
-🎓 精度: TP/(TP + FP)
-取得されたインスタンスの中で関連性のあるインスタンスの割合(例: ラベルが正しく付けられたもの)
+🎓 精度(Precision): TP/(TP + FP) 検索されたインスタンスのうち関連のあるものの割合(例:どのラベルが正しくラベル付けされたか)
-🎓 再現率: TP/(TP + FN)
-関連性のあるインスタンスのうち、取得されたインスタンスの割合(正しくラベル付けされているかどうかは問わない)
+🎓 再現率(Recall): TP/(TP + FN) 検索された関連インスタンスの割合(正しくラベル付けされているかどうかに関わらず)
-🎓 f1スコア: (2 * 精度 * 再現率)/(精度 + 再現率)
-精度と再現率の加重平均。最高値は1、最低値は0。
+🎓 f1スコア: (2 * precision * recall)/(precision + recall) 精度と再現率の加重平均であり、最高は1、最低は0
-🎓 サポート:
-取得された各ラベルの出現回数
+🎓 サポート(Support): 各ラベルの出現数
-🎓 正確度: (TP + TN)/(TP + TN + FP + FN)
-サンプルに対して正確に予測されたラベルの割合。
+🎓 精度(Accuracy): (TP + TN)/(TP + TN + FP + FN) サンプルに対して正確に予測されたラベルの割合。
-🎓 マクロ平均:
-各ラベルの重み付けされていない平均値を計算し、ラベルの不均衡を考慮しない。
+🎓 マクロ平均(Macro Avg): ラベルごとの重みなし平均メトリクスの計算。ラベルの不均衡は考慮しない。
-🎓 重み付き平均:
-各ラベルの平均値を計算し、サポート(各ラベルの真のインスタンス数)によって重み付けしてラベルの不均衡を考慮する。
+🎓 重み付き平均(Weighted Avg): ラベルごとにそのサポート(各ラベルの真のインスタンス数)で重み付けして、不均衡を考慮した平均メトリクスの計算。
-✅ 偽陰性の数を減らしたい場合、どの指標を注視すべきか考えられますか?
+✅ 偽陰性の数を減らしたい場合、どの指標に注目すべきだと思いますか?
-## このモデルのROC曲線を視覚化する
+## このモデルのROC曲線を可視化する
-[](https://youtu.be/GApO575jTA0 "初心者向け機械学習 - ROC曲線を使ったロジスティック回帰の性能分析")
+[](https://youtu.be/GApO575jTA0 "ML for beginners - Analyzing Logistic Regression Performance with ROC Curves")
-> 🎥 上の画像をクリックしてROC曲線の概要を短い動画で確認してください
+> 🎥 上の画像をクリックするとROC曲線の短い動画概要を見ることができます
-もう一つの視覚化を行い、いわゆる「ROC」曲線を見てみましょう:
+では、いわゆる「ROC」曲線をもう一つ可視化してみましょう:
```python
from sklearn.metrics import roc_curve, roc_auc_score
@@ -377,36 +366,38 @@ plt.title('ROC Curve')
plt.show()
```
-Matplotlibを使用して、モデルの[受信者動作特性(ROC)](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc)をプロットします。ROC曲線は、分類器の出力を真陽性と偽陽性の観点から見るためによく使用されます。「ROC曲線は通常、Y軸に真陽性率、X軸に偽陽性率を特徴とします。」したがって、曲線の急峻さと中間線と曲線の間の空間が重要です。曲線が急速に上昇し、線を越えることが望ましいです。今回の場合、最初に偽陽性があり、その後線が適切に上昇して越えています:
+Matplotlibを使用して、モデルの[受信者操作特性](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc)またはROCをプロットします。ROC曲線は通常、真陽性率と偽陽性率から分類器の出力を視覚的に把握するために使われます。 「ROC曲線は通常Y軸に真陽性率、X軸に偽陽性率を示します。」したがって、曲線の急勾配と中間線と曲線との間の空間が重要であり、急速に上昇して中間線を超える曲線を望みます。今回の場合、最初に偽陽性があり、その後きちんと上昇してラインを超えています:
-
+
-最後に、Scikit-learnの[`roc_auc_score` API](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score)を使用して、実際の「曲線下面積(AUC)」を計算します:
+最後に、Scikit-learnの[`roc_auc_score` API](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score)を使って実際の「曲線下面積」(AUC)を計算します:
```python
auc = roc_auc_score(y_test,y_scores[:,1])
print(auc)
-```
-結果は `0.9749908725812341` です。AUCは0から1の範囲であり、予測が100%正確なモデルはAUCが1になります。この場合、モデルは「かなり良い」と言えます。
+```
+結果は `0.9749908725812341` です。AUCは0から1の範囲で、大きなスコアが望ましく、予測が100%正確なモデルはAUCが1になります。この場合、モデルは_かなり良い_と言えます。
-今後の分類に関するレッスンでは、モデルのスコアを改善する方法を学びます。しかし、今のところおめでとうございます!これで回帰に関するレッスンを完了しました!
+今後の分類に関するレッスンで、モデルのスコアを改善するために反復する方法を学びますが、今回はおめでとうございます!これらの回帰のレッスンを修了しました!
---
## 🚀チャレンジ
-ロジスティック回帰にはまだまだ学ぶべきことがあります!しかし、最良の学習方法は実験です。このタイプの分析に適したデータセットを見つけて、モデルを構築してみましょう。何を学びますか?ヒント: [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets)で興味深いデータセットを探してみてください。
+ロジスティック回帰についてはまだまだ解明することがたくさんあります!しかし学ぶ最良の方法は実験することです。このタイプの解析に適したデータセットを見つけてモデルを構築してみましょう。何を学びますか?ヒント: 興味深いデータセットは[ Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets)で探せます。
## [講義後のクイズ](https://ff-quizzes.netlify.app/en/ml/)
-## 復習と自己学習
+## 復習と自習
-[スタンフォードのこの論文](https://web.stanford.edu/~jurafsky/slp3/5.pdf)の最初の数ページを読んで、ロジスティック回帰の実用的な使用例について学びましょう。これまで学んだ回帰タスクの中で、どのタスクがどちらの回帰タイプに適しているかを考えてみてください。どちらが最適でしょうか?
+[Stanfordのこの論文](https://web.stanford.edu/~jurafsky/slp3/5.pdf)の最初の数ページを読んで、ロジスティック回帰の実用的な利用例を考えてみてください。これまでに学習したタイプの回帰タスクのどちらかにより適したタスクは何でしょうか?どれが最適に働くでしょうか?
## 課題
-[この回帰を再試行する](assignment.md)
+[この回帰を再挑戦する](assignment.md)
---
-**免責事項**:
-この文書は、AI翻訳サービス[Co-op Translator](https://github.com/Azure/co-op-translator)を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知ください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当方は一切の責任を負いません。
\ No newline at end of file
+
+**免責事項**:
+本書類は AI 翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期していますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。原文の原語版が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用により生じたいかなる誤解や解釈違いについても、当方は責任を負いかねます。
+
\ No newline at end of file
diff --git a/translations/ja/8-Reinforcement/1-QLearning/README.md b/translations/ja/8-Reinforcement/1-QLearning/README.md
index ec331534f..4721bcd48 100644
--- a/translations/ja/8-Reinforcement/1-QLearning/README.md
+++ b/translations/ja/8-Reinforcement/1-QLearning/README.md
@@ -1,47 +1,47 @@
-# 強化学習とQ学習の入門
+# 強化学習とQ学習の紹介
-
-> スケッチノート: [Tomomi Imura](https://www.twitter.com/girlie_mac)
+
+> [Tomomi Imura](https://www.twitter.com/girlie_mac)によるスケッチノート
-強化学習には、エージェント、状態、そして各状態における一連の行動という3つの重要な概念が含まれます。指定された状態で行動を実行することで、エージェントは報酬を得ます。例えば、コンピュータゲーム「スーパーマリオ」を想像してみてください。あなたはマリオであり、ゲームのレベルにいて、崖の端に立っています。上にはコインがあります。マリオとして、ゲームレベルの特定の位置にいる状態が「状態」です。右に一歩進む(行動)と崖から落ちてしまい、低い数値スコアが与えられます。しかし、ジャンプボタンを押すとポイントを獲得し、生き残ることができます。それはポジティブな結果であり、ポジティブな数値スコアが与えられるべきです。
+強化学習は、エージェント、いくつかの状態、および各状態ごとの行動のセットという3つの重要な概念を含みます。特定の状態で行動を実行すると、エージェントに報酬が与えられます。再びコンピューターゲームのスーパーマリオを想像してください。あなたはマリオで、ゲームのレベルにいて、崖の端に立っています。あなたの上にはコインがあります。マリオであり、ゲームのレベルの特定の位置にいる…それがあなたの状態です。右に一歩動く(行動すると)と崖から落ちてしまい、数値的に低いスコアが与えられます。しかし、ジャンプボタンを押すとポイントを獲得し、生き続けることができます。それは良い結果であり、正の数値スコアを与えられるべきです。
-強化学習とシミュレーター(ゲーム)を使用することで、生き残りながらできるだけ多くのポイントを獲得するためのゲームプレイ方法を学ぶことができます。
+強化学習とシミュレーター(ゲーム)を使うことで、生き残り、できるだけ多くのポイントを獲得することを最大化するためのゲームのプレイ方法を学習できます。
-[](https://www.youtube.com/watch?v=lDq_en8RNOo)
+[](https://www.youtube.com/watch?v=lDq_en8RNOo)
-> 🎥 上の画像をクリックして、Dmitryが強化学習について話す様子を聞いてみましょう
+> 🎥 上の画像をクリックして、Dmitryの強化学習についての解説を聞いてください
-## [講義前のクイズ](https://ff-quizzes.netlify.app/en/ml/)
+## [事前講義クイズ](https://ff-quizzes.netlify.app/en/ml/)
## 前提条件とセットアップ
-このレッスンでは、Pythonでいくつかのコードを試してみます。このレッスンのJupyter Notebookコードを、コンピュータ上またはクラウド上で実行できる必要があります。
+このレッスンでは、Pythonでいくつかのコードを実験します。あなたのコンピューターかクラウドのどこかで、このレッスンのJupyter Notebookコードを実行できる必要があります。
-[レッスンノートブック](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb)を開き、このレッスンを進めながら構築してください。
+[レッスンのノートブック](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb)を開いて、このレッスンを進めてください。
-> **Note:** クラウドからこのコードを開く場合、ノートブックコードで使用される[`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py)ファイルも取得する必要があります。このファイルをノートブックと同じディレクトリに追加してください。
+> **注意:** クラウドからこのコードを開く場合、ノートブックコードで使用されている[`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py)ファイルも取得する必要があります。ノートブックと同じディレクトリに追加してください。
-## はじめに
+## イントロダクション
-このレッスンでは、ロシアの作曲家[セルゲイ・プロコフィエフ](https://en.wikipedia.org/wiki/Sergei_Prokofiev)による音楽童話「[ピーターと狼](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)」にインスパイアされた世界を探求します。**強化学習**を使用して、ピーターが環境を探索し、美味しいリンゴを集め、狼に遭遇しないようにします。
+このレッスンでは、ロシアの作曲家[セルゲイ・プロコフィエフ](https://en.wikipedia.org/wiki/Sergei_Prokofiev)による音楽童話に触発された[ピーターと狼](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)の世界を探検します。強化学習を用いて、ピーターが環境を探検し、美味しいリンゴを集め、狼に会わないようにします。
-**強化学習**(RL)は、エージェントがある環境で最適な行動を学ぶために多くの実験を行う学習技術です。この環境内のエージェントには、**報酬関数**によって定義された**目標**が必要です。
+強化学習(RL)は、多くの実験を行うことで、ある環境におけるエージェントの最適な行動を学習する手法です。この環境のエージェントには、報酬関数によって定義される目標があります。
## 環境
-簡単のために、ピーターの世界を`幅` x `高さ`のサイズの正方形のボードと考えます。以下のようなものです:
+単純化のために、ピーターの世界を `幅` x `高さ` の正方形の盤として考えましょう。このような感じです:
-
+
-このボードの各セルは以下のいずれかになります:
+この盤上の各セルは以下のいずれかです:
-* **地面**: ピーターや他の生物が歩ける場所。
-* **水**: 明らかに歩けない場所。
-* **木**または**草**: 休むことができる場所。
-* **リンゴ**: ピーターが見つけて喜ぶ食べ物。
-* **狼**: 危険で避けるべき存在。
+* 地面、ピーターや他の生き物が歩ける場所。
+* 水、もちろん歩けない場所。
+* 木や草、休憩できる場所。
+* リンゴ、ピーターが自分を養うために見つけたいもの。
+* 狼、危険で避けるべきもの。
-この環境で作業するためのコードを含むPythonモジュール[`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py)があります。このコードは概念を理解する上で重要ではないため、モジュールをインポートしてサンプルボードを作成します(コードブロック1):
+この環境で作業するコードは別のPythonモジュール、[`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py)にあります。概念理解には重要ではないため、このモジュールをインポートしてサンプル盤を作成します(コードブロック1):
```python
from rlboard import *
@@ -52,63 +52,63 @@ m.randomize(seed=13)
m.plot()
```
-このコードは上記のような環境の画像を出力するはずです。
+このコードは上記の環境に似た絵を表示するはずです。
-## 行動とポリシー
+## 行動と方策
-この例では、ピーターの目標はリンゴを見つけることであり、狼やその他の障害物を避けることです。そのため、リンゴを見つけるまで歩き回ることができます。
+この例でのピーターの目標は、狼や障害物を避けながらリンゴを見つけることです。つまり、リンゴを見つけるまで歩き回ることができます。
-したがって、任意の位置で以下の行動のいずれかを選択できます: 上、下、左、右。
+したがって、どの位置でも次の4つの行動のうちの一つを選べます:上、下、左、右。
-これらの行動を辞書として定義し、対応する座標変化のペアにマッピングします。例えば、右に移動する(`R`)はペア`(1,0)`に対応します。(コードブロック2):
+これらの行動は辞書として定義し、対応する座標変化のペアにマッピングします。例えば右に移動(`R`)はペア `(1,0)` に対応します。(コードブロック2)
```python
actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) }
action_idx = { a : i for i,a in enumerate(actions.keys()) }
```
-このシナリオの戦略と目標をまとめると以下の通りです:
+要約すると、このシナリオの戦略と目標は以下の通りです:
-- **戦略**: エージェント(ピーター)の戦略は、**ポリシー**と呼ばれる関数によって定義されます。ポリシーは任意の状態で行動を返します。この場合、問題の状態はプレイヤーの現在位置を含むボードによって表されます。
+- 戦略:エージェント(ピーター)の戦略はいわゆる方策によって定義されます。方策は任意の状態での行動を返す関数です。ここで問題の状態は、プレイヤーの現在位置を含んだ盤で表されます。
-- **目標**: 強化学習の目標は、問題を効率的に解決するための良いポリシーを最終的に学ぶことです。ただし、基準として最も簡単なポリシーである**ランダムウォーク**を考えます。
+- 目標:強化学習の目標は、問題を効率よく解く良い方策を最終的に学習することです。ただし基準として最も単純な方策であるランダムウォークを考えます。
## ランダムウォーク
-まず、ランダムウォーク戦略を実装して問題を解決してみましょう。ランダムウォークでは、許可された行動から次の行動をランダムに選択し、リンゴに到達するまで繰り返します(コードブロック3)。
+まずはランダムウォーク戦略を実装して問題を解きましょう。ランダムウォークでは、許可された行動の中から次の行動をランダムに選び、リンゴに到達するまで実行します(コードブロック3)。
-1. 以下のコードでランダムウォークを実装します:
+1. 以下のコードでランダムウォークを実装してください:
```python
def random_policy(m):
return random.choice(list(actions))
def walk(m,policy,start_position=None):
- n = 0 # number of steps
- # set initial position
+ n = 0 # ステップ数
+ # 初期位置を設定
if start_position:
m.human = start_position
else:
m.random_start()
while True:
if m.at() == Board.Cell.apple:
- return n # success!
+ return n # 成功!
if m.at() in [Board.Cell.wolf, Board.Cell.water]:
- return -1 # eaten by wolf or drowned
+ return -1 # オオカミに食べられたか溺れた
while True:
a = actions[policy(m)]
new_pos = m.move_pos(m.human,a)
if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water:
- m.move(a) # do the actual move
+ m.move(a) # 実際の移動を行う
break
n+=1
walk(m,random_policy)
```
- `walk`の呼び出しは、対応する経路の長さを返すはずです。これは実行ごとに異なる場合があります。
+ `walk` の呼び出しは、実行ごとに異なる場合がある対応パスの長さを返すはずです。
-1. ウォーク実験を複数回(例えば100回)実行し、結果の統計を出力します(コードブロック4):
+1. ウォーク実験を複数回(例: 100回)実行し、その結果の統計を出力してください(コードブロック4):
```python
def print_statistics(policy):
@@ -125,17 +125,17 @@ action_idx = { a : i for i,a in enumerate(actions.keys()) }
print_statistics(random_policy)
```
- 経路の平均長さは約30〜40ステップであることに注意してください。これは、最寄りのリンゴまでの平均距離が約5〜6ステップであることを考えるとかなり多いです。
+ パスの平均長さは30〜40歩前後で、最寄りのリンゴまでの平均距離5〜6歩と比較してかなり長いことに注意してください。
- また、ランダムウォーク中のピーターの動きを確認することもできます:
+ また、ピーターの動きをランダムウォーク中に見ることもできます:

## 報酬関数
-ポリシーをより賢くするためには、どの動きが他より「良い」のかを理解する必要があります。そのためには、目標を定義する必要があります。
+方策をより賢くするために、どの動きが「より良い」かを理解する必要があります。そのためには目標を定義します。
-目標は、各状態に対してスコア値を返す**報酬関数**によって定義できます。数値が高いほど報酬関数が良いことを意味します。(コードブロック5)
+目標は報酬関数で定義され、各状態に対してスコア値を返します。数値が高いほどより良い報酬となります。(コードブロック5)
```python
move_reward = -0.1
@@ -154,39 +154,115 @@ def reward(m,pos=None):
return move_reward
```
-報酬関数の興味深い点は、ほとんどの場合、*ゲーム終了時にのみ実質的な報酬が与えられる*ことです。つまり、アルゴリズムは最終的なポジティブな報酬につながる「良い」ステップを覚えてその重要性を高める必要があります。同様に、悪い結果につながるすべての動きは抑制されるべきです。
+報酬関数で興味深いのは、多くの場合、ゲームの最後にしか十分な報酬が与えられないことです。つまりアルゴリズムは最終的に正の報酬を得る「良い」ステップを覚えて重視し、逆に悪い結果を招く動きを抑制しなければなりません。
## Q学習
-ここで説明するアルゴリズムは**Q学習**と呼ばれます。このアルゴリズムでは、ポリシーは**Qテーブル**と呼ばれる関数(またはデータ構造)によって定義されます。これは、特定の状態での各行動の「良さ」を記録します。
+ここで議論するアルゴリズムはQ-Learningと呼ばれます。このアルゴリズムでは、方策はQ-Tableと呼ばれる関数(またはデータ構造)で定義されます。これは与えられた状態での各行動の「良さ」を記録します。
-Qテーブルと呼ばれる理由は、テーブルや多次元配列として表現するのが便利だからです。ボードの寸法が`幅` x `高さ`であるため、Qテーブルを形状`幅` x `高さ` x `len(actions)`のnumpy配列として表現できます。(コードブロック6)
+Q-Tableはしばしば表や多次元配列として表現されるためその名前が付いています。盤のサイズが `width` x `height` であるため、Q-Tableは形状 `width` x `height` x `len(actions)` のnumpy配列として表せます:(コードブロック6)
```python
Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions)
```
-Qテーブルのすべての値を等しい値(この場合は0.25)で初期化することに注意してください。これは「ランダムウォーク」ポリシーに対応します。すべての状態でのすべての動きが同じくらい良いということです。Qテーブルを`plot`関数に渡してボード上でテーブルを視覚化できます: `m.plot(Q)`。
+Q-Tableのすべての値を等しい値(ここでは0.25)で初期化しています。これは「ランダムウォーク」方策に対応し、各状態でのすべての動きが均等に良いことを意味します。Q-Tableを `plot` 関数に渡して盤上に可視化できます: `m.plot(Q)`。
-
+
-各セルの中央には、移動の推奨方向を示す「矢印」があります。すべての方向が等しいため、点が表示されます。
+各セルの中央に「矢印」があり、好ましい移動方向を示します。すべての方向が等しい場合は点が表示されます。
-次にシミュレーションを実行し、環境を探索し、Qテーブル値のより良い分布を学習します。これにより、リンゴへの道をはるかに速く見つけることができます。
+次にシミュレーションを実行し、環境を探検してQ-Tableの値の分布を改善し、リンゴへの経路をより速く見つけられるようにします。
-## Q学習の本質: ベルマン方程式
+## Q学習の本質:ベルマン方程式
-移動を開始すると、各行動には対応する報酬があります。つまり、理論的には最も高い即時報酬に基づいて次の行動を選択できます。しかし、ほとんどの状態では、移動がリンゴに到達するという目標を達成するわけではないため、どの方向が良いかをすぐに決定することはできません。
+動き始めると、それぞれの行動には即時の報酬があり、理論的には最高の即時報酬に基づいて次の行動を選べます。しかしほとんどの状態では、この動きだけではリンゴに到達できず、どの方向が良いか即座に決められません。
-> 即時の結果ではなく、シミュレーションの最後に得られる最終結果が重要であることを忘れないでください。
+> 大事なのは即時の結果ではなく、シミュレーションの終了時に得られる最終結果であることを覚えておいてください。
-この遅延報酬を考慮するために、**[動的計画法](https://en.wikipedia.org/wiki/Dynamic_programming)**の原則を使用する必要があります。これにより、問題を再帰的に考えることができます。
+遅延した報酬を考慮するために、[動的計画法](https://en.wikipedia.org/wiki/Dynamic_programming)の原理を用います。これにより問題を再帰的に考えることができます。
-現在の状態を*s*とし、次の状態*s'*に移動したいとします。このようにして、報酬関数によって定義された即時報酬*r(s,a)*を受け取り、さらに将来の報酬を得ることができます。Qテーブルが各行動の「魅力」を正確に反映していると仮定すると、状態*s'*では*Q(s',a')*の最大値に対応する行動*a'*を選択します。したがって、状態*s*で得られる可能性のある最良の将来の報酬は`max`
+今、状態 *s* にいて、次に状態 *s'* に移動するとします。このとき、報酬関数で定義された即時報酬 *r(s,a)* と将来の報酬を受け取ります。もしQ-Tableが各行動の「魅力度」を正しく反映していると仮定すると、状態 *s'* では最大値の *Q(s',a')* を持つ行動 *a* を選びます。つまり、状態 *s* で得られる可能な最高の将来報酬は `max`a'*Q(s',a')* となります(ここで最大は状態 *s'* のすべての可能な行動 *a'* にわたって計算)。
-## ポリシーの確認
+これにより状態 *s*、行動 *a* におけるQ-Tableの値を計算するベルマン方程式が得られます:
-Q-Tableは各状態における各アクションの「魅力」を示しているため、これを使って効率的なナビゲーションを定義するのは非常に簡単です。最も単純な場合、Q-Tableの値が最も高いアクションを選択します。(コードブロック9)
+
+
+ここで γ は割引率と呼ばれ、将来の報酬に対して現在の報酬をどの程度重視するかを決定します。
+
+## 学習アルゴリズム
+
+上記の式に基づき、学習アルゴリズムの擬似コードは以下の通りです:
+
+* すべての状態と行動で等しい値でQ-Table Qを初期化する
+* 学習率 α ← 1 に設定する
+* シミュレーションを多数回繰り返す
+ 1. ランダムな位置から開始する
+ 1. 繰り返す
+ 1. 状態 *s* で行動 *a* を選択する
+ 2. 行動を実行し新しい状態 *s'* に移動する
+ 3. ゲーム終了条件に達したか報酬が小さすぎる場合はシミュレーションを終了する
+ 4. 新しい状態で報酬 *r* を計算する
+ 5. ベルマン方程式にしたがってQ関数を更新する: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ maxa'Q(s',a'))*
+ 6. *s* ← *s'*
+ 7. 合計報酬を更新し、αを減少させる
+
+## 活用と探索
+
+上記のアルゴリズムでは、ステップ2.1でどのように行動を選ぶかは明記していません。もし行動をランダムに選ぶなら環境をランダムに探索し、頻繁に死ぬことや通常は行かない場所を探検することになります。別の方法は、既知のQ-Tableの値を活用(エクスプロイト)し、状態 *s* で最も高いQ-Table値の行動を選ぶことです。しかしこれでは他の状態を探索できず最適解に到達できない可能性があります。
+
+したがって、探索と活用のバランスが最善です。これはQ-Tableの値に比例した確率で行動を選択することで実現できます。はじめはQ-Tableの値がすべて同じなのでランダム選択となりますが、学習が進むにつれて最適経路を辿りつつもエージェントが時々未探索の経路を選べるようになります。
+
+## Python実装
+
+これで学習アルゴリズムの実装準備が整いました。まずQ-Tableの任意の数値を対応する行動の確率ベクトルに変換する関数が必要です。
+
+1. `probs()`関数を作成:
+
+ ```python
+ def probs(v,eps=1e-4):
+ v = v-v.min()+eps
+ v = v/v.sum()
+ return v
+ ```
+
+ 初期状態でベクトルの全成分が同じ場合に0除算を避けるために、元のベクトルにいくつかの `eps` を加えています。
+
+5000回の実験、すなわちエポックで学習アルゴリズムを実行してください:(コードブロック8)
+```python
+ for epoch in range(5000):
+
+ # 初期地点を選択する
+ m.random_start()
+
+ # 移動を開始する
+ n=0
+ cum_reward = 0
+ while True:
+ x,y = m.human
+ v = probs(Q[x,y])
+ a = random.choices(list(actions),weights=v)[0]
+ dpos = actions[a]
+ m.move(dpos,check_correctness=False) # プレイヤーがボードの外に移動することを許可し、それがエピソードの終了となる
+ r = reward(m)
+ cum_reward += r
+ if r==end_reward or cum_reward < -1000:
+ lpath.append(n)
+ break
+ alpha = np.exp(-n / 10e5)
+ gamma = 0.5
+ ai = action_idx[a]
+ Q[x,y,ai] = (1 - alpha) * Q[x,y,ai] + alpha * (r + gamma * Q[x+dpos[0], y+dpos[1]].max())
+ n+=1
+```
+
+このアルゴリズム実行後、Q-Tableは各ステップで異なる行動の魅力度を定義する値で更新されます。Q-Tableを視覚化するため、各セルに移動方向を示すベクトルをプロットできます。単純化のために矢印の代わりに小さな円を描きます。
+
+
+
+## 方策の検証
+
+Q-Tableは各状態での行動の「魅力度」を示すため、これを使って効率的なナビゲーションが簡単に定義できます。最も単純には、最も高いQ-Table値に対応する行動を選択します:(コードブロック9)
```python
def qpolicy_strict(m):
@@ -198,17 +274,18 @@ def qpolicy_strict(m):
walk(m,qpolicy_strict)
```
-> 上記のコードを何度か試してみると、時々「停止」してしまい、ノートブックのSTOPボタンを押して中断する必要があることに気付くかもしれません。これは、最適なQ-Valueの観点で2つの状態が互いに「指し示す」状況が発生する可能性があるためで、その場合、エージェントはその状態間を無限に移動し続けてしまいます。
+
+> 上記のコードを何度か試すと、時々「ハング」してしまい、ノートブックのSTOPボタンを押して中断しなければならないことに気づくかもしれません。これは、最適なQ値の観点で2つの状態がお互いを「指している」状況が起きる可能性があり、その場合エージェントがそれらの状態間を無限に行き来してしまうために起こります。
## 🚀チャレンジ
-> **タスク1:** `walk`関数を修正して、パスの最大長を特定のステップ数(例えば100)で制限し、上記のコードが時々この値を返す様子を観察してください。
+> **タスク1:** `walk`関数を修正して経路の最大長さを一定のステップ数(例えば100)に制限し、上記のコードが時々その値を返すのを確認してください。
-> **タスク2:** `walk`関数を修正して、以前に訪れた場所に戻らないようにしてください。これにより`walk`がループするのを防ぐことができますが、エージェントが脱出できない場所に「閉じ込められる」可能性は依然としてあります。
+> **タスク2:** `walk`関数を修正して、既に訪れた場所に戻らないようにしてください。これにより`walk`のループは防げますが、エージェントが脱出不能な場所に「閉じ込められる」可能性は依然として残ります。
## ナビゲーション
-より良いナビゲーションポリシーは、トレーニング中に使用したものです。これは、利用と探索を組み合わせたものです。このポリシーでは、Q-Tableの値に比例した確率で各アクションを選択します。この戦略では、エージェントがすでに探索した位置に戻る可能性はありますが、以下のコードからわかるように、目的地までの平均パスが非常に短くなります(`print_statistics`はシミュレーションを100回実行します):(コードブロック10)
+より良いナビゲーション方針は、トレーニング中に用いたものと同じで、活用と探索を組み合わせたものです。この方針では、Qテーブルの値に比例した確率で各アクションを選択します。この戦略でもエージェントがすでに探索した位置に戻ることがありますが、以下のコードのように、目的地への平均経路は非常に短くなります(`print_statistics`はシミュレーションを100回実行することに注意してください):(コードブロック 10)
```python
def qpolicy(m):
@@ -220,28 +297,32 @@ def qpolicy(m):
print_statistics(qpolicy)
```
-このコードを実行すると、以前よりもはるかに短い平均パス長が得られるはずです。3〜6の範囲内です。
+このコードを実行すると、平均経路長が以前よりかなり短くなり、3~6あたりの範囲になるはずです。
## 学習プロセスの調査
-前述の通り、学習プロセスは探索と問題空間の構造に関する知識の活用のバランスです。学習の結果(エージェントが目標への短いパスを見つける能力)が改善されたことがわかりますが、学習プロセス中の平均パス長の挙動を観察するのも興味深いです:
+述べたように、学習プロセスは探索と獲得した知識の活用のバランスです。学習の結果(エージェントが短い経路で目標に到達する能力)が向上したことが分かりましたが、学習過程で平均経路長がどのように変化するか観察するのも興味深いです:
+
+
-学習内容を以下のようにまとめることができます:
+学習内容は以下の通りまとめられます:
-- **平均パス長の増加**。最初は平均パス長が増加することが見られます。これは、環境について何も知らない場合、悪い状態(水や狼)に閉じ込められる可能性が高いためです。より多くを学び、この知識を使い始めると、環境をより長く探索できますが、まだリンゴの場所をよく知らない状態です。
+- 平均経路長の増加。最初は平均経路長が増えます。これは環境について何も知らない状態で、悪い状態(水やオオカミ)に捕まる可能性が高いためと考えられます。知識が増え使い始めると環境をより長く探索できますが、リンゴの場所はまだよく分かっていません。
-- **学習が進むにつれてパス長が減少**。十分に学習すると、エージェントが目標を達成するのが容易になり、パス長が減少し始めます。ただし、まだ探索を続けているため、最適なパスから外れて新しい選択肢を探索することがあり、パスが最適よりも長くなることがあります。
+- 学ぶにつれて経路長は短くなる。十分に学習できると、エージェントが目標を達成しやすくなり経路長が短くなります。ただし探索も続けるため、最適経路から外れて新しい選択肢を探しに行くことがあり、経路が最適より長くなってしまいます。
-- **突然のパス長の増加**。グラフで観察されるもう一つの特徴は、ある時点でパス長が突然増加することです。これはプロセスの確率的な性質を示しており、Q-Tableの係数が新しい値で上書きされることで「損なわれる」可能性があることを意味します。これを最小化するには、学習率を減少させる(例えば、トレーニングの終盤ではQ-Tableの値を小さな値でのみ調整する)ことが理想的です。
+- 経路長の突然の増加。このグラフではある時点で経路長が突然増えています。これはプロセスの確率的な性質を示しており、新しい値でQテーブルの係数を上書きして「壊してしまう」ことがあるためです。これを理想的には学習率を下げて抑えます(例えば、学習の最後の方ではQテーブルの値を少しずつしか調整しません)。
-全体として、学習プロセスの成功と質は、学習率、学習率の減衰、割引率などのパラメータに大きく依存することを覚えておくことが重要です。これらは**ハイパーパラメータ**と呼ばれ、トレーニング中に最適化する**パラメータ**(例えば、Q-Tableの係数)とは区別されます。最適なハイパーパラメータ値を見つけるプロセスは**ハイパーパラメータ最適化**と呼ばれ、別のトピックとして扱う価値があります。
+全体として、学習率、学習率減衰、割引率などのパラメータが学習の成功と品質に大きく影響することを忘れないでください。これらはトレーニング中に最適化するパラメータ(例えばQテーブルの係数)と区別するためにハイパーパラメータと呼ばれます。最適なハイパーパラメータを見つける過程はハイパーパラメータ最適化と呼ばれ、別のトピックに値します。
-## [講義後のクイズ](https://ff-quizzes.netlify.app/en/ml/)
+## [講義後クイズ](https://ff-quizzes.netlify.app/en/ml/)
## 課題
[より現実的な世界](assignment.md)
---
-**免責事項**:
-この文書はAI翻訳サービス[Co-op Translator](https://github.com/Azure/co-op-translator)を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解釈について、当社は責任を負いません。
\ No newline at end of file
+
+**免責事項**:
+本書類は AI 翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期していますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。原文の原語版が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用により生じたいかなる誤解や解釈違いについても、当方は責任を負いかねます。
+
\ No newline at end of file
diff --git a/translations/ja/8-Reinforcement/2-Gym/README.md b/translations/ja/8-Reinforcement/2-Gym/README.md
index 6fac61c5b..4013e03df 100644
--- a/translations/ja/8-Reinforcement/2-Gym/README.md
+++ b/translations/ja/8-Reinforcement/2-Gym/README.md
@@ -1,14 +1,34 @@
+# CartPole スケーティング
+
+前回のレッスンで解いてきた問題は、おもちゃの問題のように見え、現実のシナリオにはあまり適用できないように思えるかもしれません。しかし、多くの実世界の問題もこのシナリオを共有しています。チェスや囲碁も含まれます。同様なのは、与えられたルールのあるボードと離散的な状態があるためです。
+
+## [プレ講義クイズ](https://ff-quizzes.netlify.app/en/ml/)
+
+## はじめに
+
+このレッスンでは、Qラーニングの同じ原則を連続状態、すなわち1つ以上の実数で表される状態に適用します。取り扱うのは以下の問題です:
+
+> 問題: ピーターがオオカミから逃げるには、より速く動ける必要があります。ピーターがQラーニングを使ってスケートの仕方、特にバランスを保つ方法を学ぶ様子を見ていきましょう。
+
+
+
+> ピーターと友達が創意工夫してオオカミから逃げる!画像提供:[Jen Looper](https://twitter.com/jenlooper)
+
+バランスを取る単純化されたバージョンとして、**CartPole** 問題を使います。カートポールの世界では、水平方向に左右に動けるスライダーがあり、その上に垂直な棒をバランスさせることがゴールです。
+
+
+
## 前提条件
-このレッスンでは、**OpenAI Gym**というライブラリを使用して、さまざまな**環境**をシミュレーションします。このレッスンのコードはローカル環境(例: Visual Studio Code)で実行することができ、その場合シミュレーションは新しいウィンドウで開きます。オンラインでコードを実行する場合は、[こちら](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7)に記載されているように、コードにいくつかの調整が必要になる場合があります。
+このレッスンでは、**OpenAI Gym** と呼ばれるライブラリを使い、異なる環境をシミュレートします。コードをローカル(例:Visual Studio Code)で実行する場合、シミュレーションは新しいウィンドウで開きます。オンラインで実行する場合は、[こちら](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7)の説明に従いコードを一部調整する必要があるかもしれません。
## OpenAI Gym
-前回のレッスンでは、ゲームのルールと状態が自分で定義した`Board`クラスによって提供されていました。今回は、バランスを取るポールの物理をシミュレーションする特別な**シミュレーション環境**を使用します。強化学習アルゴリズムをトレーニングするための最も人気のあるシミュレーション環境の1つが、[Gym](https://gym.openai.com/)と呼ばれるもので、[OpenAI](https://openai.com/)によって管理されています。このGymを使用することで、カートポールのシミュレーションからアタリゲームまで、さまざまな**環境**を作成できます。
+前回のレッスンでは、ゲームのルールと状態は自分で定義した `Board` クラスが担当していました。ここでは、バランス棒の物理をシミュレートする特別なシミュレーション環境を使います。強化学習アルゴリズムの訓練用シミュレーション環境で最も人気があるものの一つが[Gym](https://gym.openai.com/)で、[OpenAI](https://openai.com/)が管理しています。このGymを使うことで、カートポールシミュレーションからアタリのゲームまで様々な環境を作成できます。
-> **Note**: OpenAI Gymで利用可能な他の環境は[こちら](https://gym.openai.com/envs/#classic_control)で確認できます。
+> 注意: OpenAI Gymで利用可能な他の環境は[こちら](https://gym.openai.com/envs/#classic_control)で確認できます。
-まず、Gymをインストールし、必要なライブラリをインポートしましょう(コードブロック1):
+まず、gymをインストールし必要なライブラリをインポートしましょう(コードブロック1):
```python
import sys
@@ -20,15 +40,15 @@ import numpy as np
import random
```
-## 演習 - カートポール環境を初期化する
+## 演習 - カートポール環境の初期化
-カートポールのバランス問題に取り組むには、対応する環境を初期化する必要があります。各環境には以下が関連付けられています:
+カートポール問題に取り組むには、対応する環境を初期化する必要があります。各環境には以下が関連しています:
-- **観測空間**: 環境から受け取る情報の構造を定義します。カートポール問題では、ポールの位置、速度、その他の値を受け取ります。
+- 観測空間: 環境から受け取る情報の構造を定義します。カートポール問題では、棒の位置、速度などの値です。
-- **行動空間**: 可能な行動を定義します。この場合、行動空間は離散的で、**左**と**右**の2つの行動で構成されています。(コードブロック2)
+- 行動空間: 可能な行動を定義します。我々の場合、行動空間は離散的で、左か右の2つの行動からなります。(コードブロック2)
-1. 初期化するには、以下のコードを入力してください:
+1. 初期化するには、以下のコードを入力してください:
```python
env = gym.make("CartPole-v1")
@@ -37,11 +57,11 @@ import random
print(env.action_space.sample())
```
-環境がどのように動作するかを確認するために、100ステップの短いシミュレーションを実行してみましょう。各ステップで、`action_space`からランダムに選択した行動を提供します。
+環境がどう動くかを見るために、100ステップの短いシミュレーションをします。各ステップで実行する行動を1つ選択します。このシミュレーションでは `action_space` からランダムに選びます。
-1. 以下のコードを実行して、結果を確認してください。
+1. 下のコードを実行して結果を確認してください。
- ✅ このコードはローカルのPythonインストールで実行することを推奨します!(コードブロック3)
+ ✅ このコードはローカルのPython環境で実行するのが推奨です! (コードブロック3)
```python
env.reset()
@@ -52,11 +72,11 @@ import random
env.close()
```
- 以下のような画像が表示されるはずです:
+ 画面はこの画像に似たものが見えるはずです:
- 
+ 
-1. シミュレーション中に、行動を決定するために観測値を取得する必要があります。実際には、`step`関数は現在の観測値、報酬関数、およびシミュレーションを続行するかどうかを示す終了フラグを返します。(コードブロック4)
+1. シミュレーション中、どのように行動するか決めるため観測情報を得る必要があります。`step`関数は現在の観測値、報酬値、そして続けるべきか示す`done`フラグを返します:(コードブロック4)
```python
env.reset()
@@ -69,7 +89,7 @@ import random
env.close()
```
- ノートブックの出力で以下のような結果が表示されるはずです:
+ ノートブックの出力には以下のようなものが表示されるでしょう:
```text
[ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0
@@ -82,43 +102,43 @@ import random
[ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0
```
- シミュレーションの各ステップで返される観測ベクトルには以下の値が含まれています:
+ シミュレーション各ステップで返される観測ベクトルには次の値が含まれます:
- カートの位置
- カートの速度
- - ポールの角度
- - ポールの回転速度
+ - 棒の角度
+ - 棒の回転速度
-1. これらの数値の最小値と最大値を取得してください。(コードブロック5)
+1. それらの値の最小・最大値を取得してみましょう:(コードブロック5)
```python
print(env.observation_space.low)
print(env.observation_space.high)
```
- また、各シミュレーションステップでの報酬値が常に1であることに気付くかもしれません。これは、目標ができるだけ長く生き残ること、つまりポールをできるだけ垂直に保つことだからです。
+ シミュレーション各ステップの報酬値は常に1であることに気づくでしょう。これは目標ができるだけ長く生存し、棒を垂直に近い状態で保ち続けることだからです。
- ✅ 実際、カートポールのシミュレーションは、100回連続の試行で平均報酬が195に達した場合に解決されたと見なされます。
+ ✅ 実際、CartPoleシミュレーションは連続して100回の試行で平均報酬が195以上になれば解決済みとされます。
## 状態の離散化
-Q-Learningでは、各状態で何をすべきかを定義するQ-テーブルを構築する必要があります。これを行うためには、状態を**離散的**にする必要があります。つまり、有限の離散値を含む必要があります。そのため、観測値を**離散化**し、有限の状態セットにマッピングする必要があります。
+Qラーニングでは、状態ごとに何をすべきかを定義したQテーブルを作る必要があります。そのためには、状態を離散的に、つまり有限の離散値の数を持つようにしなければなりません。そこで観測を有限の状態集合に離散化してマッピングします。
-これを行う方法はいくつかあります:
+いくつか方法があります:
-- **ビンに分割する**: 特定の値の範囲がわかっている場合、その範囲をいくつかの**ビン**に分割し、その値を属するビン番号に置き換えることができます。これはnumpyの[`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html)メソッドを使用して行うことができます。この場合、選択したビンの数に応じて状態サイズを正確に把握できます。
+- ビン分割:特定値の区間が分かっていれば、その区間をいくつかのビンに分割し、値を属するビン番号で置き換えます。これは numpy の [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) メソッドを使って行うことができます。これにより状態サイズは正確にわかります。なぜなら選んだビンの数に依存するからです。
+
+✅ 線形補間を使って値をある有限区間(例えば -20 から 20)におさめ、その後整数に丸める方法もあります。これにより状態のサイズは少し制御しづらくなります。特に入力値の範囲が正確にわからない場合に顕著です。例として私たちの場合、4つの値のうち2つは上下限がなく、無限の状態数が生じる可能性があります。
-✅ 線形補間を使用して値を有限の範囲(例えば、-20から20)に持ってきて、丸めることで整数に変換することができます。この方法では、状態サイズを完全に制御することはできませんが、特に入力値の正確な範囲がわからない場合に便利です。例えば、この場合、4つの値のうち2つは値の上限/下限が定義されていないため、無限の状態数になる可能性があります。
+私たちの例では後者の方法を採用します。のちに気づくと思いますが、上限や下限が不定でも値はめったに一定の有限区間外に出ないため、極端な値の状態は稀です。
-この例では、2番目の方法を使用します。後で気付くかもしれませんが、上限/下限が定義されていないにもかかわらず、それらの値が特定の有限範囲外になることはめったにありません。そのため、極端な値を持つ状態は非常にまれです。
-
-1. 以下は、モデルからの観測値を受け取り、4つの整数値のタプルを生成する関数です。(コードブロック6)
+1. 観測から4つの整数値のタプルを返す関数はこちらです:(コードブロック6)
```python
def discretize(x):
return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int))
```
-1. ビンを使用した別の離散化方法も試してみましょう。(コードブロック7)
+1. もう一つビン分割を使った離散化方法も試してみましょう:(コードブロック7)
```python
def create_bins(i,num):
@@ -126,17 +146,17 @@ Q-Learningでは、各状態で何をすべきかを定義するQ-テーブル
print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10))
- ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter
- nbins = [20,20,10,10] # number of bins for each parameter
+ ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # 各パラメータの値の区間
+ nbins = [20,20,10,10] # 各パラメータのビンの数
bins = [create_bins(ints[i],nbins[i]) for i in range(4)]
def discretize_bins(x):
return tuple(np.digitize(x[i],bins[i]) for i in range(4))
```
-1. 短いシミュレーションを実行し、これらの離散化された環境値を観察してみましょう。`discretize`と`discretize_bins`の両方を試して、違いがあるかどうか確認してください。
+1. さて短いシミュレーションを実行し、この離散化された環境値を観察しましょう。`discretize` と `discretize_bins` の両方を試し、違いを見てみても構いません。
- ✅ `discretize_bins`はビン番号を返しますが、これは0ベースです。そのため、入力変数の値が0付近の場合、範囲の中央(10)の番号を返します。一方、`discretize`では出力値の範囲を気にせず、負の値を許容しているため、状態値はシフトされず、0は0に対応します。(コードブロック8)
+ ✅ discretize_bins はビン番号(0から始まる)を返します。0近辺の入力値には区間の中央付近の番号(10)を返します。discretizeは出力値の範囲を気にせず負の値も許すため状態値はシフトされておらず、0 は 0に対応します。(コードブロック8)
```python
env.reset()
@@ -150,15 +170,15 @@ Q-Learningでは、各状態で何をすべきかを定義するQ-テーブル
env.close()
```
- ✅ 環境の実行を確認したい場合は、`env.render`で始まる行のコメントを解除してください。そうでない場合は、バックグラウンドで実行することができ、これにより高速化されます。この「非表示」実行をQ-Learningプロセス中に使用します。
+ ✅ 環境の動作を見たい場合は env.render で始まる行のコメントを外してください。そうでなければ背景で実行すれば速いです。Qラーニング過程ではこの「非表示」実行を使います。
-## Q-テーブルの構造
+## Qテーブルの構造
-前回のレッスンでは、状態は0から8までの単純な数字のペアであり、そのためQ-テーブルを形状が8x8x2のnumpyテンソルで表現するのが便利でした。ビンによる離散化を使用する場合、状態ベクトルのサイズも既知であるため、同じアプローチを使用して状態を形状が20x20x10x10x2の配列で表現することができます(ここで2は行動空間の次元であり、最初の次元は観測空間内の各パラメータに使用するビンの数に対応します)。
+前回のレッスンでは状態が0〜8の単純な数字の組だったので、Qテーブルは8x8x2のnumpyテンソルで表せました。ビン分割離散化を使う場合も状態ベクトルのサイズは既知なので、同じやり方で状態を20x20x10x10x2の配列で表せます(ここで2は行動空間の次元、最初の4つは観測空間パラメータごとの選択したビンの数です)。
-ただし、観測空間の正確な次元がわからない場合があります。`discretize`関数の場合、元の値の一部が制限されていないため、状態が特定の制限内に留まることを保証することはできません。そのため、少し異なるアプローチを使用し、Q-テーブルを辞書で表現します。
+しかし観測空間の正確なサイズが不明なこともあります。`discretize` 関数の場合、状態が一定範囲に収まる保証はなく、元の値の一部に制約がありません。そこで少し違う方法として、Qテーブルを辞書で表現します。
-1. ペア*(state,action)*を辞書のキーとして使用し、その値がQ-テーブルのエントリ値に対応します。(コードブロック9)
+1. *(状態, 行動)* のペアを辞書のキーにし、値がQテーブルのエントリ値となるようにします。(コードブロック9)
```python
Q = {}
@@ -168,38 +188,38 @@ Q-Learningでは、各状態で何をすべきかを定義するQ-テーブル
return [Q.get((state,a),0) for a in actions]
```
- ここでは、`qvalues()`という関数も定義しており、指定された状態に対応するすべての可能な行動に対するQ-テーブル値のリストを返します。Q-テーブルにエントリが存在しない場合、デフォルト値として0を返します。
+ ここでは `qvalues()` 関数も定義しており、指定状態の全可能な行動に対応するQテーブルの値リストを返します。もしエントリがなければ0を返します。
-## Q-Learningを始めましょう
+## Qラーニングを始めよう
-さて、ピーターにバランスを取る方法を教える準備が整いました!
+さあ、ピーターにバランスを教えます!
-1. まず、いくつかのハイパーパラメータを設定しましょう。(コードブロック10)
+1. まずいくつかのハイパーパラメータを決めましょう:(コードブロック10)
```python
- # hyperparameters
+ # ハイパーパラメータ
alpha = 0.3
gamma = 0.9
epsilon = 0.90
```
- ここで、`alpha`は**学習率**であり、各ステップでQ-テーブルの現在の値をどの程度調整するべきかを定義します。前回のレッスンでは1から始め、トレーニング中に`alpha`を低い値に減少させました。この例では簡単のために一定に保ちますが、後で`alpha`値を調整して実験することができます。
-
- `gamma`は**割引率**であり、現在の報酬よりも将来の報酬をどの程度優先するべきかを示します。
+ ここで、`alpha` は学習率で、各ステップでQテーブルの値をどれだけ調整するかを決めます。前回は1から始め、訓練中に下げていきました。この例では単純さのために一定にしてありますが、後で調整してみてもいいです。
- `epsilon`は**探索/活用率**であり、探索を優先するか活用を優先するかを決定します。このアルゴリズムでは、`epsilon`の割合で次の行動をQ-テーブル値に従って選択し、残りの割合でランダムな行動を実行します。これにより、これまで見たことのない探索空間の領域を探索することができます。
+ `gamma` は割引率で、将来の報酬をどれだけ重視するかを示します。
- ✅ バランスを取るという観点では、ランダムな行動(探索)を選択することは、間違った方向へのランダムなパンチのようなものであり、ポールはその「ミス」からバランスを回復する方法を学ぶ必要があります。
+ `epsilon` は探索/活用の係数で、探索と活用のどちらを優先するか決めます。アルゴリズムでは `epsilon` の割合でQテーブルに基づく行動を選び、残りはランダム行動を実行します。これにより未探索の領域も探索できます。
-### アルゴリズムを改善する
+ ✅ バランスの観点ではランダム行動(探索)は不適切な方向への偶発的な衝撃であり、棒はこれらの「ミス」からバランスを取ることを学習します。
-前回のレッスンからアルゴリズムを2つ改善することができます:
+### アルゴリズムの改善
-- **平均累積報酬を計算する**: 複数のシミュレーションにわたって平均累積報酬を計算します。5000回のイテレーションごとに進捗を表示し、その期間の平均累積報酬を計算します。これにより、195ポイント以上を獲得した場合、問題が解決されたと見なすことができます。
+以前のレッスンから2つの改善が可能です:
-- **最大平均累積結果を計算する**: `Qmax`を計算し、その結果に対応するQ-テーブルを保存します。トレーニングを実行すると、平均累積結果が時々低下し始めることに気付くでしょう。この場合、状況を悪化させる値でQ-テーブルの既に学習済みの値を「破壊」する可能性があります。
+- 累積報酬の平均を計算し、複数のシミュレーションの間隔ごとに進捗を5000イテレーションごとに出力します。この期間の累積報酬の平均を出します。これにより195ポイント以上が得られれば問題解決と考えられます。
+
+- 最大平均累積結果 `Qmax` を計算し、その結果に対応するQテーブルを保存します。学習中に平均値が下がり始めることがありますが、最高モデルの値を保持しておきたいからです。
-1. 各シミュレーションで累積報酬を`rewards`ベクトルに収集し、後でプロットします。(コードブロック11)
+1. シミュレーションごとの累積報酬を `rewards` ベクターに集め、後でプロットします。(コードブロック11)
```python
def probs(v,eps=1e-4):
@@ -214,15 +234,15 @@ Q-Learningでは、各状態で何をすべきかを定義するQ-テーブル
obs = env.reset()
done = False
cum_reward=0
- # == do the simulation ==
+ # == シミュレーションを行う ==
while not done:
s = discretize(obs)
if random.random() Qmax:
@@ -240,25 +260,25 @@ Q-Learningでは、各状態で何をすべきかを定義するQ-テーブル
cum_rewards=[]
```
-これらの結果から以下のことがわかります:
+これら結果から得られること:
-- **目標に近い**: 100回以上の連続したシミュレーションで195の累積報酬を達成する目標に非常に近づいているか、実際に達成している可能性があります。たとえ小さい数値を得たとしても、5000回の実行で平均化しているため、正式な基準では100回の実行のみが必要です。
+- 目標に近づいている。連続100回以上の試行で195の累積報酬を達成しつつあるか、既に達成している可能性もあります。小さい値もありえますが、5000試行に対する平均なので、公的な基準の100回の意味はまだ完全には反映されていません。
+
+- 報酬が下がり始めることも。報酬が下がることは、既に学習したQテーブルの値を悪化させる値で上書きしてしまっている可能性を示します。
-- **報酬が低下し始める**: 時々報酬が低下し始めることがあります。これは、状況を悪化させる値でQ-テーブルの既に学習済みの値を「破壊」する可能性があることを意味します。
+この変化は学習の進行をグラフにするとより明確に分かります。
-この観察は、トレーニングの進捗をプロットするとより明確に見えます。
+## 学習進行のグラフ化
-## トレーニング進捗のプロット
-
-トレーニング中に、各イテレーションで累積報酬値を`rewards`ベクトルに収集しました。以下は、イテレーション番号に対してプロットした結果です:
+学習中、各イテレーションで累積報酬を `rewards` ベクターに記録しました。イテレーション番号に対してプロットするとこうなります:
```python
plt.plot(rewards)
```
-
+
-このグラフからは何も判断できません。これは、確率的なトレーニングプロセスの性質上、トレーニングセッションの長さが大きく異なるためです。このグラフをより理解しやすくするために、例えば100回の実験にわたって**移動平均**を計算します。これを`np.convolve`を使用して便利に行うことができます。(コードブロック12)
+このグラフからは何も読み取れません。学習の確率的な性質により学習セッションの長さが大きく変動するためです。そこで実験を連続100回分の移動平均をとると意味がわかりやすくなります。これは `np.convolve` を使うと便利です:(コードブロック12)
```python
def running_average(x,window):
@@ -267,21 +287,24 @@ def running_average(x,window):
plt.plot(running_average(rewards,100))
```
-
+
+
+## ハイパーパラメータの変化
+
+学習を安定させるためには、訓練中にハイパーパラメータを調整すると良いです。特に:
+
+- 学習率 `alpha` は初期に1に近い値を与え、その後徐々に減らしていきます。時間と共にQテーブル内には良い確率値が定まり、微調整をするべきであり、新しい値で完全に上書きすべきではありません。
-## ハイパーパラメータの調整
+- イプシロンを増加させる。初期は低い値で、徐々に1に近づけていくことで探索を減らし活用を増やすのが理にかなっています。
-学習をより安定させるために、トレーニング中にいくつかのハイパーパラメータを調整することが理にかなっています。特に:
+> **課題1**: ハイパーパラメータをいじって、より高い累積報酬を目指そう。195を超えられますか?
-- **学習率**`alpha`については、1に近い値から始め、その後パラメータを徐々に減少させることができます。時間が経つにつれて、Q-テーブルに良い確率値が得られるようになり、それらを完全に上書きするのではなく、わずかに調整するべきです。
-- **epsilonを増加させる**: `epsilon`を徐々に増加させ、探索を減らし、活用を増やすことができます。低い値の`epsilon`から始め、ほぼ1に近づけるのが理にかなっているでしょう。
-> **タスク 1**: ハイパーパラメータの値を調整して、より高い累積報酬を得られるか試してみましょう。195を超えていますか?
-> **タスク 2**: 問題を正式に解決するには、100回連続の実行で平均報酬195を達成する必要があります。トレーニング中にこれを測定し、問題を正式に解決したことを確認してください!
+> **タスク 2**: 問題を正式に解決するには、100回連続の実行で195の平均報酬を得る必要があります。トレーニング中にこれを測定し、問題が正式に解決されたことを確認してください!
-## 結果を実際に確認する
+## 結果を実際に見る
-トレーニングされたモデルがどのように動作するかを実際に見るのは興味深いでしょう。同じ行動選択戦略をトレーニング中と同様に使用し、Q-Tableの確率分布に従ってサンプリングしてシミュレーションを実行してみましょう: (コードブロック 13)
+トレーニングされたモデルがどのように動作するかを実際に見るのは興味深いでしょう。シミュレーションを実行し、トレーニング中と同じ行動選択戦略、つまりQテーブルの確率分布に従ってサンプリングする方法を試してみましょう:(コードブロック 13)
```python
obs = env.reset()
@@ -295,30 +318,32 @@ while not done:
env.close()
```
-以下のような結果が表示されるはずです:
+このような結果が得られるはずです:
-
+
---
## 🚀チャレンジ
-> **タスク 3**: ここでは、Q-Tableの最終版を使用していましたが、これが最良のものとは限りません。最もパフォーマンスの良いQ-Tableを`Qbest`変数に保存していることを思い出してください!`Qbest`を`Q`にコピーして、最良のQ-Tableを使用した場合の違いを確認してみてください。
+> **タスク 3**: ここでは最終版のQテーブルを使用しましたが、それが最良とは限りません。最も成績の良いQテーブルを `Qbest` 変数に保存していることを覚えておいてください! `Qbest` を `Q` にコピーして同じ例を試し、違いが分かるか確かめてみましょう。
-> **タスク 4**: ここでは各ステップで最良の行動を選択するのではなく、対応する確率分布に基づいてサンプリングしていました。Q-Tableの値が最も高い行動を常に選択する方が理にかなっているでしょうか?これは`np.argmax`関数を使用して、Q-Table値が最も高い行動番号を見つけることで実現できます。この戦略を実装して、バランスが改善されるかどうか確認してください。
+> **タスク 4**: ここでは各ステップで最良の行動を選択していませんでしたが、対応する確率分布でサンプリングしていました。常にQテーブルの値が最も高い最良の行動だけを選ぶ方が理にかなっているでしょうか? `np.argmax` 関数を使って最も高いQテーブルの値に対応する行動番号を見つけることでこれを実装できます。この戦略を実装し、バランスの改善が見られるか試してみてください。
-## [講義後のクイズ](https://ff-quizzes.netlify.app/en/ml/)
+## [講義後クイズ](https://ff-quizzes.netlify.app/en/ml/)
## 課題
-[マウンテンカーをトレーニングする](assignment.md)
+[マウンテンカーを訓練する](assignment.md)
## 結論
-私たちは、ゲームの望ましい状態を定義する報酬関数を提供し、探索空間を賢く探索する機会を与えることで、エージェントをトレーニングして良い結果を達成する方法を学びました。Q-Learningアルゴリズムを離散環境と連続環境のケースで適用し、離散的な行動を使用して成功を収めました。
+我々は、望ましいゲーム状態を定義する報酬関数を提供し、探索空間を知的に探査する機会を与えるだけで、エージェントをうまく訓練する方法を学びました。Qラーニングアルゴリズムを離散および連続環境のケースに成功裏に適用しましたが、行動は離散的でした。
-行動状態も連続的であり、観測空間がより複雑である場合、例えばAtariゲーム画面の画像のような状況を研究することも重要です。そのような問題では、良い結果を達成するためにニューラルネットワークのようなより強力な機械学習技術を使用する必要があることがよくあります。これらのより高度なトピックは、今後のより高度なAIコースのテーマとなります。
+行動状態も連続的で、観測空間がAtariゲーム画面の画像のようにずっと複雑な状況も学ぶことが重要です。そのような問題では、良好な結果を得るためにニューラルネットワークのようなより強力な機械学習技術を使う必要があることが多いです。これらのより高度なトピックは、今後のより高度なAIコースの主題です。
---
-**免責事項**:
-この文書は、AI翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な表現が含まれる可能性があります。元の言語で記載された原文を公式な情報源としてご参照ください。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用に起因する誤解や誤認について、当社は一切の責任を負いません。
\ No newline at end of file
+
+**免責事項**:
+本書類は AI 翻訳サービス [Co-op Translator](https://github.com/Azure/co-op-translator) を使用して翻訳されています。正確性を期していますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。原文の原語版が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用により生じたいかなる誤解や解釈違いについても、当方は責任を負いかねます。
+
\ No newline at end of file
diff --git a/translations/ko/.co-op-translator.json b/translations/ko/.co-op-translator.json
index 13400f6c8..d268ebb75 100644
--- a/translations/ko/.co-op-translator.json
+++ b/translations/ko/.co-op-translator.json
@@ -24,8 +24,8 @@
"language_code": "ko"
},
"1-Introduction/3-fairness/README.md": {
- "original_hash": "9a6b702d1437c0467e3c5c28d763dac2",
- "translation_date": "2025-09-05T10:47:40+00:00",
+ "original_hash": "0f00d72169a0d37eecfd16d71e01700a",
+ "translation_date": "2026-07-14T04:57:14+00:00",
"source_file": "1-Introduction/3-fairness/README.md",
"language_code": "ko"
},
@@ -54,8 +54,8 @@
"language_code": "ko"
},
"2-Regression/1-Tools/README.md": {
- "original_hash": "fa81d226c71d5af7a2cade31c1c92b88",
- "translation_date": "2025-09-05T10:41:04+00:00",
+ "original_hash": "0b8635427b582d03ea4ab7089b93e505",
+ "translation_date": "2026-07-14T04:52:58+00:00",
"source_file": "2-Regression/1-Tools/README.md",
"language_code": "ko"
},
@@ -72,8 +72,8 @@
"language_code": "ko"
},
"2-Regression/2-Data/README.md": {
- "original_hash": "7c077988328ebfe33b24d07945f16eca",
- "translation_date": "2025-09-05T10:41:52+00:00",
+ "original_hash": "a58b2c4d16c6b122643391745ac15af6",
+ "translation_date": "2026-07-14T04:54:03+00:00",
"source_file": "2-Regression/2-Data/README.md",
"language_code": "ko"
},
@@ -89,6 +89,12 @@
"source_file": "2-Regression/2-Data/solution/Julia/README.md",
"language_code": "ko"
},
+ "2-Regression/2-Data/solution/notebook.ipynb": {
+ "original_hash": "96b95f8cf473481f2f371de8156f1571",
+ "translation_date": "2026-07-14T04:38:17+00:00",
+ "source_file": "2-Regression/2-Data/solution/notebook.ipynb",
+ "language_code": "ko"
+ },
"2-Regression/3-Linear/README.md": {
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T20:40:54+00:00",
@@ -457,7 +463,7 @@
},
"8-Reinforcement/1-QLearning/README.md": {
"original_hash": "911efd5e595089000cb3c16fce1beab8",
- "translation_date": "2025-09-05T10:53:41+00:00",
+ "translation_date": "2026-07-14T04:55:12+00:00",
"source_file": "8-Reinforcement/1-QLearning/README.md",
"language_code": "ko"
},
@@ -481,7 +487,7 @@
},
"8-Reinforcement/2-Gym/README.md": {
"original_hash": "107d5bb29da8a562e7ae72262d251a75",
- "translation_date": "2025-09-05T10:54:20+00:00",
+ "translation_date": "2026-07-14T04:56:18+00:00",
"source_file": "8-Reinforcement/2-Gym/README.md",
"language_code": "ko"
},
@@ -581,6 +587,19 @@
"source_file": "TROUBLESHOOTING.md",
"language_code": "ko"
},
+ "__translation_failures__": {
+ "sketchnotes/LICENSE.md": {
+ "original_hash": "fba3b94d88bfb9b81369b869a1e9a20f",
+ "source_file": "sketchnotes/LICENSE.md",
+ "language_code": "ko",
+ "failure_date": "2026-07-14T04:52:02+00:00",
+ "status": "failed",
+ "error_type": "TranslationIncompleteError",
+ "error_message": "Markdown translation remained incomplete for chunk 1.1.1 of 'LICENSE.md', and the chunk could not be split further.",
+ "translator_version": "0.20.0",
+ "failure_policy_version": 1
+ }
+ },
"docs/_sidebar.md": {
"original_hash": "68dd06c685f6ce840e0acfa313352e7c",
"translation_date": "2025-09-03T23:13:49+00:00",
diff --git a/translations/ko/1-Introduction/3-fairness/README.md b/translations/ko/1-Introduction/3-fairness/README.md
index a677d6917..0e4be41ff 100644
--- a/translations/ko/1-Introduction/3-fairness/README.md
+++ b/translations/ko/1-Introduction/3-fairness/README.md
@@ -1,155 +1,159 @@
-# 책임 있는 AI를 활용한 머신 러닝 솔루션 구축
-
-
-> 스케치노트: [Tomomi Imura](https://www.twitter.com/girlie_mac)
+# 책임 있는 AI로 머신러닝 솔루션 구축하기
+
+
+> 스케치노트 작성자: [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [강의 전 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
-
+
## 소개
-이 커리큘럼에서는 머신 러닝이 우리의 일상생활에 어떤 영향을 미치고 있는지 알아보기 시작합니다. 현재도 시스템과 모델은 의료 진단, 대출 승인, 사기 탐지와 같은 일상적인 의사 결정 작업에 관여하고 있습니다. 따라서 이러한 모델이 신뢰할 수 있는 결과를 제공하기 위해 잘 작동하는 것이 중요합니다. 모든 소프트웨어 애플리케이션과 마찬가지로, AI 시스템은 기대에 미치지 못하거나 바람직하지 않은 결과를 초래할 수 있습니다. 그렇기 때문에 AI 모델의 행동을 이해하고 설명할 수 있는 것이 필수적입니다.
+이 교육과정에서는 머신러닝이 우리 일상에 어떻게 영향을 미치고 있는지를 알아보기 시작할 것입니다. 이미 시스템과 모델은 의료 진단, 대출 승인, 사기 탐지 등의 일상적 의사결정 업무에 관여하고 있습니다. 따라서 이러한 모델들이 신뢰할 수 있는 결과를 제공할 수 있도록 잘 작동하는 것이 중요합니다. 모든 소프트웨어 애플리케이션과 마찬가지로, AI 시스템도 기대에 미치지 못하거나 원치 않는 결과를 만들 수 있습니다. 그러므로 AI 모델의 동작을 이해하고 설명할 수 있는 능력은 필수적입니다.
-모델을 구축하는 데 사용하는 데이터가 특정 인구 통계(예: 인종, 성별, 정치적 견해, 종교 등)를 포함하지 않거나 불균형적으로 대표하는 경우 어떤 일이 발생할 수 있을까요? 모델의 출력이 특정 인구 통계를 선호하도록 해석된다면 어떻게 될까요? 애플리케이션에 어떤 영향을 미칠까요? 또한 모델이 부정적인 결과를 초래하여 사람들에게 해를 끼친다면 어떻게 될까요? AI 시스템의 행동에 대한 책임은 누구에게 있을까요? 이러한 질문들은 이 커리큘럼에서 탐구할 내용입니다.
+모델을 만드는 데 사용하는 데이터가 인종, 성별, 정치적 견해, 종교 등 특정 인구 집단을 포함하지 않거나 한쪽에 치우쳐 있다면 어떤 일이 벌어질지 상상해 보십시오. 모델의 출력이 특정 인구 집단에 유리하게 해석된다면 어떻게 될까요? 그 결과는 해당 응용 프로그램에 어떤 영향을 미칠까요? 그리고 모델이 바람직하지 않은 결과를 내거나 사람들에게 해를 끼친다면 어떻게 될까요? AI 시스템의 행동에 누가 책임이 있을까요? 이러한 질문들을 이 교육과정에서 탐구할 것입니다.
-이 강의에서 여러분은 다음을 배우게 됩니다:
+이 수업에서는 다음을 배우게 됩니다:
-- 머신 러닝에서 공정성의 중요성과 공정성 관련 피해에 대한 인식을 높입니다.
-- 신뢰성과 안전성을 보장하기 위해 이상치와 비정상적인 시나리오를 탐구하는 실습에 익숙해집니다.
-- 포괄적인 시스템을 설계하여 모두를 지원해야 하는 필요성을 이해합니다.
-- 데이터와 사람들의 프라이버시와 보안을 보호하는 것이 얼마나 중요한지 탐구합니다.
-- AI 모델의 행동을 설명하기 위해 투명성을 유지하는 접근 방식의 중요성을 확인합니다.
-- AI 시스템에 대한 신뢰를 구축하기 위해 책임감이 얼마나 중요한지 인식합니다.
+- 머신러닝에서 공정성의 중요성과 공정성 관련 피해에 대한 인식을 높입니다.
+- 신뢰성과 안전성을 보장하기 위해 이상치와 특이한 상황을 탐색하는 실습에 익숙해집니다.
+- 모두를 포용하는 시스템 설계의 필요성을 이해합니다.
+- 데이터와 사람들의 프라이버시 및 보안 보호의 중요성을 탐구합니다.
+- AI 모델의 동작을 설명하기 위한 투명한 접근법(글라스 박스 방식)의 중요성을 확인합니다.
+- AI 시스템에 대한 신뢰를 구축하기 위해 책임성이 필수적임을 인지합니다.
-## 사전 요구사항
+## 전제 조건
-사전 요구사항으로 "책임 있는 AI 원칙" 학습 경로를 완료하고 아래의 주제에 대한 비디오를 시청하세요:
+전제 조건으로 "책임 있는 AI 원칙" 학습 경로를 수강하고 아래 주제에 대한 동영상을 시청하시기 바랍니다:
-[학습 경로](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)를 통해 책임 있는 AI에 대해 더 알아보세요.
+다음 [학습 경로](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)에서 책임 있는 AI에 대해 자세히 알아보세요.
-[](https://youtu.be/dnC8-uUZXSc "Microsoft의 책임 있는 AI 접근 방식")
+[](https://youtu.be/dnC8-uUZXSc "Microsoft의 책임 있는 AI 접근법")
-> 🎥 위 이미지를 클릭하여 비디오를 시청하세요: Microsoft의 책임 있는 AI 접근 방식
+> 🎥 위 이미지를 클릭하면 동영상 시청: Microsoft의 책임 있는 AI 접근법
## 공정성
-AI 시스템은 모든 사람을 공정하게 대하고 유사한 그룹의 사람들에게 다른 방식으로 영향을 미치지 않아야 합니다. 예를 들어, AI 시스템이 의료 치료, 대출 신청 또는 고용에 대한 지침을 제공할 때, 유사한 증상, 재정 상황 또는 전문 자격을 가진 모든 사람에게 동일한 권장 사항을 제공해야 합니다. 우리 각자는 인간으로서 우리의 결정과 행동에 영향을 미치는 내재된 편견을 가지고 있습니다. 이러한 편견은 우리가 AI 시스템을 훈련시키는 데 사용하는 데이터에서 드러날 수 있습니다. 이러한 조작은 때로는 의도치 않게 발생할 수 있습니다. 데이터를 다룰 때 편견을 도입하고 있는지 의식적으로 알기 어려운 경우가 많습니다.
+AI 시스템은 모든 사람을 공정하게 대우하고 유사한 그룹의 사람들에게 다르게 영향을 미치는 일을 피해야 합니다. 예를 들어, AI 시스템이 의료 치료, 대출 신청, 고용에 대한 조언을 제공할 때 유사한 증상, 재정 상황, 전문 자격을 가진 사람들에게 동일한 권고를 해야 합니다. 우리 각자는 결정과 행동에 영향을 미치는 선천적인 편견을 지니고 있으며, 이러한 편견은 AI 시스템 학습에 사용되는 데이터에도 나타날 수 있습니다. 이런 편향은 때때로 의도치 않게 발생할 수 있으며, 데이터를 통해 편향을 의식적으로 인지하는 것은 종종 어렵습니다.
-**“불공정성”**은 인종, 성별, 연령 또는 장애 상태와 같은 기준으로 정의된 사람들 그룹에 대한 부정적인 영향 또는 “피해”를 포함합니다. 주요 공정성 관련 피해는 다음과 같이 분류할 수 있습니다:
+“불공정함”은 인종, 성별, 연령, 장애 상태 등 특정 집단에 부정적 영향을 미치는 해악을 의미합니다. 주요 공정성 관련 피해 유형은 다음과 같이 분류됩니다:
-- **할당**: 예를 들어, 특정 성별이나 민족이 다른 성별이나 민족보다 선호되는 경우.
-- **서비스 품질**: 특정 시나리오에 맞춰 데이터를 훈련시키지만 현실은 훨씬 더 복잡한 경우, 서비스 성능이 저하됩니다. 예를 들어, 어두운 피부를 가진 사람을 감지하지 못하는 손 비누 디스펜서. [참조](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
-- **비난**: 부당하게 비판하거나 특정 대상이나 사람을 잘못 평가하는 경우. 예를 들어, 이미지 라벨링 기술이 어두운 피부를 가진 사람들의 이미지를 고릴라로 잘못 라벨링한 사례.
-- **과잉 또는 부족 대표**: 특정 그룹이 특정 직업에서 보이지 않는 경우, 이를 계속 촉진하는 서비스나 기능은 피해를 초래할 수 있습니다.
-- **고정관념**: 특정 그룹을 미리 할당된 속성과 연관시키는 경우. 예를 들어, 영어와 터키어 간의 언어 번역 시스템이 성별과 관련된 고정관념으로 인해 부정확성을 가질 수 있습니다.
+- 할당: 예를 들어, 한 성별이나 민족이 다른 집단보다 선호되는 경우.
+- **서비스 품질**: 특정 시나리오만 학습시켰으나 실제 상황은 더 복잡해 서비스 성능이 떨어질 때. 예로 어두운 피부색을 인식하지 못하는 손 세정제 디스펜서가 있습니다. [참고자료](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
+- 폄하: 부당하게 비판하거나 낙인을 찍는 행위. 예를 들어, 이미지 라벨링 기술이 어두운 피부색 사람들을 고릴라로 잘못 인식한 경우가 있습니다.
+- **과대 또는 과소 대표**: 특정 그룹이 특정 직종에서 보이지 않거나 서비스가 이를 계속 촉진할 때 발생하는 피해.
+- 고정관념: 특정 집단에 미리 할당된 속성을 연결하는 행위. 예를 들어, 영어와 터키어 간 번역 시스템이 성별 고정관념에 기반한 단어로 인해 부정확할 수 있습니다.
-
-> 터키어로 번역
+
+> 터키어 번역
-
-> 영어로 다시 번역
+
+> 영어로 재번역
-AI 시스템을 설계하고 테스트할 때, AI가 공정하며 인간이 금지된 편향적이거나 차별적인 결정을 내리지 않도록 해야 합니다. AI와 머신 러닝에서 공정성을 보장하는 것은 여전히 복잡한 사회기술적 과제입니다.
+AI 시스템을 설계하고 테스트할 때 AI가 공정하며 편향되거나 차별적인 결정을 내리지 않도록 해야 합니다. 이는 인간에게도 금지된 행위입니다. AI와 머신러닝에서 공정성을 보장하는 것은 복잡한 사회기술적 도전 과제입니다.
### 신뢰성과 안전성
-신뢰를 구축하려면 AI 시스템이 정상적이고 예상치 못한 조건에서도 신뢰할 수 있고 안전하며 일관성이 있어야 합니다. 특히 이상치 상황에서 AI 시스템이 다양한 상황에서 어떻게 행동할지 아는 것이 중요합니다. AI 솔루션을 구축할 때, AI 솔루션이 직면할 수 있는 다양한 상황을 처리하는 방법에 상당한 초점을 맞춰야 합니다. 예를 들어, 자율주행차는 사람들의 안전을 최우선으로 고려해야 합니다. 따라서 차량을 구동하는 AI는 밤, 폭풍우, 눈보라, 길을 건너는 아이들, 애완동물, 도로 공사 등 차량이 직면할 수 있는 모든 가능한 시나리오를 고려해야 합니다. AI 시스템이 다양한 조건을 신뢰할 수 있고 안전하게 처리할 수 있는 능력은 데이터 과학자나 AI 개발자가 시스템 설계 또는 테스트 중에 고려한 예상 수준을 반영합니다.
-
-> [🎥 여기를 클릭하여 비디오를 시청하세요: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
+신뢰를 구축하려면 AI 시스템이 정상 및 예기치 않은 상황 모두에서 신뢰할 수 있고 안전하며 일관되어야 합니다. AI 시스템이 다양한 상황, 특히 이상치에서 어떻게 동작하는지 아는 것이 중요합니다. AI 솔루션을 구축할 때는 AI가 마주치게 될 다양한 상황을 다루는 데 많은 초점을 둬야 합니다. 예를 들어, 자율주행차는 사람들의 안전을 최우선으로 해야 합니다. 따라서 차량을 작동하는 AI는 야간, 폭풍우, 눈보라, 길을 가로지르는 아이들, 애완동물, 도로 공사 등 다양한 시나리오를 고려해야 합니다. AI 시스템이 다양한 조건을 얼마나 신뢰성 있고 안전하게 처리하는지는 데이터 과학자 또는 AI 개발자가 설계 및 테스트 시 어느 정도 예상했는지를 반영합니다.
-### 포괄성
+> [🎥 영상 시청하려면 여기를 클릭하세요: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
-AI 시스템은 모든 사람을 참여시키고 지원할 수 있도록 설계되어야 합니다. AI 시스템을 설계하고 구현할 때 데이터 과학자와 AI 개발자는 시스템에서 사람들을 의도치 않게 배제할 수 있는 잠재적 장벽을 식별하고 해결합니다. 예를 들어, 전 세계적으로 10억 명의 장애인이 있습니다. AI의 발전으로 인해 이들은 일상생활에서 더 쉽게 다양한 정보와 기회를 접할 수 있습니다. 이러한 장벽을 해결함으로써 모든 사람에게 혜택을 주는 더 나은 경험을 제공하는 AI 제품을 혁신하고 개발할 기회를 창출합니다.
+### 포용성
-> [🎥 여기를 클릭하여 비디오를 시청하세요: AI에서의 포괄성](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
+AI 시스템은 모두가 참여하고 권한을 갖도록 설계되어야 합니다. AI 시스템 설계 및 구현 시 데이터 과학자와 AI 개발자들은 사람들을 의도치 않게 제외할 수 있는 장벽을 식별하고 해결합니다. 전 세계적으로 10억 명의 장애인이 있습니다. AI 기술이 발전함에 따라 이들은 일상생활에서 정보와 기회에 더욱 쉽게 접근할 수 있게 되었습니다. 장벽을 해결함으로써 모두에게 혜택이 되는 더 나은 경험을 제공하는 AI 제품을 혁신하고 개발할 수 있는 기회를 창출합니다.
-### 보안과 프라이버시
+> [🎥 영상 시청하려면 여기를 클릭하세요: AI에서의 포용성](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
-AI 시스템은 안전해야 하며 사람들의 프라이버시를 존중해야 합니다. 프라이버시, 정보 또는 생명을 위험에 빠뜨리는 시스템에 대한 신뢰는 낮아집니다. 머신 러닝 모델을 훈련할 때, 최상의 결과를 도출하기 위해 데이터를 활용합니다. 이 과정에서 데이터의 출처와 무결성을 고려해야 합니다. 예를 들어, 데이터가 사용자 제출 데이터인지 공개적으로 이용 가능한 데이터인지 확인해야 합니다. 다음으로 데이터를 다룰 때, 기밀 정보를 보호하고 공격에 저항할 수 있는 AI 시스템을 개발하는 것이 중요합니다. AI가 점점 더 널리 사용됨에 따라 프라이버시를 보호하고 중요한 개인 및 비즈니스 정보를 안전하게 유지하는 것이 점점 더 중요하고 복잡해지고 있습니다. AI는 데이터를 기반으로 사람들에 대한 정확하고 정보에 입각한 예측과 결정을 내리기 때문에 프라이버시와 데이터 보안 문제는 특히 주의가 필요합니다.
+### 보안 및 개인정보 보호
-> [🎥 여기를 클릭하여 비디오를 시청하세요: AI에서의 보안](https://www.microsoft.com/videoplayer/embed/RE4voJF)
+AI 시스템은 안전해야 하며 사람들의 프라이버시를 존중해야 합니다. 사람들은 개인정보, 정보 또는 생명이 위험에 처하는 시스템을 덜 신뢰합니다. 머신러닝 모델을 훈련할 때 최상의 결과를 내기 위해 데이터에 의존합니다. 이때 데이터 출처와 무결성을 고려해야 합니다. 예를 들어, 데이터가 사용자 제출 데이터인지 공개적으로 사용 가능한지 여부가 중요합니다. 또한, 데이터를 다룰 때 기밀 정보를 보호하고 공격에 저항하는 AI 시스템을 개발하는 것이 필수적입니다. AI가 보편화되면서 개인정보 보호와 중요한 개인 및 기업 정보 보안이 더욱 중요하고 복잡해졌습니다. AI의 정확한 예측과 결정을 위해 데이터 접근이 필수적이므로 프라이버시 및 데이터 보안 문제에 특별히 주의를 기울여야 합니다.
-- 업계는 GDPR(일반 데이터 보호 규정)과 같은 규정에 의해 크게 촉진된 프라이버시 및 보안에서 상당한 발전을 이루었습니다.
-- 그러나 AI 시스템에서는 시스템을 더 개인적이고 효과적으로 만들기 위해 더 많은 개인 데이터를 필요로 하는 것과 프라이버시 간의 긴장을 인정해야 합니다.
-- 인터넷으로 연결된 컴퓨터의 탄생과 마찬가지로 AI와 관련된 보안 문제의 급증을 목격하고 있습니다.
-- 동시에 AI가 보안을 개선하는 데 사용되는 사례도 있습니다. 예를 들어, 대부분의 현대적인 안티바이러스 스캐너는 오늘날 AI 휴리스틱에 의해 구동됩니다.
-- 데이터 과학 프로세스가 최신 프라이버시 및 보안 관행과 조화를 이루도록 해야 합니다.
+> [🎥 영상 시청하려면 여기를 클릭하세요: AI에서의 보안](https://www.microsoft.com/videoplayer/embed/RE4voJF)
-### 투명성
+- 업계 전반에서 GDPR(일반 데이터 보호 규정) 같은 규제 덕분에 프라이버시와 보안 분야에서 크게 발전해 왔습니다.
+- 그러나 AI 시스템에서는 더 개인화되고 효율적인 시스템을 만들기 위해 더 많은 개인정보가 필요한 것과 프라이버시 사이의 긴장을 인식해야 합니다.
+- 인터넷과 연결된 컴퓨터가 처음 등장했을 때처럼 AI 관련 보안 이슈도 급증하고 있습니다.
+- 동시에 AI는 보안을 향상하는 데 사용되고 있습니다. 예를 들어, 오늘날 대부분의 최신 안티바이러스 스캐너는 AI 휴리스틱을 활용합니다.
+- 데이터 과학 프로세스가 최신 프라이버시 및 보안 관행과 조화롭게 융합되도록 해야 합니다.
-AI 시스템은 이해할 수 있어야 합니다. 투명성의 중요한 부분은 AI 시스템과 그 구성 요소의 행동을 설명하는 것입니다. AI 시스템에 대한 이해를 개선하려면 이해관계자가 시스템이 어떻게 작동하고 왜 작동하는지 이해하여 잠재적인 성능 문제, 안전 및 프라이버시 문제, 편향, 배제적 관행 또는 의도치 않은 결과를 식별할 수 있어야 합니다. 또한 AI 시스템을 사용하는 사람들은 시스템을 언제, 왜, 어떻게 배포하는지, 그리고 사용하는 시스템의 한계를 솔직하게 공개해야 한다고 믿습니다. 예를 들어, 은행이 소비자 대출 결정을 지원하기 위해 AI 시스템을 사용하는 경우, 결과를 검토하고 시스템의 권장 사항에 영향을 미치는 데이터를 이해하는 것이 중요합니다. 정부는 산업 전반에 걸쳐 AI를 규제하기 시작하고 있으므로 데이터 과학자와 조직은 AI 시스템이 규제 요구 사항을 충족하는지, 특히 바람직하지 않은 결과가 발생했을 때 이를 설명해야 합니다.
-> [🎥 여기를 클릭하여 비디오를 시청하세요: AI에서의 투명성](https://www.microsoft.com/videoplayer/embed/RE4voJF)
+### 투명성
+AI 시스템은 이해할 수 있어야 합니다. 투명성의 중요한 부분은 AI 시스템과 구성 요소의 동작을 설명하는 것입니다. AI 시스템의 이해도를 높이려면 이해관계자가 시스템이 어떻게 그리고 왜 동작하는지 파악하여 성능 문제, 안전 및 프라이버시 우려, 편향, 배제적 관행 또는 의도치 않은 결과를 식별할 수 있어야 합니다. 또한 AI 시스템을 사용하는 주체가 언제, 왜, 어떻게 AI를 배포하는지를 정직하고 솔직히 밝혀야 하며 사용 시스템의 한계도 알려야 한다고 믿습니다. 예를 들어, 은행이 소비자 대출 결정을 지원하기 위해 AI 시스템을 사용할 경우 결과를 검토하고 추천에 영향을 미치는 데이터가 무엇인지 이해하는 것이 중요합니다. 정부가 산업 전반에 AI 규제를 시작하고 있으므로 데이터 과학자와 조직은 AI 시스템이 규제 요구사항을 충족하는지, 특히 바람직하지 않은 결과가 발생했을 때 설명할 수 있어야 합니다.
-- AI 시스템이 매우 복잡하기 때문에 시스템이 어떻게 작동하고 결과를 해석하는지 이해하기 어렵습니다.
-- 이러한 이해 부족은 시스템이 관리, 운영 및 문서화되는 방식에 영향을 미칩니다.
-- 더 중요한 것은 이러한 이해 부족이 시스템이 생성하는 결과를 기반으로 내리는 결정에 영향을 미친다는 점입니다.
+> [🎥 영상 시청하려면 여기를 클릭하세요: AI에서의 투명성](https://www.microsoft.com/videoplayer/embed/RE4voJF)
-### 책임감
+- AI 시스템이 매우 복잡하여 작동 방식을 이해하고 결과를 해석하기 어렵습니다.
+- 이러한 이해 부족은 시스템 관리, 운영 및 문서화 방식에 영향을 미칩니다.
+- 더욱 중요하게는, 시스템이 만든 결과를 사용한 의사결정에 영향을 줍니다.
-AI 시스템을 설계하고 배포하는 사람들은 시스템이 어떻게 작동하는지에 대해 책임을 져야 합니다. 책임감의 필요성은 특히 얼굴 인식과 같은 민감한 기술에서 중요합니다. 최근에는 실종 아동을 찾는 것과 같은 용도로 기술의 잠재력을 보는 법 집행 기관에서 얼굴 인식 기술에 대한 수요가 증가하고 있습니다. 그러나 이러한 기술은 특정 개인에 대한 지속적인 감시를 가능하게 함으로써 시민의 기본 자유를 위협할 수 있는 방식으로 정부에 의해 사용될 가능성이 있습니다. 따라서 데이터 과학자와 조직은 AI 시스템이 개인이나 사회에 미치는 영향에 대해 책임을 져야 합니다.
+### 책임성
+
+AI 시스템을 설계하고 배포하는 사람들은 그 시스템의 작동 방식에 책임을 져야 합니다. 특히 안면 인식 같은 민감한 기술을 사용할 때 책임성은 더욱 중요합니다. 최근 법 집행 기관들이 실종 아동 탐색 등에서 기술의 잠재력을 주목하며 안면 인식 기술에 대한 수요가 증가하고 있습니다. 그러나 정부가 특정 개인을 지속적으로 감시하는 등 시민의 기본 자유를 위협하는 데 사용할 수도 있습니다. 따라서 데이터 과학자와 조직은 AI 시스템이 개인 또는 사회에 미치는 영향에 책임을 져야 합니다.
-[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft의 책임 있는 AI 접근 방식")
+[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft의 책임 있는 AI 접근법")
-> 🎥 위 이미지를 클릭하여 비디오를 시청하세요: 얼굴 인식을 통한 대규모 감시에 대한 경고
+> 🎥 위 이미지를 클릭하면 동영상 시청: 안면 인식 통한 대규모 감시에 대한 경고
-결국, AI를 사회에 도입하는 첫 번째 세대로서 우리 세대가 직면한 가장 큰 질문 중 하나는 컴퓨터가 사람들에게 계속 책임을 질 수 있도록 하고 컴퓨터를 설계하는 사람들이 다른 모든 사람들에게 책임을 질 수 있도록 하는 방법입니다.
+결국 우리 세대, 즉 AI를 사회에 처음 도입하는 세대에게 가장 큰 질문 중 하나는 컴퓨터가 사람들에게 책임을 지도록 어떻게 보장할 것인가와 컴퓨터를 설계하는 사람들이 모두에게 책임을 지도록 어떻게 보장할 것인가입니다.
## 영향 평가
-머신 러닝 모델을 훈련하기 전에 AI 시스템의 목적, 의도된 사용, 배포 위치 및 시스템과 상호작용할 사람들을 이해하기 위해 영향 평가를 수행하는 것이 중요합니다. 이는 시스템을 평가하는 리뷰어 또는 테스터가 잠재적 위험과 예상 결과를 식별할 때 고려해야 할 요소를 아는 데 도움이 됩니다.
+머신러닝 모델을 훈련하기 전에 AI 시스템의 목적, 의도된 사용, 배포 장소, 상호 작용할 대상 등을 이해하기 위해 영향 평가를 수행하는 것이 중요합니다. 이는 시스템을 평가하는 검토자 또는 테스터가 잠재적 위험과 예상 결과를 판단할 때 고려해야 할 요소를 파악하는 데 도움을 줍니다.
+
+영향 평가 시 중점 영역은 다음과 같습니다:
-영향 평가를 수행할 때 집중해야 할 영역은 다음과 같습니다:
+* **개인에 대한 부정적 영향**: 제한이나 요구 사항, 지원되지 않는 사용, 알려진 제한 사항 등 시스템 성능을 저해하는 요소를 인지하여 개인에게 피해를 주는 방식으로 시스템이 사용되지 않도록 하는 것이 중요합니다.
+* **데이터 요구 사항**: 시스템이 데이터를 어떻게 어디에서 사용할지 이해하면 검토자가 GDPR 또는 HIPAA 같은 데이터 규정과 같은 데이터 요구 사항을 고려할 수 있습니다. 또한 데이터 소스와 양이 훈련에 충분한지 평가합니다.
+* **영향 요약**: 시스템 사용으로 발생할 수 있는 잠재적 피해 목록을 수집합니다. 머신러닝 라이프사이클 전반에 걸쳐 식별된 문제들이 경감되거나 해결되었는지 검토합니다.
+* **각 원칙별 적용 가능한 목표**: 6가지 핵심 원칙 각자의 목표가 충족되는지, 부족한 점이 있는지 평가합니다.
-* **개인에 대한 부정적 영향**: 시스템 성능을 저해할 수 있는 제한, 요구사항, 지원되지 않는 사용 또는 알려진 한계를 인식하는 것이 중요합니다.
-* **데이터 요구사항**: 시스템이 데이터를 사용하는 방법과 위치를 이해하면 GDPR 또는 HIPPA 데이터 규정과 같은 데이터 요구사항을 고려해야 할 사항을 탐구할 수 있습니다. 또한 데이터를 훈련시키기에 충분한 출처와 양을 검토합니다.
-* **영향 요약**: 시스템 사용으로 인해 발생할 수 있는 잠재적 피해 목록을 수집합니다. ML 라이프사이클 전반에 걸쳐 식별된 문제가 완화되었거나 해결되었는지 검토합니다.
-* **적용 가능한 목표**: 여섯 가지 핵심 원칙 각각에 대한 목표가 충족되었는지, 그리고 어떤 격차가 있는지 평가합니다.
## 책임 있는 AI로 디버깅하기
-소프트웨어 애플리케이션을 디버깅하는 것과 마찬가지로, AI 시스템을 디버깅하는 것은 시스템의 문제를 식별하고 해결하는 데 필요한 과정입니다. 모델이 예상대로 또는 책임감 있게 작동하지 않는 데 영향을 미치는 많은 요인이 있습니다. 대부분의 전통적인 모델 성능 지표는 모델 성능의 정량적 집계로, 책임 있는 AI 원칙을 위반하는 방법을 분석하기에는 충분하지 않습니다. 게다가 머신 러닝 모델은 결과를 유도하는 요인을 이해하거나 실수를 했을 때 설명을 제공하기 어려운 블랙박스입니다. 이 과정에서 우리는 책임 있는 AI 대시보드를 사용하여 AI 시스템을 디버깅하는 방법을 배우게 됩니다. 이 대시보드는 데이터 과학자와 AI 개발자가 다음을 수행할 수 있는 포괄적인 도구를 제공합니다:
+소프트웨어 애플리케이션을 디버깅하는 것과 마찬가지로 AI 시스템을 디버깅하는 것은 시스템 내 문제를 식별하고 해결하는 필수 과정입니다. 모델이 기대대로 또는 책임감 있게 작동하지 못하는 데 영향을 미치는 여러 요인이 있습니다. 대부분의 전통적인 모델 성능 지표는 모델 성능의 정량적 집계치에 불과하여 모델이 책임 있는 AI 원칙을 위반하는 방식을 분석하기에 충분하지 않습니다. 게다가 머신러닝 모델은 결과를 어떻게 도출하는지 이해하기 어려운 블랙박스이며, 오류가 발생할 때 설명하기 어렵습니다. 이 강의 후반부에서는 책임 있는 AI 대시보드를 사용하여 AI 시스템을 디버깅하는 방법을 배울 것입니다. 이 대시보드는 데이터 과학자와 AI 개발자가 다음과 같은 작업을 수행할 수 있는 전체적인 도구를 제공합니다:
-* **오류 분석**: 시스템의 공정성 또는 신뢰성에 영향을 미칠 수 있는 모델의 오류 분포를 식별합니다.
-* **모델 개요**: 데이터 코호트 간의 모델 성능에서 불균형이 있는 곳을 발견합니다.
-* **데이터 분석**: 데이터 분포를 이해하고 공정성, 포괄성 및 신뢰성 문제를 초래할 수 있는 데이터의 잠재적 편향을 식별합니다.
-* **모델 해석 가능성**: 모델의 예측에 영향을 미치거나 영향을 주는 요인을 이해합니다. 이는 모델의 행동을 설명하는 데 중요하며, 투명성과 책임감을 위해 필요합니다.
+* **오류 분석**: 시스템의 공정성 또는 신뢰성에 영향을 미칠 수 있는 모델 오류 분포를 식별합니다.
+* **모델 개요**: 데이터 집단별 모델 성능 격차를 발견합니다.
+* **데이터 분석**: 데이터 분포를 이해하고 공정성, 포용성, 신뢰성 문제를 일으킬 수 있는 편향을 식별합니다.
+* **모델 해석 가능성**: 모델 예측에 영향을 주는 요소를 파악합니다. 이는 투명성과 책임성에 중요한 모델 동작 설명에 도움을 줍니다.
-## 🚀 도전
-피해가 처음부터 도입되지 않도록 하기 위해 우리는 다음을 해야 합니다:
+## 🚀 도전 과제
+
+피해를 처음부터 예방하기 위해 우리는:
-- 시스템 작업에 참여하는 사람들 간에 다양한 배경과 관점을 확보합니다.
-- 우리 사회의 다양성을 반영하는 데이터 세트에 투자합니다.
-- 머신 러닝 라이프사이클 전반에 걸쳐 책임 있는 AI를 감지하고 수정하는 더 나은 방법을 개발합니다.
+- 시스템 작업에 참여하는 사람들의 배경과 관점의 다양성을 확보해야 합니다.
+- 사회의 다양성을 반영한 데이터셋에 투자해야 합니다.
+- 책임 있는 AI가 발생했을 때 이를 탐지하고 수정하는 머신러닝 라이프사이클 전반에 걸친 더 나은 방법을 개발해야 합니다.
-모델 구축 및 사용에서 모델의 신뢰할 수 없는 점이 드러나는 실제 시나리오를 생각해보세요. 우리는 무엇을 더 고려해야 할까요?
+모델 구축과 사용에서 신뢰를 잃는 현실 사례를 생각해 보십시오. 또 무엇을 고려해야 할까요?
## [강의 후 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
-## 복습 및 자기 학습
+## 복습 및 자기주도 학습
+
-이 강의에서는 머신 러닝에서 공정성과 불공정성의 개념에 대한 기본 사항을 배웠습니다.
-이 워크숍을 통해 주제에 대해 더 깊이 알아보세요:
+이 수업에서는 머신러닝에서 공정성과 불공정성 개념의 기본을 배웠습니다.
+
+이 워크숍을 시청하여 주제를 더 깊이 파고들어 보세요:
-- 책임 있는 AI를 추구하며: 원칙을 실천으로 옮기기 - Besmira Nushi, Mehrnoosh Sameki, Amit Sharma
+- 책임 있는 AI 추구: Besmira Nushi, Mehrnoosh Sameki, Amit Sharma가 전하는 원칙의 실천
-[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: 책임 있는 AI를 구축하기 위한 오픈소스 프레임워크")
+[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: An open-source framework for building responsible AI")
-> 🎥 위 이미지를 클릭하면 비디오를 볼 수 있습니다: RAI Toolbox: 책임 있는 AI를 구축하기 위한 오픈소스 프레임워크 - Besmira Nushi, Mehrnoosh Sameki, Amit Sharma
+> 🎥 위 이미지를 클릭하여 영상 보기: Besmira Nushi, Mehrnoosh Sameki, Amit Sharma가 전하는 책임 있는 AI 구축을 위한 오픈 소스 프레임워크 RAI Toolbox
-또한 읽어보세요:
+또한, 다음을 읽어보세요:
-- Microsoft의 RAI 리소스 센터: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
+- Microsoft의 RAI 리소스 센터: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
-- Microsoft의 FATE 연구 그룹: [FATE: 공정성, 책임성, 투명성, 윤리성 - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
+- Microsoft의 FATE 연구 그룹: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
-RAI Toolbox:
+RAI Toolbox:
- [Responsible AI Toolbox GitHub 저장소](https://github.com/microsoft/responsible-ai-toolbox)
-Azure Machine Learning의 공정성을 보장하기 위한 도구에 대해 읽어보세요:
+Azure Machine Learning의 공정성 보장 도구에 대해 읽어보세요:
-- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
+- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
## 과제
@@ -157,5 +161,7 @@ Azure Machine Learning의 공정성을 보장하기 위한 도구에 대해 읽
---
-**면책 조항**:
-이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
\ No newline at end of file
+
+**면책 조항**:
+이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역은 오류나 부정확한 부분이 있을 수 있음을 유의하시기 바랍니다. 원본 문서의 원어본이 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우, 전문가의 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
+
\ No newline at end of file
diff --git a/translations/ko/2-Regression/1-Tools/README.md b/translations/ko/2-Regression/1-Tools/README.md
index 859336ef6..bc4c1e39f 100644
--- a/translations/ko/2-Regression/1-Tools/README.md
+++ b/translations/ko/2-Regression/1-Tools/README.md
@@ -1,120 +1,121 @@
-# Python과 Scikit-learn으로 회귀 모델 시작하기
+# 회귀 모델을 위한 Python과 Scikit-learn 시작하기
-
+
-> 스케치노트: [Tomomi Imura](https://www.twitter.com/girlie_mac)
+> 스케치노트 작성자 [Tomomi Imura](https://www.twitter.com/girlie_mac)
-## [강의 전 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
+## [수업 전 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
-> ### [이 강의는 R에서도 제공됩니다!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
+> ### [이 수업은 R로도 제공됩니다!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
## 소개
-이 네 가지 강의에서는 회귀 모델을 구축하는 방법을 배웁니다. 회귀 모델이 무엇을 위한 것인지 곧 논의할 것입니다. 하지만 그 전에, 과정을 시작하기 위해 적절한 도구가 준비되어 있는지 확인하세요!
+이 네 개의 수업에서 회귀 모델을 어떻게 구축하는지 배우게 될 것입니다. 이것들이 무엇을 위한 것인지 곧 설명하겠습니다. 하지만 무엇을 하기에 앞서, 프로세스를 시작하기 위한 올바른 도구들이 갖추어져 있는지 확인하십시오!
-이 강의에서 배우게 될 내용:
+이 수업에서는 다음을 배우게 됩니다:
-- 로컬 머신 러닝 작업을 위한 컴퓨터 설정
-- Jupyter 노트북 사용법
-- Scikit-learn 설치 및 사용법
-- 실습을 통해 선형 회귀 탐구
+- 컴퓨터를 로컬 머신러닝 작업을 위해 구성하는 방법.
+- Jupyter 노트북 작업하기.
+- 설치를 포함한 Scikit-learn 사용법.
+- 실습을 통한 선형 회귀 탐색.
-## 설치 및 설정
+## 설치 및 구성
-[](https://youtu.be/-DfeD2k2Kj0 "초보자를 위한 머신 러닝 - 머신 러닝 모델 구축을 위한 도구 설정")
+[](https://youtu.be/-DfeD2k2Kj0 "초보자를 위한 ML - 머신러닝 모델 구축 준비를 위한 도구 설정")
-> 🎥 위 이미지를 클릭하면 머신 러닝을 위한 컴퓨터 설정 과정을 다룬 짧은 영상을 볼 수 있습니다.
+> 🎥 위 이미지를 클릭하면 컴퓨터를 ML용으로 구성하는 과정을 담은 짧은 영상이 나옵니다.
-1. **Python 설치**. [Python](https://www.python.org/downloads/)이 컴퓨터에 설치되어 있는지 확인하세요. Python은 데이터 과학 및 머신 러닝 작업에 많이 사용됩니다. 대부분의 컴퓨터 시스템에는 이미 Python이 설치되어 있습니다. 일부 사용자에게는 설정을 쉽게 해주는 [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott)도 유용할 수 있습니다.
+1. **Python 설치**. 컴퓨터에 [Python](https://www.python.org/downloads/)이 설치되어 있는지 확인하세요. 데이터 과학과 머신러닝 작업에 많이 사용됩니다. 대부분의 컴퓨터 시스템에는 이미 Python이 설치되어 있습니다. 일부 사용자들을 위해 설치를 쉽게 해주는 유용한 [Python 코딩 팩](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott)도 있습니다.
- 하지만 Python의 일부 사용 사례는 특정 버전을 요구할 수 있습니다. 따라서 [가상 환경](https://docs.python.org/3/library/venv.html)에서 작업하는 것이 유용합니다.
+ 하지만 Python 사용 용도에 따라 소프트웨어 버전이 다르게 요구될 수 있으므로, [가상 환경](https://docs.python.org/3/library/venv.html)에서 작업하는 것이 유용합니다.
-2. **Visual Studio Code 설치**. 컴퓨터에 Visual Studio Code가 설치되어 있는지 확인하세요. [Visual Studio Code 설치](https://code.visualstudio.com/)에 대한 지침을 따라 기본 설치를 완료하세요. 이 강의에서는 Visual Studio Code에서 Python을 사용할 예정이므로, [Visual Studio Code를 Python 개발에 맞게 설정](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott)하는 방법을 익혀두는 것이 좋습니다.
+2. **Visual Studio Code 설치**. 컴퓨터에 Visual Studio Code가 설치되어 있는지 확인하세요. 기본 설치를 위한 [Visual Studio Code 설치법](https://code.visualstudio.com/)을 따르세요. 이번 과정에서는 Visual Studio Code에서 Python을 사용할 것이므로, [Visual Studio Code에서 Python 개발 설정법](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott)을 익히는 것도 좋습니다.
- > Python에 익숙해지려면 이 [Learn 모듈 모음](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)을 살펴보세요.
+ > 이 [학습 모듈 모음](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)을 통해 Python에 익숙해지세요.
>
- > [](https://youtu.be/yyQM70vi7V8 "Visual Studio Code로 Python 설정")
+ > [](https://youtu.be/yyQM70vi7V8 "VS Code에서 Python 설정하기")
>
- > 🎥 위 이미지를 클릭하면 VS Code에서 Python을 사용하는 방법에 대한 영상을 볼 수 있습니다.
+ > 🎥 위 이미지를 클릭하면 VS Code 내에서 Python을 사용하는 영상이 나옵니다.
-3. **Scikit-learn 설치**. [이 지침](https://scikit-learn.org/stable/install.html)을 따라 Scikit-learn을 설치하세요. Python 3을 사용해야 하므로 가상 환경을 사용하는 것이 권장됩니다. M1 Mac에 이 라이브러리를 설치하는 경우, 위 링크에 특별 지침이 나와 있습니다.
+3. Scikit-learn 설치는 [이 안내](https://scikit-learn.org/stable/install.html)를 따르세요. Python 3를 사용해야 하므로 가상 환경 사용을 권장합니다. Mac M1에서 설치할 경우 위 링크 페이지에 특수 지침이 있습니다.
-4. **Jupyter Notebook 설치**. [Jupyter 패키지 설치](https://pypi.org/project/jupyter/)가 필요합니다.
+1. **Jupyter Notebook 설치**. [Jupyter 패키지](https://pypi.org/project/jupyter/)를 설치해야 합니다.
-## 머신 러닝 작성 환경
+## 머신러닝 개발 환경
-Python 코드 개발 및 머신 러닝 모델 생성을 위해 **노트북**을 사용할 것입니다. 이 파일 형식은 데이터 과학자들이 자주 사용하는 도구로, `.ipynb` 확장자로 식별됩니다.
+Python 코드 작성과 머신러닝 모델 생성에 노트북을 사용할 것입니다. 이 파일 유형은 데이터 과학자들이 흔히 쓰는 도구로 `.ipynb` 확장자를 가집니다.
-노트북은 개발자가 코드를 작성하고, 코드에 대한 주석을 추가하며, 문서를 작성할 수 있는 대화형 환경을 제공합니다. 이는 실험적이거나 연구 지향적인 프로젝트에 매우 유용합니다.
+노트북은 개발자가 코딩과 노트, 문서 작성을 같이 할 수 있는 대화형 환경으로, 실험적이거나 연구 중심 프로젝트에 매우 유용합니다.
-[](https://youtu.be/7E-jC8FLA2E "초보자를 위한 머신 러닝 - 회귀 모델 구축을 위한 Jupyter 노트북 설정")
+[](https://youtu.be/7E-jC8FLA2E "초보자를 위한 ML - Jupyter 노트북 설정하여 회귀 모델 시작")
-> 🎥 위 이미지를 클릭하면 이 연습 과정을 다룬 짧은 영상을 볼 수 있습니다.
+> 🎥 위 이미지를 클릭하면 이 실습 과정을 담은 짧은 영상이 나옵니다.
-### 연습 - 노트북 작업하기
+### 실습 - 노트북 작업
-이 폴더에서 _notebook.ipynb_ 파일을 찾을 수 있습니다.
+이 폴더에 _notebook.ipynb_ 파일이 있습니다.
1. Visual Studio Code에서 _notebook.ipynb_를 엽니다.
- Jupyter 서버가 Python 3+와 함께 시작됩니다. 노트북의 특정 영역에서 `실행(run)`할 수 있는 코드 블록을 찾을 수 있습니다. 코드 블록은 재생 버튼 모양의 아이콘을 선택하여 실행할 수 있습니다.
+ Python 3+와 함께 Jupyter 서버가 시작됩니다. 노트북 내에서 `실행(run)` 가능한 코드 조각들을 볼 수 있습니다. 재생 버튼 모양 아이콘을 클릭해 코드 블록을 실행할 수 있습니다.
-2. `md` 아이콘을 선택하고, 다음 텍스트를 추가하여 약간의 마크다운을 작성합니다: **# Welcome to your notebook**.
+1. `md` 아이콘을 선택하고 마크다운 문법으로 다음 텍스트를 입력하세요: **# Welcome to your notebook**.
- 다음으로, Python 코드를 추가합니다.
+ 이어서 Python 코드를 몇 줄 추가합니다.
-3. 코드 블록에 **print('hello notebook')**을 입력합니다.
-4. 화살표를 선택하여 코드를 실행합니다.
+1. 코드 블록에 **print('hello notebook')** 을 입력합니다.
+1. 실행 화살표를 선택하여 코드를 실행하세요.
- 출력 결과로 다음과 같은 문구가 표시됩니다:
+ 출력문이 나타나는 것을 볼 수 있을 것입니다:
```output
hello notebook
```
-
+
-코드와 함께 주석을 추가하여 노트북을 스스로 문서화할 수 있습니다.
+코드 사이에 주석을 넣어 노트북을 자가 문서화할 수 있습니다.
-✅ 웹 개발자의 작업 환경과 데이터 과학자의 작업 환경이 얼마나 다른지 잠시 생각해 보세요.
+✅ 웹 개발자 작업 환경과 데이터 과학자의 작업 환경이 얼마나 다른지 잠시 생각해 보세요.
## Scikit-learn 시작하기
-이제 로컬 환경에 Python이 설정되었고, Jupyter 노트북에 익숙해졌으니, Scikit-learn에도 익숙해져 봅시다. Scikit-learn은 머신 러닝 작업을 수행하는 데 도움을 주는 [광범위한 API](https://scikit-learn.org/stable/modules/classes.html#api-ref)를 제공합니다.
+로컬 환경에 Python을 설치하고 Jupyter 노트북을 익혔다면, 이제 Scikit-learn도 편안하게 사용해 봅시다 (`sci`는 `science`의 발음과 같습니다). Scikit-learn은 머신러닝 작업에 도움이 되는 [광범위한 API](https://scikit-learn.org/stable/modules/classes.html#api-ref)를 제공합니다.
-Scikit-learn의 [웹사이트](https://scikit-learn.org/stable/getting_started.html)에 따르면, "Scikit-learn은 지도 학습 및 비지도 학습을 지원하는 오픈 소스 머신 러닝 라이브러리입니다. 또한 모델 피팅, 데이터 전처리, 모델 선택 및 평가, 기타 다양한 유틸리티를 제공합니다."
+공식 [웹사이트](https://scikit-learn.org/stable/getting_started.html)에 따르면 "Scikit-learn은 감독 및 비감독 학습을 지원하는 오픈 소스 머신러닝 라이브러리입니다. 모델 적합, 데이터 전처리, 모델 선택 및 평가, 기타 다양한 유틸리티를 제공합니다."
-이 강의에서는 Scikit-learn 및 기타 도구를 사용하여 '전통적인 머신 러닝' 작업을 수행하는 머신 러닝 모델을 구축할 것입니다. 신경망과 딥러닝은 다루지 않으며, 이는 곧 제공될 'AI for Beginners' 커리큘럼에서 다룰 예정입니다.
+이 과정에서 Scikit-learn과 기타 도구를 사용해 전통적인 머신러닝 작업을 수행하는 모델을 구축할 것입니다. 신경망과 딥러닝은 의도적으로 제외했으며, 향후 'AI for Beginners' 커리큘럼에서 자세히 다룰 예정입니다.
-Scikit-learn은 모델을 구축하고 평가하는 과정을 간단하게 만들어 줍니다. 주로 숫자 데이터를 사용하는 데 초점이 맞춰져 있으며, 학습 도구로 사용할 수 있는 여러 가지 사전 제작된 데이터셋을 포함하고 있습니다. 또한 학생들이 시도해볼 수 있는 사전 제작된 모델도 포함되어 있습니다. 이제 사전 패키지 데이터와 기본 데이터를 사용하여 첫 번째 머신 러닝 모델을 구축하는 과정을 살펴봅시다.
+Scikit-learn은 모델을 쉽게 구축하고 평가할 수 있게 해 줍니다. 주로 수치 데이터를 사용하는 데 중점을 두며, 학습 도구로 사용할 몇 가지 준비된 데이터셋도 포함되어 있습니다. 학생들이 시도해볼 수 있는 사전 제작 모델도 있습니다. 먼저, 기본 데이터를 사용해 미리 포장된 데이터 로딩과 내장 추정기를 사용하는 기본 ML 모델 과정을 살펴봅시다.
-## 연습 - 첫 번째 Scikit-learn 노트북
+## 실습 - 첫 번째 Scikit-learn 노트북
> 이 튜토리얼은 Scikit-learn 웹사이트의 [선형 회귀 예제](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py)에서 영감을 받았습니다.
-[](https://youtu.be/2xkXL5EUpS0 "초보자를 위한 머신 러닝 - Python에서 첫 번째 선형 회귀 프로젝트")
-> 🎥 위 이미지를 클릭하면 이 연습 과정을 다룬 짧은 영상을 볼 수 있습니다.
+[](https://youtu.be/2xkXL5EUpS0 "초보자를 위한 ML - Python에서 첫 선형 회귀 프로젝트")
-이 강의와 관련된 _notebook.ipynb_ 파일에서 모든 셀을 '휴지통' 아이콘을 눌러 비웁니다.
+> 🎥 위 이미지를 클릭하면 이 실습에 관한 짧은 영상이 나옵니다.
-이 섹션에서는 학습 목적으로 Scikit-learn에 내장된 당뇨병 관련 소규모 데이터셋을 사용합니다. 당뇨병 환자에 대한 치료를 테스트하려 한다고 가정해 봅시다. 머신 러닝 모델은 변수 조합을 기반으로 어떤 환자가 치료에 더 잘 반응할지 결정하는 데 도움을 줄 수 있습니다. 시각화된 매우 기본적인 회귀 모델조차도 이론적 임상 시험을 조직하는 데 도움이 되는 변수에 대한 정보를 보여줄 수 있습니다.
+_notebook.ipynb_ 파일에서, 모든 셀을 '휴지통' 아이콘을 눌러 삭제하세요.
-✅ 회귀 방법에는 여러 가지가 있으며, 어떤 방법을 선택할지는 찾고자 하는 답에 따라 다릅니다. 예를 들어, 특정 나이에 대한 예상 키를 예측하려면 선형 회귀를 사용합니다. 이는 **숫자 값**을 찾고 있기 때문입니다. 반면, 특정 요리가 비건인지 아닌지를 알아내고 싶다면 **범주 할당**을 찾고 있는 것이므로 로지스틱 회귀를 사용합니다. 이후에 로지스틱 회귀에 대해 더 배우게 될 것입니다. 데이터를 통해 어떤 질문을 할 수 있을지, 그리고 어떤 방법이 더 적합할지 잠시 생각해 보세요.
+여기서는 학습 목적용으로 Scikit-learn에 내장된 당뇨병에 관한 작은 데이터셋을 사용합니다. 당뇨 환자 치료법을 평가해 보고자 한다고 가정해 보세요. 머신러닝 모델은 변수 조합에 근거해 어떤 환자가 치료에 더 잘 반응할지 예측하는 데 도움을 줄 수 있습니다. 시각화된 기본 회귀 모델조차, 이론적 임상시험 구성에 도움이 될 변수 정보를 보여줄 수 있습니다.
-이제 시작해 봅시다.
+✅ 회귀 방법에는 여러 유형이 있으며 선택하는 방법은 찾고자 하는 답변에 달려 있습니다. 특정 연령대 사람의 예상 키를 예측하고 싶다면 선형 회귀를 사용합니다. 이는 **수치 값을** 찾기 때문입니다. 어떤 요리가 비건으로 분류되어야 하는지 알고 싶다면, **범주 할당** 문제이므로 로지스틱 회귀를 사용합니다. 로지스틱 회귀는 나중에 더 배울 것입니다. 데이터에 대해 질문할 수 있는 것들과 어떤 방법이 적절할지 잠시 생각해 보세요.
+
+이제 이 작업을 시작해 봅시다.
### 라이브러리 가져오기
-이 작업을 위해 몇 가지 라이브러리를 가져옵니다:
+이 작업을 위해 일부 라이브러리를 불러오겠습니다:
-- **matplotlib**. [그래프 도구](https://matplotlib.org/)로 유용하며, 선 그래프를 생성하는 데 사용할 것입니다.
-- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html)는 Python에서 숫자 데이터를 처리하는 데 유용한 라이브러리입니다.
-- **sklearn**. 이는 [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) 라이브러리입니다.
+- **matplotlib**. 유용한 [그래프 도구](https://matplotlib.org/)이며 선 그래프를 만드는 데 사용할 것입니다.
+- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html)는 파이썬에서 수치 데이터를 다루는 데 유용한 라이브러리입니다.
+- **sklearn**. 이것은 [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) 라이브러리입니다.
-작업에 필요한 라이브러리를 가져옵니다.
+작업을 돕기 위해 라이브러리를 임포트하세요.
-1. 다음 코드를 입력하여 라이브러리를 가져옵니다:
+1. 다음 코드를 입력하여 임포트합니다:
```python
import matplotlib.pyplot as plt
@@ -122,26 +123,26 @@ Scikit-learn은 모델을 구축하고 평가하는 과정을 간단하게 만
from sklearn import datasets, linear_model, model_selection
```
- 위 코드에서는 `matplotlib`, `numpy`를 가져오고, `sklearn`에서 `datasets`, `linear_model`, `model_selection`을 가져옵니다. `model_selection`은 데이터를 학습 및 테스트 세트로 나누는 데 사용됩니다.
+ 위 코드는 `matplotlib`, `numpy`를 임포트하며, `sklearn`에서 `datasets`, `linear_model`, `model_selection`을 가져옵니다. `model_selection`은 데이터를 훈련 세트와 테스트 세트로 분할하는 데 사용됩니다.
### 당뇨병 데이터셋
-내장된 [당뇨병 데이터셋](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)에는 당뇨병과 관련된 442개의 샘플 데이터와 10개의 특징 변수가 포함되어 있습니다. 일부 변수는 다음과 같습니다:
+내장된 [당뇨병 데이터셋](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)은 당뇨병 관련 442개의 샘플과 10개의 특성 변수를 포함합니다. 일부 변수는 다음과 같습니다:
-- age: 나이 (연도 단위)
-- bmi: 체질량지수
+- age: 나이(년 단위)
+- bmi: 체질량 지수
- bp: 평균 혈압
-- s1 tc: T-세포 (백혈구의 한 종류)
+- s1 tc: T-세포(백혈구의 일종)
-✅ 이 데이터셋에는 당뇨병 연구에서 중요한 특징 변수로 '성별' 개념이 포함되어 있습니다. 많은 의료 데이터셋에는 이러한 이진 분류가 포함되어 있습니다. 이러한 분류가 인구의 특정 부분을 치료에서 배제할 가능성에 대해 잠시 생각해 보세요.
+✅ 이 데이터셋은 연구에 중요한 '성별'을 특성 변수로 포함합니다. 많은 의학 데이터셋에 이런 이진 분류가 포함되어 있습니다. 이런 분류 기준이 인구 일부를 치료 대상에서 제외할 수 있다는 점을 생각해보세요.
-이제 X와 y 데이터를 로드합니다.
+이제 X와 y 데이터를 불러옵니다.
-> 🎓 이는 지도 학습(supervised learning)이며, 명명된 'y' 타겟이 필요합니다.
+> 🎓 이 것은 감독 학습이므로 'y' 타겟이 필요하다는 점을 기억하세요.
-새로운 코드 셀에서 `load_diabetes()`를 호출하여 당뇨병 데이터셋을 로드합니다. 입력값 `return_X_y=True`는 `X`가 데이터 행렬이 되고, `y`가 회귀 타겟이 됨을 나타냅니다.
+새로운 코드 셀에서 `load_diabetes()`를 호출해 당뇨병 데이터셋을 불러오세요. 입력값 `return_X_y=True`는 `X`가 데이터 매트릭스, `y`가 회귀 타겟임을 나타냅니다.
-1. 데이터 행렬의 모양과 첫 번째 요소를 표시하는 몇 가지 print 명령을 추가합니다:
+1. 데이터 매트릭스의 형태와 첫 번째 요소를 출력하는 코드를 추가합니다:
```python
X, y = datasets.load_diabetes(return_X_y=True)
@@ -149,9 +150,9 @@ Scikit-learn은 모델을 구축하고 평가하는 과정을 간단하게 만
print(X[0])
```
- 반환값은 튜플입니다. 튜플의 첫 번째 두 값을 각각 `X`와 `y`에 할당합니다. [튜플에 대해 더 알아보기](https://wikipedia.org/wiki/Tuple).
+ 반환되는 값은 튜플입니다. 이 튜플의 처음 두 값을 각각 `X`와 `y`로 할당하는 것입니다. [튜플에 대해 더 알아보기](https://wikipedia.org/wiki/Tuple).
- 이 데이터는 442개의 항목으로 구성되어 있으며, 각 항목은 10개의 요소로 이루어진 배열로 되어 있음을 확인할 수 있습니다:
+ 이 데이터가 442 개의 항목으로 구성되며 각 항목은 10요소 배열임을 알 수 있습니다:
```text
(442, 10)
@@ -159,39 +160,39 @@ Scikit-learn은 모델을 구축하고 평가하는 과정을 간단하게 만
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
- ✅ 데이터와 회귀 타겟 간의 관계에 대해 잠시 생각해 보세요. 선형 회귀는 특징 X와 타겟 변수 y 간의 관계를 예측합니다. 당뇨병 데이터셋의 [타겟](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)을 문서에서 찾을 수 있나요? 이 데이터셋은 무엇을 보여주고 있나요?
+ ✅ 데이터와 회귀 타겟 간의 관계를 잠시 생각해보세요. 선형 회귀는 특성 X와 타겟 변수 y 간 관계를 예측합니다. 문서에서 당뇨병 데이터셋의 [타겟](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)을 찾을 수 있나요? 이 타겟을 고려할 때 이 데이터셋이 무엇을 보여주는지 생각해 보세요.
-2. 다음으로, 데이터셋의 3번째 열을 선택하여 플롯합니다. `:` 연산자를 사용하여 모든 행을 선택한 다음, 인덱스(2)를 사용하여 3번째 열을 선택할 수 있습니다. 또한 `reshape(n_rows, n_columns)`를 사용하여 데이터를 2D 배열로 재구성할 수 있습니다. 매개변수 중 하나가 -1이면 해당 차원이 자동으로 계산됩니다.
+2. 다음으로, 데이터셋의 일부를 선택해 플로팅합니다. 데이터셋의 3번째 열을 선택하세요. `:` 연산자로 모든 행을 선택하고 인덱스 2로 3번째 열을 선택할 수 있습니다. 플로팅에 필요한 2D 배열로 변경하려면 `reshape(n_rows, n_columns)`를 사용하세요. 매개변수 중 하나가 -1이면 해당 차원이 자동 계산됩니다.
```python
X = X[:, 2]
X = X.reshape((-1,1))
```
- ✅ 데이터의 모양을 확인하려면 언제든지 데이터를 출력하세요.
+ ✅ 데이터 모양을 확인하기 위해 언제든 출력해 보세요.
-3. 이제 데이터를 플롯할 준비가 되었으니, 머신이 이 데이터셋의 숫자 간 논리적 분리를 결정할 수 있는지 확인할 수 있습니다. 이를 위해 데이터(X)와 타겟(y)을 테스트 및 학습 세트로 나눌 필요가 있습니다. Scikit-learn은 이를 간단히 수행할 수 있는 방법을 제공합니다. 특정 지점에서 테스트 데이터를 나눌 수 있습니다.
+3. 이제 플로팅할 데이터가 준비되었으니, 머신이 이 데이터 숫자 사이에 논리적 구분을 짓도록 해봅니다. 이를 위해서는 데이터(X)와 타겟(y)을 테스트 세트와 학습 세트로 분할해야 합니다. Scikit-learn에는 이를 쉽게 하는 방법이 있습니다. 원하는 지점에서 테스트 데이터를 분할할 수 있습니다.
```python
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
```
-4. 이제 모델을 학습시킬 준비가 되었습니다! 선형 회귀 모델을 로드하고, `model.fit()`을 사용하여 X 및 y 학습 세트로 학습시킵니다:
+4. 이제 모델 학습 준비가 되었습니다! 선형 회귀 모델을 불러와 `model.fit()`으로 X와 y 학습 세트로 학습시킵니다:
```python
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
```
- ✅ `model.fit()`은 TensorFlow와 같은 많은 머신 러닝 라이브러리에서 볼 수 있는 함수입니다.
+ ✅ `model.fit()` 함수는 TensorFlow 등 많은 ML 라이브러리에서 공통으로 사용됩니다.
-5. 그런 다음, `predict()` 함수를 사용하여 테스트 데이터를 기반으로 예측을 생성합니다. 이는 데이터 그룹 간의 선을 그리는 데 사용됩니다.
+5. 그런 다음, `predict()` 함수를 이용해 테스트 데이터를 기반으로 예측을 만듭니다. 이를 통해 데이터 그룹 사이에 선을 그릴 수 있습니다.
```python
y_pred = model.predict(X_test)
```
-6. 이제 데이터를 플롯에 표시할 시간입니다. Matplotlib은 이 작업에 매우 유용한 도구입니다. 모든 X 및 y 테스트 데이터의 산점도를 생성하고, 예측을 사용하여 데이터 그룹 간 가장 적절한 위치에 선을 그립니다.
+6. 이제 데이터를 그래프로 나타냅니다. Matplotlib은 이를 위해 매우 유용합니다. 모든 X와 y 테스트 데이터를 산점도로 나타내고, 모델의 데이터 그룹 간 가장 적절한 위치에 예측된 선을 그리세요.
```python
plt.scatter(X_test, y_test, color='black')
@@ -202,23 +203,24 @@ Scikit-learn은 모델을 구축하고 평가하는 과정을 간단하게 만
plt.show()
```
- 
-✅ 여기서 무슨 일이 일어나고 있는지 잠시 생각해 보세요. 많은 작은 데이터 점들을 관통하는 직선이 있습니다. 하지만 이 직선이 정확히 무엇을 하고 있는 걸까요? 이 직선을 사용하여 새로운, 보지 못한 데이터 포인트가 플롯의 y축과 어떤 관계를 맺어야 하는지 예측할 수 있다는 것을 이해할 수 있나요? 이 모델의 실질적인 사용 방법을 말로 표현해 보세요.
+ 
+
-축하합니다! 첫 번째 선형 회귀 모델을 구축하고, 이를 사용해 예측을 생성한 뒤 플롯에 표시했습니다!
+ ✅ 여기서 무슨 일이 일어나고 있는지 조금 생각해 보세요. 여러 개의 작은 데이터 점을 통과하는 직선이 있는데, 정확히 무엇을 하고 있는 걸까요? 이 직선을 사용하여 새로운, 본 적 없는 데이터 포인트가 플롯의 y축과 어떤 관계를 맺어야 하는지 예측할 수 있어야 한다는 점을 볼 수 있나요? 이 모델의 실질적인 용도를 말로 표현해 보세요.
+
+축하합니다, 첫 번째 선형 회귀 모델을 만들고, 이를 사용해 예측을 수행했으며, 플롯에 표시했습니다!
---
## 🚀도전 과제
-이 데이터셋에서 다른 변수를 플롯해 보세요. 힌트: 이 줄을 수정하세요: `X = X[:,2]`. 이 데이터셋의 목표를 고려했을 때, 당뇨병이 질병으로서 어떻게 진행되는지에 대해 무엇을 발견할 수 있나요?
-
+이 데이터셋에서 다른 변수를 플로팅해 보세요. 힌트: 이 줄을 수정하세요: `X = X[:,2]`. 이 데이터셋의 목표 값을 고려할 때, 당뇨병이라는 질병의 진행에 대해 무엇을 발견할 수 있나요?
## [강의 후 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
-## 복습 및 자기 학습
+## 복습 & 자기 주도 학습
-이 튜토리얼에서는 단변량 또는 다변량 선형 회귀가 아닌 간단한 선형 회귀를 사용했습니다. 이러한 방법들 간의 차이에 대해 조금 읽어보거나 [이 비디오](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)를 확인해 보세요.
+이 튜토리얼에서는 단순 선형 회귀를 다뤘으며, 단변량 또는 다중 선형 회귀와는 다릅니다. 이 방법들 간의 차이점에 대해 조금 읽어 보거나, [이 영상](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)을 참조하세요.
-회귀의 개념에 대해 더 읽어보고 이 기술로 어떤 종류의 질문에 답할 수 있는지 생각해 보세요. 이 [튜토리얼](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott)을 통해 이해를 심화해 보세요.
+회귀 개념에 대해 더 읽고, 이 기법으로 어떤 질문들에 답할 수 있는지 생각해 보세요. 이해를 깊게 하려면 이 [튜토리얼](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott)을 통해 학습해 보세요.
## 과제
@@ -226,5 +228,7 @@ Scikit-learn은 모델을 구축하고 평가하는 과정을 간단하게 만
---
-**면책 조항**:
-이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
\ No newline at end of file
+
+**면책 조항**:
+이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역은 오류나 부정확한 부분이 있을 수 있음을 유의하시기 바랍니다. 원본 문서의 원어본이 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우, 전문가의 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
+
\ No newline at end of file
diff --git a/translations/ko/2-Regression/2-Data/README.md b/translations/ko/2-Regression/2-Data/README.md
index f8266cfd7..23bef9fbd 100644
--- a/translations/ko/2-Regression/2-Data/README.md
+++ b/translations/ko/2-Regression/2-Data/README.md
@@ -1,62 +1,62 @@
# Scikit-learn을 사용한 회귀 모델 구축: 데이터 준비 및 시각화
-
+
-인포그래픽 제작: [Dasani Madipalli](https://twitter.com/dasani_decoded)
+인포그래픽 제작자 [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [강의 전 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
-> ### [이 강의는 R에서도 제공됩니다!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
+> ### [이 강의는 R 버전도 있습니다!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
## 소개
-Scikit-learn을 사용하여 머신러닝 모델을 구축하기 위한 도구를 준비했으니, 이제 데이터를 분석하고 질문을 던질 준비가 되었습니다. 데이터를 다루고 ML 솔루션을 적용할 때, 올바른 질문을 던지는 것이 데이터의 잠재력을 제대로 활용하는 데 매우 중요합니다.
+이제 Scikit-learn을 사용해 머신러닝 모델 구축을 시작할 준비가 되었으니 데이터에 질문을 던질 준비가 되었습니다. 데이터를 다루고 ML 솔루션을 적용할 때, 데이터셋의 잠재력을 제대로 활용하려면 올바른 질문을 하는 방법을 이해하는 것이 매우 중요합니다.
-이 강의에서 배우게 될 내용:
+이 강의에서 여러분은 다음을 배우게 됩니다:
- 모델 구축을 위한 데이터 준비 방법
- Matplotlib을 사용한 데이터 시각화 방법
+- 더 표현력 있는 데이터 시각화를 위한 Seaborn 활용법
-## 데이터에 올바른 질문 던지기
+## 데이터에 올바른 질문하기
-답을 얻고자 하는 질문은 어떤 유형의 ML 알고리즘을 사용할지 결정합니다. 그리고 얻는 답변의 품질은 데이터의 특성에 크게 좌우됩니다.
+어떤 질문을 하느냐에 따라 사용할 ML 알고리즘 종류가 결정됩니다. 그리고 돌아오는 답변의 품질은 데이터의 특성에 크게 좌우됩니다.
-이 강의에서 제공된 [데이터](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv)를 살펴보세요. 이 .csv 파일을 VS Code에서 열어보면, 빈칸과 문자열 및 숫자 데이터가 혼합되어 있음을 바로 확인할 수 있습니다. 또한 'Package'라는 이상한 열이 있는데, 데이터가 'sacks', 'bins' 등 다양한 값으로 구성되어 있습니다. 사실, 이 데이터는 약간 엉망입니다.
+이 강의에 제공된 [데이터](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv)를 살펴보세요. VS Code에서 이 .csv 파일을 열 수 있습니다. 빠르게 살펴봐도 빈칸과 문자열과 숫자 데이터가 혼합되어 있음을 알 수 있습니다. 'Package'라는 이상한 컬럼도 있는데, 여기 데이터는 'sacks', 'bins' 등 다양한 값이 혼합되어 있습니다. 실제로 데이터가 꽤 엉망입니다.
-[](https://youtu.be/5qGjczWTrDQ "ML 초보자를 위한 데이터셋 분석 및 정리 방법")
+[](https://youtu.be/5qGjczWTrDQ "초보자를 위한 ML - 데이터셋 분석 및 정리 방법")
-> 🎥 위 이미지를 클릭하면 이 강의를 위한 데이터를 준비하는 과정을 다룬 짧은 영상을 볼 수 있습니다.
+> 🎥 위 이미지 클릭 시 이 강의 데이터 준비 과정을 다룬 짧은 영상이 재생됩니다.
-사실, ML 모델을 바로 사용할 수 있도록 완벽히 준비된 데이터셋을 받는 경우는 드뭅니다. 이 강의에서는 표준 Python 라이브러리를 사용하여 원시 데이터를 준비하는 방법을 배우게 됩니다. 또한 데이터를 시각화하는 다양한 기술도 배울 것입니다.
+실제로 즉시 사용할 수 있는 완벽한 데이터셋을 제공받는 경우는 드뭅니다. 이 강의에서는 표준 Python 라이브러리를 사용해 원시 데이터셋을 준비하는 방법과 데이터를 시각화하는 다양한 기법을 배웁니다.
## 사례 연구: '호박 시장'
-이 폴더의 루트 `data` 폴더에는 [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv)라는 .csv 파일이 포함되어 있으며, 이는 도시별로 그룹화된 호박 시장에 대한 1757개의 데이터 라인을 포함하고 있습니다. 이 데이터는 미국 농무부(USDA)가 배포한 [특수 작물 터미널 시장 표준 보고서](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice)에서 추출한 원시 데이터입니다.
+이 폴더에는 루트 `data` 폴더 내 [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv)라는 1757행의 호박 시장 도시별 그룹화 데이터 CSV 파일이 있습니다. 이 데이터는 미국 농무부가 배포하는 [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice)에서 추출한 원시 데이터입니다.
### 데이터 준비
-이 데이터는 공공 도메인에 속합니다. USDA 웹사이트에서 도시별로 여러 개의 파일로 다운로드할 수 있습니다. 너무 많은 파일을 방지하기 위해 모든 도시 데이터를 하나의 스프레드시트로 결합했으므로, 이미 데이터를 약간 _준비_한 상태입니다. 이제 데이터를 좀 더 자세히 살펴보겠습니다.
+이 데이터는 퍼블릭 도메인 데이터입니다. USDA 웹사이트에서 도시별로 여러 개의 개별 파일로 다운로드 가능합니다. 파일 수가 너무 많지 않도록 모든 도시 데이터를 하나로 합쳐 _일부_ 데이터 준비를 이미 진행했습니다. 다음으로 데이터를 좀 더 자세히 살펴보겠습니다.
### 호박 데이터 - 초기 결론
-이 데이터에서 무엇을 발견할 수 있나요? 이미 문자열, 숫자, 빈칸 및 이상한 값이 혼합되어 있다는 것을 확인했습니다.
+데이터에서 무엇을 알아차렸나요? 문자열, 숫자, 빈칸 및 이상한 값들이 혼재되어 있음을 이미 보았습니다. 이를 이해해야 합니다.
-회귀 기법을 사용하여 이 데이터에 어떤 질문을 던질 수 있을까요? 예를 들어, "특정 월에 판매되는 호박의 가격을 예측하라"는 질문은 어떨까요? 데이터를 다시 살펴보면, 이 작업에 필요한 데이터 구조를 만들기 위해 몇 가지 변경이 필요하다는 것을 알 수 있습니다.
+회귀 분석 기법을 사용해 이 데이터에 어떤 질문을 던질 수 있을까요? 예를 들면 "특정 월에 판매되는 호박의 가격 예측하기" 같은 질문입니다. 데이터를 다시보면, 이 작업에 필요한 데이터 구조를 만들기 위해 수정해야 할 점들이 있습니다.
+## 연습 문제 - 호박 데이터 분석하기
-## 실습 - 호박 데이터 분석
+데이터를 다루기 위해 매우 유용한 도구인 [Pandas](https://pandas.pydata.org/) (`Python Data Analysis`의 약자)를 사용해 이 호박 데이터를 분석하고 준비해 봅시다.
-[판다스(Pandas)](https://pandas.pydata.org/)를 사용해 봅시다. 판다스는 데이터를 분석하고 준비하는 데 매우 유용한 도구입니다.
+### 먼저, 누락된 날짜 확인
-### 첫 번째 단계: 누락된 날짜 확인
+누락된 날짜가 있는지 확인하는 단계부터 시작하세요:
-먼저 누락된 날짜를 확인하기 위한 단계를 수행해야 합니다.
+1. 날짜를 월 포맷으로 변환 (미국식 날짜 `MM/DD/YYYY` 형식).
+2. 월 정보를 새 열로 추출.
-1. 날짜를 월 형식으로 변환합니다(미국 날짜 형식은 `MM/DD/YYYY`입니다).
-2. 월을 새 열로 추출합니다.
+Visual Studio Code에서 _notebook.ipynb_ 파일을 열고 스프레드시트를 새 Pandas 데이터프레임으로 임포트 하세요.
-Visual Studio Code에서 _notebook.ipynb_ 파일을 열고 스프레드시트를 새 판다스 데이터프레임으로 가져옵니다.
-
-1. `head()` 함수를 사용하여 처음 다섯 줄을 확인합니다.
+1. `head()` 함수를 사용해 처음 다섯 행을 봅니다.
```python
import pandas as pd
@@ -64,30 +64,30 @@ Visual Studio Code에서 _notebook.ipynb_ 파일을 열고 스프레드시트를
pumpkins.head()
```
- ✅ 마지막 다섯 줄을 확인하려면 어떤 함수를 사용해야 할까요?
+ ✅ 마지막 다섯 행을 보려면 어떤 함수를 사용하나요?
-1. 현재 데이터프레임에 누락된 데이터가 있는지 확인합니다.
+1. 현재 데이터프레임에 누락된 데이터가 있는지 확인:
```python
pumpkins.isnull().sum()
```
- 누락된 데이터가 있지만, 현재 작업에는 문제가 없을 수도 있습니다.
+ 누락된 데이터가 있지만, 당면한 작업에 크게 지장 없을 수도 있습니다.
-1. 데이터프레임을 더 쉽게 작업할 수 있도록 `loc` 함수를 사용하여 필요한 열만 선택합니다. `loc` 함수는 원래 데이터프레임에서 행(첫 번째 매개변수)과 열(두 번째 매개변수)을 추출합니다. 아래의 경우 `:`는 "모든 행"을 의미합니다.
+1. 작업하기 쉬운 데이터프레임을 만들기 위해 필요한 열만 선택하세요. `loc` 함수를 사용하면 원본 데이터프레임에서 행(첫 번째 매개변수)과 열(두 번째 매개변수)를 선택할 수 있습니다. 아래 `:` 는 "모든 행"을 의미합니다.
```python
columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']
pumpkins = pumpkins.loc[:, columns_to_select]
```
-### 두 번째 단계: 호박의 평균 가격 결정
+### 두 번째로, 호박 평균 가격 결정
-특정 월에 호박의 평균 가격을 결정하는 방법을 생각해 보세요. 이 작업에 어떤 열이 필요할까요? 힌트: 3개의 열이 필요합니다.
+특정 월의 호박 평균 가격을 어떻게 구할지 생각해 봅시다. 어떤 열을 선택해야 할까요? 힌트: 3개의 열이 필요합니다.
-해결 방법: `Low Price`와 `High Price` 열의 평균을 계산하여 새 Price 열을 채우고, Date 열을 월만 표시하도록 변환합니다. 다행히 위의 확인에 따르면 날짜와 가격에 누락된 데이터는 없습니다.
+해결책: `Low Price`와 `High Price` 열의 평균 값을 새 `Price` 열에 넣고, `Date` 열을 월 정보만 보여주도록 변환합니다. 다행히 위 확인에서 날짜나 가격에 누락된 데이터가 없었습니다.
-1. 평균을 계산하려면 다음 코드를 추가하세요.
+1. 평균을 계산하는 코드를 추가하세요:
```python
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2
@@ -96,37 +96,37 @@ Visual Studio Code에서 _notebook.ipynb_ 파일을 열고 스프레드시트를
```
- ✅ `print(month)`를 사용하여 데이터를 확인할 수 있습니다.
+ ✅ 확인용으로 `print(month)` 등을 사용해 데이터를 출력해도 좋습니다.
-2. 변환된 데이터를 새 판다스 데이터프레임에 복사합니다.
+2. 변환한 데이터를 새로운 Pandas 데이터프레임으로 복사하세요:
```python
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
```
- 데이터프레임을 출력하면 새 회귀 모델을 구축할 수 있는 깨끗하고 정돈된 데이터셋을 확인할 수 있습니다.
+ 데이터프레임을 출력하면 깔끔하고 정돈된 새로운 데이터셋을 볼 수 있으며 이를 기반으로 회귀 모델을 구축할 수 있습니다.
-### 그런데! 이상한 점이 있습니다
+### 잠깐! 이상한 점이 있습니다
-`Package` 열을 보면, 호박은 다양한 구성으로 판매됩니다. 일부는 '1 1/9 bushel' 단위로, 일부는 '1/2 bushel' 단위로, 일부는 호박 개별 단위로, 일부는 파운드 단위로, 그리고 일부는 다양한 크기의 큰 상자로 판매됩니다.
+`Package` 열을 보면 호박이 여러 형태로 판매됩니다. '1 1/9 bushel', '1/2 bushel' 단위로 팔리기도 하고, 개별 호박 단위, 파운드 단위, 크기가 다른 큰 상자 단위 등 다양합니다.
-> 호박은 일관되게 무게를 측정하기가 매우 어렵습니다.
+> 호박은 일관되게 무게를 재기 매우 어려운 것 같습니다
-원래 데이터를 살펴보면, `Unit of Sale`이 'EACH' 또는 'PER BIN'인 경우 `Package` 유형이 인치 단위, 빈 단위 또는 'each'로 표시됩니다. 호박은 일관되게 무게를 측정하기가 매우 어려운 것 같습니다. 따라서 `Package` 열에 'bushel' 문자열이 포함된 호박만 선택하여 필터링해 봅시다.
+원본 데이터를 더 들여다보면 `Unit of Sale`이 'EACH' 또는 'PER BIN'인 항목은 `Package` 타입이 인치 단위, 빈 단위, 또는 'each'로 표시되어 있는 것을 알 수 있습니다. 호박은 정량적으로 무게 측정이 어렵기 때문에, `Package` 열에 'bushel' 문자열이 포함된 항목만 선택해 필터링해 보겠습니다.
-1. 초기 .csv 가져오기 아래에 필터를 추가하세요.
+1. 파일 상단, 초기 .csv 임포트 아래에 필터를 추가하세요:
```python
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
```
- 데이터를 출력하면 이제 'bushel'이 포함된 약 415개의 데이터 행만 가져오는 것을 확인할 수 있습니다.
+ 이제 데이터를 출력하면 약 415행 정도로 버쉘 단위 호박 데이터만 얻은 것을 볼 수 있습니다.
-### 그런데! 해야 할 일이 하나 더 있습니다
+### 잠깐! 한 가지 작업이 더 필요합니다
-버셸 양이 행마다 다르다는 것을 눈치챘나요? 가격을 표준화하여 버셸 단위로 가격을 표시하도록 수학적 계산을 수행해야 합니다.
+버쉘 단위가 행마다 다름을 알았나요? 가격을 버쉘 단위로 표준화해야 하니, 수학적 계산을 통해 정규화하세요.
-1. 새 데이터프레임을 생성하는 블록 아래에 다음 줄을 추가하세요.
+1. `new_pumpkins` 데이터프레임 생성 블록 다음에 아래 코드를 추가합니다:
```python
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)
@@ -134,38 +134,38 @@ Visual Studio Code에서 _notebook.ipynb_ 파일을 열고 스프레드시트를
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
```
-✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308)에 따르면, 버셸의 무게는 농산물의 종류에 따라 다릅니다. 이는 부피 측정 단위입니다. "예를 들어, 토마토 한 버셸은 56파운드로 간주됩니다... 잎과 채소는 더 많은 공간을 차지하지만 무게는 적기 때문에 시금치 한 버셸은 20파운드에 불과합니다." 이는 매우 복잡합니다! 버셸을 파운드로 변환하는 작업은 생략하고 대신 버셸 단위로 가격을 표시합시다. 그러나 호박의 버셸을 연구하면서 데이터의 특성을 이해하는 것이 얼마나 중요한지 알게 됩니다!
+✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308)에 따르면 버쉘은 부피 단위이기 때문에 농산물 종류에 따라 무게가 다릅니다. "예를 들어 토마토 한 버쉘은 56파운드여야 합니다... 잎채소는 부피는 크지만 무게가 적어 시금치 한 버쉘은 20파운드에 불과합니다." 매우 복잡합니다! 버쉘-파운드 변환 대신 버쉘 단위로 가격을 책정합시다. 버쉘 단위 호박 연구는 데이터 특성을 이해하는 것이 얼마나 중요한지 보여줍니다!
-이제 버셸 측정 단위에 따라 가격을 분석할 수 있습니다. 데이터를 한 번 더 출력하면 표준화된 데이터를 확인할 수 있습니다.
+이제 버쉘 단위 가격을 분석할 수 있습니다. 데이터를 한 번 더 출력해 보면 표준화된 모습을 확인할 수 있습니다.
-✅ 반 버셸로 판매되는 호박이 매우 비싸다는 것을 눈치챘나요? 왜 그런지 알아낼 수 있나요? 힌트: 작은 호박은 큰 호박보다 훨씬 비쌉니다. 이는 큰 속이 빈 파이 호박 하나가 차지하는 공간 때문에 버셸당 훨씬 더 많은 작은 호박이 포함되기 때문입니다.
+✅ 반 버쉘 단위의 호박 가격이 매우 비싼 점 눈치 챘나요? 왜 그런지 이유를 생각해 보세요. 힌트: 작은 호박은 큰 호박보다 버쉘당 훨씬 비싸게 평가되며, 아마도 큰 빈 구멍이 있는 파이 호박으로 인해 버쉘당 개수가 훨씬 많기 때문입니다.
## 시각화 전략
-데이터 과학자의 역할 중 하나는 자신이 작업하는 데이터의 품질과 특성을 보여주는 것입니다. 이를 위해 데이터의 다양한 측면을 보여주는 흥미로운 시각화, 즉 플롯, 그래프, 차트를 생성합니다. 이를 통해 관계와 격차를 시각적으로 보여줄 수 있으며, 이는 그렇지 않으면 발견하기 어려운 경우가 많습니다.
+데이터 과학자의 역할 중 하나는 자신이 다루는 데이터의 품질과 특성을 보여주는 것입니다. 이를 위해 다양한 시각화, 플롯, 그래프, 차트 등을 만들어 데이터의 여러 측면을 시각적으로 표현합니다. 이를 통해 데이터 간 관계나 누락된 부분을 쉽게 발견할 수 있습니다.
-[](https://youtu.be/SbUkxH6IJo0 "ML 초보자를 위한 Matplotlib을 사용한 데이터 시각화 방법")
+[](https://youtu.be/SbUkxH6IJo0 "초보자를 위한 ML - Matplotlib으로 데이터 시각화하기")
-> 🎥 위 이미지를 클릭하면 이 강의를 위한 데이터를 시각화하는 과정을 다룬 짧은 영상을 볼 수 있습니다.
+> 🎥 위 이미지를 클릭하면 이 강의 데이터 시각화 과정의 짧은 영상이 재생됩니다.
-시각화는 데이터에 가장 적합한 머신러닝 기법을 결정하는 데도 도움이 됩니다. 예를 들어, 선을 따르는 것처럼 보이는 산점도는 데이터가 선형 회귀 연습에 적합하다는 것을 나타냅니다.
+시각화는 데이터에 가장 적합한 머신러닝 기법을 결정하는 데에도 도움이 됩니다. 예를 들어 점들이 선을 따르는 산점도는 데이터가 선형 회귀 연습에 적합하다는 신호입니다.
-Jupyter 노트북에서 잘 작동하는 데이터 시각화 라이브러리 중 하나는 [Matplotlib](https://matplotlib.org/)입니다(이전 강의에서도 보았습니다).
+Jupyter 노트북에서 잘 작동하는 데이터 시각화 라이브러리 중 하나가 [Matplotlib](https://matplotlib.org/)입니다 (이전 강의에서도 살펴봤습니다).
-> 데이터 시각화에 대한 경험을 더 쌓고 싶다면 [이 튜토리얼](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott)을 확인하세요.
+> 시각화 경험을 더 쌓으려면 [이 튜토리얼들](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott)을 참고하세요.
-## 실습 - Matplotlib 실험하기
+## 연습 문제 - Matplotlib 실험
-방금 생성한 새 데이터프레임을 표시하기 위해 기본 플롯을 만들어 보세요. 기본 선형 플롯은 무엇을 보여줄까요?
+방금 만든 새 데이터프레임을 보여주는 기본 플롯 몇 가지를 만들어 보세요. 기본 선형 플롯은 무엇을 보여줄까요?
-1. 파일 상단의 Pandas 가져오기 아래에 Matplotlib을 가져옵니다.
+1. 파일 상단, Pandas 임포트 아래에 Matplotlib을 임포트하세요:
```python
import matplotlib.pyplot as plt
```
-1. 노트북 전체를 다시 실행하여 새로 고칩니다.
-1. 노트북 하단에 데이터를 박스로 표시하는 셀을 추가합니다.
+1. 노트북 전체를 다시 실행해 새로 고침하세요.
+1. 노트북 하단에 셀을 추가해 다음과 같이 상자 그림을 그리세요:
```python
price = new_pumpkins.Price
@@ -174,44 +174,121 @@ Jupyter 노트북에서 잘 작동하는 데이터 시각화 라이브러리 중
plt.show()
```
- 
+ 
- 이 플롯이 유용한가요? 놀라운 점이 있나요?
+ 이 플롯이 유용할까요? 무엇인가 놀랍게 느껴지나요?
- 이 플롯은 특정 월에 데이터가 퍼져 있는 점으로만 표시되므로 특별히 유용하지 않습니다.
+ 별로 유용하지 않습니다. 그저 월별 데이터가 점들로 퍼져 있는 모습만 보여줍니다.
### 유용하게 만들기
-유용한 데이터를 표시하려면 데이터를 그룹화해야 합니다. y축에 월을 표시하고 데이터가 분포를 나타내는 플롯을 만들어 봅시다.
+차트가 유용한 데이터를 보여주려면 데이터를 어떤 식으로든 그룹화해야 합니다. 이번에는 y축에 월을 표시하고 데이터 분포를 시각화하는 플롯을 만들어 보겠습니다.
-1. 그룹화된 막대 차트를 생성하는 셀을 추가합니다.
+1. 그룹화된 막대 그래프를 생성하는 셀을 추가하세요:
```python
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')
plt.ylabel("Pumpkin Price")
```
- 
+ 
+
+ 더 유용한 시각화입니다! 9월과 10월에 호박 가격이 가장 높다는 점을 보여 줍니다. 예상과 부합하나요? 왜 그렇거나 왜 아닌가요?
+
+## 연습 문제 - Seaborn 실험
+
+Matplotlib은 강력하지만 세련된 차트를 만들려면 코드가 많을 수 있습니다. [Seaborn](https://seaborn.pydata.org/)은 Matplotlib 위에 구축된 통계적 데이터 시각화 라이브러리로, Pandas 데이터프레임과 바로 작동하고 매력적인 기본 스타일을 적용해 훨씬 적은 코드로 유용한 플롯을 만들 수 있습니다. Seaborn은 Matplotlib 객체를 반환하므로, 기존 Matplotlib 활용법을 그대로 이용해 결과를 세밀하게 조정할 수 있습니다.
+
+> 아직 Seaborn이 설치되어 있지 않다면 `pip install seaborn`으로 설치하세요.
+
+1. 노트북 상단, 다른 임포트 아래에 Seaborn을 임포트하세요. 보통 `sns` 별칭으로 임포트합니다:
+
+ ```python
+ import seaborn as sns
+ ```
+
+### 변수 관계를 보여주는 산점도
+
+모델 구축 전에 데이터를 탐색하는 중요한 부분은 변수들 간 _관계_를 찾는 것입니다. [산점도](https://en.wikipedia.org/wiki/Scatter_plot)는 이 작업에 가장 좋은 도구 중 하나입니다: 점들이 선을 따르거나 패턴이 있으면 두 변수 간 상관관계가 있다는 뜻이며, 선형 회귀 모델에 적합할 수 있다는 좋은 신호입니다.
+
+1. 이전에 만들었던 가격 대 월 산점도를, 이번에는 Seaborn의 [`relplot()`](https://seaborn.pydata.org/generated/seaborn.relplot.html) (관계형 플롯)을 사용해 데이터프레임 열을 바로 참조하여 다시 만드세요:
+
+ ```python
+ sns.relplot(x="Price", y="Month", data=new_pumpkins)
+ ```
+
+ 
+
+ 열 이름과 데이터프레임을 전달하는 방법을 주목하세요. Seaborn이 자동으로 축 레이블을 처리합니다.
+
+2. `kind="line"` 옵션을 전달하면 선형 플롯으로 전환할 수 있습니다. Seaborn은 선 주변에 신뢰 구간을 표시하는 음영 밴드도 그립니다:
+
+ ```python
+ sns.relplot(x="Price", y="Month", kind="line", data=new_pumpkins)
+ ```
+
+ 
+
+ 이 데이터는 꽤 잡음이 있어서 선형 플롯이 가장 명확하진 않지만, Seaborn에서 차트 유형을 쉽게 변경할 수 있음을 보여 줍니다.
+
+### 분포를 보여주는 막대 그래프
+
+
+앞서 Matplotlib을 사용해 데이터를 수작업으로 그룹화하여 막대 그래프를 만들었습니다. Seaborn의 [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html)(범주형 플롯)은 그룹화와 집계를 대신해 줄 수 있습니다. 기본값 `kind="bar"`는 각 범주의 평균과 신뢰 구간을 나타내는 검은 선을 함께 표시합니다.
+
+1. 월별 평균 가격 막대 그래프를 만드세요:
+
+ ```python
+ sns.catplot(x="Month", y="Price", data=new_pumpkins, kind="bar")
+ ```
+
+ 
+
+ 이는 Matplotlib에서 본 것과 일치합니다 — 가격은 9월과 10월에 정점에 달합니다 — 그러나 Seaborn은 각 월 내 가격이 얼마나 _변동_하는지도 시각화합니다.
+
+### 상관관계를 보여주는 히트맵
+
+산점도는 한 번에 두 변수만 비교합니다. 여러 숫자형 열이 있을 때는 [히트맵](https://en.wikipedia.org/wiki/Heat_map)을 사용하면 모든 열 쌍간 관계 강도를 한눈에 볼 수 있습니다. 이는 모델에 어떤 특성을 넣을지 선택하기 전 가장 상관성이 큰 특성을 찾는 흔한 방법이며 (그리고 이후 분류에서 혼동 행렬을 표시할 때도 같은 유형의 차트를 사용합니다).
+
+1. Pandas로 상관 행렬을 만들고 Seaborn의 [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html)으로 그립니다. `annot=True` 옵션은 각 셀에 상관값을 출력합니다:
+
+ ```python
+ correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()
+ sns.heatmap(correlations, annot=True, cmap="coolwarm")
+ ```
+
+ 
+
+ `1` (또는 `-1`)에 가까운 값은 열들이 강하게 _선형적으로_ 상관됨을 의미합니다. `Low Price`와 `High Price`가 거의 완벽히 상관되어 있음을 확인하세요. 한편 `Month`는 가격과 약한 선형 상관만 보여줍니다 — 위의 막대 그래프가 9월과 10월의 뚜렷한 계절 피크를 나타냈음에도 말이죠. 이것은 중요한 교훈입니다: 상관계수는 _직선_ 관계만 측정하므로 계절성이나 다른 비선형 패턴을 놓칠 수 있습니다. ✅ 어떤 열을 사용할지 결정하기 전에 왜 히트맵과 막대 그래프 같은 차트를 함께 보는 것이 유용할까요?
+
+### Matplotlib 또는 Seaborn?
+
+두 라이브러리 모두 익혀둘 가치가 있습니다:
+
+- Matplotlib은 차트의 모든 요소를 정밀하게 제어할 수 있게 하며 거의 모든 다른 Python 그래프 라이브러리가 기반으로 삼고 있습니다.
+- Seaborn은 통계 차트를 위한 고수준 함수와 매력적인 기본값을 제공하며 데이터프레임과 직접 작동하고 탐색적 데이터 분석에 더 빠른 경우가 많습니다.
- 이 시각화는 더 유용합니다! 호박의 최고 가격이 9월과 10월에 발생한다는 것을 나타내는 것 같습니다. 이것이 예상과 일치하나요? 왜 그런지 생각해 보세요.
+일반적인 작업 흐름은 데이터를 빠르게 탐색할 때 Seaborn을 사용하고, 세부 사항을 조정해야 할 때 Matplotlib으로 내려가는 것입니다.
---
## 🚀도전 과제
-Matplotlib이 제공하는 다양한 시각화 유형을 탐색해 보세요. 회귀 문제에 가장 적합한 유형은 무엇인가요?
+Matplotlib과 Seaborn이 제공하는 다양한 시각화 유형을 탐색하세요. 어떤 유형이 회귀 문제에 가장 적합한가요?
## [강의 후 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
-## 복습 및 자기 학습
+## 복습 및 자기 공부
-데이터를 시각화하는 다양한 방법을 살펴보세요. 사용 가능한 라이브러리 목록을 작성하고, 2D 시각화와 3D 시각화와 같은 특정 작업에 가장 적합한 라이브러리를 기록하세요. 무엇을 발견했나요?
+데이터를 시각화하는 다양한 방법을 살펴보세요. 사용 가능한 여러 라이브러리를 나열하고 2D 시각화와 3D 시각화 같은 작업 유형별로 어떤 것이 가장 적합한지 기록해보세요. 무엇을 발견하나요?
## 과제
-[시각화 탐구](assignment.md)
+[시각화 탐색하기](assignment.md)
---
-**면책 조항**:
-이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서의 원어 버전을 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 책임을 지지 않습니다.
\ No newline at end of file
+
+**면책 조항**:
+이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역은 오류나 부정확한 부분이 있을 수 있음을 유의하시기 바랍니다. 원본 문서의 원어본이 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우, 전문가의 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
+
\ No newline at end of file
diff --git a/translations/ko/2-Regression/2-Data/solution/notebook.ipynb b/translations/ko/2-Regression/2-Data/solution/notebook.ipynb
index ba857b49a..a28c4d72d 100644
--- a/translations/ko/2-Regression/2-Data/solution/notebook.ipynb
+++ b/translations/ko/2-Regression/2-Data/solution/notebook.ipynb
@@ -3,7 +3,9 @@
{
"cell_type": "markdown",
"metadata": {},
- "source": []
+ "source": [
+ "## 호박을 위한 선형 회귀 - 레슨 2\n"
+ ]
},
{
"cell_type": "code",
@@ -220,6 +222,7 @@
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
+ "import seaborn as sns\n",
"pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n",
"\n",
"pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n",
@@ -383,18 +386,78 @@
"plt.ylabel(\"Pumpkin Price\")"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Seaborn으로 시각화하기\n",
+ "\n",
+ "[Seaborn](https://seaborn.pydata.org/)은 Matplotlib 위에 구축되었으며 데이터프레임과 직접 작동하여 아주 적은 코드로도 매력적인 통계 그래프를 빠르게 만들 수 있습니다.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 관계를 보여주는 산점도\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sns.relplot(x=\"Price\", y=\"Month\", data=new_pumpkins)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sns.relplot(x=\"Price\", y=\"Month\", kind=\"line\", data=new_pumpkins)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 분포를 보여주는 막대 차트\n"
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
- "source": []
+ "source": [
+ "sns.catplot(x=\"Month\", y=\"Price\", data=new_pumpkins, kind=\"bar\")"
+ ]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n---\n\n**면책 조항**: \n이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. \n"
+ "### 상관관계를 보여주는 히트맵\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()\n",
+ "sns.heatmap(correlations, annot=True, cmap=\"coolwarm\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n\n\n**면책 조항**:\n이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역은 오류나 부정확한 부분이 있을 수 있음을 유의하시기 바랍니다. 원본 문서의 원어본이 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우, 전문가의 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.\n\n"
]
}
],
@@ -424,13 +487,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
- "orig_nbformat": 2,
- "coopTranslator": {
- "original_hash": "95726f0b8283628d5356a4f8eb8b4b76",
- "translation_date": "2025-09-04T01:36:37+00:00",
- "source_file": "2-Regression/2-Data/solution/notebook.ipynb",
- "language_code": "ko"
- }
+ "orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2
diff --git a/translations/ko/8-Reinforcement/1-QLearning/README.md b/translations/ko/8-Reinforcement/1-QLearning/README.md
index 0999b2aa2..6abb1d509 100644
--- a/translations/ko/8-Reinforcement/1-QLearning/README.md
+++ b/translations/ko/8-Reinforcement/1-QLearning/README.md
@@ -1,47 +1,47 @@
# 강화 학습과 Q-러닝 소개
-
-> 스케치노트 제공: [Tomomi Imura](https://www.twitter.com/girlie_mac)
+
+> 스케치노트 작성자 [Tomomi Imura](https://www.twitter.com/girlie_mac)
-강화 학습은 세 가지 중요한 개념을 포함합니다: 에이전트, 상태, 그리고 각 상태에서의 행동 집합. 특정 상태에서 행동을 실행하면 에이전트는 보상을 받습니다. 컴퓨터 게임 슈퍼 마리오를 다시 상상해 보세요. 당신은 마리오이고, 게임 레벨에서 절벽 가장자리 옆에 서 있습니다. 위에는 동전이 있습니다. 당신이 마리오로서 특정 위치에 있는 게임 레벨에 있다는 것이 바로 당신의 상태입니다. 오른쪽으로 한 걸음 이동하는 행동은 절벽 아래로 떨어지게 되어 낮은 점수를 받게 됩니다. 하지만 점프 버튼을 누르면 점수를 얻고 살아남을 수 있습니다. 이는 긍정적인 결과이며, 높은 점수를 받아야 합니다.
+강화 학습은 세 가지 중요한 개념을 포함합니다: 에이전트, 상태들, 그리고 각 상태별 행동 집합입니다. 지정된 상태에서 행동을 실행함으로써 에이전트는 보상을 받습니다. 다시 슈퍼 마리오 게임을 상상해 보십시오. 당신은 마리오이고, 게임 레벨 안에서 절벽 옆에 서 있습니다. 위에는 동전이 있습니다. 당신이 마리오이고, 게임 레벨에서 특정 위치에 있는 것이 ... 바로 당신의 상태입니다. 오른쪽으로 한 걸음 움직이는 것(행동)은 절벽 밖으로 떨어지게 하여 낮은 점수를 받을 것입니다. 하지만 점프 버튼을 누르면 점수를 얻고 살아남게 됩니다. 이것은 긍정적인 결과이며 긍정적인 숫자 점수를 부여해야 합니다.
-강화 학습과 시뮬레이터(게임)를 사용하면 살아남고 최대한 많은 점수를 얻는 보상을 극대화하기 위해 게임을 플레이하는 방법을 배울 수 있습니다.
+강화 학습과 시뮬레이터(게임)를 사용하여 보상을 극대화하는 방법, 즉 생존하고 많은 점수를 얻는 방법을 배울 수 있습니다.
[](https://www.youtube.com/watch?v=lDq_en8RNOo)
-> 🎥 위 이미지를 클릭하여 Dmitry가 강화 학습에 대해 설명하는 영상을 시청하세요.
+> 🎥 위 이미지를 클릭하여 Dmitry가 강화 학습에 대해 이야기하는 내용을 들어보세요
-## [강의 전 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
+## [수업 전 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
-## 사전 준비 및 설정
+## 전제 조건 및 설정
-이 강의에서는 Python으로 코드를 실험해 볼 것입니다. 이 강의의 Jupyter Notebook 코드를 컴퓨터 또는 클라우드에서 실행할 수 있어야 합니다.
+이 수업에서는 Python 코드를 실험해 볼 것입니다. 여러분은 이 수업의 Jupyter Notebook 코드를 컴퓨터나 클라우드 어디서든 실행할 수 있어야 합니다.
-[강의 노트북](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb)을 열어 이 강의를 따라가며 실습을 진행하세요.
+[수업 노트북](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb)을 열고 이 수업을 따라가며 코드를 작성할 수 있습니다.
-> **참고:** 클라우드에서 이 코드를 열 경우, 노트북 코드에서 사용되는 [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) 파일도 가져와야 합니다. 이 파일을 노트북과 동일한 디렉토리에 추가하세요.
+> **참고:** 클라우드에서 이 코드를 여는 경우, 노트북 코드에서 사용되는 [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) 파일도 받아서 노트북과 같은 디렉터리에 두어야 합니다.
## 소개
-이 강의에서는 러시아 작곡가 [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev)의 음악 동화 **[피터와 늑대](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**에서 영감을 받아 피터가 환경을 탐험하고 맛있는 사과를 모으며 늑대를 피하도록 하는 **강화 학습**을 탐구할 것입니다.
+이 수업에서는 러시아 작곡가 [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev)의 음악 동화에서 영감을 받은 **[피터와 늑대](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)** 세계를 탐험합니다. 강화 학습을 사용하여 피터가 환경을 탐험하고 맛있는 사과를 모으며 늑대를 피하도록 할 것입니다.
-**강화 학습**(RL)은 여러 실험을 실행하여 **에이전트**가 특정 **환경**에서 최적의 행동을 학습할 수 있도록 하는 학습 기법입니다. 이 환경에서 에이전트는 **보상 함수**로 정의된 **목표**를 가져야 합니다.
+**강화 학습**(Reinforcement Learning, RL)은 많은 실험을 통해 어떤 환경에서 에이전트의 최적 행동을 학습하는 기법입니다. 이 환경에서 에이전트는 일정한 보상 함수로 정의되는 목표를 가져야 합니다.
## 환경
-간단히 하기 위해, 피터의 세계를 `width` x `height` 크기의 정사각형 보드로 간주해 봅시다:
+간단히 하기 위해 피터의 세계를 `가로` x `세로` 크기의 정사각형 보드로 생각해 봅시다:
-
+
-이 보드의 각 셀은 다음 중 하나일 수 있습니다:
+이 보드의 각 칸(cell)은 다음 중 하나일 수 있습니다:
-* **땅**: 피터와 다른 생물들이 걸을 수 있는 곳.
-* **물**: 당연히 걸을 수 없는 곳.
-* **나무** 또는 **풀**: 쉴 수 있는 장소.
-* **사과**: 피터가 먹기 위해 찾고 싶어하는 것.
-* **늑대**: 위험하며 피해야 하는 존재.
+* **땅(ground)**, 피터와 다른 생물이 걸을 수 있는 곳.
+* **물(water)**, 당연히 걸을 수 없는 곳.
+* **나무(tree)** 또는 **풀(grass)**, 쉴 수 있는 장소.
+* **사과(apple)**, 피터가 자신을 먹일 수 있게 찾아 기뻐할 것.
+* **늑대(wolf)**, 위험하며 피해야 할 존재.
-이 환경을 다루는 코드는 별도의 Python 모듈 [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py)에 포함되어 있습니다. 이 코드는 개념을 이해하는 데 중요하지 않으므로 모듈을 가져와 샘플 보드를 생성하는 데 사용합니다(코드 블록 1):
+별도의 Python 모듈 [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py)가 이 환경을 다루는 코드를 포함합니다. 이 코드는 개념 이해에 중요하지 않으므로 모듈을 불러와 샘플 보드를 만드는 데 사용하겠습니다 (코드 블록 1):
```python
from rlboard import *
@@ -52,63 +52,63 @@ m.randomize(seed=13)
m.plot()
```
-이 코드는 위 그림과 유사한 환경을 출력해야 합니다.
+이 코드는 위와 유사한 환경 그림을 출력할 것입니다.
## 행동과 정책
-이 예제에서 피터의 목표는 늑대와 다른 장애물을 피하면서 사과를 찾는 것입니다. 이를 위해 그는 사과를 찾을 때까지 주변을 걸어다닐 수 있습니다.
+예제에서 피터의 목표는 늑대를 피하면서 사과를 찾는 것입니다. 이를 위해 피터는 사과를 찾을 때까지 걸어 다닐 수 있습니다.
-따라서 그는 어떤 위치에서든 다음 행동 중 하나를 선택할 수 있습니다: 위, 아래, 왼쪽, 오른쪽.
+따라서 어떤 위치에서도 위, 아래, 왼쪽, 오른쪽 중 하나의 행동을 선택할 수 있습니다.
-이 행동들을 사전으로 정의하고, 해당 좌표 변화에 매핑합니다. 예를 들어, 오른쪽으로 이동(`R`)은 `(1,0)`에 해당합니다(코드 블록 2):
+이 행동들을 사전(dictionary)으로 정의하고, 각각에 해당하는 좌표 변화 쌍에 매핑할 것입니다. 예를 들어, 오른쪽으로 이동하는 것(`R`)은 `(1,0)` 쌍에 해당합니다. (코드 블록 2):
```python
actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) }
action_idx = { a : i for i,a in enumerate(actions.keys()) }
```
-이 시나리오의 전략과 목표를 요약하면 다음과 같습니다:
+요약하자면, 이 시나리오의 전략과 목표는 다음과 같습니다:
-- **전략**: 에이전트(피터)의 전략은 **정책**이라고 불리는 함수로 정의됩니다. 정책은 주어진 상태에서 행동을 반환합니다. 이 경우, 문제의 상태는 보드와 플레이어의 현재 위치로 표현됩니다.
+- 전략은 에이전트(피터)의 행동 방침인 정책(policy)으로 정의됩니다. 정책은 주어진 상태에서 취할 행동을 반환하는 함수입니다. 여기서 문제의 상태는 현재 플레이어 위치를 포함한 보드로 표현됩니다.
-- **목표**: 강화 학습의 목표는 문제를 효율적으로 해결할 수 있는 좋은 정책을 학습하는 것입니다. 하지만 기본적으로 가장 간단한 정책인 **랜덤 워크**를 고려해 봅시다.
+- 목표는 결국 강화 학습이 효과적으로 문제를 해결할 수 있는 좋은 정책을 배우는 것입니다. 그러나 기본적으로는 무작위 걷기(random walk)라는 가장 단순한 정책을 고려합니다.
-## 랜덤 워크
+## 무작위 걷기
-먼저 랜덤 워크 전략을 구현하여 문제를 해결해 봅시다. 랜덤 워크에서는 허용된 행동 중에서 다음 행동을 무작위로 선택하여 사과에 도달할 때까지 이동합니다(코드 블록 3).
+먼저 무작위 걷기 전략을 구현하여 문제를 해결해 봅시다. 무작위 걷기는 허용된 행동 중에서 무작위로 다음 행동을 선택하며 사과에 도달할 때까지 진행됩니다 (코드 블록 3).
-1. 아래 코드를 사용하여 랜덤 워크를 구현하세요:
+1. 아래 코드를 사용해 무작위 걷기를 구현합니다:
```python
def random_policy(m):
return random.choice(list(actions))
def walk(m,policy,start_position=None):
- n = 0 # number of steps
- # set initial position
+ n = 0 # 단계 수
+ # 초기 위치 설정
if start_position:
m.human = start_position
else:
m.random_start()
while True:
if m.at() == Board.Cell.apple:
- return n # success!
+ return n # 성공!
if m.at() in [Board.Cell.wolf, Board.Cell.water]:
- return -1 # eaten by wolf or drowned
+ return -1 # 늑대에게 잡아먹히거나 익사함
while True:
a = actions[policy(m)]
new_pos = m.move_pos(m.human,a)
if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water:
- m.move(a) # do the actual move
+ m.move(a) # 실제 이동 수행
break
n+=1
walk(m,random_policy)
```
- `walk` 호출은 해당 경로의 길이를 반환해야 하며, 실행마다 결과가 달라질 수 있습니다.
+ `walk` 호출은 실행마다 다를 수 있는 경로 길이를 반환해야 합니다.
-1. 워크 실험을 여러 번(예: 100회) 실행하고 결과 통계를 출력하세요(코드 블록 4):
+1. 걷기 실험을 여러 번(예: 100회) 수행하고 결과 통계를 출력합니다 (코드 블록 4):
```python
def print_statistics(policy):
@@ -125,17 +125,17 @@ action_idx = { a : i for i,a in enumerate(actions.keys()) }
print_statistics(random_policy)
```
- 평균 경로 길이가 약 30-40 단계로 나타나는데, 이는 평균적으로 가장 가까운 사과까지의 거리가 약 5-6 단계인 점을 고려하면 꽤 많은 단계입니다.
+ 평균 경로 길이는 30-40걸음 정도로 상당히 긴 편이며, 가장 가까운 사과까지 평균 거리가 약 5-6걸음이라는 점을 고려하면 꽤 많습니다.
- 또한 랜덤 워크 동안 피터의 움직임을 확인할 수 있습니다:
+ 무작위 걷기 중 피터의 움직임도 볼 수 있습니다:
- 
+ 
## 보상 함수
-정책을 더 똑똑하게 만들기 위해 어떤 움직임이 다른 움직임보다 "더 나은지"를 이해해야 합니다. 이를 위해 목표를 정의해야 합니다.
+정책을 더 똑똑하게 만들기 위해서는 어떤 움직임이 다른 것보다 "더 좋다"는 것을 이해해야 합니다. 이를 위해 목표를 정의해야 합니다.
-목표는 **보상 함수**로 정의될 수 있으며, 각 상태에 대해 점수 값을 반환합니다. 숫자가 높을수록 보상이 더 좋습니다(코드 블록 5).
+목표는 각 상태에 대해 점수를 반환하는 보상 함수(reward function)로 정의할 수 있습니다. 숫자가 클수록 좋은 보상을 나타냅니다. (코드 블록 5)
```python
move_reward = -0.1
@@ -154,39 +154,115 @@ def reward(m,pos=None):
return move_reward
```
-보상 함수의 흥미로운 점은 대부분의 경우 *게임이 끝날 때만 실질적인 보상을 받는다는 것*입니다. 이는 알고리즘이 긍정적인 보상으로 이어지는 "좋은" 단계를 기억하고 그 중요성을 높여야 하며, 나쁜 결과로 이어지는 모든 움직임은 억제해야 한다는 것을 의미합니다.
+보상 함수에 대한 흥미로운 점은 대부분의 경우 게임 끝에서만 실질적인 보상을 받는다는 것입니다. 이는 알고리즘이 긍정적인 결과로 이어지는 “좋은” 단계를 기억하고 중요도를 높여야 하며, 반대로 나쁜 결과로 이어지는 모든 움직임을 억제해야 함을 의미합니다.
## Q-러닝
-여기서 논의할 알고리즘은 **Q-러닝**이라고 합니다. 이 알고리즘에서 정책은 **Q-테이블**이라는 함수(또는 데이터 구조)로 정의됩니다. 이는 주어진 상태에서 각 행동의 "좋음"을 기록합니다.
+여기서 논의할 알고리즘은 Q-러닝이라고 불립니다. 이 알고리즘에서 정책은 Q-테이블이라 불리는 함수(또는 데이터 구조)로 정의됩니다. 이는 주어진 상태에서 각 행동의 "좋음" 정도를 기록합니다.
-Q-테이블은 종종 테이블 또는 다차원 배열로 표현하기 편리하기 때문에 Q-테이블이라고 불립니다. 보드의 크기가 `width` x `height`인 경우, Q-테이블을 `width` x `height` x `len(actions)` 형태의 numpy 배열로 표현할 수 있습니다(코드 블록 6).
+Q-테이블이라고 하는 이유는 이를 표나 다차원 배열 형식으로 표현하는 것이 편리하기 때문입니다. 보드 크기가 `가로` x `세로`이므로, Q-테이블은 `가로` x `세로` x `동작 수` 모양의 numpy 배열로 나타낼 수 있습니다: (코드 블록 6)
```python
Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions)
```
-Q-테이블의 모든 값을 동일한 값으로 초기화합니다. 여기서는 0.25로 설정합니다. 이는 모든 상태에서 모든 움직임이 동일하게 좋은 "랜덤 워크" 정책에 해당합니다. Q-테이블을 `plot` 함수에 전달하여 보드에서 테이블을 시각화할 수 있습니다: `m.plot(Q)`.
+모든 Q-테이블 값들을 동일한 값, 여기서는 0.25로 초기화한 것을 볼 수 있습니다. 이는 각 상태의 모든 동작이 동일하게 좋은 무작위 걷기 정책과 대응됩니다. Q-테이블을 `plot` 함수에 전달하여 보드에 시각화할 수 있습니다: `m.plot(Q)`.
-
+
-각 셀의 중앙에는 이동 방향을 나타내는 "화살표"가 있습니다. 모든 방향이 동일하기 때문에 점이 표시됩니다.
+각 칸 중앙에는 선호하는 이동 방향을 나타내는 "화살표"가 있습니다. 모든 방향이 같으므로 점(dot)으로 표시됩니다.
-이제 시뮬레이션을 실행하고 환경을 탐색하며 Q-테이블 값을 더 나은 분포로 학습해야 합니다. 이를 통해 사과로 가는 경로를 훨씬 더 빠르게 찾을 수 있습니다.
+이제 시뮬레이션을 실행하여 환경을 탐험하고 Q-테이블 값을 더 나은 분포로 학습하여 사과로 가는 경로를 훨씬 빠르게 찾을 수 있게 할 것입니다.
## Q-러닝의 핵심: 벨만 방정식
-움직이기 시작하면 각 행동은 해당 보상을 가지게 됩니다. 즉, 이론적으로 가장 높은 즉각적인 보상을 기반으로 다음 행동을 선택할 수 있습니다. 하지만 대부분의 상태에서는 움직임이 사과에 도달하는 목표를 달성하지 못하므로 어떤 방향이 더 나은지 즉시 결정할 수 없습니다.
+움직이기 시작하면 각 행동에는 즉각적인 보상이 따릅니다. 이론적으로는 가장 높은 즉각 보상에 따라 다음 행동을 선택할 수 있습니다. 그러나 대부분의 상태에서 이 움직임만으로는 사과에 도달할 수 없으므로 어떤 방향이 더 좋은지 즉시 결정할 수 없습니다.
-> 중요한 것은 즉각적인 결과가 아니라 시뮬레이션 끝에서 얻을 최종 결과입니다.
+> 즉각적인 결과가 중요한 것이 아니라, 시뮬레이션 끝에서 얻는 최종 결과가 중요하다는 점을 기억하세요.
-이 지연된 보상을 고려하기 위해 **[동적 프로그래밍](https://en.wikipedia.org/wiki/Dynamic_programming)** 원칙을 사용해야 합니다. 이는 문제를 재귀적으로 생각할 수 있도록 합니다.
+지연된 보상을 고려하기 위해서는 문제를 재귀적으로 생각할 수 있게 하는 **[동적 프로그래밍](https://en.wikipedia.org/wiki/Dynamic_programming)** 원리를 사용해야 합니다.
-현재 상태 *s*에 있다고 가정하고 다음 상태 *s'*로 이동하려고 합니다. 이렇게 하면 보상 함수로 정의된 즉각적인 보상 *r(s,a)*를 받게 되며, 추가로 미래 보상을 받게 됩니다. Q-테이블이 각 행동의 "매력"을 올바르게 반영한다고 가정하면, 상태 *s'*에서 *Q(s',a')* 값이 최대인 행동 *a'*를 선택할 것입니다. 따라서 상태 *s*에서 얻을 수 있는 최상의 미래 보상은 `max`
+현재 상태를 s라고 하고 다음 상태를 s'로 이동한다고 가정합시다. 이렇게 하면 보상 함수로 정의된 즉각 보상 r(s,a)와 일부 미래 보상을 받습니다. 만약 우리가 Q-테이블을 각 행동의 "매력도"를 정확히 반영한다고 가정하면, 상태 s'에서 우리는 최대 *Q(s',a')* 값을 갖는 행동 a를 선택할 것입니다. 따라서 상태 s에서 얻을 수 있는 최상의 미래 보상은 `max`a'Q(s',a')로 정의됩니다 (최대값은 상태 s'에서 가능한 모든 행동 a'에 대해 계산).
-## 정책 확인하기
+이것이 상태 s에서 행동 a에 대한 Q-테이블 값을 계산하는 **벨만 방정식(Bellman equation)** 입니다:
-Q-Table은 각 상태에서 각 행동의 "매력도"를 나열하고 있으므로, 이를 사용하여 우리 세계에서 효율적인 탐색을 정의하는 것은 비교적 간단합니다. 가장 간단한 경우, Q-Table 값이 가장 높은 행동을 선택하면 됩니다: (코드 블록 9)
+
+
+여기서 γ는 현재 보상과 미래 보상 중 어느 쪽을 더 선호할지 결정하는 이른바 **할인율(discount factor)** 입니다.
+
+## 학습 알고리즘
+
+위 방정식을 바탕으로 학습 알고리즘에 대한 의사 코드를 작성할 수 있습니다:
+
+* 모든 상태와 행동에 대해 동일한 값으로 Q-테이블 Q 초기화
+* 학습률 α ← 1로 설정
+* 시뮬레이션을 여러 번 반복 실행
+ 1. 임의 위치에서 시작
+ 1. 반복
+ 1. 상태 s에서 행동 *a* 선택
+ 2. 이동하여 새로운 상태 s'로 행동 실행
+ 3. 게임 종료 조건을 만나거나 총 보상이 너무 작으면 시뮬레이션 종료
+ 4. 새 상태에서 보상 *r* 계산
+ 5. 벨만 방정식에 따라 Q 함수 업데이트: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ maxa'Q(s',a'))*
+ 6. *s* ← *s'*
+ 7. 총 보상 업데이트 및 α 감소
+
+## 탐험(Explore) 대 착취(Exploit)
+
+위 알고리즘에서 2.1 단계에서 행동을 어떻게 선택할지 명시하지 않았습니다. 만약 행동을 무작위로 선택한다면, 환경을 무작위로 탐험하여 자주 죽을 가능성이 있고 평소 가지 않을 곳도 탐험할 것입니다. 반면에 이미 알고 있는 Q-테이블 값을 착취하여 가장 좋은 행동(더 높은 Q-테이블 값)을 선택하면 다른 상태를 탐험하지 못하고 최적 해결책을 찾지 못할 수 있습니다.
+
+따라서 탐험과 착취 사이에 균형을 맞추는 것이 최선입니다. 이는 상태 s에서의 행동 선택을 Q-테이블 값에 비례하는 확률로 하여 구현할 수 있습니다. 처음에 Q-테이블 값이 모두 동일하면 무작위 선택과 같지만, 학습이 진행될수록 최적 경로를 따르면서도 가끔씩 미탐험 경로를 선택할 수 있습니다.
+
+## 파이썬 구현
+
+이제 학습 알고리즘을 구현할 준비가 되었습니다. 그 전에 Q-테이블의 임의 숫자를 해당 동작의 확률 벡터로 변환하는 함수가 필요합니다.
+
+1. 함수 `probs()`를 만듭니다:
+
+ ```python
+ def probs(v,eps=1e-4):
+ v = v-v.min()+eps
+ v = v/v.sum()
+ return v
+ ```
+
+ 초기 상태에서 벡터의 모든 성분이 동일하기 때문에 0으로 나누는 오류를 피하기 위해 원래 벡터에 몇 개의 `eps`를 더합니다.
+
+5000번의 실험, 즉 epoch을 통해 학습 알고리즘을 실행합니다: (코드 블록 8)
+```python
+ for epoch in range(5000):
+
+ # 초기 지점 선택
+ m.random_start()
+
+ # 이동 시작
+ n=0
+ cum_reward = 0
+ while True:
+ x,y = m.human
+ v = probs(Q[x,y])
+ a = random.choices(list(actions),weights=v)[0]
+ dpos = actions[a]
+ m.move(dpos,check_correctness=False) # 플레이어가 보드 밖으로 이동할 수 있도록 허용하며, 이 경우 에피소드가 종료됩니다
+ r = reward(m)
+ cum_reward += r
+ if r==end_reward or cum_reward < -1000:
+ lpath.append(n)
+ break
+ alpha = np.exp(-n / 10e5)
+ gamma = 0.5
+ ai = action_idx[a]
+ Q[x,y,ai] = (1 - alpha) * Q[x,y,ai] + alpha * (r + gamma * Q[x+dpos[0], y+dpos[1]].max())
+ n+=1
+```
+
+이 알고리즘 실행 후, Q-테이블은 각 단계에서 다양한 행동의 매력도를 정의하는 값들로 업데이트됩니다. Q-테이블을 시각화하여 각 칸에 원하는 이동 방향을 향하는 벡터를 그려볼 수 있습니다. 단순화를 위해 화살촉 대신 작은 원을 그립니다.
+
+
+
+## 정책 확인
+
+Q-테이블이 각 상태별로 행동의 "매력도"를 나열하므로, 이를 활용해 우리 세계에서 효율적인 길 찾기가 가능합니다. 가장 간단하게는 가장 높은 Q-테이블 값에 해당하는 행동을 선택할 수 있습니다: (코드 블록 9)
```python
def qpolicy_strict(m):
@@ -198,17 +274,18 @@ def qpolicy_strict(m):
walk(m,qpolicy_strict)
```
-> 위 코드를 여러 번 실행해보면 가끔 "멈추는" 현상이 발생할 수 있으며, 이 경우 노트북에서 STOP 버튼을 눌러 중단해야 할 수도 있습니다. 이는 두 상태가 최적 Q-Value 관점에서 서로를 "가리키는" 상황이 발생할 때, 에이전트가 두 상태 사이를 무한히 이동하게 되는 경우 때문입니다.
+
+> 위 코드를 여러 번 실행해 보면, 때때로 "멈추는" 현상이 발생하며, 이를 중단하려면 노트북에서 STOP 버튼을 눌러야 한다는 것을 알 수 있습니다. 이는 두 상태가 최적의 Q-Value 관점에서 서로 "가리키는" 상황이 있을 수 있기 때문이며, 이 경우 에이전트가 무한히 그 상태들 사이를 오가게 됩니다.
## 🚀도전 과제
-> **과제 1:** `walk` 함수를 수정하여 경로의 최대 길이를 특정 단계 수(예: 100)로 제한하고, 위 코드가 이 값을 반환하는지 확인하세요.
+> **과제 1:** `walk` 함수를 수정하여 경로의 최대 길이를 일정한 단계 수(예: 100단계)로 제한하고, 위 코드가 때때로 이 값을 반환하는 것을 확인하세요.
-> **과제 2:** `walk` 함수를 수정하여 이전에 방문했던 장소로 돌아가지 않도록 하세요. 이렇게 하면 `walk`가 루프에 빠지는 것을 방지할 수 있지만, 에이전트가 탈출할 수 없는 위치에 "갇히는" 상황은 여전히 발생할 수 있습니다.
+> **과제 2:** `walk` 함수를 수정하여 이전에 방문했던 장소로 다시 가지 않도록 하세요. 이렇게 하면 `walk`가 무한 루프에 빠지는 것을 방지할 수 있지만, 에이전트가 빠져나올 수 없는 위치에 "갇힐" 수 있습니다.
-## 탐색
+## 내비게이션
-더 나은 탐색 정책은 우리가 학습 중에 사용했던 정책으로, 탐색과 활용을 결합한 것입니다. 이 정책에서는 Q-Table 값에 비례하여 각 행동을 특정 확률로 선택합니다. 이 전략은 여전히 에이전트가 이미 탐색한 위치로 돌아가는 결과를 초래할 수 있지만, 아래 코드에서 볼 수 있듯이 목표 위치까지의 평균 경로가 매우 짧아지는 결과를 가져옵니다(참고로 `print_statistics`는 시뮬레이션을 100번 실행합니다): (코드 블록 10)
+더 나은 내비게이션 정책은 훈련 중에 사용한, 탐사와 활용을 결합한 방법입니다. 이 정책에서는 Q-테이블 값에 비례하는 확률로 각 행동을 선택합니다. 이 전략은 여전히 에이전트가 이미 탐험한 위치로 돌아올 수 있지만, 아래 코드에서 볼 수 있듯이 기대 위치까지의 평균 경로가 매우 짧아집니다(`print_statistics`가 시뮬레이션을 100번 실행함을 기억하세요): (code block 10)
```python
def qpolicy(m):
@@ -220,30 +297,32 @@ def qpolicy(m):
print_statistics(qpolicy)
```
-이 코드를 실행한 후에는 이전보다 훨씬 짧은 평균 경로 길이를 얻을 수 있으며, 이는 대략 3-6 범위에 해당합니다.
+이 코드를 실행하면 이전보다 훨씬 짧은 평균 경로 길이(3~6 범위)를 얻을 수 있습니다.
## 학습 과정 조사
-앞서 언급했듯이, 학습 과정은 문제 공간 구조에 대한 지식을 탐색하고 활용하는 균형입니다. 학습 결과(에이전트가 목표로 가는 짧은 경로를 찾는 능력)가 개선된 것을 확인했지만, 학습 과정 중 평균 경로 길이가 어떻게 변화하는지 관찰하는 것도 흥미롭습니다:
+앞서 언급했듯이 학습 과정은 탐색과 문제 공간 구조에 대한 습득 지식의 활용 사이의 균형입니다. 학습의 결과(에이전트가 목표까지 짧은 경로를 찾도록 돕는 능력)가 향상된 것을 보았는데, 학습 과정 동안 평균 경로 길이가 어떻게 변하는지 관찰하는 것도 흥미롭습니다:
----
+
학습 내용을 요약하면 다음과 같습니다:
-- **평균 경로 길이 증가**. 처음에는 평균 경로 길이가 증가하는 것을 볼 수 있습니다. 이는 환경에 대해 아무것도 모를 때, 나쁜 상태(물이나 늑대)에 갇히기 쉽기 때문입니다. 더 많은 것을 배우고 이 지식을 활용하기 시작하면 환경을 더 오래 탐색할 수 있지만, 여전히 사과가 어디에 있는지 잘 모르는 상태입니다.
+- **평균 경로 길이가 증가한다**. 처음에는 평균 경로 길이가 증가합니다. 이는 환경에 대해 아무것도 모를 때, 물 또는 늑대와 같은 나쁜 상태에 갇힐 가능성이 크기 때문입니다. 더 많이 학습하고 이 지식을 사용함에 따라 환경을 더 오래 탐색할 수 있지만, 사과 위치를 아직 잘 모릅니다.
-- **학습이 진행됨에 따라 경로 길이 감소**. 충분히 학습한 후에는 에이전트가 목표를 달성하기 쉬워지고, 경로 길이가 감소하기 시작합니다. 하지만 여전히 탐색을 열어두고 있기 때문에 최적 경로에서 벗어나 새로운 옵션을 탐색하며 경로가 최적보다 길어지는 경우도 있습니다.
+- **학습이 진행될수록 경로 길이가 감소한다**. 충분히 학습하면 에이전트가 목표에 도달하기 쉬워지고 경로 길이가 감소하기 시작합니다. 그러나 여전히 탐색 가능성이 열려 있어 종종 최적 경로에서 벗어나 새 경로를 탐색하며 경로가 최적보다 길어질 수 있습니다.
-- **경로 길이의 급격한 증가**. 그래프에서 관찰할 수 있는 또 다른 점은 어느 순간 경로 길이가 급격히 증가한다는 것입니다. 이는 과정의 확률적 특성을 나타내며, Q-Table 계수를 새로운 값으로 덮어쓰면서 "망치는" 경우가 발생할 수 있음을 의미합니다. 이를 최소화하려면 학습률을 줄이는 것이 이상적입니다(예: 학습 후반부에는 Q-Table 값을 소폭만 조정).
+- **길이가 갑자기 증가한다**. 그래프에서 볼 수 있듯이 어느 시점에서는 길이가 갑자기 증가합니다. 이는 과정의 확률적 특성을 나타내고, Q-테이블 계수를 새 값으로 덮어쓰며 "망칠" 수 있음을 의미합니다. 이상적으로는 학습률을 낮춰(예: 학습 후반부에서는 Q-테이블 값을 약간만 조정) 이를 최소화해야 합니다.
-전체적으로, 학습 과정의 성공과 품질은 학습률, 학습률 감소, 할인 계수와 같은 매개변수에 크게 의존한다는 점을 기억하는 것이 중요합니다. 이러한 매개변수는 **하이퍼파라미터**라고 불리며, 학습 중에 최적화하는 **파라미터**(예: Q-Table 계수)와 구분됩니다. 최적의 하이퍼파라미터 값을 찾는 과정을 **하이퍼파라미터 최적화**라고 하며, 이는 별도의 주제로 다룰 가치가 있습니다.
+전반적으로 학습 성공과 품질은 학습률, 학습률 감소, 할인율과 같은 매개변수에 크게 의존합니다. 이러한 매개변수는 훈련 중 최적화하는 매개변수(예: Q-테이블 계수)와 구분하기 위해 하이퍼파라미터라고 불리며, 최적의 하이퍼파라미터 값을 찾는 과정을 하이퍼파라미터 최적화라고 하며 별도의 주제를 필요로 합니다.
## [강의 후 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
-## 과제
+## 과제
[더 현실적인 세계](assignment.md)
---
-**면책 조항**:
-이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있으나, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서(원어로 작성된 문서)를 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
\ No newline at end of file
+
+**면책 조항**:
+이 문서는 AI 번역 서비스 [Co-op Translator](https://github.com/Azure/co-op-translator)를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역은 오류나 부정확한 부분이 있을 수 있음을 유의하시기 바랍니다. 원본 문서의 원어본이 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우, 전문가의 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.
+
\ No newline at end of file
diff --git a/translations/ko/8-Reinforcement/2-Gym/README.md b/translations/ko/8-Reinforcement/2-Gym/README.md
index 644125a10..b5cd67c3e 100644
--- a/translations/ko/8-Reinforcement/2-Gym/README.md
+++ b/translations/ko/8-Reinforcement/2-Gym/README.md
@@ -1,14 +1,34 @@
-## 사전 준비
+# 카트폴 스케이팅
-이번 강의에서는 **OpenAI Gym**이라는 라이브러리를 사용하여 다양한 **환경**을 시뮬레이션할 것입니다. 이 강의의 코드는 로컬 환경(예: Visual Studio Code)에서 실행할 수 있으며, 이 경우 시뮬레이션이 새 창에서 열립니다. 온라인으로 코드를 실행할 경우, [여기](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7)에 설명된 대로 코드를 약간 수정해야 할 수도 있습니다.
+이전 강의에서 해결했던 문제는 장난감 문제처럼 보일 수 있으며, 실제 생활 시나리오에 적용하기 어렵다고 느껴질 수 있습니다. 그러나 실제 많은 문제들이 이와 비슷한 시나리오를 공유합니다 — 체스나 바둑 게임도 포함됩니다. 이들은 규칙이 정해진 보드와 이산 상태를 갖고 있다는 점에서 비슷합니다.
+
+## [사전 강의 퀴즈](https://ff-quizzes.netlify.app/en/ml/)
+
+## 소개
+
+이번 강의에서는 Q-러닝의 동일한 원리를 **연속 상태** 문제에 적용할 것입니다. 연속 상태란 하나 이상의 실수로 주어지는 상태를 의미합니다. 아래 문제를 다룰 예정입니다:
+
+> 문제: 피터가 늑대에게서 도망치려면 더 빨리 움직여야 합니다. Q-러닝을 이용하여 피터가 스케이트를 배우고, 특히 균형을 잡는 법을 배우는 과정을 살펴봅니다.
+
+
+
+> 피터와 그의 친구들이 늑대에게서 도망치기 위해 창의력을 발휘하고 있습니다! 이미지 제공: [Jen Looper](https://twitter.com/jenlooper)
+
+우리는 **카트폴(CartPole)** 문제라 불리는 단순화된 균형 맞추기 문제를 사용할 것입니다. 카트폴 세계에서는 수평 슬라이더가 좌우로 움직일 수 있고, 목표는 슬라이더 위에 수직 막대를 균형 있게 세우는 것입니다.
+
+
+
+## 필수 사항
+
+이번 강의에서는 OpenAI Gym이라는 라이브러리를 사용하여 다양한 환경을 시뮬레이션할 것입니다. Visual Studio Code와 같이 로컬에서 강의 코드를 실행하면, 시뮬레이션이 새 창에서 열릴 것입니다. 온라인 실행 시에는 [여기](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) 설명된 코드 조정이 필요할 수 있습니다.
## OpenAI Gym
-이전 강의에서는 게임의 규칙과 상태가 우리가 직접 정의한 `Board` 클래스에 의해 제공되었습니다. 이번에는 **시뮬레이션 환경**을 사용하여 균형 잡힌 막대의 물리학을 시뮬레이션할 것입니다. 강화 학습 알고리즘을 훈련하기 위한 가장 인기 있는 시뮬레이션 환경 중 하나는 [Gym](https://gym.openai.com/)이며, 이는 [OpenAI](https://openai.com/)에서 관리합니다. 이 Gym을 사용하면 카트폴 시뮬레이션부터 아타리 게임까지 다양한 **환경**을 생성할 수 있습니다.
+이전 강의에는 게임의 규칙과 상태를 우리가 정의한 `Board` 클래스로 표현했습니다. 이번에는 균형 잡기 물리학을 시뮬레이션하는 특수 환경을 이용합니다. 강화학습 알고리즘 훈련에 가장 널리 사용되는 시뮬레이션 환경 중 하나는 [Gym](https://gym.openai.com/)이라 불리며, [OpenAI](https://openai.com/)에서 유지 관리합니다. 이 Gym을 이용하여 카트폴 시뮬레이션부터 아타리 게임까지 다양한 환경을 만들 수 있습니다.
-> **참고**: OpenAI Gym에서 제공하는 다른 환경은 [여기](https://gym.openai.com/envs/#classic_control)에서 확인할 수 있습니다.
+> 참고: OpenAI Gym에서 사용할 수 있는 다른 환경들은 [여기](https://gym.openai.com/envs/#classic_control)에서 확인할 수 있습니다.
-먼저 Gym을 설치하고 필요한 라이브러리를 가져옵니다. (코드 블록 1):
+먼저 gym을 설치하고 필요한 라이브러리를 가져옵니다 (코드 블록 1):
```python
import sys
@@ -22,13 +42,13 @@ import random
## 연습 - 카트폴 환경 초기화하기
-카트폴 균형 문제를 다루기 위해서는 해당 환경을 초기화해야 합니다. 각 환경은 다음과 관련됩니다:
+카트폴 균형 문제를 다루려면 해당 환경을 초기화해야 합니다. 각 환경에는 다음이 연관되어 있습니다:
-- **관찰 공간**: 환경에서 얻는 정보의 구조를 정의합니다. 카트폴 문제에서는 막대의 위치, 속도 및 기타 값을 받습니다.
+- **관찰 공간**: 환경에서 받는 정보의 구조를 정의합니다. 카트폴 문제에서는 기둥의 위치, 속도 등 여러 값을 받습니다.
-- **행동 공간**: 가능한 행동을 정의합니다. 우리의 경우 행동 공간은 이산적이며, **왼쪽**과 **오른쪽** 두 가지 행동으로 구성됩니다. (코드 블록 2)
+- **행동 공간**: 가능한 행동을 정의합니다. 이 경우 행동 공간은 이산적이며, 두 가지 행동 - 왼쪽 과 오른쪽 으로 구성됩니다. (코드 블록 2)
-1. 초기화를 위해 다음 코드를 입력하세요:
+1. 초기화하려면 다음 코드를 입력하세요:
```python
env = gym.make("CartPole-v1")
@@ -37,11 +57,11 @@ import random
print(env.action_space.sample())
```
-환경이 어떻게 작동하는지 확인하려면 100단계 동안 짧은 시뮬레이션을 실행해 봅시다. 각 단계에서 `action_space`에서 무작위로 선택한 행동을 제공합니다.
+환경이 어떻게 작동하는지 보려면 100 스텝 동안 간단한 시뮬레이션을 실행해 보겠습니다. 각 스텝에서는 하나의 행동을 제공하는데, 여기서는 `action_space`에서 무작위로 행동을 선택합니다.
-1. 아래 코드를 실행하고 결과를 확인하세요.
+1. 아래 코드를 실행해 결과를 확인해 보세요.
- ✅ 이 코드는 로컬 Python 설치에서 실행하는 것이 좋습니다! (코드 블록 3)
+ ✅ 이 코드는 로컬 파이썬 설치 환경에서 실행하는 것이 좋습니다! (코드 블록 3)
```python
env.reset()
@@ -52,11 +72,11 @@ import random
env.close()
```
- 다음과 유사한 이미지를 볼 수 있어야 합니다:
+ 결과는 다음과 비슷한 이미지를 볼 수 있습니다:
- 
+ 
-1. 시뮬레이션 중에는 행동을 결정하기 위해 관찰값을 얻어야 합니다. 실제로 `step` 함수는 현재 관찰값, 보상 함수, 시뮬레이션을 계속할 가치가 있는지 여부를 나타내는 완료 플래그를 반환합니다: (코드 블록 4)
+1. 시뮬레이션 도중에는 어떻게 행동할지 결정하기 위해 관찰값을 받아야 합니다. 사실 `step` 함수는 현재 관찰값, 보상 값, 그리고 시뮬레이션을 계속할지 여부를 나타내는 완료 플래그를 반환합니다: (코드 블록 4)
```python
env.reset()
@@ -69,7 +89,7 @@ import random
env.close()
```
- 노트북 출력에서 다음과 같은 결과를 볼 수 있습니다:
+ 노트북 출력에서는 다음과 같은 결과를 볼 수 있습니다:
```text
[ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0
@@ -82,43 +102,43 @@ import random
[ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0
```
- 시뮬레이션의 각 단계에서 반환되는 관찰 벡터는 다음 값을 포함합니다:
- - 카트의 위치
- - 카트의 속도
- - 막대의 각도
- - 막대의 회전 속도
+ 시뮬레이션 각 스텝에서 반환되는 관찰 벡터는 다음 값을 포함합니다:
+ - 카트 위치
+ - 카트 속도
+ - 막대 각도
+ - 막대 회전 속도
-1. 이러한 숫자의 최소값과 최대값을 확인하세요: (코드 블록 5)
+1. 이 값들의 최소 및 최대값을 구해 봅시다: (코드 블록 5)
```python
print(env.observation_space.low)
print(env.observation_space.high)
```
- 또한 각 시뮬레이션 단계에서 보상 값이 항상 1임을 알 수 있습니다. 이는 우리의 목표가 가능한 한 오랫동안 막대를 수직에 가깝게 유지하는 것이기 때문입니다.
+ 각 시뮬레이션 단계에서 보상 값이 항상 1인 것을 알 수 있습니다. 이는 목표가 가능한 오랫동안 막대를 수직으로 유지하여 최대한 오래 생존하는 것이기 때문입니다.
- ✅ 실제로, 카트폴 시뮬레이션은 100번의 연속적인 시도에서 평균 보상이 195에 도달하면 해결된 것으로 간주됩니다.
+ ✅ 사실 카트폴 시뮬레이션은 100번 연속 시도에서 평균 보상이 195 이상이면 문제를 해결한 것으로 간주됩니다.
## 상태 이산화
-Q-Learning에서는 각 상태에서 무엇을 해야 할지를 정의하는 Q-테이블을 구축해야 합니다. 이를 위해 상태는 **이산적**이어야 하며, 더 정확히는 유한한 수의 이산 값으로 구성되어야 합니다. 따라서 관찰값을 **이산화**하여 유한한 상태 집합으로 매핑해야 합니다.
+Q-러닝에서는 각 상태에서 무엇을 할지 정의하는 Q-테이블을 만들어야 합니다. 이를 위해 상태가 이산적이어야 하며, 더 정확히는 유한한 개수의 이산 값들을 포함해야 합니다. 따라서 관찰값을 이산화하여 유한 집합의 상태로 매핑할 필요가 있습니다.
-이를 수행하는 몇 가지 방법이 있습니다:
+이를 하는 몇 가지 방법은 다음과 같습니다:
-- **구간으로 나누기**: 특정 값의 범위를 알고 있다면 이 범위를 여러 **구간**으로 나누고, 해당 값이 속하는 구간 번호로 값을 대체할 수 있습니다. 이는 numpy의 [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) 메서드를 사용하여 수행할 수 있습니다. 이 경우 디지털화에 선택한 구간 수에 따라 상태 크기를 정확히 알 수 있습니다.
+- **빈(bin)으로 나누기**: 특정 값의 구간을 알고 있으면 이 구간을 여러 빈으로 나누고, 값이 속한 빈 번호로 값을 대체할 수 있습니다. 이는 numpy의 [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) 메서드를 사용해 가능합니다. 이 경우 선택한 빈 개수에 따라 상태 크기를 정확히 알 수 있습니다.
-✅ 값을 특정 유한 범위(예: -20에서 20)로 선형 보간한 다음, 반올림하여 정수로 변환할 수 있습니다. 이는 입력 값의 정확한 범위를 모를 경우 상태 크기에 대한 제어가 약간 줄어듭니다. 예를 들어, 우리의 경우 4개의 값 중 2개는 상한/하한이 정의되어 있지 않아 상태 수가 무한해질 수 있습니다.
+✅ 선형 보간법을 사용해 값을 어떤 유한한 구간(예: -20에서 20) 안으로 가져온 뒤, 반올림하여 정수로 변환하는 방법도 있습니다. 이 경우 입력 값의 정확한 범위를 모르면 상태 크기에 대한 제어가 다소 떨어집니다. 예를 들어 우리 문제에서는 4개의 값 중 2개가 상한/하한이 없기 때문에 상태의 개수가 무한대가 될 수 있습니다.
-우리의 예제에서는 두 번째 접근법을 사용할 것입니다. 나중에 알 수 있듯이 상한/하한이 정의되지 않았음에도 불구하고, 이러한 값들은 특정 유한 범위를 벗어나는 경우가 드뭅니다. 따라서 극단적인 값의 상태는 매우 드물게 나타납니다.
+이번 예제에서는 두 번째 방법으로 진행하겠습니다. 후에 알 수 있겠지만, 상한/하한이 불명확해도 그런 극단적인 값은 드물게 발생하므로 극값 상태들은 매우 희귀합니다.
-1. 모델에서 관찰값을 받아 4개의 정수 값 튜플을 생성하는 함수는 다음과 같습니다: (코드 블록 6)
+1. 관찰값을 받아서 4개의 정수 값을 가지는 튜플로 변환하는 함수는 다음과 같습니다: (코드 블록 6)
```python
def discretize(x):
return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int))
```
-1. 구간을 사용한 또 다른 이산화 방법을 탐색해 봅시다: (코드 블록 7)
+1. 빈을 활용한 다른 이산화 방법도 살펴봅시다: (코드 블록 7)
```python
def create_bins(i,num):
@@ -126,17 +146,17 @@ Q-Learning에서는 각 상태에서 무엇을 해야 할지를 정의하는 Q-
print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10))
- ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter
- nbins = [20,20,10,10] # number of bins for each parameter
+ ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # 각 매개변수에 대한 값의 구간
+ nbins = [20,20,10,10] # 각 매개변수에 대한 빈의 수
bins = [create_bins(ints[i],nbins[i]) for i in range(4)]
def discretize_bins(x):
return tuple(np.digitize(x[i],bins[i]) for i in range(4))
```
-1. 짧은 시뮬레이션을 실행하고 이산화된 환경 값을 관찰해 봅시다. `discretize`와 `discretize_bins`를 모두 시도해 보고 차이가 있는지 확인하세요.
+1. 이제 간단한 시뮬레이션을 실행하여 이산화된 환경 값을 관찰해 보세요. `discretize` 와 `discretize_bins` 양쪽 모두 시험해 보고 차이가 있는지 확인해 보세요.
- ✅ `discretize_bins`는 0부터 시작하는 구간 번호를 반환합니다. 따라서 입력 변수 값이 0 근처일 경우 구간의 중간 값(10)을 반환합니다. `discretize`에서는 출력 값의 범위에 대해 신경 쓰지 않았기 때문에 값이 음수가 될 수 있으며, 0은 0에 해당합니다. (코드 블록 8)
+ ✅ `discretize_bins`는 0부터 시작하는 빈 번호를 반환하므로 입력 값이 0 근처일 때는 구간 중간 번호(10)를 돌려줍니다. 반면 `discretize`는 출력 값 범위를 제한하지 않아 음수가 나올 수 있기 때문에 상태 값이 이동하지 않으며, 0은 0에 대응합니다. (코드 블록 8)
```python
env.reset()
@@ -150,15 +170,15 @@ Q-Learning에서는 각 상태에서 무엇을 해야 할지를 정의하는 Q-
env.close()
```
- ✅ 환경 실행을 보고 싶다면 `env.render`로 시작하는 줄의 주석을 제거하세요. 그렇지 않으면 백그라운드에서 실행할 수 있으며, 이 방식이 더 빠릅니다. Q-Learning 과정에서는 이 "보이지 않는" 실행을 사용할 것입니다.
+ ✅ `env.render`로 시작하는 줄의 주석을 해제하면 환경이 실제 어떻게 동작하는지 볼 수 있습니다. 주석 상태라면 백그라운드에서 실행하는 것이므로 더 빠릅니다. 이 "보이지 않는" 실행 방식을 Q-러닝 과정에서 사용할 것입니다.
## Q-테이블 구조
-이전 강의에서는 상태가 0에서 8까지의 숫자 쌍으로 간단했기 때문에 Q-테이블을 8x8x2 형태의 numpy 텐서로 표현하는 것이 편리했습니다. 구간 이산화를 사용하는 경우 상태 벡터의 크기도 알려져 있으므로 동일한 접근법을 사용하여 상태를 20x20x10x10x2 배열 형태로 표현할 수 있습니다(여기서 2는 행동 공간의 차원이며, 첫 번째 차원은 관찰 공간의 각 매개변수에 대해 선택한 구간 수에 해당합니다).
+이전 강의에선 상태가 0부터 8사이의 두 숫자였어서, Q-테이블을 크기 8x8x2인 numpy 텐서로 나타내기 편했습니다. 빈 이산화를 쓰면 상태 벡터 크기가 알려져서 같은 방식을 사용하여 관찰 공간 각 매개변수에 대해 선택한 빈 수만큼 20x20x10x10x2 (끝의 2는 행동 공간 차원) 배열로 상태를 표현할 수 있습니다.
-하지만 관찰 공간의 정확한 차원이 알려지지 않은 경우도 있습니다. `discretize` 함수의 경우, 일부 원래 값이 제한되지 않았기 때문에 상태가 특정 한계 내에 유지된다는 것을 확신할 수 없습니다. 따라서 약간 다른 접근법을 사용하여 Q-테이블을 딕셔너리로 표현할 것입니다.
+그러나 때때로 관찰 공간의 정확한 차원이 알려지지 않을 수 있습니다. `discretize` 함수처럼 상태가 일정 경계 내에 머무르는지 확실치 않은 경우도 있습니다. 그래서 우리는 약간 다른 방식을 사용하여 Q-테이블을 딕셔너리로 나타냅니다.
-1. *(state, action)* 쌍을 딕셔너리 키로 사용하고, 값은 Q-테이블 항목 값에 해당합니다. (코드 블록 9)
+1. *(state, action)* 쌍을 딕셔너리 키로 쓰고, 값은 Q-테이블 엔트리 값을 대응시킵니다. (코드 블록 9)
```python
Q = {}
@@ -168,38 +188,38 @@ Q-Learning에서는 각 상태에서 무엇을 해야 할지를 정의하는 Q-
return [Q.get((state,a),0) for a in actions]
```
- 여기서 `qvalues()`라는 함수를 정의하여 특정 상태에 대해 가능한 모든 행동에 해당하는 Q-테이블 값을 반환합니다. Q-테이블에 항목이 없으면 기본값으로 0을 반환합니다.
+ 여기서는 `qvalues()` 함수도 정의하여 주어진 상태에서 가능한 모든 행동에 대한 Q-테이블 값 리스트를 반환합니다. 만약 Q-테이블에 해당 엔트리가 없으면 기본값 0을 반환합니다.
-## Q-Learning 시작하기
+## Q-러닝 시작
-이제 피터에게 균형 잡는 법을 가르칠 준비가 되었습니다!
+이제 피터에게 균형 잡기 기술을 가르쳐 봅시다!
-1. 먼저 몇 가지 하이퍼파라미터를 설정합시다: (코드 블록 10)
+1. 먼저 하이퍼파라미터를 설정합니다: (코드 블록 10)
```python
- # hyperparameters
+ # 하이퍼파라미터
alpha = 0.3
gamma = 0.9
epsilon = 0.90
```
- 여기서 `alpha`는 **학습률**로, 각 단계에서 Q-테이블의 현재 값을 어느 정도 조정해야 할지를 정의합니다. 이전 강의에서는 1로 시작하여 훈련 중에 `alpha`를 낮은 값으로 줄였습니다. 이번 예제에서는 단순성을 위해 이를 일정하게 유지할 것이며, 나중에 `alpha` 값을 조정하는 실험을 할 수 있습니다.
+ 여기서 `alpha`는 학습률로 매 단계마다 Q-테이블 값을 얼마나 조정할지 정의합니다. 이전에는 1에서 출발해 훈련 중 점차 낮추었습니다. 이번 예제에서는 단순화를 위해 고정값으로 두고 나중에 값들을 조절해 볼 수 있습니다.
- `gamma`는 **할인 계수**로, 현재 보상보다 미래 보상을 얼마나 우선시해야 하는지를 나타냅니다.
+ `gamma`는 할인율로, 미래 보상을 현재 보상보다 얼마나 더 중요시할지 나타냅니다.
- `epsilon`은 **탐험/활용 계수**로, 탐험을 선호할지 활용을 선호할지를 결정합니다. 알고리즘에서는 `epsilon` 비율만큼 Q-테이블 값을 기준으로 다음 행동을 선택하고, 나머지 경우에는 무작위 행동을 실행합니다. 이를 통해 이전에 탐색하지 않은 검색 공간 영역을 탐험할 수 있습니다.
+ `epsilon`은 탐색/활용 비율로 탐색과 활용 중 어느 쪽을 더 선호할지 결정합니다. 알고리즘에서는 `epsilon` 확률로 Q-테이블의 값을 따라 행동하고, 나머지 경우에는 무작위 행동을 실행합니다. 이렇게 해야 전에 보지 못한 탐색 영역을 살필 수 있습니다.
- ✅ 균형을 잡는 관점에서 보면, 무작위 행동(탐험)은 잘못된 방향으로의 무작위 펀치처럼 작용하며, 막대는 이러한 "실수"에서 균형을 회복하는 방법을 배워야 합니다.
+ ✅ 균형 맞추기 관점에서 무작위 행동(탐색)은 잘못된 방향에 무작위 펀치를 가하는 것이며, 막대는 이런 "실수"에서 균형 회복법을 학습해야 합니다.
### 알고리즘 개선
-이전 강의의 알고리즘을 두 가지 방식으로 개선할 수 있습니다:
+이전 강의 알고리즘에 다음 두 가지 개선을 할 수 있습니다:
-- **평균 누적 보상 계산**: 여러 시뮬레이션에 걸쳐 평균 누적 보상을 계산합니다. 5000번의 반복마다 진행 상황을 출력하며, 해당 기간 동안 누적 보상의 평균을 계산합니다. 만약 195점 이상을 얻는다면 문제를 해결했다고 간주할 수 있으며, 요구된 품질보다 더 높은 품질로 해결한 것입니다.
+- **평균 누적 보상 계산**: 여러 시뮬레이션 동안 평균 누적 보상을 계산합니다. 각 5000 반복마다 진행 상황을 출력하고 이 기간의 누적 보상 평균을 냅니다. 만약 195점 이상 획득하면 문제를 해결했다고 간주할 수 있습니다.
-- **최대 평균 누적 결과 계산**: `Qmax`를 계산하고, 해당 결과에 해당하는 Q-테이블을 저장합니다. 훈련을 실행하면 평균 누적 결과가 때때로 감소하는 것을 알 수 있으며, 이는 상황을 악화시키는 값으로 이미 학습된 Q-테이블 값을 "파괴"할 수 있음을 의미합니다.
+- **최대 평균 누적 결과 계산**, `Qmax`, 그리고 이 결과에 대응하는 Q-테이블을 저장합니다. 훈련할 때 평균 누적 결과가 가끔 감소하는데, 이때는 Q-테이블 내에서 이전에 관찰된 최적 모델 값을 유지하려고 합니다.
-1. 각 시뮬레이션에서 누적 보상을 `rewards` 벡터에 수집하여 나중에 그래프를 그립니다. (코드 블록 11)
+1. 모든 시뮬레이션에서 누적 보상을 `rewards` 벡터에 수집하여 후속 시각화에 이용합니다. (코드 블록 11)
```python
def probs(v,eps=1e-4):
@@ -214,15 +234,15 @@ Q-Learning에서는 각 상태에서 무엇을 해야 할지를 정의하는 Q-
obs = env.reset()
done = False
cum_reward=0
- # == do the simulation ==
+ # == 시뮬레이션 실행 ==
while not done:
s = discretize(obs)
if random.random() Qmax:
@@ -240,25 +260,25 @@ Q-Learning에서는 각 상태에서 무엇을 해야 할지를 정의하는 Q-
cum_rewards=[]
```
-이 결과에서 다음을 알 수 있습니다:
+다음과 같은 결과를 관찰할 수 있습니다:
-- **목표에 근접**: 100번 이상의 연속 실행에서 195 누적 보상을 얻는 목표에 매우 근접하거나 실제로 달성했을 수 있습니다! 더 작은 숫자를 얻더라도, 우리는 5000번의 실행에서 평균을 내기 때문에 공식 기준에서는 100번의 실행만 필요합니다.
+- **목표에 근접**: 100번 이상의 연속 실행에서 평균 195 누적 보상 달성에 매우 근접했거나 이미 달성했을 수 있습니다! 결과가 작아도 5000번 평균이고 공식 기준은 100번이므로 확실치 않습니다.
-- **보상이 감소하기 시작**: 때때로 보상이 감소하기 시작하는데, 이는 상황을 악화시키는 값으로 이미 학습된 Q-테이블 값을 "파괴"할 수 있음을 의미합니다.
+- **보상이 감소하기 시작함**: 가끔 보상이 떨어지는데, 이는 Q-테이블의 이미 학습된 값을 더 나쁘게 만드는 값으로 덮어쓸 수 있음을 뜻합니다.
-이 관찰은 훈련 진행 상황을 그래프로 나타내면 더 명확하게 보입니다.
+이 현상은 훈련 진행 상황을 그래프로 그리면 더 뚜렷해집니다.
-## 훈련 진행 상황 그래프 그리기
+## 훈련 진행 상황 시각화
-훈련 중에 각 반복에서 누적 보상 값을 `rewards` 벡터에 수집했습니다. 이를 반복 번호에 대해 그래프로 나타내면 다음과 같습니다:
+훈련 동안, 각 반복에서 누적 보상 값을 `rewards` 벡터에 수집했습니다. 반복 횟수에 대응하여 이 값을 그래프로 나타낸 모습은 다음과 같습니다:
```python
plt.plot(rewards)
```
-
+
-이 그래프에서는 아무것도 알 수 없습니다. 이는 확률적 훈련 과정의 특성상 훈련 세션 길이가 크게 변하기 때문입니다. 이 그래프를 더 이해하기 쉽게 만들기 위해, 예를 들어 100번의 실험에 대해 **이동 평균**을 계산할 수 있습니다. 이는 `np.convolve`를 사용하여 편리하게 수행할 수 있습니다: (코드 블록 12)
+이 그래프는 말해주는 바가 거의 없습니다. 왜냐하면 확률적 훈련 프로세스 특성상 세션 길이가 크게 달라지기 때문입니다. 이 그래프를 좀 더 의미있게 만들기 위해, 100번 실험에 대한 이동 평균을 계산할 수 있습니다. `np.convolve`로 편리하게 계산 가능합니다: (코드 블록 12)
```python
def running_average(x,window):
@@ -267,21 +287,24 @@ def running_average(x,window):
plt.plot(running_average(rewards,100))
```
-
+
+
+## 하이퍼파라미터 조절
+
+학습을 더 안정적으로 만들려면 훈련 중에 하이퍼파라미터를 조절하는 것이 좋습니다. 특히:
+
+- **학습률(alpha)**: 1에 가까운 값에서 시작해 점차 감소시킵니다. 시간이 지날수록 Q-테이블 값의 확률이 좋아지고, 완전히 덮어쓰지 않고 조금씩 조정하게 됩니다.
-## 하이퍼파라미터 조정
+- **epsilon 증가**: 탐색을 줄이고 활용을 늘리기 위해 epsilon 값을 천천히 올릴 수 있습니다. 낮은 epsilon 값에서 시작하여 1에 가까워지는 방향이 적절할 것입니다.
-학습을 더 안정적으로 만들기 위해 훈련 중에 일부 하이퍼파라미터를 조정하는 것이 좋습니다. 특히:
+> **과제 1**: 하이퍼파라미터 값을 조절하며 더 높은 누적 보상을 달성할 수 있는지 시험해 보세요. 195 이상을 얻었나요?
-- **학습률** `alpha`의 경우, 1에 가까운 값으로 시작한 다음 점차적으로 이 값을 줄이는 것이 좋습니다. 시간이 지나면 Q-테이블에서 좋은 확률 값을 얻을 수 있으며, 이를 약간만 조정하고 새 값으로 완전히 덮어쓰지 않아야 합니다.
-- **epsilon 증가**: `epsilon`을 천천히 증가시켜 탐험을 줄이고 활용을 늘리는 것이 좋습니다. 낮은 `epsilon` 값으로 시작하여 거의 1에 가까운 값으로 이동하는 것이 합리적일 수 있습니다.
-> **작업 1**: 하이퍼파라미터 값을 조정해 보며 더 높은 누적 보상을 얻을 수 있는지 확인하세요. 195점을 넘기고 있나요?
-> **과제 2**: 문제를 공식적으로 해결하려면 100번의 연속 실행에서 평균 보상이 195에 도달해야 합니다. 훈련 중에 이를 측정하고 문제를 공식적으로 해결했는지 확인하세요!
+> **과제 2**: 문제를 정식으로 해결하려면 100번 연속 실행에서 평균 보상 195를 얻어야 합니다. 훈련 중에 이를 측정하고 문제를 정식으로 해결했는지 확인하세요!
-## 결과 확인하기
+## 결과를 실제로 보기
-훈련된 모델이 실제로 어떻게 작동하는지 보는 것은 흥미로울 것입니다. 시뮬레이션을 실행하고 훈련 중과 동일한 행동 선택 전략을 따라 Q-테이블의 확률 분포에 따라 샘플링해 봅시다: (코드 블록 13)
+훈련된 모델이 실제로 어떻게 동작하는지 보는 것이 흥미로울 것입니다. 시뮬레이션을 실행하고 훈련 중과 동일한 행동 선택 전략을 따르며 Q-Table의 확률 분포에 따라 샘플링 해봅시다: (코드 블록 13)
```python
obs = env.reset()
@@ -295,17 +318,17 @@ while not done:
env.close()
```
-다음과 같은 결과를 볼 수 있을 것입니다:
+다음과 같은 것을 볼 수 있을 것입니다:

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