[de,ru,ar] chore(i18n): sync translations

Sync translations with latest source changes.
Languages: German [de], Russian [ru], Arabic [ar]
update-translations
localizeflow[bot] 1 month ago
parent f0cdcbc2fa
commit c40c66d479

@ -101,6 +101,12 @@
"source_file": "8-Reinforcement/2-Gym/images/cartpole.png",
"language_code": "ar"
},
"catplot.e73fc35fdf96242b.webp": {
"original_hash": "90cd4782a2f9b40dec8218b224b29c1c",
"translation_date": "2026-07-13T23:57:44+00:00",
"source_file": "2-Regression/2-Data/images/catplot.png",
"language_code": "ar"
},
"centroid.097fde836cf6c918.webp": {
"original_hash": "c8f866ed446563d8e59087f1bca1f97d",
"translation_date": "2026-01-16T08:25:12+00:00",
@ -383,6 +389,12 @@
"source_file": "2-Regression/3-Linear/images/heatmap.png",
"language_code": "ar"
},
"heatmap.bd98dce43b404c57.webp": {
"original_hash": "7f2f2fbd993018bc01346e1eb8ae692e",
"translation_date": "2026-07-13T23:57:57+00:00",
"source_file": "2-Regression/2-Data/images/heatmap.png",
"language_code": "ar"
},
"hierarchical.bf59403aa43c8c47.webp": {
"original_hash": "50b9bc3298659c463ae76564ca645b12",
"translation_date": "2026-01-16T08:24:56+00:00",
@ -473,6 +485,12 @@
"source_file": "2-Regression/3-Linear/images/linear.png",
"language_code": "ar"
},
"lineplot.f9034ba47b1e30ee.webp": {
"original_hash": "b3959c0ed0f02f668009c76b95c4ebbb",
"translation_date": "2026-07-13T23:58:02+00:00",
"source_file": "2-Regression/2-Data/images/lineplot.png",
"language_code": "ar"
},
"lobe.2fa0806408ef9923.webp": {
"original_hash": "e6ec71dbe350aef39135dbf88bc89163",
"translation_date": "2026-01-16T08:22:19+00:00",
@ -743,6 +761,12 @@
"source_file": "2-Regression/3-Linear/images/recipes.png",
"language_code": "ar"
},
"relplot.a03837d8f0329cec.webp": {
"original_hash": "4733544cb1c2e58e987087283e66b4a5",
"translation_date": "2026-07-13T23:57:50+00:00",
"source_file": "2-Regression/2-Data/images/relplot.png",
"language_code": "ar"
},
"scaled.91897dfbaa26ca4a.webp": {
"original_hash": "789c70fafe6f6dd6e377a90b66e7d740",
"translation_date": "2026-01-16T08:34:33+00:00",

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

@ -101,6 +101,12 @@
"source_file": "8-Reinforcement/2-Gym/images/cartpole.png",
"language_code": "de"
},
"catplot.e73fc35fdf96242b.webp": {
"original_hash": "90cd4782a2f9b40dec8218b224b29c1c",
"translation_date": "2026-07-13T23:57:42+00:00",
"source_file": "2-Regression/2-Data/images/catplot.png",
"language_code": "de"
},
"centroid.097fde836cf6c918.webp": {
"original_hash": "c8f866ed446563d8e59087f1bca1f97d",
"translation_date": "2026-01-16T08:25:04+00:00",
@ -383,6 +389,12 @@
"source_file": "2-Regression/3-Linear/images/heatmap.png",
"language_code": "de"
},
"heatmap.bd98dce43b404c57.webp": {
"original_hash": "7f2f2fbd993018bc01346e1eb8ae692e",
"translation_date": "2026-07-13T23:57:53+00:00",
"source_file": "2-Regression/2-Data/images/heatmap.png",
"language_code": "de"
},
"hierarchical.bf59403aa43c8c47.webp": {
"original_hash": "50b9bc3298659c463ae76564ca645b12",
"translation_date": "2026-01-16T08:24:47+00:00",
@ -473,6 +485,12 @@
"source_file": "2-Regression/3-Linear/images/linear.png",
"language_code": "de"
},
"lineplot.f9034ba47b1e30ee.webp": {
"original_hash": "b3959c0ed0f02f668009c76b95c4ebbb",
"translation_date": "2026-07-13T23:57:59+00:00",
"source_file": "2-Regression/2-Data/images/lineplot.png",
"language_code": "de"
},
"lobe.2fa0806408ef9923.webp": {
"original_hash": "e6ec71dbe350aef39135dbf88bc89163",
"translation_date": "2026-01-16T08:22:04+00:00",
@ -743,6 +761,12 @@
"source_file": "2-Regression/3-Linear/images/recipes.png",
"language_code": "de"
},
"relplot.a03837d8f0329cec.webp": {
"original_hash": "4733544cb1c2e58e987087283e66b4a5",
"translation_date": "2026-07-13T23:57:46+00:00",
"source_file": "2-Regression/2-Data/images/relplot.png",
"language_code": "de"
},
"scaled.91897dfbaa26ca4a.webp": {
"original_hash": "789c70fafe6f6dd6e377a90b66e7d740",
"translation_date": "2026-01-16T08:34:31+00:00",

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

@ -101,6 +101,12 @@
"source_file": "8-Reinforcement/2-Gym/images/cartpole.png",
"language_code": "ru"
},
"catplot.e73fc35fdf96242b.webp": {
"original_hash": "90cd4782a2f9b40dec8218b224b29c1c",
"translation_date": "2026-07-13T23:57:43+00:00",
"source_file": "2-Regression/2-Data/images/catplot.png",
"language_code": "ru"
},
"centroid.097fde836cf6c918.webp": {
"original_hash": "c8f866ed446563d8e59087f1bca1f97d",
"translation_date": "2026-01-16T08:25:08+00:00",
@ -383,6 +389,12 @@
"source_file": "2-Regression/3-Linear/images/heatmap.png",
"language_code": "ru"
},
"heatmap.bd98dce43b404c57.webp": {
"original_hash": "7f2f2fbd993018bc01346e1eb8ae692e",
"translation_date": "2026-07-13T23:57:55+00:00",
"source_file": "2-Regression/2-Data/images/heatmap.png",
"language_code": "ru"
},
"hierarchical.bf59403aa43c8c47.webp": {
"original_hash": "50b9bc3298659c463ae76564ca645b12",
"translation_date": "2026-01-16T08:24:51+00:00",
@ -473,6 +485,12 @@
"source_file": "2-Regression/3-Linear/images/linear.png",
"language_code": "ru"
},
"lineplot.f9034ba47b1e30ee.webp": {
"original_hash": "b3959c0ed0f02f668009c76b95c4ebbb",
"translation_date": "2026-07-13T23:58:01+00:00",
"source_file": "2-Regression/2-Data/images/lineplot.png",
"language_code": "ru"
},
"lobe.2fa0806408ef9923.webp": {
"original_hash": "e6ec71dbe350aef39135dbf88bc89163",
"translation_date": "2026-01-16T08:22:11+00:00",
@ -743,6 +761,12 @@
"source_file": "2-Regression/3-Linear/images/recipes.png",
"language_code": "ru"
},
"relplot.a03837d8f0329cec.webp": {
"original_hash": "4733544cb1c2e58e987087283e66b4a5",
"translation_date": "2026-07-13T23:57:48+00:00",
"source_file": "2-Regression/2-Data/images/relplot.png",
"language_code": "ru"
},
"scaled.91897dfbaa26ca4a.webp": {
"original_hash": "789c70fafe6f6dd6e377a90b66e7d740",
"translation_date": "2026-01-16T08:34:32+00:00",

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

@ -24,8 +24,8 @@
"language_code": "ar"
},
"1-Introduction/3-fairness/README.md": {
"original_hash": "9a6b702d1437c0467e3c5c28d763dac2",
"translation_date": "2025-09-04T20:46:15+00:00",
"original_hash": "0f00d72169a0d37eecfd16d71e01700a",
"translation_date": "2026-07-13T23:57:32+00:00",
"source_file": "1-Introduction/3-fairness/README.md",
"language_code": "ar"
},
@ -54,8 +54,8 @@
"language_code": "ar"
},
"2-Regression/1-Tools/README.md": {
"original_hash": "fa81d226c71d5af7a2cade31c1c92b88",
"translation_date": "2025-09-04T20:40:45+00:00",
"original_hash": "0b8635427b582d03ea4ab7089b93e505",
"translation_date": "2026-07-13T23:53:57+00:00",
"source_file": "2-Regression/1-Tools/README.md",
"language_code": "ar"
},
@ -72,8 +72,8 @@
"language_code": "ar"
},
"2-Regression/2-Data/README.md": {
"original_hash": "7c077988328ebfe33b24d07945f16eca",
"translation_date": "2025-09-04T20:41:20+00:00",
"original_hash": "a58b2c4d16c6b122643391745ac15af6",
"translation_date": "2026-07-13T23:54:45+00:00",
"source_file": "2-Regression/2-Data/README.md",
"language_code": "ar"
},
@ -89,6 +89,12 @@
"source_file": "2-Regression/2-Data/solution/Julia/README.md",
"language_code": "ar"
},
"2-Regression/2-Data/solution/notebook.ipynb": {
"original_hash": "96b95f8cf473481f2f371de8156f1571",
"translation_date": "2026-07-13T23:36:33+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "ar"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T20:13:41+00:00",
@ -457,7 +463,7 @@
},
"8-Reinforcement/1-QLearning/README.md": {
"original_hash": "911efd5e595089000cb3c16fce1beab8",
"translation_date": "2025-09-04T20:51:29+00:00",
"translation_date": "2026-07-13T23:55:33+00:00",
"source_file": "8-Reinforcement/1-QLearning/README.md",
"language_code": "ar"
},
@ -481,7 +487,7 @@
},
"8-Reinforcement/2-Gym/README.md": {
"original_hash": "107d5bb29da8a562e7ae72262d251a75",
"translation_date": "2025-09-04T20:52:36+00:00",
"translation_date": "2026-07-13T23:56:48+00:00",
"source_file": "8-Reinforcement/2-Gym/README.md",
"language_code": "ar"
},
@ -581,6 +587,19 @@
"source_file": "TROUBLESHOOTING.md",
"language_code": "ar"
},
"__translation_failures__": {
"sketchnotes/LICENSE.md": {
"original_hash": "fba3b94d88bfb9b81369b869a1e9a20f",
"source_file": "sketchnotes/LICENSE.md",
"language_code": "ar",
"failure_date": "2026-07-13T23:53:20+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-08-29T13:28:21+00:00",

@ -1,161 +1,167 @@
# بناء حلول التعلم الآلي باستخدام الذكاء الاصطناعي المسؤول
![ملخص الذكاء الاصطناعي المسؤول في التعلم الآلي في رسم تخطيطي](../../../../sketchnotes/ml-fairness.png)
# بناء حلول التعلم الآلي مع الذكاء الاصطناعي المسؤول
![ملخص الذكاء الاصطناعي المسؤول في التعلم الآلي في رسم تخطيطي](../../../../translated_images/ar/ml-fairness.ef296ebec6afc98a.webp)
> رسم تخطيطي بواسطة [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/)
## مقدمة
## المقدمة
في هذا المنهج، ستبدأ في اكتشاف كيف يؤثر التعلم الآلي على حياتنا اليومية. حتى الآن، تُستخدم الأنظمة والنماذج في اتخاذ قرارات يومية مثل تشخيصات الرعاية الصحية، الموافقة على القروض، أو اكتشاف الاحتيال. لذلك، من المهم أن تعمل هذه النماذج بشكل جيد لتقديم نتائج موثوقة. مثل أي تطبيق برمجي، قد تخفق أنظمة الذكاء الاصطناعي في تلبية التوقعات أو تؤدي إلى نتائج غير مرغوبة. لهذا السبب، من الضروري فهم وتفسير سلوك نموذج الذكاء الاصطناعي.
في هذا المنهج الدراسي، ستبدأ باكتشاف كيف يمكن للتعلم الآلي أن يؤثر ويؤثر بالفعل على حياتنا اليومية. حتى الآن، الأنظمة والنماذج تشارك في مهام اتخاذ القرار اليومية، مثل تشخيص الرعاية الصحية، الموافقات على القروض أو كشف الاحتيال. لذا، من المهم أن تعمل هذه النماذج بشكل جيد لتقديم نتائج جديرة بالثقة. مثل أي تطبيق برمجي، من الممكن أن تفشل أنظمة الذكاء الاصطناعي في الوفاء بالتوقعات أو أن تسفر عن نتيجة غير مرغوبة. لهذا السبب من الضروري أن نكون قادرين على فهم وشرح سلوك نموذج الذكاء الاصطناعي.
تخيل ما يمكن أن يحدث عندما تفتقر البيانات التي تستخدمها لبناء هذه النماذج إلى تمثيل ديموغرافي معين مثل العرق، الجنس، الرؤية السياسية، الدين، أو تمثيل غير متوازن لهذه الفئات. ماذا عن عندما يتم تفسير نتائج النموذج لتفضيل فئة معينة؟ ما هي العواقب على التطبيق؟ بالإضافة إلى ذلك، ماذا يحدث عندما يؤدي النموذج إلى نتائج ضارة تؤثر سلبًا على الناس؟ من المسؤول عن سلوك أنظمة الذكاء الاصطناعي؟ هذه بعض الأسئلة التي سنستكشفها في هذا المنهج.
تخيل ما قد يحدث عندما تكون البيانات التي تستخدمها لبناء هذه النماذج تفتقر إلى بعض الفئات السكانية، مثل العرق، الجنس، الرأي السياسي، الدين، أو تمثل هذه الفئات بشكل غير متناسب. ماذا عن عندما يتم تفسير ناتج النموذج لصالح فئة سكانية معينة؟ ما هي العواقب على التطبيق؟ بالإضافة إلى ذلك، ماذا يحدث عندما يكون للنموذج نتيجة سلبية وتسبب ضرراً للناس؟ من هو المسؤول عن سلوك أنظمة الذكاء الاصطناعي؟ هذه بعض الأسئلة التي سنستكشفها في هذا المنهج.
في هذه الدرس، ستتعلم:
في هذا الدرس، ستقوم بـ:
- أهمية الإنصاف في التعلم الآلي والأضرار المرتبطة به.
- زيادة وعيك بأهمية العدالة في التعلم الآلي والأضرار المتعلقة بالعدالة.
- التعرف على ممارسة استكشاف الحالات الشاذة والسيناريوهات غير المعتادة لضمان الموثوقية والسلامة.
- فهم الحاجة إلى تمكين الجميع من خلال تصميم أنظمة شاملة.
- استكشاف أهمية حماية الخصوصية وأمن البيانات والأفراد.
- إدراك أهمية النهج الشفاف لتفسير سلوك نماذج الذكاء الاصطناعي.
- التفكير في كيفية أن تكون المساءلة ضرورية لبناء الثقة في أنظمة الذكاء الاصطناعي.
- فهم الحاجة لتمكين الجميع من خلال تصميم أنظمة شاملة.
- استكشاف مدى أهمية حماية خصوصية وأمان البيانات والأشخاص.
- رؤية أهمية وجود نهج شفاف لشرح سلوك نماذج الذكاء الاصطناعي.
- الانتباه لكيفية كون المساءلة ضرورية لبناء الثقة في أنظمة الذكاء الاصطناعي.
## المتطلبات الأساسية
## المتطلبات المسبقة
كشرط مسبق، يرجى أخذ مسار التعلم "مبادئ الذكاء الاصطناعي المسؤول" ومشاهدة الفيديو أدناه حول الموضوع:
كمتطلب مسبق، يرجى أخذ مسار التعلم "مبادئ الذكاء الاصطناعي المسؤول" ومشاهدة الفيديو أدناه حول الموضوع:
تعرف على المزيد حول الذكاء الاصطناعي المسؤول من خلال متابعة هذا [مسار التعلم](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
تعرّف أكثر على الذكاء الاصطناعي المسؤول من خلال متابعة هذا [مسار التعلم](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
[![نهج مايكروسوفت تجاه الذكاء الاصطناعي المسؤول](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "نهج مايكروسوفت تجاه الذكاء الاصطناعي المسؤول")
[![نهج مايكروسوفت للذكاء الاصطناعي المسؤول](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "نهج مايكروسوفت للذكاء الاصطناعي المسؤول")
> 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو: نهج مايكروسوفت تجاه الذكاء الاصطناعي المسؤول
> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو: نهج مايكروسوفت للذكاء الاصطناعي المسؤول
## الإنصاف
## العدالة
يجب أن تعامل أنظمة الذكاء الاصطناعي الجميع بإنصاف وتتجنب التأثير على مجموعات متشابهة من الناس بطرق مختلفة. على سبيل المثال، عندما تقدم أنظمة الذكاء الاصطناعي إرشادات حول العلاج الطبي، طلبات القروض، أو التوظيف، يجب أن تقدم نفس التوصيات للجميع بناءً على أعراض مشابهة، ظروف مالية، أو مؤهلات مهنية. كل واحد منا كبشر يحمل تحيزات موروثة تؤثر على قراراتنا وأفعالنا. يمكن أن تكون هذه التحيزات واضحة في البيانات التي نستخدمها لتدريب أنظمة الذكاء الاصطناعي. قد يحدث هذا التلاعب أحيانًا دون قصد. غالبًا ما يكون من الصعب إدراك متى يتم إدخال التحيز في البيانات.
يجب أن تعامل أنظمة الذكاء الاصطناعي الجميع بشكل عادل وتتجنب التأثير بطرق مختلفة على مجموعات مماثلة من الناس. على سبيل المثال، عندما تقدم أنظمة الذكاء الاصطناعي التوجيه بشأن العلاج الطبي، طلبات القروض، أو التوظيف، يجب أن تقدم نفس التوصيات للجميع الذين لديهم أعراض متشابهة، أو ظروف مالية مماثلة، أو مؤهلات مهنية متقاربة. كل واحد منا كإنسان يحمل تحيزات مكتسبة تؤثر على قراراته وأفعاله. قد تكون هذه التحيزات واضحة في البيانات التي نستخدمها لتدريب أنظمة الذكاء الاصطناعي. قد يحدث مثل هذا التلاعب أحيانًا دون قصد. غالبًا ما يصعب معرفة متى تقوم بإدخال تحيز في البيانات بوعي.
**"عدم الإنصاف"** يشمل التأثيرات السلبية أو "الأضرار" لمجموعة من الناس، مثل تلك المحددة بناءً على العرق، الجنس، العمر، أو حالة الإعاقة. يمكن تصنيف الأضرار الرئيسية المتعلقة بالإنصاف على النحو التالي:
**"الظلم"** يشمل التأثيرات السلبية، أو "الأضرار"، لمجموعة من الناس، مثل تلك المعرفة من حيث العرق، الجنس، العمر، أو حالة الإعاقة. يمكن تصنيف الأضرار الرئيسية المتعلقة بالعدالة على النحو التالي:
- **التخصيص**، إذا تم تفضيل جنس أو عرق معين على آخر.
- **جودة الخدمة**. إذا تم تدريب البيانات على سيناريو محدد ولكن الواقع أكثر تعقيدًا، يؤدي ذلك إلى خدمة ضعيفة الأداء. على سبيل المثال، موزع صابون يدوي لم يتمكن من التعرف على الأشخاص ذوي البشرة الداكنة. [مرجع](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **التشهير**. انتقاد أو تصنيف شيء أو شخص بشكل غير عادل. على سبيل المثال، تقنية تصنيف الصور التي وصفت بشكل خاطئ صور الأشخاص ذوي البشرة الداكنة كغوريلات.
- **التمثيل الزائد أو الناقص**. الفكرة هي أن مجموعة معينة لا تُرى في مهنة معينة، وأي خدمة أو وظيفة تستمر في تعزيز ذلك تساهم في الضرر.
- **التنميط**. ربط مجموعة معينة بصفات محددة مسبقًا. على سبيل المثال، قد يكون هناك أخطاء في نظام ترجمة اللغة بين الإنجليزية والتركية بسبب الكلمات المرتبطة بالتحيزات الجندرية.
- **التخصيص**، إذا تم تفضيل جنس أو إثنية معينة على أخرى.
- **جودة الخدمة**. إذا قمت بتدريب البيانات على سيناريو محدد ولكن الواقع أكثر تعقيدًا بكثير، يؤدي ذلك إلى خدمة سيئة الأداء. على سبيل المثال، موزع صابون لا يبدو قادرًا على التعرف على الأشخاص ذوي البشرة الداكنة. [مرجع](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **الشهرة السيئة**. انتقاد لامر أو شخص بشكل غير عادل ووضع ملصقات عليه. على سبيل المثال، تقنية تصنيف الصور بالخطأ صنفت صور الأشخاص ذوي البشرة الداكنة على أنهم غوريلا.
- **التمثيل الزائد أو الناقص**. الفكرة هي أن مجموعة معينة ليست مرئية في مهنة محددة، وأي خدمة أو وظيفة تستمر في تعزيز ذلك تسهم في الإضرار.
- **الصور النمطية**. ربط مجموعة معينة بصفات محددة مسبقًا. على سبيل المثال، نظام ترجمة بين الإنجليزية والتركية قد يحتوي على أخطاء بسبب كلمات مرتبطة بالصور النمطية للجنس.
![الترجمة إلى التركية](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png)
![الترجمة إلى التركية](../../../../translated_images/ar/gender-bias-translate-en-tr.f185fd8822c2d437.webp)
> الترجمة إلى التركية
![الترجمة إلى الإنجليزية](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png)
> الترجمة إلى الإنجليزية
![الترجمة مرة أخرى إلى الإنجليزية](../../../../translated_images/ar/gender-bias-translate-tr-en.4eee7e3cecb8c70e.webp)
> الترجمة مرة أخرى إلى الإنجليزية
عند تصميم واختبار أنظمة الذكاء الاصطناعي، يجب أن نضمن أن الذكاء الاصطناعي عادل وغير مبرمج لاتخاذ قرارات متحيزة أو تمييزية، وهي قرارات يُحظر على البشر اتخاذها أيضًا. ضمان الإنصاف في الذكاء الاصطناعي والتعلم الآلي يظل تحديًا اجتماعيًا تقنيًا معقدًا.
عند تصميم واختبار أنظمة الذكاء الاصطناعي، نحتاج إلى ضمان أن الذكاء الاصطناعي عادل وليس مبرمجًا لاتخاذ قرارات متحيزة أو تمييزية، والتي يُمنع البشر من اتخاذها أيضًا. ضمان العدالة في الذكاء الاصطناعي والتعلم الآلي لا يزال تحديًا اجتماعيًا تقنيًا معقدًا.
### الموثوقية والسلامة
لبناء الثقة، يجب أن تكون أنظمة الذكاء الاصطناعي موثوقة وآمنة ومتسقة في الظروف العادية وغير المتوقعة. من المهم معرفة كيف ستتصرف أنظمة الذكاء الاصطناعي في مجموعة متنوعة من المواقف، خاصة عندما تكون هناك حالات شاذة. عند بناء حلول الذكاء الاصطناعي، يجب التركيز بشكل كبير على كيفية التعامل مع مجموعة واسعة من الظروف التي قد تواجهها هذه الحلول. على سبيل المثال، يجب أن تكون السيارة ذاتية القيادة تضع سلامة الناس كأولوية قصوى. نتيجة لذلك، يجب أن يأخذ الذكاء الاصطناعي الذي يشغل السيارة في الاعتبار جميع السيناريوهات الممكنة التي قد تواجهها السيارة مثل الليل، العواصف الرعدية أو الثلوج، الأطفال الذين يركضون عبر الشارع، الحيوانات الأليفة، أعمال الطرق، إلخ. مدى قدرة نظام الذكاء الاصطناعي على التعامل مع مجموعة واسعة من الظروف بشكل موثوق وآمن يعكس مستوى التوقعات التي أخذها عالم البيانات أو مطور الذكاء الاصطناعي في الاعتبار أثناء تصميم أو اختبار النظام.
لبناء الثقة، يجب أن تكون أنظمة الذكاء الاصطناعي موثوقة، وآمنة، ومتسقة في الظروف العادية وغير المتوقعة. من المهم معرفة كيف ستتصرف أنظمة الذكاء الاصطناعي في مجموعة متنوعة من الحالات، خاصة عندما تكون حالات شاذة. عند بناء حلول الذكاء الاصطناعي، يجب أن يكون هناك تركيز كبير على كيفية التعامل مع مجموعة واسعة من الظروف التي قد تواجهها الحلول. على سبيل المثال، يجب على السيارة ذاتية القيادة أن تضع سلامة الناس كأولوية قصوى. ونتيجة لذلك، يحتاج الذكاء الاصطناعي المشغّل للسيارة إلى النظر في جميع السيناريوهات الممكنة التي قد تواجه السيارة مثل الليل، العواصف الرعدية أو العواصف الثلجية، الأطفال الذين يركضون عبر الشارع، الحيوانات الأليفة، أعمال الطرق، وما إلى ذلك. مدى جودة قدرة نظام الذكاء الاصطناعي على التعامل مع نطاق واسع من الظروف بشكل موثوق وآمن يعكس مستوى التوقع الذي اعتبره عالم البيانات أو مطور الذكاء الاصطناعي خلال تصميم أو اختبار النظام.
> [🎥 انقر هنا لمشاهدة الفيديو: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
> [🎥 انقر هنا لمشاهدة فيديو: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
### الشمولية
يجب تصميم أنظمة الذكاء الاصطناعي لتشرك وتمكن الجميع. عند تصميم وتنفيذ أنظمة الذكاء الاصطناعي، يقوم علماء البيانات ومطورو الذكاء الاصطناعي بتحديد ومعالجة الحواجز المحتملة في النظام التي قد تستبعد الناس دون قصد. على سبيل المثال، هناك مليار شخص يعانون من إعاقات حول العالم. مع تقدم الذكاء الاصطناعي، يمكنهم الوصول إلى مجموعة واسعة من المعلومات والفرص بسهولة أكبر في حياتهم اليومية. من خلال معالجة الحواجز، يتم خلق فرص للابتكار وتطوير منتجات الذكاء الاصطناعي بتجارب أفضل تفيد الجميع.
يجب تصميم أنظمة الذكاء الاصطناعي لتشمل وتمكن الجميع. عند تصميم وتنفيذ أنظمة الذكاء الاصطناعي، يقوم علماء البيانات ومطورو الذكاء الاصطناعي بتحديد ومعالجة الحواجز المحتملة في النظام التي قد تستبعد الناس دون قصد. على سبيل المثال، هناك مليار شخص من ذوي الإعاقة حول العالم. مع تقدم الذكاء الاصطناعي، يمكنهم الوصول إلى مجموعة واسعة من المعلومات والفرص بسهولة أكبر في حياتهم اليومية. من خلال معالجة الحواجز، يتم خلق فرص للابتكار وتطوير منتجات ذكاء اصطناعي تقدم تجارب أفضل تفيد الجميع.
> [🎥 انقر هنا لمشاهدة الفيديو: الشمولية في الذكاء الاصطناعي](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
> [🎥 انقر هنا لفيديو: الشمولية في الذكاء الاصطناعي](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
### الأمن والخصوصية
### الأمان والخصوصية
يجب أن تكون أنظمة الذكاء الاصطناعي آمنة وتحترم خصوصية الناس. يقل ثقة الناس في الأنظمة التي تعرض خصوصيتهم أو معلوماتهم أو حياتهم للخطر. عند تدريب نماذج التعلم الآلي، نعتمد على البيانات للحصول على أفضل النتائج. أثناء ذلك، يجب مراعاة مصدر البيانات وسلامتها. على سبيل المثال، هل البيانات مقدمة من المستخدم أو متاحة للجمهور؟ بعد ذلك، أثناء العمل مع البيانات، من الضروري تطوير أنظمة الذكاء الاصطناعي التي يمكنها حماية المعلومات السرية ومقاومة الهجمات. مع انتشار الذكاء الاصطناعي، أصبحت حماية الخصوصية وتأمين المعلومات الشخصية والتجارية الهامة أكثر أهمية وتعقيدًا. تتطلب قضايا الخصوصية وأمن البيانات اهتمامًا خاصًا للذكاء الاصطناعي لأن الوصول إلى البيانات ضروري لأنظمة الذكاء الاصطناعي لتقديم توقعات وقرارات دقيقة ومستنيرة حول الناس.
يجب أن تكون أنظمة الذكاء الاصطناعي آمنة وتحترم خصوصية الناس. يقل ثقة الناس في الأنظمة التي تعرض خصوصيتهم، معلوماتهم أو حياتهم للخطر. عند تدريب نماذج التعلم الآلي، نعتمد على البيانات لتحقيق أفضل النتائج. لذلك، يجب مراعاة أصل البيانات وسلامتها. على سبيل المثال، هل كانت البيانات مقدمة من المستخدم أم متاحة بشكل عام؟ بعد ذلك، أثناء العمل مع البيانات، من الضروري تطوير أنظمة ذكاء اصطناعي يمكنها حماية المعلومات السرية ومقاومة الهجمات. مع انتشار الذكاء الاصطناعي، أصبح حماية الخصوصية وتأمين المعلومات الشخصية والتجارية المهمة أكثر حرجًا وتعقيدًا. تتطلب مسائل الخصوصية وأمن البيانات اهتمامًا خاصًا مع الذكاء الاصطناعي لأن الوصول إلى البيانات ضروري لأنظمة الذكاء الاصطناعي لاتخاذ تنبؤات وقرارات دقيقة ومستنيرة حول الأشخاص.
> [🎥 انقر هنا لمشاهدة الفيديو: الأمن في الذكاء الاصطناعي](https://www.microsoft.com/videoplayer/embed/RE4voJF)
> [🎥 انقر هنا لفيديو: الأمان في الذكاء الاصطناعي](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- كصناعة، حققنا تقدمًا كبيرًا في الخصوصية والأمن، مدفوعًا بشكل كبير بتنظيمات مثل اللائحة العامة لحماية البيانات (GDPR).
- ومع ذلك، مع أنظمة الذكاء الاصطناعي، يجب أن نعترف بالتوتر بين الحاجة إلى المزيد من البيانات الشخصية لجعل الأنظمة أكثر شخصية وفعالية - والخصوصية.
- تمامًا كما حدث مع ولادة أجهزة الكمبيوتر المتصلة بالإنترنت، نشهد أيضًا زيادة كبيرة في عدد مشكلات الأمن المتعلقة بالذكاء الاصطناعي.
- في الوقت نفسه، رأينا استخدام الذكاء الاصطناعي لتحسين الأمن. على سبيل المثال، معظم ماسحات الفيروسات الحديثة تعتمد اليوم على استدلالات الذكاء الاصطناعي.
- يجب أن نضمن أن عمليات علم البيانات لدينا تتناغم بشكل متناغم مع أحدث ممارسات الخصوصية والأمن.
- كب صناعة، حققنا تقدمًا كبيرًا في الخصوصية والأمان، مدفوعًا بشكل كبير بتنظيمات مثل اللائحة العامة لحماية البيانات (GDPR).
- ومع أنظمة الذكاء الاصطناعي، يجب أن نعترف بالتوتر بين الحاجة إلى المزيد من البيانات الشخصية لجعل الأنظمة أكثر شخصية وفعالية وبين الخصوصية.
- تمامًا كما حدث مع ولادة الكمبيوترات المتصلة بالإنترنت، نشهد أيضًا زيادة كبيرة في عدد قضايا الأمان المتعلقة بالذكاء الاصطناعي.
- في الوقت نفسه، رأينا استخدام الذكاء الاصطناعي لتحسين الأمان. كمثال، معظم برامج مضادات الفيروسات الحديثة تعتمد اليوم على تقنيات الذكاء الاصطناعي.
- يجب علينا التأكد من أن عمليات علم البيانات لدينا تمزج بتناغم مع أحدث ممارسات الخصوصية والأمان.
### الشفافية
يجب أن تكون أنظمة الذكاء الاصطناعي مفهومة. جزء أساسي من الشفافية هو تفسير سلوك أنظمة الذكاء الاصطناعي ومكوناتها. تحسين فهم أنظمة الذكاء الاصطناعي يتطلب أن يفهم أصحاب المصلحة كيف ولماذا تعمل هذه الأنظمة بحيث يمكنهم تحديد مشكلات الأداء المحتملة، مخاوف السلامة والخصوصية، التحيزات، الممارسات الإقصائية، أو النتائج غير المقصودة. نعتقد أيضًا أن أولئك الذين يستخدمون أنظمة الذكاء الاصطناعي يجب أن يكونوا صادقين وصريحين بشأن متى ولماذا وكيف يختارون نشرها، بالإضافة إلى قيود الأنظمة التي يستخدمونها. على سبيل المثال، إذا استخدم بنك نظام ذكاء اصطناعي لدعم قرارات الإقراض للمستهلكين، فمن المهم فحص النتائج وفهم البيانات التي تؤثر على توصيات النظام. بدأت الحكومات في تنظيم الذكاء الاصطناعي عبر الصناعات، لذا يجب على علماء البيانات والمنظمات تفسير ما إذا كان نظام الذكاء الاصطناعي يفي بالمتطلبات التنظيمية، خاصة عندما تكون هناك نتيجة غير مرغوبة.
### الشفافية
يجب أن تكون أنظمة الذكاء الاصطناعي مفهومة. جزء حاسم من الشفافية هو شرح سلوك أنظمة الذكاء الاصطناعي ومكوناتها. تحسين فهم أنظمة الذكاء الاصطناعي يتطلب أن يفهم المعنيون كيف ولماذا تعمل حتى يتمكنوا من تحديد مشاكل الأداء المحتملة، مخاوف السلامة والخصوصية، التحيزات، الممارسات الاستبعادية، أو النتائج غير المقصودة. نؤمن أيضًا بأن من يستخدم أنظمة الذكاء الاصطناعي يجب أن يكون صادقًا ومنفتحًا حول متى ولماذا وكيف يختار نشرها. وكذلك حدود الأنظمة التي يستخدمونها. على سبيل المثال، إذا استخدم بنك نظام ذكاء اصطناعي لدعم قرارات إقراض المستهلكين، فمن المهم فحص النتائج وفهم البيانات التي تؤثر على توصيات النظام. بدأت الحكومات بوضع تنظيمات للذكاء الاصطناعي عبر الصناعات، لذلك يجب على علماء البيانات والمنظمات شرح ما إذا كان نظام الذكاء الاصطناعي يفي بالمتطلبات التنظيمية، خاصة عندما تكون هناك نتائج غير مرغوبة.
> [🎥 انقر هنا لمشاهدة الفيديو: الشفافية في الذكاء الاصطناعي](https://www.microsoft.com/videoplayer/embed/RE4voJF)
> [🎥 انقر هنا لفيديو: الشفافية في الذكاء الاصطناعي](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- نظرًا لأن أنظمة الذكاء الاصطناعي معقدة للغاية، من الصعب فهم كيفية عملها وتفسير النتائج.
- بسبب تعقيد أنظمة الذكاء الاصطناعي، يصعب فهم كيف تعمل وتفسير النتائج.
- يؤثر هذا النقص في الفهم على طريقة إدارة هذه الأنظمة، تشغيلها، وتوثيقها.
- يؤثر هذا النقص في الفهم بشكل أكثر أهمية على القرارات التي تُتخذ باستخدام النتائج التي تنتجها هذه الأنظمة.
- والأهم من ذلك، يؤثر هذا النقص في الفهم على القرارات المتخذة باستخدام النتائج التي تنتجها هذه الأنظمة.
### المساءلة
يجب أن يكون الأشخاص الذين يصممون وينشرون أنظمة الذكاء الاصطناعي مسؤولين عن كيفية عمل أنظمتهم. الحاجة إلى المساءلة تكون مهمة بشكل خاص مع التقنيات الحساسة مثل التعرف على الوجه. مؤخرًا، كان هناك طلب متزايد لتقنية التعرف على الوجه، خاصة من منظمات إنفاذ القانون التي ترى إمكانيات التقنية في استخدامات مثل العثور على الأطفال المفقودين. ومع ذلك، يمكن أن تستخدم هذه التكنولوجيا من قبل الحكومات لتعريض الحريات الأساسية لمواطنيها للخطر، مثل تمكين المراقبة المستمرة لأفراد محددين. لذا، يجب على علماء البيانات والمنظمات أن يكونوا مسؤولين عن كيفية تأثير نظام الذكاء الاصطناعي على الأفراد أو المجتمع.
يجب أن يكون الأشخاص الذين يصممون وينشرون أنظمة الذكاء الاصطناعي مسؤولين عن كيفية عمل أنظمتهم. الحاجة إلى المساءلة مهمة بشكل خاص مع التقنيات الحساسة مثل التعرف على الوجه. مؤخرًا، كان هناك طلب متزايد على تقنية التعرف على الوجه، خاصة من المنظمات القانونية التي ترى إمكانات التكنولوجيا في استخدامات مثل العثور على الأطفال المفقودين. ومع ذلك، يمكن أن تُستخدم هذه التقنيات من قبل الحكومات لتعريض الحريات الأساسية لمواطنيها للخطر، على سبيل المثال، من خلال تمكين المراقبة المستمرة لأفراد معينين. لذلك، يجب أن يكون علماء البيانات والمنظمات مسؤولين عن كيفية تأثير نظام الذكاء الاصطناعي على الأفراد أو المجتمع.
[![باحث رائد في الذكاء الاصطناعي يحذر من المراقبة الجماعية عبر التعرف على الوجه](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "نهج مايكروسوفت تجاه الذكاء الاصطناعي المسؤول")
[![باحث رائد في الذكاء الاصطناعي يحذر من المراقبة الجماعية عبر التعرف على الوجه](../../../../translated_images/ar/accountability.41d8c0f4b85b6231.webp)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "نهج مايكروسوفت للذكاء الاصطناعي المسؤول")
> 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو: تحذيرات من المراقبة الجماعية عبر التعرف على الوجه
> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو: تحذيرات من المراقبة الجماعية عبر التعرف على الوجه
في النهاية، أحد أكبر الأسئلة لجيلنا، كأول جيل يجلب الذكاء الاصطناعي إلى المجتمع، هو كيفية ضمان أن تظل أجهزة الكمبيوتر مسؤولة أمام الناس وكيفية ضمان أن يظل الأشخاص الذين يصممون أجهزة الكمبيوتر مسؤولين أمام الجميع.
في النهاية، أحد أكبر الأسئلة لأجيالنا، كجيل أول يجلب الذكاء الاصطناعي للمجتمع، هو كيفية ضمان بقاء الحواسيب مسؤولة أمام الناس وكيفية ضمان بقاء الأشخاص الذين يصممون الحواسيب مسؤولين أمام الجميع.
## تقييم التأثير
قبل تدريب نموذج التعلم الآلي، من المهم إجراء تقييم تأثير لفهم الغرض من نظام الذكاء الاصطناعي؛ ما هو الاستخدام المقصود؛ أين سيتم نشره؛ ومن سيتفاعل مع النظام. هذه التقييمات مفيدة للمراجعين أو المختبرين لتقييم النظام ومعرفة العوامل التي يجب أخذها في الاعتبار عند تحديد المخاطر المحتملة والعواقب المتوقعة.
قبل تدريب نموذج التعلم الآلي، من المهم إجراء تقييم تأثير لفهم هدف نظام الذكاء الاصطناعي؛ ما هو الاستخدام المقصود؛ أين سيتم نشره؛ ومن سيتفاعل مع النظام. هذه المعلومات تفيد المراجعين أو المختبرين الذين يقيمون النظام لمعرفة العوامل التي يجب مراعاتها عند تحديد المخاطر المحتملة والعواقب المتوقعة.
المجالات التالية تعتبر محورية عند إجراء تقييم التأثير:
تشمل المجالات التي يجب التركيز عليها عند إجراء تقييم التأثير:
* **التأثير السلبي على الأفراد**. الوعي بأي قيود أو متطلبات، استخدام غير مدعوم أو أي قيود معروفة تعيق أداء النظام ضروري لضمان عدم استخدام النظام بطريقة قد تسبب ضررًا للأفراد.
* **متطلبات البيانات**. فهم كيف وأين سيستخدم النظام البيانات يمكن المراجعين من استكشاف متطلبات البيانات التي يجب الانتباه لها (مثل تنظيمات GDPR أو HIPAA). بالإضافة إلى ذلك، يجب فحص ما إذا كانت مصدر البيانات أو كميتها كافيين للتدريب.
* **ملخص التأثير**. جمع قائمة بالأضرار المحتملة التي قد تنشأ من استخدام النظام. خلال دورة حياة التعلم الآلي، مراجعة ما إذا تم التخفيف من المشكلات المحددة أو التعامل معها.
* **الأهداف التطبيقية** لكل من المبادئ الستة الأساسية. تقييم ما إذا تم تحقيق أهداف كل مبدأ وإذا كان هناك أي ثغرات.
* **التأثير السلبي على الأفراد**. إدراك أي قيود أو متطلبات، استخدام غير مدعوم أو أي قيود معروفة تعيق أداء النظام أمر ضروري لضمان عدم استخدام النظام بطريقة قد تسبب ضررًا للأفراد.
* **متطلبات البيانات**. فهم كيفية وأين سيستخدم النظام البيانات يمكّن المراجعين من استكشاف أي متطلبات بيانات يجب أن تكون على دراية بها (مثل لوائح GDPR أو HIPPA). بالإضافة إلى ذلك، فحص ما إذا كان مصدر أو كمية البيانات كافٍ للتدريب.
* **ملخص التأثير**. جمع قائمة بالأضرار المحتملة التي قد تنشأ عن استخدام النظام. خلال دورة حياة التعلم الآلي، مراجعة ما إذا كانت المشكلات المحددة قد تم تخفيفها أو معالجتها.
* **الأهداف القابلة للتطبيق** لكل من المبادئ الستة الأساسية. تقييم ما إذا كانت الأهداف من كل مبدأ قد تم تحقيقها وما إذا كانت هناك أي فجوات.
## تصحيح الأخطاء باستخدام الذكاء الاصطناعي المسؤول
## تصحيح الأخطاء مع الذكاء الاصطناعي المسؤول
مثل تصحيح الأخطاء في تطبيق برمجي، فإن تصحيح الأخطاء في نظام الذكاء الاصطناعي هو عملية ضرورية لتحديد وحل المشكلات في النظام. هناك العديد من العوامل التي قد تؤثر على أداء النموذج بشكل غير متوقع أو غير مسؤول. معظم مقاييس أداء النموذج التقليدية هي تجميعات كمية لأداء النموذج، والتي لا تكفي لتحليل كيفية انتهاك النموذج لمبادئ الذكاء الاصطناعي المسؤول. علاوة على ذلك، يعد نموذج التعلم الآلي صندوقًا أسودًا يجعل من الصعب فهم ما يدفع نتائجه أو تقديم تفسير عندما يرتكب خطأ. لاحقًا في هذه الدورة، سنتعلم كيفية استخدام لوحة معلومات الذكاء الاصطناعي المسؤول للمساعدة في تصحيح أخطاء أنظمة الذكاء الاصطناعي. توفر لوحة المعلومات أداة شاملة لعلماء البيانات ومطوري الذكاء الاصطناعي للقيام بما يلي:
مثل تصحيح الأخطاء في تطبيق برمجي، يعد تصحيح أخطاء نظام الذكاء الاصطناعي خطوة ضرورية لتحديد وحل المشكلات في النظام. هناك العديد من العوامل التي تؤثر على عدم أداء النموذج كما هو متوقع أو بشكل مسؤول. معظم مقاييس أداء النماذج التقليدية هي مقاييس كمية لأداء النموذج، والتي لا تكفي لتحليل كيف ينتهك نموذج مبادئ الذكاء الاصطناعي المسؤول. علاوة على ذلك، نموذج التعلم الآلي صندوق أسود يصعب فهم ما الذي يدفع ناتجه أو تقديم شرح عند حدوث خطأ. لاحقًا في هذا المقرر، سنتعلم كيفية استخدام لوحة تحكم الذكاء الاصطناعي المسؤول للمساعدة في تصحيح أنظمة الذكاء الاصطناعي. توفر اللوحة أداة شاملة لعلماء البيانات ومطوري الذكاء الاصطناعي لأداء:
* **تحليل الأخطاء**. لتحديد توزيع الأخطاء في النموذج الذي يمكن أن يؤثر على إنصاف النظام أو موثوقيته.
* **نظرة عامة على النموذج**. لاكتشاف أين توجد تفاوتات في أداء النموذج عبر مجموعات البيانات.
* **تحليل البيانات**. لفهم توزيع البيانات وتحديد أي تحيز محتمل في البيانات قد يؤدي إلى مشكلات في الإنصاف، الشمولية، والموثوقية.
* **تفسير النموذج**. لفهم ما يؤثر أو يؤثر على توقعات النموذج. يساعد ذلك في تفسير سلوك النموذج، وهو أمر مهم للشفافية والمساءلة.
* **تحليل الأخطاء**. لتحديد توزيع الخطأ للنموذج الذي يمكن أن يؤثر على عدالة النظام أو موثوقيته.
* **نظرة عامة على النموذج**. لاكتشاف أماكن التفاوت في أداء النموذج عبر مجموعات البيانات.
* **تحليل البيانات**. لفهم توزيع البيانات وتحديد أي تحيز محتمل في البيانات قد يؤدي إلى مشاكل في العدالة، الشمولية، والموثوقية.
* **قابلية تفسير النموذج**. لفهم ما يؤثر أو يؤثر في تنبؤات النموذج. هذا يساعد في شرح سلوك النموذج، وهو أمر مهم للشفافية والمساءلة.
## 🚀 التحدي
لمنع الأضرار من أن تُدخل في المقام الأول، يجب علينا:
## 🚀 تحدي
لمنع إدخال الأضرار من البداية، يجب علينا:
- ضمان تنوع الخلفيات ووجهات النظر بين الأشخاص الذين يعملون على الأنظمة.
- الاستثمار في مجموعات بيانات تعكس تنوع مجتمعنا.
- تطوير طرق أفضل خلال دورة حياة التعلم الآلي للكشف عن الذكاء الاصطناعي المسؤول وتصحيحه عند حدوثه.
- وجود تنوع في الخلفيات ووجهات النظر بين الأشخاص العاملين على الأنظمة
- الاستثمار في مجموعات البيانات التي تعكس تنوع مجتمعنا
- تطوير طرق أفضل طوال دورة حياة التعلم الآلي لاكتشاف وتصحيح المسؤولية في الذكاء الاصطناعي عندما تحدث
فكر في سيناريوهات واقعية حيث يكون عدم موثوقية النموذج واضحًا في بناء النموذج واستخدامه. ما الذي يجب أن نأخذه في الاعتبار أيضًا؟
فكر في سيناريوهات حياتية حقيقية يكون فيها عدم ثقة النموذج واضحًا في بناء النموذج واستخدامه. ماذا يجب أن نأخذ في الاعتبار أيضًا؟
## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/)
## المراجعة والدراسة الذاتية
## مراجعة ودراسة ذاتية
في هذا الدرس، تعلمت بعض أساسيات مفاهيم الإنصاف وعدم الإنصاف في التعلم الآلي.
شاهد هذه الورشة للتعمق أكثر في المواضيع:
في هذا الدرس، تعلمت بعض أساسيات مفاهيم العدالة وعدم العدالة في التعلم الآلي.
شاهد هذه الورشة للتعمق أكثر في المواضيع:
- السعي نحو الذكاء الاصطناعي المسؤول: تحويل المبادئ إلى ممارسة بواسطة بسميرة نوشي، مهرنوش ساميكي وأميت شارما
- في السعي نحو الذكاء الاصطناعي المسؤول: تطبيق المبادئ عملياً بقلم بيسميرا نوشي، مهرنوش سامي وأميت شارما
[![Responsible AI Toolbox: إطار عمل مفتوح المصدر لبناء ذكاء اصطناعي مسؤول](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: إطار عمل مفتوح المصدر لبناء ذكاء اصطناعي مسؤول")
[![صندوق أدوات الذكاء الاصطناعي المسؤول: إطار عمل مفتوح المصدر لبناء ذكاء اصطناعي مسؤول](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: An open-source framework for building responsible AI")
> 🎥 اضغط على الصورة أعلاه لمشاهدة الفيديو: RAI Toolbox: إطار عمل مفتوح المصدر لبناء ذكاء اصطناعي مسؤول بواسطة بسميرة نوشي، مهرنوش ساميكي، وأميت شارما
> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو: صندوق أدوات الذكاء الاصطناعي المسؤول: إطار عمل مفتوح المصدر لبناء ذكاء اصطناعي مسؤول من تأليف بيسميرا نوشي، مهرنوش سامي، وأميت شارما
اقرأ أيضًا:
اقرأ أيضاً:
- مركز موارد الذكاء الاصطناعي المسؤول من مايكروسوفت: [موارد الذكاء الاصطناعي المسؤول مايكروسوفت AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- مركز موارد الذكاء الاصطناعي المسؤول من مايكروسوفت: [موارد الذكاء الاصطناعي المسؤول مايكروسوفت AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- مجموعة أبحاث FATE من مايكروسوفت: [FATE: العدالة، المساءلة، الشفافية، والأخلاقيات في الذكاء الاصطناعي - أبحاث مايكروسوفت](https://www.microsoft.com/research/theme/fate/)
- مجموعة أبحاث FATE من مايكروسوفت: [FATE: العدالة، المساءلة، الشفافية، والأخلاقيات في الذكاء الاصطناعي - أبحاث مايكروسوفت](https://www.microsoft.com/research/theme/fate/)
RAI Toolbox:
صندوق أدوات الذكاء الاصطناعي المسؤول:
- [مستودع GitHub الخاص بـ Responsible AI Toolbox](https://github.com/microsoft/responsible-ai-toolbox)
- [مستودع صندوق أدوات الذكاء الاصطناعي المسؤول على GitHub](https://github.com/microsoft/responsible-ai-toolbox)
اقرأ عن أدوات 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)
[استكشف صندوق أدوات الذكاء الاصطناعي المسؤول](assignment.md)
---
**إخلاء المسؤولية**:
تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**تنويه**:
تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,55 +1,55 @@
# البدء مع Python و Scikit-learn لنماذج الانحدار
# ابدأ مع بايثون و Scikit-learn لنماذج الانحدار
![ملخص الانحدارات في رسم توضيحي](../../../../sketchnotes/ml-regression.png)
![ملخص الانحدارات في ملاحظة مرسومة](../../../../translated_images/ar/ml-regression.4e4f70e3b3ed446e.webp)
> رسم توضيحي بواسطة [Tomomi Imura](https://www.twitter.com/girlie_mac)
> ملاحظة مرسومة بواسطة [تومومي إيمورا](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، بما في ذلك التثبيت.
- استكشاف الانحدار الخطي من خلال تمرين عملي.
## التثبيت والإعدادات
## التثبيتات والإعدادات
[![تعلم الآلة للمبتدئين - إعداد أدواتك لبناء نماذج تعلم الآلة](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "تعلم الآلة للمبتدئين - إعداد أدواتك لبناء نماذج تعلم الآلة")
[![التعلم الآلي للمبتدئين - جهز أدواتك لبناء نماذج التعلم الآلي](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "التعلم الآلي للمبتدئين - جهز أدواتك لبناء نماذج التعلم الآلي")
> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول إعداد جهاز الكمبيوتر الخاص بك لتعلم الآلة.
> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير يشرح كيفية تهيئة حاسوبك للتعلم الآلي.
1. **تثبيت Python**. تأكد من أن [Python](https://www.python.org/downloads/) مثبت على جهاز الكمبيوتر الخاص بك. ستستخدم Python للعديد من مهام علوم البيانات وتعلم الآلة. معظم أنظمة الكمبيوتر تحتوي بالفعل على تثبيت Python. هناك أيضًا [حزم برمجية لـ Python](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/) للتثبيت الأساسي. ستستخدم Python في Visual Studio Code في هذه الدورة، لذا قد ترغب في مراجعة كيفية [إعداد Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) لتطوير Python.
2. **تثبيت Visual Studio Code**. تأكد من وجود Visual Studio Code مثبتًا على حاسوبك. اتبع هذه التعليمات لـ [تثبيت Visual Studio Code](https://code.visualstudio.com/) للإعداد الأساسي. ستستخدم بايثون في Visual Studio Code في هذا المساق، لذا قد ترغب في تعلُّم كيفية [تهيئة 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 مع Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "إعداد Python مع Visual Studio Code")
> [![إعداد بايثون مع Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "إعداد بايثون مع Visual Studio Code")
>
> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو: استخدام Python داخل VS Code.
> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو: استخدام بايثون في VS Code.
3. **تثبيت Scikit-learn**، باتباع [هذه التعليمات](https://scikit-learn.org/stable/install.html). نظرًا لأنك تحتاج إلى التأكد من استخدام Python 3، يُوصى باستخدام بيئة افتراضية. لاحظ أنه إذا كنت تقوم بتثبيت هذه المكتبة على جهاز Mac M1، فهناك تعليمات خاصة على الصفحة المرتبطة أعلاه.
3. **تثبيت Scikit-learn**، باتباع [هذه التعليمات](https://scikit-learn.org/stable/install.html). بما أنك تحتاج إلى التأكد من استخدام بايثون 3، يُوصى باستخدام بيئة افتراضية. لاحظ أنه إذا كنت تثبت هذه المكتبة على ماك M1، هناك تعليمات خاصة على الصفحة المذكورة أعلاه.
4. **تثبيت Jupyter Notebook**. ستحتاج إلى [تثبيت حزمة Jupyter](https://pypi.org/project/jupyter/).
1. **تثبيت Jupyter Notebook**. ستحتاج إلى [تثبيت حزمة Jupyter](https://pypi.org/project/jupyter/).
## بيئة تأليف تعلم الآلة الخاصة بك
## بيئة التأليف الخاصة بك في التعلم الآلي
ستستخدم **دفاتر الملاحظات** لتطوير كود Python الخاص بك وإنشاء نماذج تعلم الآلة. هذا النوع من الملفات هو أداة شائعة لعلماء البيانات، ويمكن التعرف عليها من خلال لاحقتها أو امتدادها `.ipynb`.
ستستخدم **الدفاتر** لتطوير كود بايثون الخاص بك وإنشاء نماذج التعلم الآلي. هذا النوع من الملفات أداة شائعة لدى علماء البيانات، ويمكن التعرف عليها من خلال اللاحقة أو الامتداد `.ipynb`.
دفاتر الملاحظات هي بيئة تفاعلية تسمح للمطور بكتابة الكود وإضافة ملاحظات وكتابة توثيق حول الكود، وهو أمر مفيد جدًا للمشاريع التجريبية أو البحثية.
الدفاتر هي بيئة تفاعلية تسمح للمطور بكتابة الكود وإضافة ملاحظات وكتابة توثيق حول الكود، وهو أمر مفيد جدًا للمشاريع التجريبية أو البحثية.
[![تعلم الآلة للمبتدئين - إعداد دفاتر Jupyter للبدء في بناء نماذج الانحدار](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "تعلم الآلة للمبتدئين - إعداد دفاتر Jupyter للبدء في بناء نماذج الانحدار")
[![التعلم الآلي للمبتدئين - إعداد دفاتر Jupyter لبدء بناء نماذج الانحدار](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "التعلم الآلي للمبتدئين - إعداد دفاتر Jupyter لبدء بناء نماذج الانحدار")
> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول هذا التمرين.
> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير يشرح هذا التمرين.
### تمرين - العمل مع دفتر ملاحظات
@ -57,62 +57,63 @@
1. افتح _notebook.ipynb_ في Visual Studio Code.
سيتم تشغيل خادم Jupyter مع Python 3+. ستجد مناطق في دفتر الملاحظات يمكن تشغيلها، وهي أجزاء من الكود. يمكنك تشغيل كتلة الكود عن طريق تحديد الرمز الذي يشبه زر التشغيل.
ستبدأ خادم Jupyter مع تشغيل بايثون 3+. ستجد أجزاء من الدفتر يمكن `تشغيلها`، وهي قطع من الكود. يمكنك تشغيل قطعة الكود من خلال اختيار الرمز الذي يشبه زر التشغيل.
2. حدد رمز `md` وأضف بعض النصوص باستخدام Markdown، والنص التالي **# مرحبًا بك في دفتر ملاحظاتك**.
1. اختر رمز `md` وأضف بعض الماركدون، والنص التالي **# مرحبًا بك في دفترك**.
بعد ذلك، أضف بعض كود Python.
ثم أضف بعض كود بايثون.
3. اكتب **print('hello notebook')** في كتلة الكود.
4. حدد السهم لتشغيل الكود.
1. اكتب **print('hello notebook')** في كتلة الكود.
1. اختر السهم لتشغيل الكود.
يجب أن ترى العبارة المطبوعة:
سترى العبارة المطبوعة:
```output
hello notebook
```
![VS Code مع دفتر ملاحظات مفتوح](../../../../2-Regression/1-Tools/images/notebook.jpg)
![VS Code مع دفتر ملاحظات مفتوح](../../../../translated_images/ar/notebook.4a3ee31f396b8832.webp)
يمكنك دمج الكود مع التعليقات لتوثيق دفتر الملاحظات ذاتيًا.
يمكنك دمج كودك مع التعليقات لتوثيق الدفتر بنفسك.
✅ فكر للحظة في مدى اختلاف بيئة عمل مطور الويب عن بيئة عمل عالم البيانات.
✅ فكر للحظة كيف تختلف بيئة عمل مطور الويب مقارنةً ببيئة عالم البيانات.
## البدء مع Scikit-learn
## ابدأ العمل مع Scikit-learn
الآن بعد أن تم إعداد Python في بيئتك المحلية وأصبحت مرتاحًا مع دفاتر Jupyter، دعنا نتعرف على Scikit-learn (تُنطق `sci` كما في `science`). توفر Scikit-learn [واجهة برمجية شاملة](https://scikit-learn.org/stable/modules/classes.html#api-ref) لمساعدتك في تنفيذ مهام تعلم الآلة.
الآن بعد أن تم إعداد بايثون في بيئتك المحلية وأصبحت مرتاحًا في استخدام دفاتر Jupyter، لنكتسب نفس الراحة مع Scikit-learn (تنطق `ساي` كما في `science`). يوفر Scikit-learn [واجهة برمجة تطبيقات واسعة](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 وأدوات أخرى لبناء نماذج تعلم آلي لأداء ما نسميه 'التعلم الآلي التقليدي'. لقد تجنبنا عمدًا الشبكات العصبية والتعلم العميق، إذ يتم تناولها بشكل أفضل في منهجية 'الذكاء الاصطناعي للمبتدئين' القادمة.
تجعل Scikit-learn بناء النماذج وتقييمها للاستخدام أمرًا بسيطًا. وهي تركز بشكل أساسي على استخدام البيانات الرقمية وتحتوي على العديد من مجموعات البيانات الجاهزة للاستخدام كأدوات تعليمية. كما تتضمن نماذج مسبقة الصنع يمكن للطلاب تجربتها. دعنا نستكشف عملية تحميل البيانات المعبأة مسبقًا واستخدام نموذج تقدير أولي مع Scikit-learn باستخدام بعض البيانات الأساسية.
يجعل Scikit-learn بناء النماذج وتقييمها سهلاً. يركز أساسًا على استخدام البيانات الرقمية ويحتوي على عدة مجموعات بيانات جاهزة للاستخدام كأدوات تعلم. كما يتضمن نماذج مبنية مسبقًا ليجربها الطلاب. لنستكشف أولاً عملية تحميل البيانات المعبأة واستخدام مقدّر مدمج أول نموذج تعلم آلي مع 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) على موقع Scikit-learn.
[![تعلم الآلة للمبتدئين - مشروعك الأول للانحدار الخطي في Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "تعلم الآلة للمبتدئين - مشروعك الأول للانحدار الخطي في Python")
> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول هذا التمرين.
[![التعلم الآلي للمبتدئين - مشروعك الأول للانحدار الخطي في بايثون](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "التعلم الآلي للمبتدئين - مشروعك الأول للانحدار الخطي في بايثون")
في ملف _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) مكتبة مفيدة للتعامل مع البيانات الرقمية في بايثون.
- **sklearn**. هذه هي مكتبة [Scikit-learn](https://scikit-learn.org/stable/user_guide.html).
قم باستيراد بعض المكتبات لمساعدتك في المهام.
استورد بعض المكتبات لمساعدتك في مهامك.
1. أضف الاستيرادات بكتابة الكود التالي:
@ -122,26 +123,26 @@
from sklearn import datasets, linear_model, model_selection
```
أعلاه، تقوم باستيراد `matplotlib` و `numpy` وتستورد `datasets` و `linear_model` و `model_selection` من `sklearn`. يتم استخدام `model_selection` لتقسيم البيانات إلى مجموعات تدريب واختبار.
في الأعلى تقوم باستيراد `matplotlib`، و `numpy`، كما تستورد `datasets`، و `linear_model` و `model_selection` من `sklearn`. يستخدم `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 متغيرات ميزة، بعضها يشمل:
- العمر: العمر بالسنوات
- مؤشر كتلة الجسم (bmi): مؤشر كتلة الجسم
- ضغط الدم (bp): متوسط ضغط الدم
- خلايا T (s1 tc): نوع من خلايا الدم البيضاء
- مؤشر كتلة الجسم
- ضغط الدم: متوسط ضغط الدم
- s1 tc: خلايا تي (نوع من خلايا الدم البيضاء)
✅ تتضمن هذه المجموعة مفهوم "الجنس" كمتغير مميز مهم للبحث حول مرض السكري. العديد من مجموعات البيانات الطبية تتضمن هذا النوع من التصنيف الثنائي. فكر قليلاً في كيفية تأثير مثل هذه التصنيفات على استبعاد أجزاء معينة من السكان من العلاجات.
✅ تشمل هذه المجموعة مفهوم 'الجنس' كمتغير ميزة مهم في البحث حول السكري. تتضمن العديد من مجموعات البيانات الطبية هذا النوع من التصنيف الثنائي. فكر قليلاً في كيفية أن تصنيفات مثل هذه قد تستبعد أجزاء معينة من السكان من العلاجات.
الآن، قم بتحميل بيانات 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 @@
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 @@
-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). يمكنك أيضًا إعادة تشكيل البيانات لتكون مصفوفة ثنائية الأبعاد - كما هو مطلوب للرسم - باستخدام `reshape(n_rows, n_columns)`. إذا كانت إحدى المعلمات -1، يتم حساب البعد المقابل تلقائيًا.
2. بعد ذلك، اختر جزءًا من هذه المجموعة لرسمه باختيار العمود الثالث من المجموعة. يمكنك فعل ذلك باستخدام عامل `:` لاختيار كل الصفوف، ثم اختيار العمود الثالث باستخدام الفهرس (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. الآن أنت جاهز لتدريب النموذج الخاص بك! قم بتحميل نموذج الانحدار الخطي وقم بتدريبه باستخدام مجموعات التدريب X و y باستخدام `model.fit()`:
4. الآن أنت جاهز لتدريب نموذجك! قم بتحميل نموذج الانحدار الخطي وقم بتدريبه باستخدام مجموعات التدريب X و y الخاصة بك باستخدام `model.fit()`:
```python
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
```
`model.fit()` هي وظيفة ستراها في العديد من مكتبات تعلم الآلة مثل TensorFlow.
`model.fit()` هي دالة سترى وجودها في العديد من مكتبات التعلم الآلي مثل TensorFlow
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 @@
plt.show()
```
![مخطط نقاط يظهر نقاط البيانات حول مرض السكري](../../../../2-Regression/1-Tools/images/scatterplot.png)
✅ فكر قليلاً فيما يحدث هنا. هناك خط مستقيم يمر عبر العديد من النقاط الصغيرة من البيانات، ولكن ماذا يفعل بالضبط؟ هل يمكنك أن ترى كيف يمكن استخدام هذا الخط للتنبؤ بمكان نقطة بيانات جديدة وغير مرئية بالنسبة لمحور y في الرسم البياني؟ حاول أن تصف الاستخدام العملي لهذا النموذج بالكلمات.
![مخطط نقاط يوضح نقاط بيانات حول السكري](../../../../translated_images/ar/scatterplot.ad8b356bcbb33be6.webp)
تهانينا، لقد قمت ببناء أول نموذج انحدار خطي، وأنشأت تنبؤًا باستخدامه، وعرضته في رسم بياني!
---
## 🚀التحدي
✅ فكر قليلاً في ما يحدث هنا. هناك خط مستقيم يمر عبر العديد من نقاط البيانات الصغيرة، ولكنه ماذا يفعل بالضبط؟ هل ترى كيف ينبغي أن تتمكن من استخدام هذا الخط للتنبؤ بمكان تناسب نقطة بيانات جديدة غير مرئية بالنسبة لمحور 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 @@
---
**إخلاء المسؤولية**:
تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**تنويه**:
تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,62 +1,62 @@
# بناء نموذج انحدار باستخدام Scikit-learn: إعداد البيانات وتصويرها
# بناء نموذج انحدار باستخدام Scikit-learn: تحضير البيانات وتصويرها
![مخطط تصوير البيانات](../../../../2-Regression/2-Data/images/data-visualization.png)
![مخطط بياني لتصور البيانات](../../../../translated_images/ar/data-visualization.54e56dded7c1a804.webp)
مخطط تصوير البيانات بواسطة [Dasani Madipalli](https://twitter.com/dasani_decoded)
المخطط البياني بواسطة [دساني ماديباللي](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، أصبحت جاهزًا لبدء طرح الأسئلة على بياناتك. أثناء العمل مع البيانات وتطبيق حلول تعلم الآلة، من المهم جدًا فهم كيفية طرح السؤال الصحيح لفتح إمكانيات مجموعة البيانات الخاصة بك بشكل صحيح.
الآن بعد أن أعددت الأدوات التي تحتاجها لتبدأ في بناء نماذج تعلم الآلة باستخدام Scikit-learn، أنت جاهز لبدء طرح الأسئلة على بياناتك. أثناء عملك مع البيانات وتطبيق حلول تعلم الآلة، من المهم جدًا أن تفهم كيفية طرح السؤال الصحيح لفتح إمكانيات مجموعة بياناتك بشكل صحيح.
في هذا الدرس، ستتعلم:
- كيفية إعداد البيانات لبناء النماذج.
- كيفية استخدام مكتبة Matplotlib لتصوير البيانات.
- كيفية تحضير بياناتك لبناء النموذج.
- كيفية استخدام Matplotlib لتصور البيانات.
- كيفية استخدام Seaborn لتصور بيانات أكثر تعبيرًا.
## طرح السؤال الصحيح على بياناتك
## طرح السؤال الصحيح بخصوص بياناتك
السؤال الذي تحتاج إلى الإجابة عليه سيحدد نوع خوارزميات تعلم الآلة التي ستستخدمها. كما أن جودة الإجابة التي تحصل عليها تعتمد بشكل كبير على طبيعة بياناتك.
السؤال الذي تحتاج إلى إجابته سيحدد نوع خوارزميات تعلم الآلة التي ستستخدمها. وجودة الجواب الذي ستحصل عليه ستكون مرتبطة بشكل كبير بطبيعة بياناتك.
ألقِ نظرة على [البيانات](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://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "تعلم الآلة للمبتدئين - كيفية تحليل وتنظيف مجموعة بيانات")
[![تعلم الآلة للمبتدئين - كيف تحلل وتنظف مجموعة بيانات](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "تعلم الآلة للمبتدئين - كيف تحلل وتنظف مجموعة بيانات")
> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول إعداد البيانات لهذا الدرس.
> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير يشرح كيفية تحضير البيانات لهذا الدرس.
في الواقع، من غير الشائع أن تحصل على مجموعة بيانات جاهزة تمامًا للاستخدام لإنشاء نموذج تعلم آلي مباشرة. في هذا الدرس، ستتعلم كيفية إعداد مجموعة بيانات خام باستخدام مكتبات Python القياسية. ستتعلم أيضًا تقنيات مختلفة لتصوير البيانات.
في الواقع، من غير الشائع أن تُمنح مجموعة بيانات جاهزة تمامًا للاستخدام لبناء نموذج تعلم آلة من الصندوق مباشرة. في هذا الدرس، ستتعلم كيف تحضر مجموعة بيانات خام باستخدام مكتبات بايثون القياسية. ستتعلم أيضًا تقنيات مختلفة لتصور البيانات.
## دراسة حالة: "سوق القرع"
## دراسة حالة: 'سوق القرع'
في هذا المجلد، ستجد ملف .csv في مجلد الجذر `data` يسمى [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) والذي يحتوي على 1757 سطرًا من البيانات حول سوق القرع، مرتبة في مجموعات حسب المدينة. هذه بيانات خام مستخرجة من [تقارير السوق القياسية للمحاصيل الخاصة](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) التي توزعها وزارة الزراعة الأمريكية.
في هذا المجلد، ستجد ملف .csv في مجلد الجذر `data` يسمى [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) والذي يحتوي على 1757 سطرًا من البيانات حول سوق القرع، مرتبة في مجموعات حسب المدينة. هذه بيانات خام مستخرجة من [تقارير أسواق الخضروات المتخصصة](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) التي توزعها وزارة الزراعة الأمريكية.
### إعداد البيانات
### تحضير البيانات
هذه البيانات متاحة في المجال العام. يمكن تنزيلها في العديد من الملفات المنفصلة، لكل مدينة، من موقع وزارة الزراعة الأمريكية. لتجنب وجود العديد من الملفات المنفصلة، قمنا بدمج جميع بيانات المدن في جدول بيانات واحد، وبالتالي قمنا بالفعل إعداد_ البيانات قليلاً. الآن، دعونا نلقي نظرة أقرب على البيانات.
هذه البيانات في الملكية العامة. يمكن تنزيلها في ملفات متعددة، لكل مدينة على حدة، من موقع وزارة الزراعة الأمريكية. لتجنب وجود ملفات متعددة كثيرة، قمنا بدمج جميع بيانات المدن في ملف جدول بيانات واحد، وبالتالي قمنا بالفعل تحضير_ البيانات قليلاً. بعد ذلك، دعونا نلقي نظرة أدق على البيانات.
### بيانات القرع - استنتاجات أولية
### بيانات القرع - استنتاجات مبكرة
ماذا تلاحظ حول هذه البيانات؟ لقد رأيت بالفعل أن هناك مزيجًا من النصوص، الأرقام، الفراغات والقيم الغريبة التي تحتاج إلى فهمها.
ما السؤال الذي يمكنك طرحه على هذه البيانات باستخدام تقنية الانحدار؟ ماذا عن "توقع سعر القرع للبيع خلال شهر معين". بالنظر مرة أخرى إلى البيانات، هناك بعض التغييرات التي تحتاج إلى إجرائها لإنشاء هيكل البيانات اللازم لهذه المهمة.
ماذا تلاحظ عن هذه البيانات؟ لقد رأيت بالفعل وجود مزيج من النصوص، الأرقام، الفراغات والقيم الغريبة التي تحتاج إلى تفسير.
ما السؤال الذي يمكنك طرحه على هذه البيانات باستخدام تقنية الانحدار؟ ماذا عن "توقع سعر قرعة للبيع خلال شهر معين". بالنظر مرة أخرى إلى البيانات، هناك بعض التعديلات التي تحتاج إلى إجرائها لإنشاء هيكل البيانات اللازم للمهمة.
## تمرين - تحليل بيانات القرع
لنستخدم [Pandas](https://pandas.pydata.org/) (الاسم اختصار لـ `Python Data Analysis`) وهي أداة مفيدة جدًا لتشكيل البيانات، لتحليل وإعداد بيانات القرع.
دعونا نستخدم [Pandas](https://pandas.pydata.org/)، (اسمها يعني `تحليل بيانات بايثون`) أداة مفيدة جدًا لتشكيل البيانات، لتحليل وتحضير بيانات القرع هذه.
### أولاً، تحقق من التواريخ المفقودة
### أولاً، تحقق من تواريخ مفقودة
ستحتاج أولاً إلى اتخاذ خطوات للتحقق من التواريخ المفقودة:
1. تحويل التواريخ إلى صيغة شهر (هذه تواريخ أمريكية، لذا الصيغة هي `MM/DD/YYYY`).
2. استخراج الشهر إلى عمود جديد.
2. استخراج الشهر في عمود جديد.
افتح ملف _notebook.ipynb_ في Visual Studio Code واستورد جدول البيانات إلى إطار بيانات جديد باستخدام Pandas.
افتح ملف _notebook.ipynb_ في Visual Studio Code واستورد جدول البيانات إلى إطار بيانات جديد من Pandas.
1. استخدم وظيفة `head()` لعرض أول خمسة صفوف.
1. استخدم الدالة `head()` لمشاهدة أول خمسة صفوف.
```python
import pandas as pd
@ -64,30 +64,30 @@
pumpkins.head()
```
✅ ما الوظيفة التي ستستخدمها لعرض آخر خمسة صفوف؟
✅ ما الدالة التي ستستخدمها لعرض آخر خمسة صفوف؟
1. تحقق مما إذا كانت هناك بيانات مفقودة في إطار البيانات الحالي:
1. تحقق إذا كان هناك بيانات مفقودة في إطار البيانات الحالي:
```python
pumpkins.isnull().sum()
```
هناك بيانات مفقودة، ولكن ربما لن تكون مهمة للمهمة الحالية.
توجد بيانات مفقودة، لكن ربما لن تؤثر على المهمة الحالية.
1. لجعل إطار البيانات الخاص بك أسهل للعمل معه، اختر فقط الأعمدة التي تحتاجها، باستخدام وظيفة `loc` التي تستخرج من إطار البيانات الأصلي مجموعة من الصفوف (الممررة كمعامل أول) والأعمدة (الممررة كمعامل ثاني). التعبير `:` في الحالة أدناه يعني "جميع الصفوف".
1. لجعل إطار البيانات أسهل في العمل، اختر فقط الأعمدة التي تحتاجها، باستخدام دالة `loc` التي تستخرج من إطار البيانات الأصلي مجموعة من الصفوف (تمرر كمعامل أول) وأعمدة (تمرر كمعامل ثاني). التعبير `:` في الحالة أدناه يعني "كل الصفوف".
```python
columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']
pumpkins = pumpkins.loc[:, columns_to_select]
```
### ثانيًا، تحديد متوسط سعر القرع
### ثانيًا، حدد متوسط سعر القرع
فكر في كيفية تحديد متوسط سعر القرع في شهر معين. ما الأعمدة التي ستختارها لهذه المهمة؟ تلميح: ستحتاج إلى 3 أعمدة.
الحل: خذ متوسط أعمدة `Low Price` و`High Price` لملء عمود السعر الجديد، وحوّل عمود التاريخ ليظهر الشهر فقط. لحسن الحظ، وفقًا للتحقق أعلاه، لا توجد بيانات مفقودة للتواريخ أو الأسعار.
الحل: احسب متوسط عمودي `Low Price` و `High Price` لملء عمود السعر الجديد، وحول عمود التاريخ ليظهر فقط الشهر. لحسن الحظ، وفقًا للتحقق أعلاه، لا توجد بيانات مفقودة للتواريخ أو الأسعار.
1. لحساب المتوسط، أضف الكود التالي:
1. لحساب المتوسط، أضف الشيفرة التالية:
```python
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2
@ -96,37 +96,37 @@
```
✅ لا تتردد في طباعة أي بيانات ترغب في التحقق منها باستخدام `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"، وبعضها لكل قرع، وبعضها لكل رطل، وبعضها في صناديق كبيرة بأحجام مختلفة.
إذا نظرت إلى عمود `Package`، فالقرع يُباع في تكوينات عديدة مختلفة. بعضه يُباع في قياسات '1 1/9 bushel' وبعضه '1/2 bushel'، بعضها بالقرعة، وبعضه بالرطل، وبعضه في صناديق كبيرة بأحجام مختلفة.
> يبدو أن القرع صعب الوزن بشكل متسق
> يبدو أن وزن القرع بشكل ثابت أمر صعب جدًا
بالتعمق في البيانات الأصلية، من المثير للاهتمام أن أي شيء يحتوي على `Unit of Sale` يساوي "EACH" أو "PER BIN" يحتوي أيضًا على نوع `Package` لكل بوصة، لكل صندوق، أو "each". يبدو أن القرع صعب الوزن بشكل متسق، لذا دعونا نقوم بتصفيته عن طريق اختيار فقط القرع الذي يحتوي على النص "bushel" في عمود `Package`.
بالتعمق في البيانات الأصلية، من المثير للاهتمام أن أي شيء في `Unit of Sale` يساوي 'EACH' أو 'PER BIN' أيضًا تتضمن نوع `Package` وحدة بالبوصة أو per bin أو 'كل واحدة'. يبدو أن وزن القرع أمر صعب جدًا لتوحيده، فلنقوم بتصفية القرع باختيار فقط القرع الذي يحتوي على كلمة 'bushel' في عمود `Package`.
1. أضف فلتر في أعلى الملف، تحت استيراد ملف .csv الأولي:
1. أضف فلترًا في أعلى الملف، تحت استيراد ملف .csv الأولي:
```python
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
```
إذا قمت بطباعة البيانات الآن، يمكنك رؤية أنك تحصل فقط على حوالي 415 صفًا من البيانات التي تحتوي على القرع حسب البوشل.
إذا طبعت البيانات الآن، سترى أنك تأخذ فقط حوالي 415 صفًا من البيانات تحتوي على قرع بالحجم bushel.
### لكن انتظر! هناك شيء آخر يجب القيام به
### انتظر! هناك شيء آخر يجب فعله
هل لاحظت أن كمية البوشل تختلف حسب الصف؟ تحتاج إلى تطبيع التسعير بحيث تظهر التسعير لكل بوشل، لذا قم ببعض العمليات الحسابية لتوحيدها.
هل لاحظت أن كمية 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,29 +134,29 @@
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، بالنظر إلى المساحة غير المستخدمة التي يشغلها قرع كبير مجوف.
## استراتيجيات التصوير
## استراتيجيات التصور
جزء من دور عالم البيانات هو توضيح جودة وطبيعة البيانات التي يعمل معها. للقيام بذلك، غالبًا ما يقومون بإنشاء تصورات مثيرة للاهتمام، مثل المخططات، الرسوم البيانية، والخرائط، التي تظهر جوانب مختلفة من البيانات. بهذه الطريقة، يمكنهم عرض العلاقات والفجوات بصريًا التي يصعب اكتشافها بطريقة أخرى.
جزء من دور عالم البيانات هو إظهار جودة وطبيعة البيانات التي يعملون بها. لتحقيق ذلك، كثيرًا ما يقومون بإنشاء تصورات مثيرة للاهتمام، مثل المخططات والرسوم البيانية التي تظهر جوانب مختلفة من البيانات. بهذه الطريقة، يستطيعون بصريًا إظهار العلاقات والفجوات التي يصعُب اكتشافها بطرق أخرى.
[![تعلم الآلة للمبتدئين - كيفية تصوير البيانات باستخدام Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "تعلم الآلة للمبتدئين - كيفية تصوير البيانات باستخدام Matplotlib")
[![تعلم الآلة للمبتدئين - كيفية تصور البيانات باستخدام Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](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
## تمرين - تجربة Matplotlib
حاول إنشاء بعض المخططات الأساسية لعرض إطار البيانات الجديد الذي أنشأته للتو. ماذا سيظهر مخطط خطي أساسي؟
حاول إنشاء بعض المخططات الأساسية لعرض إطار البيانات الجديد الذي أنشأته للتو. ماذا سيُظهر مخطط خطي أساسي؟
1. استورد Matplotlib في أعلى الملف، تحت استيراد Pandas:
@ -165,7 +165,7 @@
```
1. أعد تشغيل الدفتر بالكامل للتحديث.
1. في أسفل الدفتر، أضف خلية لرسم البيانات كمربع:
1. في أسفل الدفتر، أضف خلية لعرض البيانات في مخطط صندوقي:
```python
price = new_pumpkins.Price
@ -174,44 +174,121 @@
plt.show()
```
![مخطط انتشار يظهر العلاقة بين السعر والشهر](../../../../2-Regression/2-Data/images/scatterplot.png)
![مخطط تبعثر يوضح العلاقة بين السعر والشهر](../../../../translated_images/ar/scatterplot.b6868f44cbd2051c.webp)
هل هذا مخطط مفيد؟ هل هناك شيء يفاجئك؟
هل هذا مخطط مفيد؟ هل من شيء مفاجئ بشأنه؟
إنه ليس مفيدًا بشكل خاص حيث إنه يعرض فقط بياناتك كنقاط منتشرة في شهر معين.
هو ليس مفيدًا للغاية كونه يعرض بياناتك كنقاط منتشرة في شهر معين.
### اجعلها مفيدة
### اجعله مفيدًا
لجعل المخططات تعرض بيانات مفيدة، عادةً ما تحتاج إلى تجميع البيانات بطريقة ما. دعونا نحاول إنشاء مخطط حيث يظهر المحور y الأشهر وتظهر البيانات توزيع البيانات.
لجعل المخططات تعرض بيانات مفيدة، عادةً تحتاج إلى تجميع البيانات بطريقة ما. لنحاول إنشاء مخطط يعرض المحور الرأسي فيه الشهور وتوضح البيانات التوزيع.
1. أضف خلية لإنشاء مخطط شريطي مجمع:
1. أضف خلية لإنشاء مخطط أعمدة مجمعة:
```python
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')
plt.ylabel("Pumpkin Price")
```
![مخطط شريطي يظهر العلاقة بين السعر والشهر](../../../../2-Regression/2-Data/images/barchart.png)
![مخطط أعمدة يوضح العلاقة بين السعر والشهر](../../../../translated_images/ar/barchart.a833ea9194346d76.webp)
هذا تصور بيانات أكثر فائدة! يبدو أنه يشير إلى أن أعلى سعر للقرع يكون في سبتمبر وأكتوبر. هل يتوافق هذا مع توقعاتك؟ لماذا أو لماذا لا؟
## تمرين - تجربة 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. أعد إنشاء مخطط التبعثر الذي أظهر السعر مقابل الشهر كما في السابق، هذه المرة باستخدام [`relplot()`](https://seaborn.pydata.org/generated/seaborn.relplot.html) من Seaborn (مخطط العلاقات) الذي يعمل مباشرة مع أعمدة إطار البيانات:
```python
sns.relplot(x="Price", y="Month", data=new_pumpkins)
```
![مخطط تبعثر Seaborn يظهر العلاقة بين السعر والشهر](../../../../translated_images/ar/relplot.a03837d8f0329cec.webp)
لاحظ كيف تمرر _أسماء الأعمدة_ وإطار البيانات، ويتولى Seaborn تسمية المحاور لك.
2. يمكنك التبديل إلى مخطط خطي بتمرير `kind="line"`. Seaborn يرسم حتى شريطًا مظللًا يظهر نطاق الثقة حول الخط:
```python
sns.relplot(x="Price", y="Month", kind="line", data=new_pumpkins)
```
![مخطط خطي Seaborn يظهر العلاقة بين السعر والشهر](../../../../translated_images/ar/lineplot.f9034ba47b1e30ee.webp)
هذه البيانات معقدة إلى حد ما، لذلك مخطط الخط ليس الخيار الأكثر وضوحًا هنا — لكنه يظهر مدى سهولة تغيير أنواع المخططات في Seaborn.
### مخططات الأعمدة لإظهار التوزيعات
سابقًا قمت بتجميع البيانات يدويًا لإنشاء مخطط أعمدة باستخدام Matplotlib. يمكن لـ Seaborn's [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html) (مخطط تصنيفي) إجراء التجميع والتجميع نيابةً عنك. بشكل افتراضي، يعرض `kind="bar"` متوسط كل فئة مع خط أسود يشير إلى فترة الثقة.
1. أنشئ مخطط أعمدة لسعر المتوسط لكل شهر:
```python
sns.catplot(x="Month", y="Price", data=new_pumpkins, kind="bar")
```
![مخطط أعمدة Seaborn يظهر توزيع السعر لكل شهر](../../../../translated_images/ar/catplot.e73fc35fdf96242b.webp)
هذا يؤكد ما رأيته مع Matplotlib — حيث تصل الأسعار إلى ذروتها حول سبتمبر وأكتوبر — لكن Seaborn يعرض أيضًا مدى تباين السعر اخل_ كل شهر.
### مخططات الحرارة لإظهار الارتباطات
تقارن مخططات التشتت متغيرين في كل مرة. عندما يكون لديك عدة أعمدة رقمية، يسمح لك [مخطط الحرارة](https://en.wikipedia.org/wiki/Heat_map) برؤية قوة العلاقة بين _كل_ زوج من الأعمدة مرة واحدة. هذه طريقة شائعة لاكتشاف الميزات الأكثر ارتباطًا قبل اختيار ما يتم تغذيته في نموذج (ويُستخدم نفس النوع من المخططات لاحقًا لعرض مصفوفات الالتباس في التصنيف).
1. ابنِ مصفوفة ارتباط باستخدام Pandas، ثم ارسمها باستخدام [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html) من Seaborn. خيار `annot=True` يطبع قيم الارتباط على كل خلية:
```python
correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()
sns.heatmap(correlations, annot=True, cmap="coolwarm")
```
![مخطط حرارة من Seaborn يظهر الارتباطات بين الأعمدة الرقمية](../../../../translated_images/ar/heatmap.bd98dce43b404c57.webp)
القيم القريبة من `1` (أو `-1`) تعني أن الأعمدة مرتبطة ارتباطًا _خطيًا_ قويًا. لاحظ كيف أن `السعر الأدنى` و`السعر الأعلى` مرتبطان تقريبًا بشكل مثالي. من ناحية أخرى، يظهر `الشهر` ارتباطًا خطيًا ضعيفًا فقط مع السعر — على الرغم من أن مخطط الأعمدة أعلاه كشف عن ذروة موسمية واضحة في سبتمبر وأكتوبر. هذه درس مهم: يقيس معامل الارتباط فقط العلاقات _الخطية_ المباشرة، لذلك قد يفوت الأنماط الموسمية أو غير الخطية. ✅ لماذا من المفيد النظر إلى كل من مخطط الحرارة *ومخططات* مثل مخطط الأعمدة قبل اتخاذ قرار بشأن الأعمدة التي يجب استخدامها؟
### Matplotlib أم Seaborn؟
كلا المكتبتين تستحقان المعرفة:
- **Matplotlib** يمنحك تحكمًا دقيقًا في كل عنصر من عناصر المخطط وهو الأساس الذي تبني عليه تقريبًا كل مكتبة رسم بياني بلغة بايثون أخرى.
- **Seaborn** يوفر وظائف عالية المستوى وإعدادات جذابة للمخططات الإحصائية، ويعمل مباشرة مع الإطارات البيانية، وغالبًا ما يكون أسرع لتحليل البيانات الاستكشافي.
هذا تصوير بيانات أكثر فائدة! يبدو أنه يشير إلى أن أعلى سعر للقرع يحدث في سبتمبر وأكتوبر. هل يتوافق ذلك مع توقعاتك؟ لماذا أو لماذا لا؟
سير العمل الشائع هو اللجوء إلى Seaborn لاستكشاف بياناتك بسرعة، ثم النزول إلى Matplotlib عند الحاجة إلى تخصيص التفاصيل.
---
## 🚀تحدي
استكشف الأنواع المختلفة من التصورات التي تقدمها Matplotlib. ما الأنواع الأكثر ملاءمة لمشاكل الانحدار؟
استكشف أنواع التمثيل البياني المختلفة التي تقدمها مكتبات Matplotlib و Seaborn. ما هي الأنواع الأنسب لمشكلات الانحدار؟
## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/)
## المراجعة والدراسة الذاتية
## مراجعة ودراسة ذاتية
ألقِ نظرة على الطرق العديدة لتصوير البيانات. قم بعمل قائمة بالمكتبات المختلفة المتاحة ولاحظ أيها الأفضل لأنواع معينة من المهام، على سبيل المثال التصورات ثنائية الأبعاد مقابل التصورات ثلاثية الأبعاد. ماذا تكتشف؟
ألقِ نظرة على الطرق الكثيرة لعرض البيانات. قم بعمل قائمة بالمكتبات المختلفة المتاحة واشرح أيها الأنسب لأنواع المهام المختلفة، مثلاً التمثيل ثنائي الأبعاد مقابل التمثيل ثلاثي الأبعاد. ماذا تكتشف؟
## الواجب
## المهمة
[استكشاف التصوير](assignment.md)
[استكشاف التمثيل البياني](assignment.md)
---
**إخلاء المسؤولية**:
تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). على الرغم من أننا نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**تنويه**:
تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -222,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",
@ -385,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": [
"sns.catplot(x=\"Month\", y=\"Price\", data=new_pumpkins, kind=\"bar\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### خرائط الحرارة لعرض الترابطات\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
"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تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). على الرغم من أننا نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**تنويه**:\nتمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -426,13 +487,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "95726f0b8283628d5356a4f8eb8b4b76",
"translation_date": "2025-08-29T14:58:11+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "ar"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -1,47 +1,47 @@
# مقدمة إلى التعلم التعزيزي وخوارزمية Q-Learning
# مقدمة في التعلم المعزز وتعلم كيو
![ملخص التعلم التعزيزي في التعلم الآلي في رسم توضيحي](../../../../sketchnotes/ml-reinforcement.png)
> رسم توضيحي بواسطة [Tomomi Imura](https://www.twitter.com/girlie_mac)
![ملخص للتعزيز في تعليم الآلة في رسم تخطيطي](../../../../translated_images/ar/ml-reinforcement.94024374d63348db.webp)
> رسم تخطيطي بواسطة [تومومي إيمورا](https://www.twitter.com/girlie_mac)
يتضمن التعلم التعزيزي ثلاثة مفاهيم مهمة: الوكيل، بعض الحالات، ومجموعة من الإجراءات لكل حالة. من خلال تنفيذ إجراء في حالة معينة، يحصل الوكيل على مكافأة. تخيل مرة أخرى لعبة الكمبيوتر "سوبر ماريو". أنت ماريو، وأنت في مستوى من اللعبة، تقف بجانب حافة منحدر. فوقك توجد عملة معدنية. كونك ماريو، في مستوى معين من اللعبة، في موقع معين... هذه هي حالتك. التحرك خطوة إلى اليمين (إجراء) سيجعلك تسقط من الحافة، وهذا سيمنحك درجة رقمية منخفضة. ومع ذلك، فإن الضغط على زر القفز سيجعلك تحصل على نقطة وستبقى على قيد الحياة. هذا نتيجة إيجابية ويجب أن تمنحك درجة رقمية إيجابية.
يتضمن التعلم المعزز ثلاث مفاهيم مهمة: الوكيل، بعض الحالات، ومجموعة من الإجراءات لكل حالة. من خلال تنفيذ إجراء في حالة محددة، يحصل الوكيل على مكافأة. تخيل مجددًا لعبة الحاسوب سوبر ماريو. أنت ماريو، في مستوى لعبة، واقف بجانب حافة منحدر. فوقك عملة معدنية. أنت كماريو، في مستوى لعبة، في موقع معين ... هذا هو حالتك. التحرك خطوة واحدة إلى اليمين (إجراء) سيجعلك تسقط من الحافة، وهذا سيعطيك درجة رقمية منخفضة. ولكن، الضغط على زر القفز سيمكنك من تسجيل نقطة وستبقى على قيد الحياة. هذه نتيجة إيجابية ويجب أن تمنحك درجة رقمية إيجابية.
باستخدام التعلم التعزيزي والمحاكاة (اللعبة)، يمكنك تعلم كيفية لعب اللعبة لتحقيق أقصى قدر من المكافآت، وهي البقاء على قيد الحياة وتسجيل أكبر عدد ممكن من النقاط.
باستخدام التعلم المعزز ومحاكي (اللعبة)، يمكنك تعلم كيفية لعب اللعبة لتعظيم المكافأة وهي البقاء على قيد الحياة وتسجيل أكبر عدد ممكن من النقاط.
[![مقدمة إلى التعلم التعزيزي](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo)
[![مقدمة في التعلم المعزز](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo)
> 🎥 انقر على الصورة أعلاه للاستماع إلى ديمتري وهو يناقش التعلم التعزيزي
> 🎥 اضغط على الصورة أعلاه للاستماع إلى دميتري وهو يناقش التعلم المعزز
## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/)
## [اختبار قبلي للمحاضرة](https://ff-quizzes.netlify.app/en/ml/)
## المتطلبات والإعداد
## المتطلبات المسبقة والإعداد
في هذا الدرس، سنجرب بعض الأكواد بلغة Python. يجب أن تكون قادرًا على تشغيل كود Jupyter Notebook من هذا الدرس، سواء على جهاز الكمبيوتر الخاص بك أو في السحابة.
في هذا الدرس، سنجرب بعض الكود في بايثون. يجب أن تكون قادرًا على تشغيل كود مفكرة Jupyter لهذا الدرس، إما على جهازك الحاسوبي أو في مكان ما على السحابة.
يمكنك فتح [دفتر الدرس](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)، الذي يُستخدم في كود المفكرة. أضفه إلى نفس المجلد مع المفكرة.
## المقدمة
## مقدمة
في هذا الدرس، سنستكشف عالم **[بيتر والذئب](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)**، مستوحى من قصة موسيقية للمؤلف الروسي، [سيرجي بروكوفييف](https://en.wikipedia.org/wiki/Sergei_Prokofiev). سنستخدم **التعلم المعزز** للسماح لبيتر باستكشاف بيئته، وجمع التفاح الشهي وتجنب مواجهة الذئب.
**التعلم التعزيزي** (RL) هو تقنية تعلم تتيح لنا تعلم السلوك الأمثل لوكيل **agent** في بيئة **environment** معينة من خلال إجراء العديد من التجارب. يجب أن يكون للوكيل في هذه البيئة هدف **goal** محدد بواسطة دالة مكافأة **reward function**.
**التعلم المعزز** (RL) هو تقنية تعلم تسمح لنا بتعلم سلوك مثالي لـ **وكيل** في بعض **البيئة** عبر إجراء العديد من التجارب. يجب أن يكون للوكيل في هذه البيئة **هدف**، يُعرّف بواسطة **دالة المكافأة**.
## البيئة
للتبسيط، دعونا نعتبر أن عالم بيتر هو لوحة مربعة بحجم `width` x `height`، مثل هذه:
لتبسيط الأمر، دعونا نعتبر عالم بيتر لوحة مربعة بحجم `العرض` × `الارتفاع`، مثل هذه:
![بيئة بيتر](../../../../8-Reinforcement/1-QLearning/images/environment.png)
![بيئة بيتر](../../../../translated_images/ar/environment.40ba3cb66256c93f.webp)
كل خلية في هذه اللوحة يمكن أن تكون:
كل خلية في هذه اللوحة يمكن أن تكون إما:
* **أرض**، يمكن لبيتر والمخلوقات الأخرى المشي عليها.
* **ماء**، لا يمكن المشي عليه بالطبع.
* **شجرة** أو **عشب**، مكان يمكن الراحة فيه.
* **تفاحة**، تمثل شيئًا يود بيتر العثور عليه لإطعام نفسه.
* **ذئب**، وهو خطير ويجب تجنبه.
* **أرضًا** يمكن لبيتر والكائنات الأخرى المشي عليها.
* **ماء** لا يمكنك بالطبع المشي عليه.
* **شجرة** أو **عشبًا**، مكان للاسترخاء.
* **تفاحة** تمثل شيئًا سيكون بيتر سعيدًا بالعثور عليه ليطعم نفسه.
* **ذئبًا**، يمثل خطرًا ويجب تجنبه.
يوجد وحدة Python منفصلة، [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py)، تحتوي على الكود للعمل مع هذه البيئة. نظرًا لأن هذا الكود ليس مهمًا لفهم مفاهيمنا، سنقوم باستيراد الوحدة واستخدامها لإنشاء اللوحة النموذجية (كتلة الكود 1):
هناك وحدة بايثون منفصلة، [`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()) }
```
لتلخيص، الاستراتيجية والهدف في هذا السيناريو هما كما يلي:
للتلخيص، الاستراتيجية والهدف لهذا السيناريو هما كالتالي:
- **الاستراتيجية**، الخاصة بوكيلنا (بيتر) تُعرف بما يسمى **السياسة**. السياسة هي دالة تُرجع الإجراء في أي حالة معينة. في حالتنا، تمثل حالة المشكلة اللوحة، بما في ذلك الموضع الحالي للاعب.
- **الاستراتيجية**، لوكيلنا (بيتر) تُعرف بما يسمى **السياسة**. السياسة هي دالة تُرجع الإجراء في أي حالة معينة. في حالتنا، تمثل حالة المشكلة اللوحة، بما في ذلك الموقع الحالي للاعب.
- **الهدف**، من التعلم التعزيزي هو في النهاية تعلم سياسة جيدة تتيح لنا حل المشكلة بكفاءة. ومع ذلك، كخط أساس، دعونا نعتبر السياسة الأبسط المسماة **المشي العشوائي**.
- **الهدف**، من التعلم المعزز هو في النهاية تعلم سياسة جيدة تسمح لنا بحل المشكلة بكفاءة. لكن، كخط أساس، دعنا نعتبر أبسط سياسة تسمى **السير العشوائي**.
## المشي العشوائي
## السير العشوائي
دعونا نحل مشكلتنا أولاً من خلال تنفيذ استراتيجية المشي العشوائي. مع المشي العشوائي، سنختار الإجراء التالي عشوائيًا من بين الإجراءات المسموح بها، حتى نصل إلى التفاحة (كتلة الكود 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 خطوات.
يمكنك أيضًا رؤية كيف يبدو تحرك بيتر أثناء المشي العشوائي:
يمكنك أيضًا رؤية كيف يبدو تحرك بيتر أثناء السير العشوائي:
![مشي بيتر العشوائي](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif)
![السير العشوائي لبيتر](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif)
## دالة المكافأة
لجعل سياستنا أكثر ذكاءً، نحتاج إلى فهم أي الحركات "أفضل" من غيرها. للقيام بذلك، نحتاج إلى تعريف هدفنا.
لجعل سياستنا أكثر ذكاءً، نحتاج إلى فهم أي الحركات "أفضل" من غيرها. لهذا، نحتاج إلى تعريف هدفنا.
يمكن تعريف الهدف من خلال **دالة المكافأة**، التي ستُرجع قيمة درجة لكل حالة. كلما زاد الرقم، كانت دالة المكافأة أفضل. (كتلة الكود 5)
يمكن تعريف الهدف بدالة **دالة مكافأة**، التي ترجع قيمة نتائج لكل حالة. كلما كان الرقم أكبر، كانت دالة المكافأة أفضل. (كتلة الكود 5)
```python
move_reward = -0.1
@ -154,39 +154,115 @@ def reward(m,pos=None):
return move_reward
```
الشيء المثير للاهتمام حول دوال المكافأة هو أنه في معظم الحالات، *نحصل فقط على مكافأة كبيرة في نهاية اللعبة*. هذا يعني أن خوارزميةنا يجب أن تتذكر بطريقة ما الخطوات "الجيدة" التي تؤدي إلى مكافأة إيجابية في النهاية، وتزيد من أهميتها. وبالمثل، يجب تثبيط جميع الحركات التي تؤدي إلى نتائج سيئة.
شيء مثير للاهتمام حول دوال المكافأة هو أنه في معظم الحالات، *نحصل على مكافأة كبيرة فقط في نهاية اللعبة*. هذا يعني أن خوارزميتنا يجب أن تتذكر somehow الخطوات "الجيدة" التي تؤدي إلى مكافأة إيجابية في النهاية، وتعزز أهميتها. وبالمثل، يُثبط كل التحركات التي تؤدي إلى نتائج سيئة.
## خوارزمية Q-Learning
## تعلم كيو
الخوارزمية التي سنناقشها هنا تُسمى **Q-Learning**. في هذه الخوارزمية، تُعرف السياسة بدالة (أو بنية بيانات) تُسمى **جدول Q**. يسجل الجدول "جودة" كل إجراء في حالة معينة.
الخوارزمية التي سنناقشها هنا تسمى **تعلم كيو**. في هذه الخوارزمية، تُعرف السياسة بدالة (أو هيكل بيانات) يسمى **جدول كيو**. يسجل "جودة" كل العمليات في حالة معينة.
يُسمى جدول Q بهذا الاسم لأنه غالبًا ما يكون من الملائم تمثيله كجدول، أو مصفوفة متعددة الأبعاد. نظرًا لأن لوحتنا لها أبعاد `width` x `height`، يمكننا تمثيل جدول Q باستخدام مصفوفة numpy ذات الشكل `width` x `height` x `len(actions)`: (كتلة الكود 6)
يسمى جدول كيو لأنه من الملائم تمثيله في صورة جدول، أو مصفوفة متعددة الأبعاد. بما أن لوحتنا هي بأبعاد `عرض` × `ارتفاع`، يمكننا تمثيل جدول كيو باستخدام مصفوفة numpy على شكل `عرض` × `ارتفاع` × `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)`.
![بيئة بيتر](../../../../8-Reinforcement/1-QLearning/images/env_init.png)
![بيئة بيتر](../../../../translated_images/ar/env_init.04e8f26d2d60089e.webp)
في مركز كل خلية يوجد "سهم" يشير إلى الاتجاه المفضل للحركة. نظرًا لأن جميع الاتجاهات متساوية، يتم عرض نقطة.
في وسط كل خلية هناك "سهم" يشير للاتجاه المفضل للحركة. بما أن كل الاتجاهات متساوية، يعرض نقطة.
الآن نحتاج إلى تشغيل المحاكاة، استكشاف بيئتنا، وتعلم توزيع أفضل لقيم جدول Q، مما سيمكننا من العثور على المسار إلى التفاحة بشكل أسرع بكثير.
الآن نحتاج إلى تشغيل المحاكاة، واستكشاف بيئتنا، وتعلم توزيع أفضل لقيم جدول كيو، مما سيمكننا من إيجاد المسار إلى التفاحة بشكل أسرع بكثير.
## جوهر Q-Learning: معادلة بيلمان
## جوهر تعلم كيو: معادلة بيلمان
بمجرد أن نبدأ في التحرك، سيكون لكل إجراء مكافأة مقابلة، أي يمكننا نظريًا اختيار الإجراء التالي بناءً على أعلى مكافأة فورية. ومع ذلك، في معظم الحالات، لن تحقق الحركة هدفنا المتمثل في الوصول إلى التفاحة، وبالتالي لا يمكننا أن نقرر فورًا أي اتجاه هو الأفضل.
بمجرد أن نبدأ في الحركة، سيكون لكل إجراء مكافأة مقابلة، أي يمكننا نظريًا اختيار الإجراء التالي بناءً على أعلى مكافأة فورية. ومع ذلك، في معظم الحالات، لن يحقق التحرك هدفنا في الوصول إلى التفاحة، وبالتالي لا يمكننا فورًا تحديد الاتجاه الأفضل.
> تذكر أن النتيجة الفورية ليست هي المهمة، بل النتيجة النهائية، التي سنحصل عليها في نهاية المحاكاة.
> تذكر أن النتيجة الفورية ليست المهمة، بل النتيجة النهائية التي سنحصل عليها في نهاية المحاكاة.
لأخذ هذه المكافأة المؤجلة في الاعتبار، نحتاج إلى استخدام مبادئ **[البرمجة الديناميكية](https://en.wikipedia.org/wiki/Dynamic_programming)**، التي تتيح لنا التفكير في مشكلتنا بشكل تكراري.
من أجل حساب هذه المكافأة المؤجلة، نحتاج إلى استخدام مبادئ **[البرمجة الديناميكية](https://en.wikipedia.org/wiki/Dynamic_programming)**، التي تسمح لنا بالتفكير في مشكلتنا بشكل متكرر.
افترض أننا الآن في الحالة *s*، ونريد الانتقال إلى الحالة التالية *s'*. من خلال القيام بذلك، سنحصل على المكافأة الفورية *r(s,a)*، المعرفة بواسطة دالة المكافأة، بالإضافة إلى بعض المكافآت المستقبلية. إذا افترضنا أن جدول Q يعكس بشكل صحيح "جاذبية" كل إجراء، فإننا في الحالة *s'* سنختار الإجراء *a* الذي يتوافق مع القيمة القصوى لـ *Q(s',a')*. وبالتالي، فإن أفضل مكافأة مستقبلية ممكنة يمكننا الحصول عليها في الحالة *s* ستُعرف بـ `max`
لنفترض أننا الآن في الحالة *s*، ونريد الانتقال إلى الحالة التالية *s'*. بعمل ذلك، سنتلقى المكافأة الفورية *r(s,a)*، المعرفة بواسطة دالة المكافأة، بالإضافة إلى بعض المكافأة المستقبلية. إذا افترضنا أن جدول كيو يعكس بدقة "جاذبية" كل إجراء، فعند الحالة *s'* سنختار إجراء *a* الذي يقابل القيمة القصوى لـ *Q(s',a')*. إذن، أفضل مكافأة مستقبلية ممكنة يمكننا الحصول عليها عند الحالة *s* ستُعرّف كـ `max`<sub>a'</sub>*Q(s',a')* (يُحسب الحد الأقصى هنا عبر جميع الإجراءات الممكنة *a'* في الحالة *s'*).
هذا يعطينا **معادلة بيلمان** لحساب قيمة جدول كيو عند الحالة *s*، بناءً على الإجراء *a*:
<img src="../../../../translated_images/ar/bellman-equation.7c0c4c722e5a6b7c.webp"/>
هنا γ هو ما يسمى **عامل الخصم** الذي يحدد إلى أي مدى يجب أن تفضّل المكافأة الحالية على المكافأة المستقبلية والعكس.
## خوارزمية التعلم
بالنظر إلى المعادلة أعلاه، يمكننا الآن كتابة كود زائف لخوارزمية التعلم:
* ابدأ جدول كيو Q بأعداد متساوية لكل الحالات والإجراءات
* اضبط معدل التعلم α ← 1
* كرر المحاكاة عدة مرات
1. ابدأ من موقع عشوائي
1. كرر
1. اختر إجراء *a* في الحالة *s*
2. نفذ الإجراء بالتحرك إلى حالة جديدة *s'*
3. إذا صادفنا شرط نهاية اللعبة، أو كانت المكافأة الكلية صغيرة جدًا - اخرج من المحاكاة
4. احسب المكافأة *r* في الحالة الجديدة
5. حدّث دالة Q حسب معادلة بيلمان: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ max<sub>a'</sub>Q(s',a'))*
6. *s* ← *s'*
7. حدّث المكافأة الكلية وقلل α.
## الاستغلال مقابل الاستكشاف
في الخوارزمية أعلاه، لم نحدد كيف نختار الإجراء بالضبط في الخطوة 2.1. إذا اخترنا الإجراء عشوائيًا، فسن **نستكشف** البيئة عشوائيًا، ومن المحتمل أن نموت كثيرًا وكذلك نستكشف مناطق لم نذهب إليها عادة. النهج البديل هو **استغلال** قيم جدول كيو التي نعرفها بالفعل، وبالتالي اختيار أفضل إجراء (بقيمة جدول كيو أعلى) عند الحالة *s*. وهذا، مع ذلك، سيمنعنا من استكشاف حالات أخرى، ومن المحتمل ألا نجد الحل الأمثل.
لذلك، النهج الأفضل هو تحقيق توازن بين الاستكشاف والاستغلال. يمكن فعل ذلك باختيار الإجراء عند الحالة *s* مع احتمالات تتناسب مع القيم في جدول كيو. في البداية، عندما تكون قيم جدول كيو كلها متساوية، سيكون الاختيار عشوائيًا، ولكن مع تعلمنا المزيد عن بيئتنا، سنكون أكثر ميلًا لاتباع الطريق الأمثل مع السماح للوكيل باختيار مسار غير مستكشف أحيانًا.
## تنفيذ بايثون
نحن الآن مستعدون لتنفيذ خوارزمية التعلم. قبل أن نفعل ذلك، نحتاج أيضًا إلى دالة تُحوّل الأعداد العشوائية في جدول كيو إلى متجه احتمالات للإجراءات المقابلة.
1. أنشئ دالة `probs()`:
```python
def probs(v,eps=1e-4):
v = v-v.min()+eps
v = v/v.sum()
return v
```
نضيف بعض `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
```
بعد تنفيذ هذه الخوارزمية، يجب تحديث جدول كيو بالقيم التي تحدد جاذبية الإجراءات المختلفة في كل خطوة. يمكننا محاولة عرض جدول كيو برسم متجه في كل خلية يشير إلى الاتجاه المطلوب للحركة. وللبساطة، نرسم دائرة صغيرة بدل رأس السهم.
<img src="../../../../translated_images/ar/learned.ed28bcd8484b5287.webp"/>
## التحقق من السياسة
نظرًا لأن جدول Q يسرد "جاذبية" كل إجراء في كل حالة، فمن السهل استخدامه لتحديد التنقل الفعّال في عالمنا. في أبسط الحالات، يمكننا اختيار الإجراء الذي يتوافق مع أعلى قيمة في جدول Q: (كتلة الكود 9)
بما أن جدول كيو يسرد "جاذبية" كل إجراء في كل حالة، فمن السهل جدًا استخدامه لتحديد التنقل الفعال في عالمنا. في أبسط الحالات، يمكننا اختيار الإجراء المقابل لأعلى قيمة في جدول كيو: (كتلة الكود 9)
```python
def qpolicy_strict(m):
@ -198,17 +274,18 @@ def qpolicy_strict(m):
walk(m,qpolicy_strict)
```
> إذا جربت الكود أعلاه عدة مرات، قد تلاحظ أنه أحيانًا "يتوقف"، وتحتاج إلى الضغط على زر الإيقاف في الدفتر لمقاطعته. يحدث هذا لأن هناك حالات قد تشير فيها حالتان إلى بعضهما البعض من حيث قيمة Q المثلى، وفي هذه الحالة ينتهي الأمر بالوكيل بالتنقل بين تلك الحالات إلى ما لا نهاية.
> إذا جربت الكود أعلاه عدة مرات، قد تلاحظ أحيانًا أنه "يتوقف عن الاستجابة"، وتحتاج إلى الضغط على زر الإيقاف في الدفتر لإيقافه. يحدث هذا لأن هناك حالات قد تتبادل فيها حالتان "الإشارة" لبعضهما البعض من حيث قيمة Q المثلى، وفي هذه الحالة ينتهي بالوكيل إلى التنقل بين تلك الحالات إلى أجل غير مسمى.
## 🚀التحدي
> **المهمة 1:** قم بتعديل وظيفة `walk` لتحديد الحد الأقصى لطول المسار بعدد معين من الخطوات (على سبيل المثال، 100)، وشاهد الكود أعلاه يعيد هذه القيمة من وقت لآخر.
> **المهمة 1:** عدل دالة `walk` لتحديد الحد الأقصى لطول المسار بعدد معين من الخطوات (مثلاً، 100)، وراقب الكود أعلاه وهو يعيد هذه القيمة من وقت لآخر.
> **المهمة 2:** قم بتعديل وظيفة `walk` بحيث لا تعود إلى الأماكن التي زارتها مسبقًا. سيمنع هذا `walk` من التكرار، ومع ذلك، قد ينتهي الأمر بالوكيل بأن يكون "محاصرًا" في موقع لا يستطيع الهروب منه.
> **المهمة 2:** عدل دالة `walk` بحيث لا تعود إلى الأماكن التي زارها سابقًا. هذا سيمنع `walk` من الدخول في حلقة لا نهائية، مع ذلك، قد يظل الوكيل محاصرًا في موقع لا يستطيع الهروب منه.
## التنقل
سياسة التنقل الأفضل هي تلك التي استخدمناها أثناء التدريب، والتي تجمع بين الاستغلال والاستكشاف. في هذه السياسة، سنختار كل إجراء باحتمالية معينة، تتناسب مع القيم في جدول Q. قد تؤدي هذه الاستراتيجية إلى عودة الوكيل إلى موقع سبق أن استكشفه، ولكن كما ترى من الكود أدناه، فإنها تؤدي إلى مسار متوسط قصير جدًا إلى الموقع المطلوب (تذكر أن `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.
## دراسة عملية التعلم
## التحقيق في عملية التعلم
كما ذكرنا، عملية التعلم هي توازن بين الاستكشاف والاستغلال للمعرفة المكتسبة حول هيكل فضاء المشكلة. لقد رأينا أن نتائج التعلم (القدرة على مساعدة الوكيل في إيجاد مسار قصير إلى الهدف) قد تحسنت، لكنه من المثير أيضًا مراقبة كيف يتصرف متوسط طول المسار أثناء عملية التعلم:
كما ذكرنا، عملية التعلم هي توازن بين الاستكشاف واستغلال المعرفة المكتسبة حول هيكل مساحة المشكلة. لقد رأينا أن نتائج التعلم (القدرة على مساعدة الوكيل في العثور على مسار قصير إلى الهدف) قد تحسنت، ولكن من المثير أيضًا ملاحظة كيف يتصرف متوسط طول المسار أثناء عملية التعلم:
<img src="../../../../translated_images/ar/lpathlen1.0534784add58d4eb.webp"/>
### يمكن تلخيص التعلم كما يلي:
يمكن تلخيص التعلم كما يلي:
- **زيادة متوسط طول المسار**. ما نراه هنا هو أنه في البداية، يزيد متوسط طول المسار. ربما يرجع ذلك إلى أنه عندما لا نعرف شيئًا عن البيئة، فمن المحتمل أن نقع في حالات سيئة، مثل الماء أو الذئب. ومع تعلمنا المزيد واستخدام هذه المعرفة، يمكننا استكشاف البيئة لفترة أطول، ولكننا لا نزال لا نعرف جيدًا مكان التفاح.
- **يزداد متوسط طول المسار**. ما نراه هنا هو أنه في البداية، يزداد متوسط طول المسار. ويرجع ذلك على الأرجح إلى أننا لا نعرف شيئًا عن البيئة، ومن المحتمل أن نعلق في حالات سيئة، مثل الماء أو الذئب. مع اكتسابنا للمزيد من المعرفة، نتمكن من استكشاف البيئة لفترة أطول، لكننا لا نزال لا نعرف أماكن التفاح جيدًا.
- **انخفاض طول المسار مع زيادة التعلم**. بمجرد أن نتعلم بما يكفي، يصبح من الأسهل للوكيل تحقيق الهدف، ويبدأ طول المسار في الانخفاض. ومع ذلك، لا نزال منفتحين على الاستكشاف، لذا غالبًا ما ننحرف بعيدًا عن المسار الأفضل، ونستكشف خيارات جديدة، مما يجعل المسار أطول من المثالي.
- **ينخفض طول المسار مع التعلّم**. بمجرد أن نتعلم بما فيه الكفاية، يصبح من الأسهل على الوكيل تحقيق الهدف، ويبدأ طول المسار في الانخفاض. ومع ذلك، نحن لا نزال منفتحين على الاستكشاف، لذا غالبًا ما ننحرف عن أفضل مسار، ونستكشف خيارات جديدة، مما يجعل المسار أطول من الأمثل.
- **زيادة الطول بشكل مفاجئ**. ما نلاحظه أيضًا في هذا الرسم البياني هو أنه في مرحلة ما، زاد الطول بشكل مفاجئ. يشير هذا إلى الطبيعة العشوائية للعملية، وأنه يمكننا في مرحلة ما "إفساد" معاملات جدول Q عن طريق الكتابة فوقها بقيم جديدة. يجب تقليل هذا بشكل مثالي عن طريق تقليل معدل التعلم (على سبيل المثال، في نهاية التدريب، نقوم فقط بتعديل قيم جدول Q بقيمة صغيرة).
- **يزداد الطول بشكل مفاجئ**. ما نلاحظه أيضًا في هذا الرسم البياني هو أنه في نقطة معينة، زاد الطول فجأة. يشير هذا إلى الطبيعة العشوائية للعملية، وأنه يمكن في نقطة ما "إفساد" معاملات جدول Q بإعادة كتابتها بقيم جديدة. من المثالي تقليل هذا عن طريق تقليل معدل التعلم (على سبيل المثال، نحو نهاية التدريب، نضبط قيم جدول Q بقيمة صغيرة فقط).
بشكل عام، من المهم أن نتذكر أن نجاح وجودة عملية التعلم تعتمد بشكل كبير على المعلمات، مثل معدل التعلم، انخفاض معدل التعلم، وعامل الخصم. غالبًا ما يُطلق على هذه المعلمات اسم **المعلمات الفائقة**، لتمييزها عن **المعلمات**، التي نقوم بتحسينها أثناء التدريب (على سبيل المثال، معاملات جدول Q). عملية العثور على أفضل قيم للمعلمات الفائقة تُسمى **تحسين المعلمات الفائقة**، وهي تستحق موضوعًا منفصلًا.
بشكل عام، من المهم أن نتذكر أن نجاح وجودة عملية التعلم تعتمد بشكل كبير على معايير، مثل معدل التعلم، تناقص معدل التعلم، وعامل الخصم. غالبًا ما تُسمى هذه **المعلمات الفائقة**، لتمييزها عن **المعلمات** التي نحسنها أثناء التدريب (مثل معاملات جدول Q). تُسمى عملية إيجاد أفضل قيم للمعلمات الفائقة **تحسين المعلمات الفائقة**، وتستحق موضوعًا منفصلًا.
## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/)
## الواجب
## المهمة
[عالم أكثر واقعية](assignment.md)
---
**إخلاء المسؤولية**:
تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**تنويه**:
تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,32 +1,34 @@
# التزلج على CartPole
# تزلج على العربة القطب
المشكلة التي قمنا بحلها في الدرس السابق قد تبدو وكأنها مشكلة بسيطة وغير قابلة للتطبيق في سيناريوهات الحياة الواقعية. لكن هذا ليس صحيحًا، لأن العديد من مشاكل العالم الحقيقي تشترك في هذا السيناريو - بما في ذلك لعب الشطرنج أو لعبة Go. فهي مشابهة لأن لدينا أيضًا لوحة بقواعد محددة وحالة **منفصلة**.
المشكلة التي كنا نحلها في الدرس السابق قد تبدو كمشكلة لعبة، ليست قابلة للتطبيق حقًا في سيناريوهات الحياة الواقعية. هذا ليس صحيحًا، لأن العديد من المشكلات الواقعية تشترك أيضًا في هذا السيناريو - بما في ذلك لعب الشطرنج أو جو. هي مشابهة، لأن لدينا أيضًا لوحة بقواعد معينة و**حالة متقطعة**.
## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/)
## المقدمة
## مقدمة
في هذا الدرس، سنطبق نفس مبادئ التعلم باستخدام Q-Learning على مشكلة ذات حالة **مستمرة**، أي حالة يتم تحديدها بواسطة رقم حقيقي أو أكثر. سنتعامل مع المشكلة التالية:
في هذا الدرس سنطبق نفس مبادئ التعلم القيمي (Q-Learning) على مشكلة ذات **حالة مستمرة**، أي حالة تحددها واحدة أو أكثر من الأرقام الحقيقية. سنتعامل مع المشكلة التالية:
> **المشكلة**: إذا أراد بيتر الهروب من الذئب، يجب أن يكون قادرًا على التحرك بسرعة أكبر. سنرى كيف يمكن لبيتر تعلم التزلج، وبالتحديد الحفاظ على التوازن، باستخدام Q-Learning.
> **المشكلة**: إذا أراد بيتر الهروب من الذئب، يحتاج لأن يكون قادرًا على التحرك بسرعة أكبر. سنرى كيف يمكن لبيتر تعلم التزلج، خصوصًا الحفاظ على التوازن، باستخدام التعلم القيمي.
![الهروب الكبير!](../../../../8-Reinforcement/2-Gym/images/escape.png)
![الهروب العظيم!](../../../../translated_images/ar/escape.18862db9930337e3.webp)
> بيتر وأصدقاؤه يبدعون للهروب من الذئب! الصورة بواسطة [Jen Looper](https://twitter.com/jenlooper)
> بيتر وأصدقاؤه يبدعون للهروب من الذئب! الصورة بواسطة [جين لوبير](https://twitter.com/jenlooper)
سنستخدم نسخة مبسطة من التوازن تُعرف بمشكلة **CartPole**. في عالم CartPole، لدينا شريط أفقي يمكنه التحرك إلى اليسار أو اليمين، والهدف هو الحفاظ على توازن عمود رأسي فوق الشريط.
سنستخدم نسخة مبسطة من التوازن تعرف بمشكلة **العربة والقطب**. في عالم العربة والقطب، لدينا منزلق أفقي يمكنه التحرك لليسار أو اليمين، والهدف هو موازنة عمود رأسي على قمة المنزلق.
<img alt="عربة القطب" src="../../../../translated_images/ar/cartpole.b5609cc0494a14f7.webp" width="200"/>
## المتطلبات الأساسية
في هذا الدرس، سنستخدم مكتبة تُسمى **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` التي قمنا بتعريفها بأنفسنا. هنا سنستخدم بيئة **محاكاة خاصة**، والتي ستقوم بمحاكاة الفيزياء وراء العمود المتوازن. واحدة من أشهر بيئات المحاكاة لتدريب خوارزميات التعلم المعزز تُسمى [Gym](https://gym.openai.com/)، والتي يتم صيانتها بواسطة [OpenAI](https://openai.com/). باستخدام هذه البيئة يمكننا إنشاء بيئات مختلفة من محاكاة CartPole إلى ألعاب Atari.
في الدرس السابق، كانت قواعد اللعبة والحالة معينة بواسطة فئة `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
@ -38,13 +40,13 @@ import numpy as np
import random
```
## تمرين - تهيئة بيئة CartPole
## تمرين - تهيئة بيئة عربة القطب
للعمل مع مشكلة توازن CartPole، نحتاج إلى تهيئة البيئة المناسبة. كل بيئة مرتبطة بـ:
للعمل مع مشكلة توازن العربة والقطب، نحتاج إلى تهيئة البيئة المقابلة. كل بيئة مرتبطة بـ:
- **مساحة الملاحظة** التي تُحدد هيكل المعلومات التي نتلقاها من البيئة. بالنسبة لمشكلة CartPole، نتلقى موقع العمود، السرعة وبعض القيم الأخرى.
- **فضاء الرصد** الذي يحدد بنية المعلومات التي نستقبلها من البيئة. بالنسبة لمشكلة العربة والقطب، نستقبل موضع القطب، السرعة وبعض القيم الأخرى.
- **مساحة الحركة** التي تُحدد الإجراءات الممكنة. في حالتنا، مساحة الحركة منفصلة، وتتكون من إجراءين - **يسار** و **يمين**. (كتلة الكود 2)
- **فضاء الإجراءات** الذي يحدد الإجراءات الممكنة. في حالتنا، فضاء الإجراءات متقطع، ويتكون من إجراءين - **اليسار** و**اليمين**. (كتلة الأكواد 2)
1. للتهيئة، اكتب الكود التالي:
@ -55,11 +57,11 @@ import random
print(env.action_space.sample())
```
لرؤية كيفية عمل البيئة، دعنا نقوم بتشغيل محاكاة قصيرة لمدة 100 خطوة. في كل خطوة، نقدم أحد الإجراءات التي يجب اتخاذها - في هذه المحاكاة نختار إجراءً عشوائيًا من `action_space`.
لرؤية كيفية عمل البيئة، لنقم بتشغيل محاكاة قصيرة من 100 خطوة. في كل خطوة، نعطي إجراءً واحدًا ليتم تنفيذه - في هذه المحاكاة نختار إجراء عشوائيًا من `action_space`.
1. قم بتشغيل الكود أدناه وشاهد النتائج.
1. شغل الكود أدناه وانظر إلى النتيجة.
✅ تذكر أنه يُفضل تشغيل هذا الكود على تثبيت Python محلي! (كتلة الكود 3)
✅ تذكر أنه من الأفضل تشغيل هذا الكود على تثبيت بايثون محلي! (كتلة الأكواد 3)
```python
env.reset()
@ -70,11 +72,11 @@ import random
env.close()
```
يجب أن ترى شيئًا مشابهًا لهذه الصورة:
يجب أن ترى شيئًا مماثلًا لهذه الصورة:
![CartPole غير متوازن](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif)
![عربة القطب غير متوازنة](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif)
1. أثناء المحاكاة، نحتاج إلى الحصول على الملاحظات لتحديد كيفية التصرف. في الواقع، تُرجع وظيفة الخطوة الملاحظات الحالية، دالة المكافأة، وعلامة الانتهاء التي تشير إلى ما إذا كان من المنطقي متابعة المحاكاة أم لا: (كتلة الكود 4)
1. أثناء المحاكاة، نحتاج إلى الحصول على الملاحظات لاتخاذ قرار الفعل. في الحقيقة، دالة step تُرجع الملاحظات الحالية، دالة المكافأة، وعلم الانتهاء الذي يشير إلى ما إذا كان من المنطقي الاستمرار في المحاكاة أم لا: (كتلة الأكواد 4)
```python
env.reset()
@ -87,7 +89,7 @@ import random
env.close()
```
ستنتهي برؤية شيء مثل هذا في إخراج الدفتر:
ستنتهي برؤية شيء مثل هذا في ناتج النوتبوك:
```text
[ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0
@ -100,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. هذا لأن هدفنا هو البقاء لأطول فترة ممكنة، أي الحفاظ على العمود في وضع عمودي بشكل معقول لأطول فترة ممكنة.
✅ في الواقع، تُعتبر محاكاة CartPole محلولة إذا تمكنا من الحصول على متوسط مكافأة قدره 195 على مدى 100 تجربة متتالية.
قد تلاحظ أيضًا أن قيمة المكافأة في كل خطوة محاكاة دائمًا 1. هذا لأن هدفنا هو البقاء لأطول فترة ممكنة، أي الحفاظ على القطب في وضع عمودي معقول لأطول وقت.
## تقسيم الحالة إلى قيم منفصلة
✅ في الحقيقة، تعتبر محاكاة CartPole محلولة إذا استطعنا الحصول على المكافأة المتوسطة 195 خلال 100 محاكاة متتالية.
في Q-Learning، نحتاج إلى بناء جدول Q الذي يُحدد ما يجب فعله في كل حالة. لكي نتمكن من القيام بذلك، يجب أن تكون الحالة **منفصلة**، وبشكل أكثر دقة، يجب أن تحتوي على عدد محدود من القيم المنفصلة. لذلك، نحتاج بطريقة ما إلى **تقسيم** ملاحظاتنا، وربطها بمجموعة محدودة من الحالات.
## تقسيم الحالة
هناك عدة طرق يمكننا القيام بذلك:
في التعلم القيمي، نحتاج لبناء جدول Q يحدد ما يجب فعله في كل حالة. لنتمكن من ذلك، نحتاج أن تكون الحالة **متقطعة**، وبشكل أدق أن تحتوي على عدد محدود من القيم المتقطعة. لذا، نحتاج إلى طريقة لـ **تقسيم** ملاحظاتنا، وتحويلها إلى مجموعة محدودة من الحالات.
- **التقسيم إلى مجموعات**. إذا كنا نعرف نطاق قيمة معينة، يمكننا تقسيم هذا النطاق إلى عدد من **المجموعات**، ثم استبدال القيمة برقم المجموعة التي تنتمي إليها. يمكن القيام بذلك باستخدام طريقة [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) في numpy. في هذه الحالة، سنعرف حجم الحالة بدقة، لأنه سيعتمد على عدد المجموعات التي نختارها للتقسيم.
هناك عدة طرق للقيام بذلك:
✅ يمكننا استخدام الاستيفاء الخطي لجلب القيم إلى نطاق محدود (على سبيل المثال، من -20 إلى 20)، ثم تحويل الأرقام إلى أعداد صحيحة عن طريق تقريبها. هذا يمنحنا تحكمًا أقل في حجم الحالة، خاصة إذا لم نكن نعرف النطاقات الدقيقة للقيم المدخلة. على سبيل المثال، في حالتنا، 2 من أصل 4 قيم ليس لها حدود عليا/سفلى على قيمها، مما قد يؤدي إلى عدد لا نهائي من الحالات.
- **التقسيم إلى حاويات**. إذا عرفنا فترة قيمة معينة، يمكننا تقسيم هذه الفترة إلى عدد من **الحاويات**، ثم نستبدل القيمة برقم الحاوية التي تنتمي إليها. يمكن القيام بذلك باستخدام دالة numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html). في هذه الحالة، سنعرف بالضبط حجم الحالة، لأنه يعتمد على عدد الحاويات التي نختارها للرقمنة.
✅ يمكننا استخدام الاستيفاء الخطي لجلب القيم إلى فترة محدودة (مثلاً من -20 إلى 20)، ثم تحويل الأرقام إلى أعداد صحيحة بتقريبها. هذا يمنحنا سيطرة أقل على حجم الحالة، خصوصًا إذا لم نكن نعرف نطاق القيم المدخلة بدقة. على سبيل المثال، في حالتنا، 2 من أصل 4 قيم لا تملك حدود عليا أو دنيا، مما قد يؤدي إلى عدد لا نهائي من الحالات.
في مثالنا، سنستخدم الطريقة الثانية. كما قد تلاحظ لاحقًا، على الرغم من عدم وجود حدود عليا/سفلى محددة، فإن تلك القيم نادرًا ما تأخذ قيمًا خارج نطاقات معينة محدودة، وبالتالي ستكون تلك الحالات ذات القيم القصوى نادرة جدًا.
في مثالنا، سنختار المنهج الثاني. كما قد تلاحظ لاحقًا، رغم الحدود العليا / الدنيا غير المحددة، فإن هذه القيم نادرًا ما تأخذ قيمًا خارج فترات محدودة معينة، لذلك الحالات ذات القيم القصوى ستكون نادرة جدًا.
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):
@ -144,45 +146,165 @@ import random
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()
done = False
while not done:
#env.render()
#عرض البيئة ()
obs, rew, done, info = env.step(env.action_space.sample())
#print(discretize_bins(obs))
#طباعة (discretize_bins(obs))
print(discretize(obs))
env.close()
```
✅ قم بإلغاء تعليق السطر الذي يبدأ بـ `env.render` إذا كنت تريد رؤية كيفية تنفيذ البيئة. خلاف ذلك، يمكنك تنفيذها في الخلفية، وهو أسرع. سنستخدم هذا التنفيذ "غير المرئي" أثناء عملية Q-Learning.
✅ قم بإلغاء تعليق السطر الذي يبدأ بـ env.render إذا أردت رؤية كيف تنفذ البيئة. وإلا يمكنك تشغيلها في الخلفية، مما يكون أسرع. سنستخدم هذا التنفيذ "غير المرئي" خلال عملية التعلم القيمي.
## هيكل جدول Q
في درسنا السابق، كانت الحالة عبارة عن زوج بسيط من الأرقام من 0 إلى 8، وبالتالي كان من المناسب تمثيل جدول Q بمصفوفة numpy ذات شكل 8x8x2. إذا استخدمنا تقسيم المجموعات، فإن حجم متجه الحالة لدينا معروف أيضًا، لذلك يمكننا استخدام نفس النهج وتمثيل الحالة بمصفوفة ذات شكل 20x20x10x10x2 (هنا 2 هي بُعد مساحة الحركة، والأبعاد الأولى تتوافق مع عدد المجموعات التي اخترنا استخدامها لكل من المعلمات في مساحة الملاحظة).
في درسنا السابق، كانت الحالة زوجًا بسيطًا من الأرقام من 0 إلى 8، لذا كان من الملائم تمثيل جدول Q عن طريق مصفوفة numpy ذات شكل 8x8x2. إذا استخدمنا تقسيم الحاويات، سيكون حجم متجه الحالة معروفًا، لذا يمكننا استخدام نفس النهج وتمثيل الحالة كمصفوفة ذات شكل 20x20x10x10x2 (هنا 2 هو بُعد فضاء الإجراءات، والأبعاد الأولى تمثل عدد الحاويات التي اخترناها لكل من معايير فضاء الملاحظات).
أحيانًا لا تكون أبعاد فضاء الملاحظات الدقيقة معروفة. في حالة دالة `discretize`، قد لا نكون متأكدين أبدًا أن حالتنا تبقى ضمن حدود معينة، لأن بعض القيم الأصلية غير محدودة. لذلك، سنستخدم نهجًا مختلفًا قليلاً ونمثل جدول Q بواسطة قاموس.
1. استخدم الزوج *(state, action)* كمفتاح في القاموس، والقيمة ستكون القيمة في جدول Q. (كتلة الأكواد 9)
```python
Q = {}
actions = (0,1)
def qvalues(state):
return [Q.get((state,a),0) for a in actions]
```
هنا نعرف أيضًا دالة `qvalues()` التي ترجع قائمة بقيم جدول Q لحالة معينة تتوافق مع كل الإجراءات الممكنة. إذا لم يكن الإدخال موجودًا في جدول Q، نُرجع 0 كافتراضي.
## لنبدأ التعلم القيمي
الآن نحن جاهزون لتعليم بيتر كيفية التوازن!
1. أولًا، دعنا نحدد بعض المعاملات الفائقة: (كتلة الأكواد 10)
```python
# المعلمات الفائقة
alpha = 0.3
gamma = 0.9
epsilon = 0.90
```
هنا، `alpha` هو **معدل التعلم** الذي يحدد مدى تعديل القيم الحالية في جدول Q في كل خطوة. في الدرس السابق بدأنا بـ 1، ثم خفضنا `alpha` إلى قيم أقل أثناء التدريب. في هذا المثال سنبقيه ثابتًا للبساطة، ويمكنك تجربة تعديل قيم `alpha` لاحقًا.
`gamma` هو **عامل الخصم** الذي يوضح مدى أولوية المكافأة المستقبلية على المكافأة الحالية.
`epsilon` هو **عامل الاستكشاف / الاستغلال** الذي يحدد ما إذا كان يجب أن نفضل الاستكشاف على الاستغلال أو العكس. في الخوارزمية لدينا، سنختار الإجراء التالي وفقًا لقيم جدول Q في نسبة `epsilon` من الحالات، وفي الحالات المتبقية ننفذ إجراءً عشوائيًا. هذا يسمح لنا باستكشاف مناطق لم نرها من قبل في فضاء البحث.
✅ من حيث التوازن - اختيار إجراء عشوائي (استكشاف) يشبه لكمة عشوائية في الاتجاه الخاطئ، ويجب على القطب أن يتعلم كيف يعيد التوازن من تلك "الأخطاء".
### تحسين الخوارزمية
يمكننا أيضًا إجراء تحسينين لخوارزميتنا من الدرس السابق:
- **حساب متوسط المكافأة التراكمية** عبر عدد من المحاكيات. سنطبع التقدم كل 5000 تكرار، وسنحسب المتوسط للمكافأة التراكمية خلال تلك الفترة. هذا يعني أنه إذا حصلنا على أكثر من 195 نقطة - يمكننا اعتبار المشكلة محلولة بجودة أعلى حتى من المطلوبة.
- **حساب الحد الأقصى للمتوسط التراكمي**، `Qmax`، وسنخزن جدول Q المقابل لذلك. عند تشغيل التدريب ستلاحظ أن متوسط النتيجة يبدأ أحيانًا في الانخفاض، ونريد الاحتفاظ بقيم جدول Q التي تمثل أفضل نموذج تم ملاحظته أثناء التدريب.
1. اجمع كل المكافآت التراكمية في كل محاكاة في متجه `rewards` للرسم اللاحق. (كتلة الأكواد 11)
```python
def probs(v,eps=1e-4):
v = v-v.min()+eps
v = v/v.sum()
return v
Qmax = 0
cum_rewards = []
rewards = []
for epoch in range(100000):
obs = env.reset()
done = False
cum_reward=0
# == قم بالمحاكاة ==
while not done:
s = discretize(obs)
if random.random()<epsilon:
# الاستغلال - اختر الإجراء وفقًا لاحتمالات جدول Q
v = probs(np.array(qvalues(s)))
a = random.choices(actions,weights=v)[0]
else:
# الاستكشاف - اختر الإجراء عشوائيًا
a = np.random.randint(env.action_space.n)
obs, rew, done, info = env.step(a)
cum_reward+=rew
ns = discretize(obs)
Q[(s,a)] = (1 - alpha) * Q.get((s,a),0) + alpha * (rew + gamma * max(qvalues(ns)))
cum_rewards.append(cum_reward)
rewards.append(cum_reward)
# == طباعة النتائج دوريًا وحساب متوسط المكافأة ==
if epoch%5000==0:
print(f"{epoch}: {np.average(cum_rewards)}, alpha={alpha}, epsilon={epsilon}")
if np.average(cum_rewards) > Qmax:
Qmax = np.average(cum_rewards)
Qbest = Q
cum_rewards=[]
```
ما قد تلاحظ من تلك النتائج:
- **نحن قريبون من هدفنا**. نحن قريبون جدًا من تحقيق الهدف بالحصول على 195 مكافأة تراكمية خلال 100+ جولة متتالية من المحاكاة، أو قد نكون قد حققناه بالفعل! حتى إذا حصلنا على أرقام أقل، لا يمكننا التأكد لأنه يتم التوسط خلال 5000 جولة، بينما فقط 100 جولة مطلوبة في المعايير الرسمية.
- **المكافأة تبدأ في الانخفاض**. أحيانًا تبدأ المكافأة في الانخفاض، مما يعني أننا قد "ندمر" القيم التي تعلمناها في جدول Q بقيم تجعل الوضع أسوأ.
هذا الملاحظة تصبح أكثر وضوحًا إذا رسمنا تقدم التدريب.
## رسم تقدم التدريب
أثناء التدريب، جمعنا قيمة المكافأة التراكمية في كل تكرار في متجه `rewards`. هكذا يبدو شكل الرسم مقابل رقم التكرار:
```python
plt.plot(rewards)
```
![تقدم الخام](../../../../translated_images/ar/train_progress_raw.2adfdf2daea09c59.webp)
من هذا الرسم لا يمكننا استنتاج شيء، لأن طبيعة عملية التدريب العشوائية تجعل طول جلسات التدريب يختلف كثيرًا. لجعل هذا الرسم أكثر معنى، يمكننا حساب **المتوسط المتحرك** عبر سلسلة من التجارب، لنقل 100 تجربة. يمكن تنفيذ ذلك بسهولة باستخدام `np.convolve`: (كتلة الأكواد 12)
```python
def running_average(x,window):
return np.convolve(x,np.ones(window)/window,mode='valid')
plt.plot(running_average(rewards,100))
```
![تقدم التدريب](../../../../translated_images/ar/train_progress_runav.c71694a8fa9ab359.webp)
## تغيير المعاملات الفائقة
لجعل التعلم أكثر استقرارًا، من المنطقي تعديل بعض معاملاتنا الفائقة أثناء التدريب. على وجه الخصوص:
- **لمعدل التعلم** `alpha`، قد نبدأ بقيم قريبة من 1، ثم نخفض هذا المعامل تدريجيًا. مع الزمن، سنحصل على قيم احتمال جيدة في جدول Q، لذا يجب أن نعدلها قليلاً، وليس استبدالها تمامًا بقيم جديدة.
- **زيادة epsilon**. قد نرغب في زيادة `epsilon` ببطء، لتقليل الاستكشاف وزيادة الاستغلال. من المنطقي أن نبدأ بقيمة منخفضة لـ `epsilon` ونصل بها إلى ما يقرب من 1.
> **المهمة 1**: جرب قيم المعاملات الفائقة وانظر إن كنت تستطيع تحقيق مكافأة تراكمية أعلى. هل تحصل على أكثر من 195؟
ومع ذلك، في بعض الأحيان لا تكون أبعاد مساحة الملاحظة معروفة بدقة. في حالة وظيفة `discretize`، قد لا نكون متأكدين أبدًا من أن حالتنا تبقى ضمن حدود معينة، لأن بعض القيم الأصلية ليست محدودة. لذلك، سنستخدم نهجًا مختلفًا قليلاً ونمثل جدول Q بواسطة قاموس.
1. استخدم الزوج *(state,action)* كمفتاح للقام
> **المهمة 1**: جرّب تعديل قيم المعاملات الفائقة (hyperparameters) وانظر إذا كان بإمكانك تحقيق مكافأة تراكمية أعلى. هل تحصل على أكثر من 195؟
> **المهمة 2**: لحل المشكلة بشكل رسمي، تحتاج إلى تحقيق متوسط مكافأة قدره 195 عبر 100 تشغيل متتالي. قم بقياس ذلك أثناء التدريب وتأكد من أنك قد حللت المشكلة بشكل رسمي!
> **المهمة 2**: لحل المشكلة رسمياً، تحتاج إلى تحقيق متوسط مكافأة قدره 195 عبر 100 تجربة متتالية. قم بقياس ذلك أثناء التدريب وتأكد من أنك قد حللت المشكلة رسمياً!
## رؤية النتيجة عمليًا
## مشاهدة النتيجة في التنفيذ
سيكون من المثير للاهتمام رؤية كيف يتصرف النموذج المدرب بالفعل. دعنا نقوم بتشغيل المحاكاة ونتبع نفس استراتيجية اختيار الإجراءات كما في التدريب، حيث يتم أخذ العينات وفقًا لتوزيع الاحتمالات في Q-Table: (كتلة الكود 13)
سيكون من المثير للاهتمام رؤية كيف يتصرف النموذج المدرب بالفعل. دعنا نشغل المحاكاة ونتبع نفس استراتيجية اختيار الإجراء كما في التدريب، مع أخذ عينات وفقاً لتوزيع الاحتمالية في جدول Q: (كتلة الكود 13)
```python
obs = env.reset()
@ -196,30 +318,32 @@ while not done:
env.close()
```
يجب أن ترى شيئًا مثل هذا:
يجب أن ترى شيئاً مثل هذا:
![عربة متوازنة](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif)
![a balancing cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif)
---
## 🚀التحدي
> **المهمة 3**: هنا، كنا نستخدم النسخة النهائية من Q-Table، والتي قد لا تكون الأفضل. تذكر أننا قمنا بتخزين أفضل نسخة أداءً من Q-Table في المتغير `Qbest`! جرب نفس المثال باستخدام Q-Table الأفضل أداءً عن طريق نسخ `Qbest` إلى `Q` وشاهد ما إذا كنت تلاحظ الفرق.
> **المهمة 3**: هنا، كنا نستخدم النسخة النهائية من جدول Q، والتي قد لا تكون الأفضل. تذكر أننا قد خزنا أفضل جدول Q أداءً في متغير `Qbest`! جرّب المثال نفسه باستخدام أفضل جدول Q أداءً بنسخ `Qbest` إلى `Q` وانظر إذا لاحظت الفرق.
> **المهمة 4**: هنا لم نكن نختار أفضل إجراء في كل خطوة، بل كنا نأخذ العينات وفقًا لتوزيع الاحتمالات المقابل. هل سيكون من المنطقي دائمًا اختيار أفضل إجراء، الذي يحتوي على أعلى قيمة في Q-Table؟ يمكن القيام بذلك باستخدام وظيفة `np.argmax` لمعرفة رقم الإجراء الذي يتوافق مع أعلى قيمة في Q-Table. قم بتنفيذ هذه الاستراتيجية وشاهد ما إذا كانت تحسن التوازن.
> **المهمة 4**: هنا لم نكن نختار أفضل إجراء في كل خطوة، بل كنا نأخذ عينات باستخدام توزيع الاحتمالية المطابق. هل سيكون من المنطقي دائماً اختيار أفضل إجراء، ذو أعلى قيمة في جدول Q؟ يمكن القيام بذلك باستخدام دالة `np.argmax` لاكتشاف رقم الإجراء المقابل لأعلى قيمة في جدول Q. نفذ هذه الاستراتيجية وانظر إذا كانت تحسن التوازن.
## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/)
## الواجب
[تدريب سيارة الجبل](assignment.md)
## المهمة
[تدريب سيارة جبلية](assignment.md)
## الخاتمة
## الخلاصة
لقد تعلمنا الآن كيفية تدريب الوكلاء لتحقيق نتائج جيدة فقط من خلال توفير دالة مكافأة تحدد الحالة المرغوبة للعبة، ومنحهم فرصة لاستكشاف مساحة البحث بذكاء. لقد طبقنا بنجاح خوارزمية Q-Learning في حالات البيئات المنفصلة والمستمرة، ولكن مع إجراءات منفصلة.
لقد تعلمنا الآن كيفية تدريب العوامل لتحقيق نتائج جيدة فقط من خلال تزويدهم بدالة مكافأة تعرف الحالة المرغوبة للعبة، ومن خلال منحهم فرصة لاستكشاف فضاء البحث بذكاء. لقد طبقنا بنجاح خوارزمية التعلم Q في حالات البيئات المتقطعة والمستمرة، ولكن مع أفعال متقطعة.
من المهم أيضًا دراسة الحالات التي تكون فيها حالة الإجراء مستمرة، وعندما تكون مساحة الملاحظة أكثر تعقيدًا، مثل الصورة من شاشة لعبة أتاري. في تلك المشاكل، غالبًا ما نحتاج إلى استخدام تقنيات تعلم الآلة الأكثر قوة، مثل الشبكات العصبية، لتحقيق نتائج جيدة. هذه المواضيع الأكثر تقدمًا هي موضوع دورتنا القادمة الأكثر تقدمًا في الذكاء الاصطناعي.
من المهم أيضاً دراسة الحالات التي يكون فيها فضاء الأفعال مستمراً، وعندما يكون فضاء الملاحظات أكثر تعقيداً، مثل الصورة من شاشة لعبة أتاري. في تلك المشاكل غالباً ما نحتاج لاستخدام تقنيات تعلم آلي أقوى، مثل الشبكات العصبية، من أجل تحقيق نتائج جيدة. هذه الموضوعات الأكثر تقدماً هي موضوع دورتنا القادمة المتقدمة في الذكاء الاصطناعي.
---
**إخلاء المسؤولية**:
تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**تنويه**:
تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -24,8 +24,8 @@
"language_code": "de"
},
"1-Introduction/3-fairness/README.md": {
"original_hash": "9a6b702d1437c0467e3c5c28d763dac2",
"translation_date": "2025-09-04T21:58:29+00:00",
"original_hash": "0f00d72169a0d37eecfd16d71e01700a",
"translation_date": "2026-07-13T23:43:04+00:00",
"source_file": "1-Introduction/3-fairness/README.md",
"language_code": "de"
},
@ -54,8 +54,8 @@
"language_code": "de"
},
"2-Regression/1-Tools/README.md": {
"original_hash": "fa81d226c71d5af7a2cade31c1c92b88",
"translation_date": "2025-09-04T21:52:04+00:00",
"original_hash": "0b8635427b582d03ea4ab7089b93e505",
"translation_date": "2026-07-13T23:39:45+00:00",
"source_file": "2-Regression/1-Tools/README.md",
"language_code": "de"
},
@ -72,8 +72,8 @@
"language_code": "de"
},
"2-Regression/2-Data/README.md": {
"original_hash": "7c077988328ebfe33b24d07945f16eca",
"translation_date": "2025-09-04T21:52:58+00:00",
"original_hash": "a58b2c4d16c6b122643391745ac15af6",
"translation_date": "2026-07-13T23:40:41+00:00",
"source_file": "2-Regression/2-Data/README.md",
"language_code": "de"
},
@ -89,6 +89,12 @@
"source_file": "2-Regression/2-Data/solution/Julia/README.md",
"language_code": "de"
},
"2-Regression/2-Data/solution/notebook.ipynb": {
"original_hash": "96b95f8cf473481f2f371de8156f1571",
"translation_date": "2026-07-13T23:36:12+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "de"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T20:11:15+00:00",
@ -457,7 +463,7 @@
},
"8-Reinforcement/1-QLearning/README.md": {
"original_hash": "911efd5e595089000cb3c16fce1beab8",
"translation_date": "2025-09-04T22:04:40+00:00",
"translation_date": "2026-07-13T23:41:39+00:00",
"source_file": "8-Reinforcement/1-QLearning/README.md",
"language_code": "de"
},
@ -481,7 +487,7 @@
},
"8-Reinforcement/2-Gym/README.md": {
"original_hash": "107d5bb29da8a562e7ae72262d251a75",
"translation_date": "2025-09-04T22:05:24+00:00",
"translation_date": "2026-07-13T23:42:26+00:00",
"source_file": "8-Reinforcement/2-Gym/README.md",
"language_code": "de"
},
@ -581,6 +587,19 @@
"source_file": "TROUBLESHOOTING.md",
"language_code": "de"
},
"__translation_failures__": {
"sketchnotes/LICENSE.md": {
"original_hash": "fba3b94d88bfb9b81369b869a1e9a20f",
"source_file": "sketchnotes/LICENSE.md",
"language_code": "de",
"failure_date": "2026-07-13T23:39:00+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-03T21:47:56+00:00",

@ -1,161 +1,167 @@
# Aufbau von Machine-Learning-Lösungen mit verantwortungsbewusster KI
![Zusammenfassung von verantwortungsbewusster KI im Machine Learning in einer Sketchnote](../../../../sketchnotes/ml-fairness.png)
# Aufbau von Machine Learning-Lösungen mit verantwortungsvoller KI
![Zusammenfassung von verantwortungsvoller KI im Machine Learning in einer Sketchnote](../../../../translated_images/de/ml-fairness.ef296ebec6afc98a.webp)
> Sketchnote von [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [Quiz vor der Vorlesung](https://ff-quizzes.netlify.app/en/ml/)
## [Vortrag Quiz](https://ff-quizzes.netlify.app/en/ml/)
## Einführung
In diesem Lehrplan werden Sie entdecken, wie Machine Learning unser tägliches Leben beeinflusst. Schon jetzt sind Systeme und Modelle in alltägliche Entscheidungsprozesse eingebunden, wie z. B. bei medizinischen Diagnosen, Kreditgenehmigungen oder der Betrugserkennung. Daher ist es wichtig, dass diese Modelle zuverlässig arbeiten und vertrauenswürdige Ergebnisse liefern. Genau wie jede andere Softwareanwendung können KI-Systeme Erwartungen nicht erfüllen oder unerwünschte Ergebnisse liefern. Deshalb ist es entscheidend, das Verhalten eines KI-Modells zu verstehen und erklären zu können.
In diesem Lehrplan werden Sie entdecken, wie Machine Learning unser tägliches Leben beeinflussen kann und bereits beeinflusst. Schon jetzt sind Systeme und Modelle in alltäglichen Entscheidungsaufgaben involviert, wie z. B. Gesundheitsdiagnosen, Kreditgenehmigungen oder Betrugserkennung. Daher ist es wichtig, dass diese Modelle gut funktionieren, um vertrauenswürdige Ergebnisse zu liefern. Genau wie jede Softwareanwendung werden KI-Systeme Erwartungen nicht erfüllen oder unerwünschte Ergebnisse liefern. Deshalb ist es essenziell, das Verhalten eines KI-Modells verstehen und erklären zu können.
Stellen Sie sich vor, was passieren kann, wenn die Daten, die Sie zur Erstellung dieser Modelle verwenden, bestimmte demografische Gruppen wie Ethnie, Geschlecht, politische Ansichten oder Religion nicht berücksichtigen oder unverhältnismäßig repräsentieren. Was passiert, wenn die Ergebnisse des Modells so interpretiert werden, dass sie eine bestimmte demografische Gruppe bevorzugen? Welche Konsequenzen hat das für die Anwendung? Und was passiert, wenn das Modell ein schädliches Ergebnis liefert? Wer ist für das Verhalten des KI-Systems verantwortlich? Diese Fragen werden wir in diesem Lehrplan untersuchen.
Stellen Sie sich vor, was passieren kann, wenn die Daten, die Sie zum Erstellen dieser Modelle verwenden, bestimmte demografische Merkmale wie Rasse, Geschlecht, politische Ansicht, Religion nicht enthalten oder diese demografischen Merkmale unverhältnismäßig repräsentieren. Was passiert, wenn die Ausgabe des Modells interpretiert wird, um eine demografische Gruppe zu bevorzugen? Was sind die Folgen für die Anwendung? Außerdem, was geschieht, wenn das Modell ein nachteiliges Ergebnis liefert und Menschen schadet? Wer ist verantwortlich für das Verhalten des KI-Systems? Diese und weitere Fragen werden wir in diesem Lehrplan erkunden.
In dieser Lektion werden Sie:
- Ein Bewusstsein für die Bedeutung von Fairness im Machine Learning und fairnessbezogene Schäden entwickeln.
- Die Praxis des Erkundens von Ausreißern und ungewöhnlichen Szenarien kennenlernen, um Zuverlässigkeit und Sicherheit zu gewährleisten.
- Verstehen, warum es wichtig ist, inklusive Systeme zu entwerfen, die alle Menschen einbeziehen.
- Erforschen, wie entscheidend es ist, die Privatsphäre und Sicherheit von Daten und Menschen zu schützen.
- Die Bedeutung eines transparenten Ansatzes erkennen, um das Verhalten von KI-Modellen zu erklären.
- Verstehen, warum Verantwortlichkeit essenziell ist, um Vertrauen in KI-Systeme aufzubauen.
- Ihr Bewusstsein für die Bedeutung von Fairness im Machine Learning und mit Fairness zusammenhängende Schäden erhöhen.
- Sich mit der Praxis der Untersuchung von Ausreißern und ungewöhnlichen Szenarien zur Sicherstellung von Zuverlässigkeit und Sicherheit vertraut machen.
- Ein Verständnis dafür entwickeln, wie wichtig es ist, alle zu befähigen, indem inklusive Systeme entworfen werden.
- Erkunden, wie wichtig es ist, die Privatsphäre und Sicherheit von Daten und Personen zu schützen.
- Die Bedeutung eines transparenten Ansatzes zur Erklärung des Verhaltens von KI-Modellen erkennen.
- Sensibilisiert sein, wie wichtig Verantwortlichkeit ist, um Vertrauen in KI-Systeme aufzubauen.
## Voraussetzungen
## Voraussetzung
Als Voraussetzung sollten Sie den "Responsible AI Principles"-Lernpfad absolvieren und das folgende Video zum Thema ansehen:
Als Voraussetzung absolvieren Sie bitte den Lernpfad "Verantwortungsvolle KI Prinzipien" und schauen sich das untenstehende Video zum Thema an:
Erfahren Sie mehr über verantwortungsbewusste KI, indem Sie diesem [Lernpfad](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) folgen.
Erfahren Sie mehr über verantwortungsvolle KI, indem Sie diesem [Lernpfad](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) folgen.
[![Microsofts Ansatz für verantwortungsbewusste KI](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Microsofts Ansatz für verantwortungsbewusste KI")
[![Microsofts Ansatz für verantwortungsvolle KI](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Microsofts Ansatz für verantwortungsvolle KI")
> 🎥 Klicken Sie auf das Bild oben für ein Video: Microsofts Ansatz für verantwortungsbewusste KI
> 🎥 Klicken Sie auf das Bild oben für ein Video: Microsofts Ansatz für verantwortungsvolle KI
## Fairness
KI-Systeme sollten alle Menschen fair behandeln und vermeiden, ähnliche Gruppen unterschiedlich zu beeinflussen. Beispielsweise sollten KI-Systeme bei medizinischen Behandlungen, Kreditanträgen oder Beschäftigungsentscheidungen dieselben Empfehlungen für Menschen mit ähnlichen Symptomen, finanziellen Verhältnissen oder beruflichen Qualifikationen geben. Jeder von uns trägt unbewusste Vorurteile mit sich, die unsere Entscheidungen und Handlungen beeinflussen. Diese Vorurteile können sich in den Daten widerspiegeln, die wir zur Schulung von KI-Systemen verwenden. Solche Verzerrungen können manchmal unbeabsichtigt auftreten. Es ist oft schwierig, bewusst zu erkennen, wann man Vorurteile in Daten einführt.
KI-Systeme sollten alle Menschen fair behandeln und vermeiden, ähnliche Personengruppen unterschiedlich zu beeinflussen. Beispielsweise sollten KI-Systeme bei der Beratung zu medizinischer Behandlung, Kreditanträgen oder Beschäftigung dieselben Empfehlungen für alle mit ähnlichen Symptomen, finanziellen Umständen oder beruflichen Qualifikationen aussprechen. Jeder von uns trägt als Mensch ererbte Vorurteile mit sich, die unsere Entscheidungen und Handlungen beeinflussen. Diese Vorurteile können in den Daten sichtbar sein, die wir zum Trainieren von KI-Systemen verwenden. Eine solche Verzerrung kann manchmal unbeabsichtigt geschehen. Es ist oft schwierig, bewusst zu erkennen, wann man Vorurteile in Daten einführt.
**„Unfairness“** umfasst negative Auswirkungen oder „Schäden“ für eine Gruppe von Menschen, z. B. definiert durch Ethnie, Geschlecht, Alter oder Behinderungsstatus. Die Hauptarten von fairnessbezogenen Schäden lassen sich wie folgt klassifizieren:
**„Unfairness“** umfasst negative Auswirkungen oder „Schäden“ für eine Gruppe von Menschen, wie jene definiert durch Rasse, Geschlecht, Alter oder Behinderungsstatus. Die wichtigsten fairnessbezogenen Schäden können klassifiziert werden als:
- **Zuweisung**: Wenn z. B. ein Geschlecht oder eine Ethnie gegenüber einer anderen bevorzugt wird.
- **Qualität des Dienstes**: Wenn die Daten für ein spezifisches Szenario trainiert wurden, die Realität jedoch viel komplexer ist, führt dies zu einer schlechten Leistung des Dienstes. Ein Beispiel ist ein Seifenspender, der Menschen mit dunkler Hautfarbe nicht erkennen konnte. [Referenz](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Herabwürdigung**: Unfaire Kritik oder Etikettierung von etwas oder jemandem. Ein Beispiel ist eine Bildkennzeichnungstechnologie, die dunkelhäutige Menschen fälschlicherweise als Gorillas bezeichnete.
- **Über- oder Unterrepräsentation**: Die Idee, dass eine bestimmte Gruppe in einem bestimmten Beruf nicht sichtbar ist, und jede Funktion, die dies weiter fördert, trägt zu Schaden bei.
- **Stereotypisierung**: Die Zuordnung vorgefertigter Eigenschaften zu einer bestimmten Gruppe. Ein Beispiel ist ein Sprachübersetzungssystem zwischen Englisch und Türkisch, das aufgrund von stereotypischen Geschlechterassoziationen Ungenauigkeiten aufweist.
- **Zuteilung**, wenn beispielsweise ein Geschlecht oder eine Ethnie gegenüber einer anderen bevorzugt wird.
- **Dienstleistungsqualität**. Wenn Sie die Daten für ein spezifisches Szenario trainieren, die Realität aber viel komplexer ist, führt das zu einer schlecht funktionierenden Dienstleistung. Zum Beispiel konnte ein Handseifenspender scheinbar keine Menschen mit dunkler Haut erkennen. [Referenz](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Herabwürdigung**. Etwas oder jemanden unfair zu kritisieren und zu etikettieren. Zum Beispiel hat eine Bilderkennungstechnologie berüchtigterweise Bilder von dunkelhäutigen Menschen als Gorillas falsch etikettiert.
- **Über- oder Unterrepräsentation**. Die Vorstellung ist, dass eine bestimmte Gruppe in einem bestimmten Beruf nicht vertreten ist, und jeder Dienst oder Funktion, der dies weiterhin fördert, trägt zu Schäden bei.
- **Stereotypisierung**. Eine bestimmte Gruppe mit vorab zugewiesenen Eigenschaften verbinden. Zum Beispiel kann ein maschinelles Übersetzungssystem zwischen Englisch und Türkisch Ungenauigkeiten haben, die auf stereotype Assoziationen mit dem Geschlecht bei einzelnen Wörtern basieren.
![Übersetzung ins Türkische](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png)
![Übersetzung ins Türkische](../../../../translated_images/de/gender-bias-translate-en-tr.f185fd8822c2d437.webp)
> Übersetzung ins Türkische
![Übersetzung zurück ins Englische](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png)
> Übersetzung zurück ins Englische
![Rückübersetzung ins Englische](../../../../translated_images/de/gender-bias-translate-tr-en.4eee7e3cecb8c70e.webp)
> Rückübersetzung ins Englische
Beim Entwerfen und Testen von KI-Systemen müssen wir sicherstellen, dass KI fair ist und nicht so programmiert wird, dass sie voreingenommene oder diskriminierende Entscheidungen trifft, die auch Menschen nicht treffen dürfen. Fairness in KI und Machine Learning zu gewährleisten, bleibt eine komplexe soziotechnische Herausforderung.
Beim Entwerfen und Testen von KI-Systemen müssen wir sicherstellen, dass KI fair ist und nicht so programmiert ist, voreingenommene oder diskriminierende Entscheidungen zu treffen, was Menschen auch verboten ist. Sicherstellung von Fairness in KI und Machine Learning bleibt eine komplexe soziotechnische Herausforderung.
### Zuverlässigkeit und Sicherheit
Um Vertrauen aufzubauen, müssen KI-Systeme zuverlässig, sicher und konsistent unter normalen und unerwarteten Bedingungen sein. Es ist wichtig zu wissen, wie sich KI-Systeme in verschiedenen Situationen verhalten, insbesondere bei Ausreißern. Beim Aufbau von KI-Lösungen sollte ein erheblicher Fokus darauf gelegt werden, wie eine Vielzahl von Umständen gehandhabt werden kann, denen die KI-Lösungen begegnen könnten. Zum Beispiel muss ein selbstfahrendes Auto die Sicherheit der Menschen als oberste Priorität betrachten. Daher muss die KI, die das Auto antreibt, alle möglichen Szenarien berücksichtigen, denen das Auto begegnen könnte, wie z. B. Nacht, Gewitter, Schneestürme, Kinder, die über die Straße rennen, Haustiere, Straßenbauarbeiten usw. Wie gut ein KI-System eine Vielzahl von Bedingungen zuverlässig und sicher bewältigen kann, spiegelt das Maß an Voraussicht wider, das der Datenwissenschaftler oder KI-Entwickler während des Designs oder Tests des Systems berücksichtigt hat.
Um Vertrauen aufzubauen, müssen KI-Systeme zuverlässig, sicher und konsistent unter normalen und unerwarteten Bedingungen sein. Es ist wichtig zu wissen, wie sich KI-Systeme in verschiedenen Situationen verhalten, besonders wenn sie Ausreißer darstellen. Beim Erstellen von KI-Lösungen muss ein großer Fokus darauf liegen, wie eine breite Palette von Umständen behandelt wird, denen die KI-Lösung begegnen könnte. Zum Beispiel muss ein selbstfahrendes Auto die Sicherheit der Menschen höchste Priorität einräumen. Daher muss die KI, die das Auto antreibt, alle möglichen Szenarien berücksichtigen, wie Nacht, Gewitter oder Schneestürme, Kinder, die über die Straße rennen, Haustiere, Straßenbau usw. Wie gut ein KI-System eine breite Palette an Bedingungen zuverlässig und sicher bewältigen kann, spiegelt das Maß an Antizipation wider, das der Datenwissenschaftler oder KI-Entwickler bei Design oder Test des Systems berücksichtigt hat.
> [🎥 Klicken Sie hier für ein Video: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
### Inklusivität
KI-Systeme sollten so gestaltet sein, dass sie alle Menschen einbeziehen und befähigen. Beim Entwerfen und Implementieren von KI-Systemen identifizieren und adressieren Datenwissenschaftler und KI-Entwickler potenzielle Barrieren im System, die Menschen unbeabsichtigt ausschließen könnten. Zum Beispiel gibt es weltweit 1 Milliarde Menschen mit Behinderungen. Mit den Fortschritten in der KI können sie leichter auf eine Vielzahl von Informationen und Möglichkeiten in ihrem täglichen Leben zugreifen. Durch die Beseitigung von Barrieren entstehen Chancen, KI-Produkte mit besseren Erfahrungen zu entwickeln, die allen zugutekommen.
KI-Systeme sollten so gestaltet sein, dass sie alle einbeziehen und befähigen. Beim Entwerfen und Implementieren von KI-Systemen identifizieren und adressieren Datenwissenschaftler und KI-Entwickler potenzielle Barrieren im System, die unbeabsichtigt Menschen ausschließen könnten. Beispielsweise gibt es rund 1 Milliarde Menschen mit Behinderungen weltweit. Mit der Weiterentwicklung von KI können sie im Alltag leichter auf eine breite Palette von Informationen und Möglichkeiten zugreifen. Durch das Beseitigen von Barrieren entstehen Chancen zur Innovation und Entwicklung von KI-Produkten mit besseren Erfahrungen, die allen zugutekommen.
> [🎥 Klicken Sie hier für ein Video: Inklusivität in der KI](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
> [🎥 Klicken Sie hier für ein Video: Inklusivität in KI](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
### Sicherheit und Datenschutz
KI-Systeme sollten sicher sein und die Privatsphäre der Menschen respektieren. Menschen vertrauen Systemen weniger, die ihre Privatsphäre, Informationen oder ihr Leben gefährden. Beim Training von Machine-Learning-Modellen verlassen wir uns auf Daten, um die besten Ergebnisse zu erzielen. Dabei muss die Herkunft und Integrität der Daten berücksichtigt werden. Zum Beispiel: Wurden die Daten von Nutzern bereitgestellt oder waren sie öffentlich zugänglich? Während der Arbeit mit den Daten ist es entscheidend, KI-Systeme zu entwickeln, die vertrauliche Informationen schützen und Angriffen widerstehen können. Da KI immer weiter verbreitet wird, wird der Schutz der Privatsphäre und die Sicherung wichtiger persönlicher und geschäftlicher Informationen immer kritischer und komplexer. Datenschutz- und Datensicherheitsfragen erfordern besondere Aufmerksamkeit, da der Zugang zu Daten für KI-Systeme essenziell ist, um genaue und fundierte Vorhersagen und Entscheidungen über Menschen zu treffen.
KI-Systeme sollten sicher sein und die Privatsphäre der Menschen respektieren. Menschen vertrauen Systemen weniger, die ihre Privatsphäre, Informationen oder Leben gefährden. Beim Trainieren von Machine Learning-Modellen verlassen wir uns auf Daten, um die besten Ergebnisse zu erzielen. Dabei müssen Ursprung und Integrität der Daten berücksichtigt werden. Wurden die Daten beispielsweise vom Nutzer bereitgestellt oder sind öffentlich zugänglich? Weiterhin ist es entscheidend, KI-Systeme zu entwickeln, die vertrauliche Informationen schützen und Angriffen widerstehen können. Da KI immer verbreiteter wird, steigt die Bedeutung und Komplexität des Schutzes der Privatsphäre und wichtiger persönlicher sowie geschäftlicher Informationen. Datenschutz- und Datensicherheitsfragen erfordern besonders hohe Aufmerksamkeit bei KI, da der Zugriff auf Daten für KI-Systeme essentiell ist, um genaue und informierte Vorhersagen und Entscheidungen über Personen zu treffen.
> [🎥 Klicken Sie hier für ein Video: Sicherheit in der KI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
> [🎥 Klicken Sie hier für ein Video: Sicherheit in KI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Als Branche haben wir bedeutende Fortschritte im Bereich Datenschutz und Sicherheit gemacht, die maßgeblich durch Vorschriften wie die DSGVO (Datenschutz-Grundverordnung) vorangetrieben wurden.
- Dennoch müssen wir bei KI-Systemen die Spannung zwischen dem Bedarf an mehr persönlichen Daten, um Systeme persönlicher und effektiver zu machen, und dem Datenschutz anerkennen.
- Genau wie bei der Einführung vernetzter Computer mit dem Internet sehen wir auch einen starken Anstieg der Sicherheitsprobleme im Zusammenhang mit KI.
- Gleichzeitig wird KI genutzt, um die Sicherheit zu verbessern. Zum Beispiel werden die meisten modernen Antiviren-Scanner heute von KI-Heuristiken angetrieben.
- Wir müssen sicherstellen, dass unsere Datenwissenschaftsprozesse harmonisch mit den neuesten Datenschutz- und Sicherheitspraktiken zusammenarbeiten.
- Als Branche haben wir bedeutende Fortschritte im Bereich Datenschutz & Sicherheit gemacht, die maßgeblich durch Vorschriften wie die DSGVO (Datenschutz-Grundverordnung) unterstützt wurden.
- Mit KI-Systemen müssen wir dennoch die Spannung zwischen dem Bedarf an mehr persönlichen Daten zur Personalisierung und Effektivität der Systeme und dem Datenschutz anerkennen.
- Ähnlich wie beim Aufkommen vernetzter Computer mit dem Internet erleben wir auch einen starken Anstieg der Sicherheitsprobleme im Zusammenhang mit KI.
- Gleichzeitig sehen wir, dass KI zur Verbesserung der Sicherheit eingesetzt wird. Zum Beispiel werden die meisten modernen Antiviren-Scanner heute von KI-Heuristiken angetrieben.
- Wir müssen sicherstellen, dass unsere Data Science-Prozesse harmonisch mit den neuesten Datenschutz- und Sicherheitspraktiken verschmelzen.
### Transparenz
KI-Systeme sollten verständlich sein. Ein wesentlicher Bestandteil der Transparenz ist die Erklärung des Verhaltens von KI-Systemen und ihrer Komponenten. Die Verbesserung des Verständnisses von KI-Systemen erfordert, dass Interessengruppen verstehen, wie und warum sie funktionieren, damit sie potenzielle Leistungsprobleme, Sicherheits- und Datenschutzbedenken, Vorurteile, ausschließende Praktiken oder unbeabsichtigte Ergebnisse identifizieren können. Wir glauben auch, dass diejenigen, die KI-Systeme nutzen, ehrlich und offen darüber sein sollten, wann, warum und wie sie diese einsetzen. Ebenso über die Grenzen der Systeme, die sie verwenden. Zum Beispiel: Wenn eine Bank ein KI-System zur Unterstützung ihrer Kreditentscheidungen einsetzt, ist es wichtig, die Ergebnisse zu überprüfen und zu verstehen, welche Daten die Empfehlungen des Systems beeinflussen. Regierungen beginnen, KI branchenübergreifend zu regulieren, daher müssen Datenwissenschaftler und Organisationen erklären, ob ein KI-System die regulatorischen Anforderungen erfüllt, insbesondere wenn es zu einem unerwünschten Ergebnis kommt.
### Transparenz
KI-Systeme sollten verständlich sein. Ein wesentlicher Teil von Transparenz ist, das Verhalten von KI-Systemen und deren Komponenten zu erklären. Um KI-Systeme besser zu verstehen, müssen Beteiligte verstehen, wie und warum sie funktionieren, damit sie potenzielle Leistungsprobleme, Sicherheits- und Datenschutzbedenken, Vorurteile, ausschließende Praktiken oder unbeabsichtigte Ergebnisse identifizieren können. Wir sind zudem der Ansicht, dass Nutzer von KI-Systemen ehrlich und offen darüber sein sollten, wann, warum und wie sie diese einsetzen. Ebenso über die Beschränkungen der Systeme, die sie nutzen. Beispielsweise ist es wichtig, bei der Verwendung eines KI-Systems durch eine Bank zur Unterstützung von Verbraucherkreditentscheidungen die Ergebnisse zu überprüfen und zu verstehen, welche Daten die Empfehlungen des Systems beeinflussen. Regierungen beginnen, KI branchenübergreifend zu regulieren, weshalb Datenwissenschaftler und Organisationen erklären müssen, ob ein KI-System regulatorische Anforderungen erfüllt, besonders bei einem unerwünschten Ergebnis.
> [🎥 Klicken Sie hier für ein Video: Transparenz in der KI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
> [🎥 Klicken Sie hier für ein Video: Transparenz in KI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Da KI-Systeme so komplex sind, ist es schwierig zu verstehen, wie sie funktionieren und ihre Ergebnisse zu interpretieren.
- Dieses mangelnde Verständnis beeinflusst, wie diese Systeme verwaltet, operationalisiert und dokumentiert werden.
- Noch wichtiger ist, dass dieses mangelnde Verständnis die Entscheidungen beeinflusst, die auf Basis der Ergebnisse dieser Systeme getroffen werden.
- Da KI-Systeme so komplex sind, ist es schwer zu verstehen, wie sie funktionieren und die Ergebnisse zu interpretieren.
- Dieses fehlende Verständnis beeinflusst die Art, wie diese Systeme verwaltet, eingesetzt und dokumentiert werden.
- Dieses fehlende Verständnis wirkt sich vor allem auf die Entscheidungen aus, die auf Basis der Ergebnisse dieser Systeme getroffen werden.
### Verantwortlichkeit
Die Personen, die KI-Systeme entwerfen und einsetzen, müssen für deren Betrieb verantwortlich sein. Die Notwendigkeit von Verantwortlichkeit ist besonders entscheidend bei sensiblen Technologien wie der Gesichtserkennung. Kürzlich ist die Nachfrage nach Gesichtserkennungstechnologie gestiegen, insbesondere seitens Strafverfolgungsbehörden, die Potential zum Beispiel bei der Suche nach vermissten Kindern sehen. Diese Technologien könnten jedoch von Regierungen genutzt werden, um die Grundfreiheiten ihrer Bürger zu gefährden, etwa durch ermöglichen einer kontinuierlichen Überwachung bestimmter Personen. Daher müssen Datenwissenschaftler und Organisationen verantwortungsbewusst sein, wie ihr KI-System Einzelpersonen oder die Gesellschaft beeinflusst.
Die Menschen, die KI-Systeme entwerfen und einsetzen, müssen für deren Betrieb verantwortlich sein. Die Notwendigkeit der Verantwortlichkeit ist besonders wichtig bei sensiblen Technologien wie Gesichtserkennung. In letzter Zeit gibt es eine wachsende Nachfrage nach Gesichtserkennungstechnologie, insbesondere von Strafverfolgungsbehörden, die das Potenzial der Technologie beispielsweise bei der Suche nach vermissten Kindern sehen. Diese Technologien könnten jedoch von einer Regierung genutzt werden, um die Grundfreiheiten ihrer Bürger zu gefährden, indem sie beispielsweise eine kontinuierliche Überwachung bestimmter Personen ermöglichen. Daher müssen Datenwissenschaftler und Organisationen verantwortlich dafür sein, wie ihr KI-System Einzelpersonen oder die Gesellschaft beeinflusst.
[![Führender KI-Forscher warnt vor Massenüberwachung durch Gesichtserkennung](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsofts Ansatz für verantwortungsbewusste KI")
[![Führender KI-Forscher warnt vor Massenüberwachung durch Gesichtserkennung](../../../../translated_images/de/accountability.41d8c0f4b85b6231.webp)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsofts Ansatz für verantwortungsvolle KI")
> 🎥 Klicken Sie auf das Bild oben für ein Video: Warnungen vor Massenüberwachung durch Gesichtserkennung
Letztendlich ist eine der größten Fragen für unsere Generation, als die erste Generation, die KI in die Gesellschaft bringt, wie wir sicherstellen können, dass Computer den Menschen gegenüber rechenschaftspflichtig bleiben und dass die Menschen, die Computer entwerfen, allen anderen gegenüber rechenschaftspflichtig bleiben.
Letztendlich ist eine der größten Fragen für unsere Generation, als erste Generation, die KI in die Gesellschaft bringt, wie sichergestellt wird, dass Computer gegenüber Menschen verantwortlich bleiben und wie sichergestellt wird, dass die Menschen, die Computer entwerfen, gegenüber allen anderen verantwortlich bleiben.
## Auswirkungen bewerten
## Wirkungseinschätzung
Bevor ein Machine-Learning-Modell trainiert wird, ist es wichtig, eine Auswirkungsbewertung durchzuführen, um den Zweck des KI-Systems zu verstehen: Was ist der beabsichtigte Nutzen? Wo wird es eingesetzt? Und wer wird mit dem System interagieren? Diese Bewertungen helfen Prüfern oder Testern, die das System bewerten, zu wissen, welche Faktoren bei der Identifizierung potenzieller Risiken und erwarteter Konsequenzen zu berücksichtigen sind.
Vor dem Trainieren eines Machine Learning-Modells ist es wichtig, eine Wirkungseinschätzung vorzunehmen, um den Zweck des KI-Systems zu verstehen; wie es verwendet werden soll; wo es eingesetzt wird; und wer mit dem System interagieren wird. Diese Informationen sind hilfreich für Gutachter oder Tester, die das System bewerten, um zu wissen, welche Faktoren bei der Identifikation potenzieller Risiken und erwarteter Konsequenzen beachtet werden müssen.
Die folgenden Bereiche stehen bei einer Auswirkungsbewertung im Fokus:
Die folgenden Bereiche stehen im Fokus bei der Durchführung einer Wirkungseinschätzung:
* **Negative Auswirkungen auf Einzelpersonen**: Es ist wichtig, sich über Einschränkungen, Anforderungen, nicht unterstützte Verwendungen oder bekannte Begrenzungen bewusst zu sein, die die Leistung des Systems beeinträchtigen könnten, um sicherzustellen, dass das System nicht auf eine Weise verwendet wird, die Einzelpersonen schaden könnte.
* **Datenanforderungen**: Ein Verständnis dafür zu gewinnen, wie und wo das System Daten verwendet, ermöglicht es Prüfern, Datenanforderungen zu identifizieren, die berücksichtigt werden müssen (z. B. DSGVO- oder HIPAA-Datenvorschriften). Außerdem sollte geprüft werden, ob die Quelle oder Menge der Daten für das Training ausreicht.
* **Zusammenfassung der Auswirkungen**: Eine Liste potenzieller Schäden erstellen, die durch die Nutzung des Systems entstehen könnten. Während des gesamten ML-Lebenszyklus überprüfen, ob die identifizierten Probleme behoben oder adressiert wurden.
* **Ziele für die sechs Kernprinzipien**: Bewerten, ob die Ziele jedes Prinzips erreicht wurden und ob es Lücken gibt.
* **Negative Auswirkungen auf Individuen**. Das Bewusstsein für jegliche Einschränkungen oder Anforderungen, ununterstützte Nutzung oder bekannte Einschränkungen, die die Leistung des Systems behindern, ist entscheidend, um sicherzustellen, dass das System nicht auf eine Weise verwendet wird, die Menschen schadet.
* **Datenanforderungen**. Das Verständnis, wie und wo das System Daten verwendet, ermöglicht den Gutachtern, eventuelle Datenanforderungen wie z. B. DSGVO- oder HIPAA-Datenschutzregelungen zu prüfen. Außerdem wird bewertet, ob die Datenquelle oder -menge ausreichend zum Training ist.
* **Zusammenfassung der Auswirkungen**. Eine Liste potenzieller Schäden, die aus der Nutzung des Systems entstehen könnten, sammeln. Während des gesamten ML-Lebenszyklus überprüfen, ob die identifizierten Probleme gemindert oder adressiert werden.
* **Anwendbare Ziele** für jedes der sechs Kernprinzipien. Prüfen, ob die Ziele der Prinzipien erfüllt sind und ob Lücken bestehen.
## Debugging mit verantwortungsbewusster KI
Ähnlich wie beim Debugging einer Softwareanwendung ist das Debugging eines KI-Systems ein notwendiger Prozess, um Probleme im System zu identifizieren und zu lösen. Es gibt viele Faktoren, die dazu führen können, dass ein Modell nicht wie erwartet oder verantwortungsvoll funktioniert. Die meisten traditionellen Leistungsmetriken für Modelle sind quantitative Zusammenfassungen der Modellleistung, die nicht ausreichen, um zu analysieren, wie ein Modell gegen die Prinzipien der verantwortungsbewussten KI verstößt. Darüber hinaus ist ein Machine-Learning-Modell eine Blackbox, die es schwierig macht, die Gründe für seine Ergebnisse zu verstehen oder Erklärungen zu liefern, wenn es Fehler macht. Später in diesem Kurs lernen wir, wie man das Responsible AI Dashboard verwendet, um KI-Systeme zu debuggen. Das Dashboard bietet ein umfassendes Werkzeug für Datenwissenschaftler und KI-Entwickler, um:
## Debugging mit verantwortungsvoller KI
* **Fehleranalyse**: Die Fehlerverteilung des Modells zu identifizieren, die die Fairness oder Zuverlässigkeit des Systems beeinträchtigen könnte.
* **Modellübersicht**: Zu entdecken, wo es Leistungsunterschiede des Modells über verschiedene Datenkohorten hinweg gibt.
* **Datenanalyse**: Die Datenverteilung zu verstehen und potenzielle Verzerrungen in den Daten zu identifizieren, die zu Fairness-, Inklusivitäts- und Zuverlässigkeitsproblemen führen könnten.
* **Modellinterpretierbarkeit**: Zu verstehen, was die Vorhersagen des Modells beeinflusst. Dies hilft, das Verhalten des Modells zu erklären, was für Transparenz und Verantwortlichkeit wichtig ist.
Ähnlich wie beim Debuggen einer Softwareanwendung ist das Debuggen eines KI-Systems ein notwendiger Prozess, um Probleme im System zu identifizieren und zu beheben. Es gibt viele Faktoren, die beeinflussen können, dass ein Modell nicht erwartungsgemäß oder verantwortungsvoll arbeitet. Die meisten traditionellen Leistungsmetriken eines Modells sind quantitative Aggregationen der Modellleistung, welche nicht ausreichen, um zu analysieren, wie ein Modell die Prinzipien verantwortungsvoller KI verletzt. Außerdem ist ein Machine Learning-Modell eine Blackbox, was es schwierig macht zu verstehen, was seine Ergebnisse beeinflusst oder eine Erklärung zu liefern, wenn ein Fehler auftritt. Später in diesem Kurs lernen wir, wie man das Responsible AI Dashboard verwendet, um KI-Systeme zu debuggen. Das Dashboard bietet ein ganzheitliches Werkzeug für Datenwissenschaftler und KI-Entwickler, um:
## 🚀 Herausforderung
* **Fehleranalyse**. Um die Fehlerverteilung des Modells zu identifizieren, die Fairness oder Zuverlässigkeit des Systems beeinflussen kann.
* **Modellübersicht**. Um zu entdecken, wo es Leistungsunterschiede des Modells über Datenkohorten hinweg gibt.
* **Datenanalyse**. Um die Datenverteilung zu verstehen und mögliche Vorurteile in den Daten zu erkennen, die zu Problemen bei Fairness, Inklusivität und Zuverlässigkeit führen können.
* **Modellinterpretierbarkeit**. Um zu verstehen, was die Vorhersagen des Modells beeinflusst. Dies hilft, das Verhalten des Modells zu erklären, was wichtig für Transparenz und Verantwortlichkeit ist.
Um Schäden von vornherein zu vermeiden, sollten wir:
- eine Vielfalt an Hintergründen und Perspektiven unter den Menschen haben, die an den Systemen arbeiten
## 🚀 Herausforderung
Um zu verhindern, dass Schäden überhaupt entstehen, sollten wir:
- eine Vielfalt an Hintergründen und Perspektiven unter den Menschen, die an Systemen arbeiten, haben
- in Datensätze investieren, die die Vielfalt unserer Gesellschaft widerspiegeln
- bessere Methoden im gesamten Machine-Learning-Lebenszyklus entwickeln, um verantwortungsbewusste KI zu erkennen und zu korrigieren, wenn sie auftritt
- bessere Methoden über den gesamten Machine Learning-Lebenszyklus entwickeln, um verantwortungsvolle KI-Verstöße zu erkennen und zu korrigieren, wenn sie auftreten
Denken Sie an reale Szenarien, in denen die Unzuverlässigkeit eines Modells beim Erstellen und Verwenden offensichtlich wird. Was sollten wir noch berücksichtigen?
Denken Sie an reale Szenarien, in denen die Unzuverlässigkeit eines Modells beim Erstellen und Verwenden des Modells offensichtlich wird. Was sollten wir sonst noch in Betracht ziehen?
## [Quiz nach der Vorlesung](https://ff-quizzes.netlify.app/en/ml/)
## [Nachvortrags-Quiz](https://ff-quizzes.netlify.app/en/ml/)
## Rückblick & Selbststudium
In dieser Lektion haben Sie einige Grundlagen zu den Konzepten von Fairness und Unfairness im Machine Learning gelernt.
Schauen Sie sich diesen Workshop an, um tiefer in die Themen einzutauchen:
In dieser Lektion haben Sie einige Grundlagen der Konzepte von Fairness und Unfairness im maschinellen Lernen kennengelernt.
Sehen Sie sich diesen Workshop an, um tiefer in die Themen einzutauchen:
- Auf der Suche nach verantwortungsvoller KI: Prinzipien in die Praxis umsetzen von Besmira Nushi, Mehrnoosh Sameki und Amit Sharma
[![Responsible AI Toolbox: Ein Open-Source-Framework für den Aufbau verantwortungsvoller KI](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Ein Open-Source-Framework für den Aufbau verantwortungsvoller KI")
> 🎥 Klicken Sie auf das Bild oben für ein Video: RAI Toolbox: Ein Open-Source-Framework für den Aufbau verantwortungsvoller KI von Besmira Nushi, Mehrnoosh Sameki und Amit Sharma
> 🎥 Klicken Sie auf das obige Bild für ein Video: RAI Toolbox: Ein Open-Source-Framework für den Aufbau verantwortungsvoller KI von Besmira Nushi, Mehrnoosh Sameki und Amit Sharma
Lesen Sie außerdem:
Lesen Sie auch:
- Microsofts RAI-Ressourcenzentrum: [Responsible AI Resources Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Microsofts RAI-Ressourcenzentrum: [Responsible AI Resources Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Microsofts FATE-Forschungsgruppe: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
- Microsofts FATE-Forschungsgruppe: [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-Repository](https://github.com/microsoft/responsible-ai-toolbox)
- [Responsible AI Toolbox GitHub Repository](https://github.com/microsoft/responsible-ai-toolbox)
Lesen Sie über die Tools von Azure Machine Learning, um Fairness sicherzustellen:
Lesen Sie über die Tools von Azure Machine Learning zur Gewährleistung von Fairness:
- [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)
## Aufgabe
[Erkunden Sie die RAI Toolbox](assignment.md)
[RAI Toolbox erkunden](assignment.md)
---
**Haftungsausschluss**:
Dieses Dokument wurde mithilfe des KI-Übersetzungsdienstes [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als maßgebliche Quelle betrachtet werden. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die sich aus der Nutzung dieser Übersetzung ergeben.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Haftungsausschluss**:
Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Bei kritischen Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,120 +1,121 @@
# Einstieg in Python und Scikit-learn für Regressionsmodelle
![Zusammenfassung von Regressionen in einer Sketchnote](../../../../sketchnotes/ml-regression.png)
![Zusammenfassung von Regressionen in einer Sketchnote](../../../../translated_images/de/ml-regression.4e4f70e3b3ed446e.webp)
> Sketchnote von [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [Quiz vor der Lektion](https://ff-quizzes.netlify.app/en/ml/)
## [Quiz vor der Vorlesung](https://ff-quizzes.netlify.app/en/ml/)
> ### [Diese Lektion ist auch in R verfügbar!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
## Einführung
In diesen vier Lektionen lernen Sie, wie man Regressionsmodelle erstellt. Wir werden gleich besprechen, wofür diese verwendet werden. Aber bevor Sie loslegen, stellen Sie sicher, dass Sie die richtigen Werkzeuge eingerichtet haben, um den Prozess zu starten!
In diesen vier Lektionen wirst du erfahren, wie man Regressionsmodelle erstellt. Wir werden gleich besprechen, wofür sie dienen. Aber bevor du irgendetwas machst, stelle sicher, dass du die richtigen Werkzeuge bereit hast, um den Prozess zu starten!
In dieser Lektion lernen Sie:
In dieser Lektion lernst du,
- Wie Sie Ihren Computer für lokale Machine-Learning-Aufgaben konfigurieren.
- Wie Sie mit Jupyter-Notebooks arbeiten.
- Wie Sie Scikit-learn verwenden, einschließlich der Installation.
- Wie Sie lineare Regression durch eine praktische Übung erkunden.
- Deinen Computer für lokale Machine-Learning-Aufgaben zu konfigurieren.
- Mit Jupyter Notebooks zu arbeiten.
- Scikit-learn zu verwenden, einschließlich Installation.
- Lineare Regression anhand einer praktischen Übung zu erkunden.
## Installationen und Konfigurationen
[![ML für Anfänger - Richten Sie Ihre Tools ein, um Machine-Learning-Modelle zu erstellen](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML für Anfänger - Richten Sie Ihre Tools ein, um Machine-Learning-Modelle zu erstellen")
[![ML für Anfänger - Richte deine Werkzeuge ein, um Machine-Learning-Modelle zu erstellen](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML für Anfänger - Richte deine Werkzeuge ein, um Machine-Learning-Modelle zu erstellen")
> 🎥 Klicken Sie auf das Bild oben, um ein kurzes Video zur Konfiguration Ihres Computers für ML anzusehen.
> 🎥 Klicke auf das Bild oben für ein kurzes Video zur Konfiguration deines Computers für ML.
1. **Installieren Sie Python**. Stellen Sie sicher, dass [Python](https://www.python.org/downloads/) auf Ihrem Computer installiert ist. Sie werden Python für viele Aufgaben in den Bereichen Datenwissenschaft und maschinelles Lernen verwenden. Die meisten Computersysteme haben Python bereits vorinstalliert. Es gibt auch nützliche [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott), die die Einrichtung für einige Benutzer erleichtern.
1. **Installiere Python**. Sorge dafür, dass [Python](https://www.python.org/downloads/) auf deinem Computer installiert ist. Du wirst Python für viele Data-Science- und Machine-Learning-Aufgaben verwenden. Auf den meisten Computersystemen ist Python bereits installiert. Es gibt auch nützliche [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott), die einigen Anwendern die Einrichtung erleichtern.
Einige Anwendungen von Python erfordern jedoch eine bestimmte Version der Software, während andere eine andere Version benötigen. Aus diesem Grund ist es sinnvoll, in einer [virtuellen Umgebung](https://docs.python.org/3/library/venv.html) zu arbeiten.
Einige Anwendungsbereiche von Python erfordern jedoch eine Version der Software, während andere eine andere Version benötigen. Deshalb ist es sinnvoll, innerhalb einer [virtuellen Umgebung](https://docs.python.org/3/library/venv.html) zu arbeiten.
2. **Installieren Sie Visual Studio Code**. Stellen Sie sicher, dass Visual Studio Code auf Ihrem Computer installiert ist. Folgen Sie diesen Anweisungen, um [Visual Studio Code zu installieren](https://code.visualstudio.com/). In diesem Kurs werden Sie Python in Visual Studio Code verwenden, daher sollten Sie sich mit der [Konfiguration von Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) für die Python-Entwicklung vertraut machen.
2. **Installiere Visual Studio Code**. Stelle sicher, dass Visual Studio Code auf deinem Computer installiert ist. Folge diesen Anweisungen, um [Visual Studio Code zu installieren](https://code.visualstudio.com/) für die Basiseinrichtung. Du wirst Python in Visual Studio Code in diesem Kurs verwenden, daher solltest du dich damit vertraut machen, wie man [Visual Studio Code für die Python-Entwicklung konfiguriert](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott).
> Machen Sie sich mit Python vertraut, indem Sie diese Sammlung von [Lernmodulen](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) durcharbeiten.
>
> [![Python mit Visual Studio Code einrichten](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Python mit Visual Studio Code einrichten")
>
> 🎥 Klicken Sie auf das Bild oben, um ein Video über die Verwendung von Python in VS Code anzusehen.
> Mach dich mit Python vertraut, indem du diese Sammlung von [Lernmodulen](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) durchgehst.
>
> [![Setup Python mit Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Setup Python mit Visual Studio Code")
>
> 🎥 Klicke auf das Bild oben für ein Video: Python innerhalb von VS Code verwenden.
3. **Installieren Sie Scikit-learn**, indem Sie [diesen Anweisungen](https://scikit-learn.org/stable/install.html) folgen. Da Sie sicherstellen müssen, dass Sie Python 3 verwenden, wird empfohlen, eine virtuelle Umgebung zu nutzen. Beachten Sie, dass es spezielle Anweisungen gibt, wenn Sie diese Bibliothek auf einem M1 Mac installieren.
3. **Installiere Scikit-learn**, indem du [diesen Anleitungen](https://scikit-learn.org/stable/install.html) folgst. Da du sicherstellen musst, dass Python 3 verwendet wird, wird empfohlen, eine virtuelle Umgebung zu nutzen. Beachte, dass es für die Installation auf einem M1 Mac auf der verlinkten Seite spezielle Hinweise gibt.
4. **Installieren Sie Jupyter Notebook**. Sie müssen das [Jupyter-Paket installieren](https://pypi.org/project/jupyter/).
1. **Installiere Jupyter Notebook**. Du musst das [Jupyter-Paket installieren](https://pypi.org/project/jupyter/).
## Ihre ML-Entwicklungsumgebung
## Deine ML-Entwicklungsumgebung
Sie werden **Notebooks** verwenden, um Ihren Python-Code zu entwickeln und Machine-Learning-Modelle zu erstellen. Diese Art von Datei ist ein gängiges Werkzeug für Datenwissenschaftler und kann an ihrer Endung `.ipynb` erkannt werden.
Du wirst **Notebooks** verwenden, um deinen Python-Code zu entwickeln und Machine-Learning-Modelle zu erstellen. Diese Dateitypen sind ein gängiges Werkzeug für Data Scientists und sind an der Dateiendung `.ipynb` zu erkennen.
Notebooks sind eine interaktive Umgebung, die es Entwicklern ermöglicht, sowohl Code zu schreiben als auch Notizen und Dokumentationen rund um den Code hinzuzufügen. Dies ist besonders hilfreich für experimentelle oder forschungsorientierte Projekte.
Notebooks bieten eine interaktive Umgebung, die es ermöglicht, sowohl Code zu schreiben als auch Notizen und Dokumentationen um den Code herum hinzuzufügen, was für experimentelle oder forschungsorientierte Projekte sehr hilfreich ist.
[![ML für Anfänger - Jupyter-Notebooks einrichten, um Regressionsmodelle zu erstellen](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML für Anfänger - Jupyter-Notebooks einrichten, um Regressionsmodelle zu erstellen")
[![ML für Anfänger - Richte Jupyter Notebooks ein, um Regressionsmodelle zu erstellen](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML für Anfänger - Richte Jupyter Notebooks ein, um Regressionsmodelle zu erstellen")
> 🎥 Klicken Sie auf das Bild oben, um ein kurzes Video zu dieser Übung anzusehen.
> 🎥 Klicke auf das Bild oben für ein kurzes Video zu dieser Übung.
### Übung - Arbeiten mit einem Notebook
### Übung - Arbeite mit einem Notebook
In diesem Ordner finden Sie die Datei _notebook.ipynb_.
In diesem Ordner findest du die Datei _notebook.ipynb_.
1. Öffnen Sie _notebook.ipynb_ in Visual Studio Code.
1. Öffne _notebook.ipynb_ in Visual Studio Code.
Ein Jupyter-Server wird mit Python 3+ gestartet. Sie finden Bereiche im Notebook, die `ausgeführt` werden können, also Codeabschnitte. Sie können einen Codeblock ausführen, indem Sie das Symbol auswählen, das wie eine Wiedergabetaste aussieht.
Ein Jupyter-Server mit Python 3+ wird gestartet. Du findest Abschnitte im Notebook, die `run`bar sind, also Codeblöcke. Du kannst einen Codeblock ausführen, indem du das Symbol auswählst, das wie ein Abspielknopf aussieht.
2. Wählen Sie das `md`-Symbol und fügen Sie etwas Markdown sowie den folgenden Text hinzu: **# Willkommen in Ihrem Notebook**.
1. Wähle das `md`-Symbol und füge etwas Markdown ein, mit folgendem Text **# Willkommen in deinem Notebook**.
Fügen Sie anschließend etwas Python-Code hinzu.
Füge danach etwas Python-Code hinzu.
3. Geben Sie **print('hello notebook')** in den Codeblock ein.
4. Wählen Sie den Pfeil, um den Code auszuführen.
1. Tippe **print('hello notebook')** in den Codeblock.
1. Wähle den Pfeil aus, um den Code auszuführen.
Sie sollten die folgende Ausgabe sehen:
Du solltest die folgende Ausgabe sehen:
```output
hello notebook
```
![VS Code mit einem geöffneten Notebook](../../../../2-Regression/1-Tools/images/notebook.jpg)
![VS Code mit geöffnetem Notebook](../../../../translated_images/de/notebook.4a3ee31f396b8832.webp)
Sie können Ihren Code mit Kommentaren versehen, um das Notebook selbst zu dokumentieren.
Du kannst deinen Code mit Kommentaren durchmischen, um das Notebook selbst zu dokumentieren.
✅ Denken Sie einen Moment darüber nach, wie unterschiedlich die Arbeitsumgebung eines Webentwicklers im Vergleich zu der eines Datenwissenschaftlers ist.
✅ Denke einen Moment darüber nach, wie unterschiedlich die Arbeitsumgebung eines Webentwicklers im Vergleich zu der eines Data Scientists ist.
## Einführung in Scikit-learn
## Aufsetzen von Scikit-learn
Jetzt, da Python in Ihrer lokalen Umgebung eingerichtet ist und Sie sich mit Jupyter-Notebooks vertraut gemacht haben, machen wir uns ebenso mit Scikit-learn vertraut (ausgesprochen `sci` wie in `science`). Scikit-learn bietet eine [umfangreiche API](https://scikit-learn.org/stable/modules/classes.html#api-ref), die Ihnen bei der Durchführung von ML-Aufgaben hilft.
Nun, da Python in deiner lokalen Umgebung eingerichtet ist und du dich mit Jupyter Notebooks wohl fühlst, lass uns jetzt auch Scikit-learn gut kennenlernen (ausgesprochen `sci` wie in `science`). Scikit-learn bietet eine [umfangreiche API](https://scikit-learn.org/stable/modules/classes.html#api-ref), die dir bei ML-Aufgaben hilft.
Laut ihrer [Website](https://scikit-learn.org/stable/getting_started.html) ist "Scikit-learn eine Open-Source-Bibliothek für maschinelles Lernen, die sowohl überwachtes als auch unüberwachtes Lernen unterstützt. Sie bietet auch verschiedene Werkzeuge für Modellanpassung, Datenvorverarbeitung, Modellauswahl und -bewertung sowie viele andere Hilfsmittel."
Laut ihrer [Webseite](https://scikit-learn.org/stable/getting_started.html) ist „Scikit-learn eine Open-Source-Machine-Learning-Bibliothek, die überwachtes und unüberwachtes Lernen unterstützt. Außerdem bietet sie verschiedene Werkzeuge für Modellanpassung, Datenvorverarbeitung, Modellauswahl und -bewertung sowie viele andere Hilfsmittel.
In diesem Kurs werden Sie Scikit-learn und andere Werkzeuge verwenden, um Machine-Learning-Modelle für sogenannte "traditionelle Machine-Learning"-Aufgaben zu erstellen. Wir haben bewusst auf neuronale Netze und Deep Learning verzichtet, da diese besser in unserem kommenden Lehrplan "KI für Anfänger" behandelt werden.
In diesem Kurs wirst du Scikit-learn und andere Werkzeuge verwenden, um Machine-Learning-Modelle für das zu bauen, was wir „traditionelles Machine Learning“ nennen. Wir haben bewusst neuronale Netze und Deep Learning ausgelassen, da diese besser in unserem kommenden Curriculum „KI für Anfänger“ abgedeckt werden.
Scikit-learn macht es einfach, Modelle zu erstellen und zu bewerten. Es konzentriert sich hauptsächlich auf die Verwendung numerischer Daten und enthält mehrere vorgefertigte Datensätze, die als Lernwerkzeuge dienen. Es bietet auch vorgefertigte Modelle, die Schüler ausprobieren können. Lassen Sie uns den Prozess des Ladens vorgefertigter Daten und der Verwendung eines eingebauten Schätzers für ein erstes ML-Modell mit Scikit-learn erkunden.
Scikit-learn macht es einfach, Modelle zu erstellen und für die Nutzung zu bewerten. Es konzentriert sich primär auf numerische Daten und enthält mehrere vorgefertigte Datensätze, die als Lernwerkzeuge genutzt werden können. Außerdem sind vorgefertigte Modelle enthalten, die Studenten ausprobieren können. Lass uns zuerst den Prozess erkunden, vorgefertigte Daten zu laden und mit einem integrierten Schätzer das erste ML-Modell mit Scikit-learn anhand einiger einfacher Daten aufzubauen.
## Übung - Ihr erstes Scikit-learn-Notebook
## Übung - dein erstes Scikit-learn-Notebook
> Dieses Tutorial wurde vom [Beispiel zur linearen Regression](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) auf der Scikit-learn-Website inspiriert.
> Dieses Tutorial wurde vom [Beispiel für lineare Regression](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) auf der Webseite von Scikit-learn inspiriert.
[![ML für Anfänger - Ihr erstes lineares Regressionsprojekt in Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML für Anfänger - Ihr erstes lineares Regressionsprojekt in Python")
> 🎥 Klicken Sie auf das Bild oben, um ein kurzes Video zu dieser Übung anzusehen.
[![ML für Anfänger - Dein erstes lineares Regressionsprojekt in Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML für Anfänger - Dein erstes lineares Regressionsprojekt in Python")
In der Datei _notebook.ipynb_, die mit dieser Lektion verbunden ist, löschen Sie alle Zellen, indem Sie auf das Symbol "Papierkorb" klicken.
> 🎥 Klicke auf das Bild oben für ein kurzes Video zu dieser Übung.
In diesem Abschnitt arbeiten Sie mit einem kleinen Datensatz über Diabetes, der in Scikit-learn integriert ist und zu Lernzwecken dient. Stellen Sie sich vor, Sie möchten eine Behandlung für Diabetespatienten testen. Machine-Learning-Modelle könnten Ihnen helfen, herauszufinden, welche Patienten basierend auf Kombinationen von Variablen besser auf die Behandlung ansprechen würden. Selbst ein sehr einfaches Regressionsmodell könnte, wenn es visualisiert wird, Informationen über Variablen liefern, die Ihnen helfen könnten, Ihre theoretischen klinischen Studien zu organisieren.
Im zu dieser Lektion gehörenden _notebook.ipynb_-Datei lösche alle Zellen, indem du auf das „Mülleimer“-Symbol klickst.
✅ Es gibt viele Arten von Regressionsmethoden, und welche Sie wählen, hängt von der Frage ab, die Sie beantworten möchten. Wenn Sie beispielsweise die wahrscheinliche Größe einer Person in einem bestimmten Alter vorhersagen möchten, würden Sie lineare Regression verwenden, da Sie einen **numerischen Wert** suchen. Wenn Sie hingegen herausfinden möchten, ob eine bestimmte Küche als vegan betrachtet werden sollte oder nicht, suchen Sie nach einer **Kategorisierung** und würden logistische Regression verwenden. Sie werden später mehr über logistische Regression lernen. Überlegen Sie sich einige Fragen, die Sie an Daten stellen könnten, und welche dieser Methoden dafür besser geeignet wäre.
In diesem Abschnitt wirst du mit einem kleinen Datensatz über Diabetes arbeiten, der zu Lernzwecken in Scikit-learn eingebaut ist. Stell dir vor, du möchtest eine Behandlung für Diabetiker testen. Machine-Learning-Modelle könnten dir helfen zu bestimmen, welche Patienten besser auf die Behandlung reagieren würden, basierend auf Kombinationen von Variablen. Schon ein sehr einfaches Regressionsmodell kann, wenn es visualisiert wird, Informationen über Variablen zeigen, die bei der Organisation potenzieller klinischer Studien helfen.
Lassen Sie uns mit dieser Aufgabe beginnen.
✅ Es gibt viele Arten von Regressionsmethoden, und welche du auswählst, hängt von der Frage ab, die du beantworten möchtest. Möchtest du die wahrscheinliche Körpergröße einer Person eines bestimmten Alters vorhersagen, würdest du lineare Regression verwenden, da du einen **numerischen Wert** suchst. Wenn du herausfinden möchtest, ob eine Art von Küche als vegan eingestuft werden sollte oder nicht, suchst du eine **Kategorie-Zuordnung** und würdest logistische Regression verwenden. Logistische Regression lernst du später kennen. Überlege dir ein paar Fragen, die du an Daten stellen kannst, und welche dieser Methoden dafür passender wäre.
Lass uns mit dieser Aufgabe beginnen.
### Bibliotheken importieren
Für diese Aufgabe importieren wir einige Bibliotheken:
- **matplotlib**. Ein nützliches [Grafikwerkzeug](https://matplotlib.org/), das wir verwenden, um ein Liniendiagramm zu erstellen.
- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) ist eine nützliche Bibliothek für den Umgang mit numerischen Daten in Python.
- **sklearn**. Dies ist die [Scikit-learn](https://scikit-learn.org/stable/user_guide.html)-Bibliothek.
- **matplotlib**. Es ist ein nützliches [Graphing-Tool](https://matplotlib.org/) und wird verwendet, um ein Liniendiagramm zu erstellen.
- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) ist eine nützliche Bibliothek zur Verarbeitung numerischer Daten in Python.
- **sklearn**. Das ist die [Scikit-learn](https://scikit-learn.org/stable/user_guide.html)-Bibliothek.
Importieren Sie einige Bibliotheken, um Ihre Aufgaben zu unterstützen.
Importiere einige Bibliotheken, die dir bei deinen Aufgaben helfen.
1. Fügen Sie die Importe hinzu, indem Sie den folgenden Code eingeben:
1. Füge die Importe ein, indem du den folgenden Code eingibst:
```python
import matplotlib.pyplot as plt
@ -122,26 +123,26 @@ Importieren Sie einige Bibliotheken, um Ihre Aufgaben zu unterstützen.
from sklearn import datasets, linear_model, model_selection
```
Oben importieren Sie `matplotlib`, `numpy` und `datasets`, `linear_model` sowie `model_selection` aus `sklearn`. `model_selection` wird verwendet, um Daten in Trainings- und Testsets aufzuteilen.
Oben importierst du `matplotlib`, `numpy` und du importierst `datasets`, `linear_model` und `model_selection` von `sklearn`. `model_selection` wird zum Aufteilen der Daten in Trainings- und Testsets verwendet.
### Der Diabetes-Datensatz
Der integrierte [Diabetes-Datensatz](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) enthält 442 Datenproben zu Diabetes mit 10 Merkmalvariablen, darunter:
Der eingebaute [Diabetes-Datensatz](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) enthält 442 Datensätze rund um Diabetes mit 10 Merkmalvariablen, von denen einige sind:
- age: Alter in Jahren
- bmi: Body-Mass-Index
- bp: Durchschnittlicher Blutdruck
- s1 tc: T-Zellen (eine Art von weißen Blutkörperchen)
- bp: durchschnittlicher Blutdruck
- s1 tc: T-Zellen (eine Art weiße Blutzellen)
✅ Dieser Datensatz enthält das Konzept von "Geschlecht" als Merkmalvariable, das für die Forschung zu Diabetes wichtig ist. Viele medizinische Datensätze enthalten diese Art von binärer Klassifikation. Überlegen Sie, wie solche Kategorisierungen bestimmte Teile der Bevölkerung von Behandlungen ausschließen könnten.
✅ Dieser Datensatz enthält das Merkmal „sex“ (Geschlecht), das in der Diabetesforschung eine wichtige Rolle spielt. Viele medizinische Datensätze enthalten diese Art der binären Klassifikation. Überlege kurz, wie solche Kategorisierungen bestimmte Bevölkerungsgruppen von Behandlungen ausschließen könnten.
Laden Sie nun die X- und y-Daten.
Lade jetzt die X- und y-Daten.
> 🎓 Denken Sie daran, dass dies überwachtes Lernen ist und wir ein benanntes 'y'-Ziel benötigen.
> 🎓 Denke daran, dass dies überwachtes Lernen ist und wir ein benanntes Ziel „y“ brauchen.
In einer neuen Codezelle laden Sie den Diabetes-Datensatz, indem Sie `load_diabetes()` aufrufen. Der Eingabeparameter `return_X_y=True` signalisiert, dass `X` eine Datenmatrix und `y` das Regressionsziel sein wird.
Lade den Diabetes-Datensatz in eine neue Codezelle, indem du `load_diabetes()` aufrufst. Der Parameter `return_X_y=True` gibt an, dass `X` eine Datenmatrix und `y` das Regressionsziel ist.
1. Fügen Sie einige Print-Befehle hinzu, um die Form der Datenmatrix und ihr erstes Element anzuzeigen:
1. Füge ein paar print-Befehle ein, um die Form der Datenmatrix und ihr erstes Element anzuzeigen:
```python
X, y = datasets.load_diabetes(return_X_y=True)
@ -149,9 +150,9 @@ In einer neuen Codezelle laden Sie den Diabetes-Datensatz, indem Sie `load_diabe
print(X[0])
```
Was Sie als Antwort erhalten, ist ein Tupel. Sie weisen die beiden ersten Werte des Tupels `X` und `y` zu. Erfahren Sie mehr über [Tupel](https://wikipedia.org/wiki/Tuple).
Was du zurückbekommst, ist ein Tupel. Du weist die beiden ersten Werte des Tupels `X` und `y` zu. Erfahre mehr über [Tupel](https://wikipedia.org/wiki/Tuple).
Sie können sehen, dass diese Daten 442 Elemente in Arrays mit 10 Elementen enthalten:
Du kannst sehen, dass die Daten 442 Einträge enthalten, die in Arrays mit jeweils 10 Elementen geformt sind:
```text
(442, 10)
@ -159,39 +160,39 @@ In einer neuen Codezelle laden Sie den Diabetes-Datensatz, indem Sie `load_diabe
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
✅ Denken Sie über die Beziehung zwischen den Daten und dem Regressionsziel nach. Lineare Regression sagt Beziehungen zwischen Merkmal X und Zielvariable y voraus. Können Sie das [Ziel](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) für den Diabetes-Datensatz in der Dokumentation finden? Was zeigt dieser Datensatz, wenn man das Ziel betrachtet?
✅ Überlege dir, welche Beziehung zwischen den Daten und dem Regressionsziel besteht. Lineare Regression sagt Beziehungen zwischen Merkmalsvariablen X und Zielvariablen y voraus. Kannst du das [Ziel](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) für den Diabetes-Datensatz in der Dokumentation finden? Was zeigt dieser Datensatz mit dem Ziel?
2. Wählen Sie als Nächstes einen Teil dieses Datensatzes aus, um ihn zu plotten, indem Sie die dritte Spalte des Datensatzes auswählen. Sie können dies tun, indem Sie den `:`-Operator verwenden, um alle Zeilen auszuwählen, und dann die dritte Spalte mit dem Index (2) auswählen. Sie können die Daten auch in ein 2D-Array umformen, wie es für das Plotten erforderlich ist, indem Sie `reshape(n_rows, n_columns)` verwenden. Wenn einer der Parameter -1 ist, wird die entsprechende Dimension automatisch berechnet.
2. Wähle als nächstes einen Teil dieses Datensatzes aus, indem du die 3. Spalte auswählst. Du kannst dies mit dem Operator `:` machen, um alle Zeilen zu nehmen und dann mit dem Index (2) die 3. Spalte auszuwählen. Du kannst die Daten auch in ein 2D-Array umformen wie es für eine Darstellung erforderlich ist mit `reshape(n_rows, n_columns)`. Ist einer der Parameter -1, wird die entsprechende Dimension automatisch berechnet.
```python
X = X[:, 2]
X = X.reshape((-1,1))
```
✅ Drucken Sie die Daten jederzeit aus, um ihre Form zu überprüfen.
✅ Drucke jederzeit die Daten aus, um ihre Form zu überprüfen.
3. Jetzt, da Sie die Daten zum Plotten bereit haben, können Sie sehen, ob eine Maschine helfen kann, eine logische Trennung zwischen den Zahlen in diesem Datensatz zu bestimmen. Dazu müssen Sie sowohl die Daten (X) als auch das Ziel (y) in Test- und Trainingssets aufteilen. Scikit-learn bietet eine einfache Möglichkeit, dies zu tun; Sie können Ihre Testdaten an einem bestimmten Punkt aufteilen.
3. Nun, da du Daten zum Plotten hast, kannst du prüfen, ob eine Maschine helfen kann, eine sinnvolle Trennung zwischen den Werten in diesem Datensatz zu finden. Dazu musst du sowohl die Daten (X) als auch das Ziel (y) in Test- und Trainingssets aufteilen. Scikit-learn hat dafür eine einfache Methode; du kannst deine Testdaten an einem bestimmten Punkt aufteilen.
```python
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
```
4. Jetzt sind Sie bereit, Ihr Modell zu trainieren! Laden Sie das lineare Regressionsmodell und trainieren Sie es mit Ihren X- und y-Trainingssets, indem Sie `model.fit()` verwenden:
4. Jetzt bist du bereit, dein Modell zu trainieren! Lade das lineare Regressionsmodell und trainiere es mit deinen X- und y-Trainingsdaten mit `model.fit()`:
```python
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
```
`model.fit()` ist eine Funktion, die Sie in vielen ML-Bibliotheken wie TensorFlow sehen werden.
`model.fit()` ist eine Funktion, die du in vielen ML-Bibliotheken wie TensorFlow sehen wirst.
5. Erstellen Sie dann eine Vorhersage mit Testdaten, indem Sie die Funktion `predict()` verwenden. Diese wird verwendet, um die Linie zwischen den Datengruppen zu zeichnen.
5. Erstelle als nächstes eine Vorhersage mit den Testdaten, indem du die Funktion `predict()` verwendest. Diese wird genutzt, um die Linie zwischen den Datengruppen zu zeichnen.
```python
y_pred = model.predict(X_test)
```
6. Jetzt ist es an der Zeit, die Daten in einem Diagramm darzustellen. Matplotlib ist ein sehr nützliches Werkzeug für diese Aufgabe. Erstellen Sie ein Streudiagramm aller X- und y-Testdaten und verwenden Sie die Vorhersage, um eine Linie an der passendsten Stelle zwischen den Datengruppierungen des Modells zu zeichnen.
6. Jetzt ist es Zeit, die Daten in einem Plot zu zeigen. Matplotlib ist dafür ein sehr nützliches Werkzeug. Erstelle ein Streudiagramm aller X- und y-Testdaten und verwende die Vorhersage, um eine Linie an der passendsten Stelle zwischen den Datenclustern des Modells zu zeichnen.
```python
plt.scatter(X_test, y_test, color='black')
@ -202,23 +203,24 @@ In einer neuen Codezelle laden Sie den Diabetes-Datensatz, indem Sie `load_diabe
plt.show()
```
![Ein Streudiagramm, das Datenpunkte zu Diabetes zeigt](../../../../2-Regression/1-Tools/images/scatterplot.png)
✅ Überlege ein wenig, was hier passiert. Eine gerade Linie verläuft durch viele kleine Datenpunkte, aber was genau macht sie? Kannst du erkennen, wie du diese Linie nutzen könntest, um vorherzusagen, wo ein neuer, unbekannter Datenpunkt in Bezug auf die y-Achse des Plots liegen sollte? Versuche, den praktischen Nutzen dieses Modells in Worte zu fassen.
![Ein Streudiagramm mit Datenpunkten rund um Diabetes](../../../../translated_images/de/scatterplot.ad8b356bcbb33be6.webp)
Herzlichen Glückwunsch, du hast dein erstes lineares Regressionsmodell erstellt, eine Vorhersage damit gemacht und es in einem Plot dargestellt!
---
## 🚀Herausforderung
✅ Denken Sie ein wenig darüber nach, was hier vor sich geht. Eine gerade Linie verläuft durch viele kleine Datenpunkte, aber was macht sie genau? Können Sie sehen, wie Sie diese Linie verwenden sollten, um zu prognostizieren, wo ein neuer, unbekannter Datenpunkt in Bezug auf die y-Achse des Diagramms passen sollte? Versuchen Sie, den praktischen Nutzen dieses Modells in Worte zu fassen.
Plotte eine andere Variable aus diesem Datensatz. Hinweis: Bearbeite diese Zeile: `X = X[:,2]`. Angesichts des Ziels dieses Datensatzes, was kannst du über den Verlauf von Diabetes als Krankheit herausfinden?
Herzlichen Glückwunsch, Sie haben Ihr erstes lineares Regressionsmodell erstellt, eine Vorhersage damit gemacht und diese in einem Diagramm dargestellt!
---
## 🚀 Herausforderung
Stellen Sie eine andere Variable aus diesem Datensatz dar. Hinweis: Bearbeiten Sie diese Zeile: `X = X[:,2]`. Angesichts des Ziels dieses Datensatzes, was können Sie über den Verlauf von Diabetes als Krankheit herausfinden?
## [Quiz nach der Vorlesung](https://ff-quizzes.netlify.app/en/ml/)
## Rückblick & Selbststudium
## Wiederholung & Selbststudium
In diesem Tutorial hast du mit einfacher linearer Regression gearbeitet, anstatt mit univariater oder multipler linearer Regression. Lies ein wenig über die Unterschiede zwischen diesen Methoden oder sieh dir [dieses Video](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) an.
In diesem Tutorial haben Sie mit einfacher linearer Regression gearbeitet, statt mit univariater oder multipler linearer Regression. Lesen Sie etwas über die Unterschiede zwischen diesen Methoden oder schauen Sie sich [dieses Video](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) an.
Lies mehr über das Konzept der Regression und denke darüber nach, welche Arten von Fragen mit dieser Technik beantwortet werden können. Nimm an [diesem Tutorial](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) teil, um dein Verständnis zu vertiefen.
Lesen Sie mehr über das Konzept der Regression und denken Sie darüber nach, welche Arten von Fragen mit dieser Technik beantwortet werden können. Machen Sie dieses [Tutorial](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott), um Ihr Verständnis zu vertiefen.
## Aufgabe
@ -226,5 +228,7 @@ Lies mehr über das Konzept der Regression und denke darüber nach, welche Arten
---
**Haftungsausschluss**:
Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als maßgebliche Quelle betrachtet werden. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die sich aus der Nutzung dieser Übersetzung ergeben.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Haftungsausschluss**:
Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Bei kritischen Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,62 +1,62 @@
# Erstellen eines Regressionsmodells mit Scikit-learn: Daten vorbereiten und visualisieren
![Infografik zur Datenvisualisierung](../../../../2-Regression/2-Data/images/data-visualization.png)
![Datenvisualisierungs-Infografik](../../../../translated_images/de/data-visualization.54e56dded7c1a804.webp)
Infografik von [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [Quiz vor der Lektion](https://ff-quizzes.netlify.app/en/ml/)
## [Vortragsquiz](https://ff-quizzes.netlify.app/en/ml/)
> ### [Diese Lektion ist auch in R verfügbar!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
## Einführung
Nachdem Sie nun die notwendigen Werkzeuge eingerichtet haben, um mit dem Aufbau von Machine-Learning-Modellen in Scikit-learn zu beginnen, können Sie anfangen, Fragen an Ihre Daten zu stellen. Wenn Sie mit Daten arbeiten und ML-Lösungen anwenden, ist es entscheidend, die richtigen Fragen zu stellen, um das volle Potenzial Ihres Datensatzes auszuschöpfen.
Jetzt, wo du mit den Werkzeugen eingerichtet bist, die du brauchst, um mit dem Aufbau von Machine-Learning-Modellen mit Scikit-learn zu beginnen, bist du bereit, Fragen an deine Daten zu stellen. Wenn du mit Daten arbeitest und ML-Lösungen anwendest, ist es sehr wichtig, zu verstehen, wie man die richtige Frage stellt, um das Potenzial deines Datensatzes richtig zu erschließen.
In dieser Lektion lernen Sie:
In dieser Lektion wirst du lernen:
- Wie Sie Ihre Daten für den Modellaufbau vorbereiten.
- Wie Sie Matplotlib für die Datenvisualisierung nutzen.
- Wie du deine Daten für den Modellbau vorbereitest.
- Wie du Matplotlib für die Datenvisualisierung verwendest.
- Wie du Seaborn für ausdrucksvollere Datenvisualisierungen einsetzt.
## Die richtigen Fragen an Ihre Daten stellen
## Die richtige Frage an deine Daten stellen
Die Frage, die Sie beantwortet haben möchten, bestimmt, welche Art von ML-Algorithmen Sie verwenden. Und die Qualität der Antwort hängt stark von der Beschaffenheit Ihrer Daten ab.
Die Frage, die du beantwortet haben möchtest, bestimmt, welche Art von ML-Algorithmen du einsetzen wirst. Und die Qualität der Antwort hängt stark von der Beschaffenheit deiner Daten ab.
Werfen Sie einen Blick auf die [Daten](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), die für diese Lektion bereitgestellt wurden. Sie können diese .csv-Datei in VS Code öffnen. Ein kurzer Blick zeigt sofort, dass es Lücken gibt und eine Mischung aus Zeichenketten und numerischen Daten vorliegt. Es gibt auch eine seltsame Spalte namens 'Package', in der die Daten eine Mischung aus 'sacks', 'bins' und anderen Werten sind. Die Daten sind tatsächlich ein bisschen chaotisch.
Schau dir die für diese Lektion bereitgestellten [Daten](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) an. Du kannst diese .csv-Datei in VS Code öffnen. Ein kurzer Blick zeigt sofort, dass es Lücken und eine Mischung aus Text- und numerischen Daten gibt. Es gibt auch eine merkwürdige Spalte namens „Package“, in der die Daten eine Mischung aus „sacks“, „bins“ und anderen Werten sind. Die Daten sind tatsächlich etwas chaotisch.
[![ML für Anfänger - Wie man einen Datensatz analysiert und bereinigt](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML für Anfänger - Wie man einen Datensatz analysiert und bereinigt")
> 🎥 Klicken Sie auf das Bild oben, um ein kurzes Video zur Vorbereitung der Daten für diese Lektion anzusehen.
> 🎥 Klicke auf das obige Bild für ein kurzes Video, das die Vorbereitung der Daten für diese Lektion durchgeht.
Es ist tatsächlich nicht sehr häufig, dass man einen Datensatz erhält, der vollständig bereit ist, um direkt ein ML-Modell zu erstellen. In dieser Lektion lernen Sie, wie Sie einen Rohdatensatz mit Standard-Python-Bibliotheken vorbereiten. Außerdem lernen Sie verschiedene Techniken zur Visualisierung der Daten kennen.
Tatsächlich ist es nicht sehr üblich, einen Datensatz zu erhalten, der vollständig bereit ist, um sofort ein ML-Modell zu erstellen. In dieser Lektion lernst du, wie du einen Rohdatensatz mit Standard-Python-Bibliotheken vorbereitest. Du lernst auch verschiedene Techniken zur Visualisierung der Daten.
## Fallstudie: 'Der Kürbismarkt'
## Fallstudie: „Der Kürbismarkt“
In diesem Ordner finden Sie eine .csv-Datei im Stammverzeichnis des `data`-Ordners namens [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), die 1757 Zeilen mit Daten über den Kürbismarkt enthält, sortiert nach Städten. Dies sind Rohdaten, die aus den [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) des US-Landwirtschaftsministeriums extrahiert wurden.
In diesem Ordner findest du eine .csv-Datei im Hauptordner `data` namens [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), die 1757 Zeilen Daten über den Kürbismarkt enthält, sortiert nach Städten. Dies sind Rohdaten, die aus den [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) entnommen wurden, die vom United States Department of Agriculture herausgegeben werden.
### Daten vorbereiten
Diese Daten sind gemeinfrei. Sie können in vielen separaten Dateien, nach Städten sortiert, von der USDA-Website heruntergeladen werden. Um zu vermeiden, dass zu viele separate Dateien vorliegen, haben wir alle Städtedaten in eine Tabelle zusammengeführt, sodass die Daten bereits etwas _vorbereitet_ wurden. Schauen wir uns die Daten nun genauer an.
Diese Daten sind Gemeingut. Sie können in vielen einzelnen Dateien, jeweils pro Stadt, von der USDA-Website heruntergeladen werden. Um zu viele separate Dateien zu vermeiden, haben wir alle Stadtdaten in einem Tabellenblatt zusammengefasst, daher haben wir die Daten bereits etwas _vorbereitet_. Schauen wir uns nun die Daten genauer an.
### Die Kürbis-Daten - erste Eindrücke
### Die Kürbisdaten erste Schlüsse
Was fällt Ihnen an diesen Daten auf? Sie haben bereits gesehen, dass es eine Mischung aus Zeichenketten, Zahlen, Lücken und seltsamen Werten gibt, die Sie interpretieren müssen.
Was fällt dir an diesen Daten auf? Du hast bereits gesehen, dass eine Mischung aus Texten, Zahlen, Leerstellen und merkwürdigen Werten besteht, die du verstehen musst.
Welche Frage könnten Sie mit diesen Daten unter Verwendung einer Regressionsmethode stellen? Wie wäre es mit: "Den Preis eines Kürbisses für einen bestimmten Monat vorhersagen". Wenn Sie die Daten erneut betrachten, gibt es einige Änderungen, die Sie vornehmen müssen, um die für diese Aufgabe erforderliche Datenstruktur zu erstellen.
Welche Frage kannst du mit einer Regressionsmethode an diese Daten stellen? Wie wäre es mit „Prognose des Preises eines Kürbisses zum Verkauf in einem bestimmten Monat“? Wenn man die Daten nochmal betrachtet, gibt es einige Änderungen, die du vornehmen musst, um die Datenstruktur für die Aufgabe zu erstellen.
## Übung Kürbisdaten analysieren
## Übung - Analysieren der Kürbis-Daten
Lass uns [Pandas](https://pandas.pydata.org/) verwenden (der Name steht für `Python Data Analysis`), ein sehr nützliches Werkzeug für die Datenaufbereitung, um diese Kürbisdaten zu analysieren und vorzubereiten.
Verwenden wir [Pandas](https://pandas.pydata.org/), ein sehr nützliches Tool zur Datenanalyse, um diese Kürbis-Daten zu analysieren und vorzubereiten.
### Zuerst: Fehlende Daten prüfen
### Zuerst fehlende Daten überprüfen
Du musst zuerst Schritte unternehmen, um nach fehlenden Daten zu suchen:
Zunächst müssen Sie Schritte unternehmen, um fehlende Daten zu überprüfen:
1. Wandle die Daten in ein Monatsformat um (das sind US-Daten, deshalb ist das Format `MM/DD/YYYY`).
2. Extrahiere den Monat in eine neue Spalte.
1. Konvertieren Sie die Daten in ein Monatsformat (es handelt sich um US-Daten, daher ist das Format `MM/DD/YYYY`).
2. Extrahieren Sie den Monat in eine neue Spalte.
Öffne die Datei _notebook.ipynb_ in Visual Studio Code und importiere die Tabelle in einen neuen Pandas DataFrame.
Öffnen Sie die Datei _notebook.ipynb_ in Visual Studio Code und importieren Sie die Tabelle in ein neues Pandas-Dataframe.
1. Verwenden Sie die Funktion `head()`, um die ersten fünf Zeilen anzuzeigen.
1. Verwende die Funktion `head()`, um die ersten fünf Zeilen anzuzeigen.
```python
import pandas as pd
@ -64,30 +64,30 @@ Zunächst müssen Sie Schritte unternehmen, um fehlende Daten zu überprüfen:
pumpkins.head()
```
✅ Welche Funktion würden Sie verwenden, um die letzten fünf Zeilen anzuzeigen?
✅ Welche Funktion würdest du verwenden, um die letzten fünf Zeilen zu sehen?
1. Überprüfen Sie, ob im aktuellen Dataframe fehlende Daten vorhanden sind:
1. Prüfe, ob es fehlende Daten im aktuellen DataFrame gibt:
```python
pumpkins.isnull().sum()
```
Es gibt fehlende Daten, aber möglicherweise sind diese für die aktuelle Aufgabe nicht relevant.
Es gibt fehlende Daten, aber vielleicht spielen sie für die aktuelle Aufgabe keine Rolle.
1. Um Ihr Dataframe einfacher zu gestalten, wählen Sie nur die benötigten Spalten aus, indem Sie die Funktion `loc` verwenden, die aus dem ursprünglichen Dataframe eine Gruppe von Zeilen (als erster Parameter übergeben) und Spalten (als zweiter Parameter übergeben) extrahiert. Der Ausdruck `:` im folgenden Fall bedeutet "alle Zeilen".
1. Um den DataFrame einfacher handhabbar zu machen, wähle nur die benötigten Spalten mit der `loc`-Funktion aus, die aus dem originalen DataFrame eine Gruppe von Zeilen (als erster Parameter) und Spalten (als zweiter Parameter) extrahiert. Der Ausdruck `:` bedeutet hier "alle Zeilen".
```python
columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']
pumpkins = pumpkins.loc[:, columns_to_select]
```
### Zweitens, den Durchschnittspreis eines Kürbisses bestimmen
### Zweitens: Durchschnittspreis des Kürbisses bestimmen
Überlegen Sie, wie Sie den Durchschnittspreis eines Kürbisses in einem bestimmten Monat bestimmen können. Welche Spalten würden Sie für diese Aufgabe auswählen? Hinweis: Sie benötigen 3 Spalten.
Überlege, wie du den Durchschnittspreis eines Kürbisses in einem bestimmten Monat bestimmen kannst. Welche Spalten würdest du hierfür auswählen? Tipp: Du brauchst 3 Spalten.
Lösung: Nehmen Sie den Durchschnitt der Spalten `Low Price` und `High Price`, um die neue Spalte `Price` zu füllen, und konvertieren Sie die Spalte `Date`, sodass nur der Monat angezeigt wird. Glücklicherweise gibt es laut der oben durchgeführten Überprüfung keine fehlenden Daten für Daten oder Preise.
Lösung: Nimm den Durchschnitt der Spalten `Low Price` und `High Price`, um die neue Preis-Spalte zu füllen, und konvertiere die Datumsspalte so, dass nur der Monat angezeigt wird. Glücklicherweise gibt es laut der oben durchgeführten Prüfung keine fehlenden Daten bei Datum oder Preisen.
1. Um den Durchschnitt zu berechnen, fügen Sie den folgenden Code hinzu:
1. Um den Durchschnitt zu berechnen, füge folgenden Code hinzu:
```python
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2
@ -96,37 +96,37 @@ Lösung: Nehmen Sie den Durchschnitt der Spalten `Low Price` und `High Price`, u
```
Sie können beliebige Daten mit `print(month)` überprüfen.
Du kannst jederzeit Daten zum Überprüfen mit `print(month)` ausgeben.
2. Kopieren Sie nun Ihre konvertierten Daten in ein neues Pandas-Dataframe:
2. Kopiere nun deine umgewandelten Daten in einen neuen Pandas DataFrame:
```python
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
```
Wenn Sie Ihr Dataframe ausgeben, sehen Sie einen sauberen, aufgeräumten Datensatz, auf dessen Grundlage Sie Ihr neues Regressionsmodell erstellen können.
Wenn du deinen DataFrame ausgibst, erhältst du einen sauberen, aufgeräumten Datensatz, auf dem du dein neues Regressionsmodell aufbauen kannst.
### Aber Moment! Etwas ist hier seltsam
### Aber Moment! Hier ist etwas Merkwürdiges
Wenn Sie sich die Spalte `Package` ansehen, werden Kürbisse in vielen verschiedenen Konfigurationen verkauft. Einige werden in '1 1/9 bushel'-Maßen verkauft, andere in '1/2 bushel'-Maßen, einige pro Kürbis, einige pro Pfund und einige in großen Kisten mit unterschiedlichen Breiten.
Wenn du dir die Spalte `Package` ansiehst, werden Kürbisse in verschiedenen Einheiten verkauft. Einige werden in „1 1/9 bushel“ Messungen verkauft, andere in „1/2 bushel“, einige pro Kürbis, einige pro Pfund, und einige in großen Kisten mit variierenden Breiten.
> Kürbisse scheinen schwer konsistent zu wiegen
> Kürbisse scheinen sehr schwer einheitlich zu wiegen zu sein
Wenn man sich die Originaldaten ansieht, ist es interessant, dass alles mit `Unit of Sale` gleich 'EACH' oder 'PER BIN' auch den `Package`-Typ pro Zoll, pro Kiste oder 'each' hat. Kürbisse scheinen schwer konsistent zu wiegen, daher filtern wir sie, indem wir nur Kürbisse mit dem String 'bushel' in ihrer `Package`-Spalte auswählen.
Wenn man die Originaldaten betrachtet, haben alle Zeilen mit `Unit of Sale` gleich 'EACH' oder 'PER BIN' auch bei der Spalte `Package` Werte wie per Inch, per Bin oder 'each'. Kürbisse sind sehr schwer einheitlich zu wiegen, daher filtern wir sie, indem wir nur Kürbisse auswählen, die den String „bushel“ in ihrer `Package`-Spalte enthalten.
1. Fügen Sie einen Filter am Anfang der Datei unter dem ersten .csv-Import hinzu:
1. Füge einen Filter oben in der Datei unter dem initialen .csv-Import hinzu:
```python
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
```
Wenn Sie die Daten jetzt ausgeben, sehen Sie, dass Sie nur die etwa 415 Zeilen mit Daten erhalten, die Kürbisse nach dem Bushel enthalten.
Wenn du die Daten jetzt ausgibst, siehst du, dass du nur die etwa 415 Zeilen mit Kürbissen pro Bushel erhältst.
### Aber Moment! Es gibt noch etwas zu tun
### Aber Moment! Es gibt noch eine Sache zu tun
Haben Sie bemerkt, dass die Bushel-Menge pro Zeile variiert? Sie müssen die Preise normalisieren, sodass Sie die Preise pro Bushel anzeigen. Führen Sie also einige Berechnungen durch, um dies zu standardisieren.
Hast du bemerkt, dass die Bushel-Menge pro Zeile variiert? Du musst die Preise normalisieren, sodass die Preise pro Bushel angezeigt werden, also mache eine Berechnung zur Standardisierung.
1. Fügen Sie diese Zeilen nach dem Block hinzu, der das `new_pumpkins`-Dataframe erstellt:
1. Füge diese Zeilen nach dem Block hinzu, der den neuen DataFrame new_pumpkins erstellt:
```python
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)
@ -134,38 +134,38 @@ Haben Sie bemerkt, dass die Bushel-Menge pro Zeile variiert? Sie müssen die Pre
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
```
✅ Laut [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) hängt das Gewicht eines Bushels von der Art des Produkts ab, da es sich um eine Volumenmessung handelt. "Ein Bushel Tomaten wiegt beispielsweise 56 Pfund... Blätter und Grünzeug nehmen mehr Platz mit weniger Gewicht ein, daher wiegt ein Bushel Spinat nur 20 Pfund." Das ist alles ziemlich kompliziert! Lassen Sie uns die Umrechnung von Bushel zu Pfund ignorieren und stattdessen den Preis pro Bushel berechnen. All diese Studien zu Bushels von Kürbissen zeigen jedoch, wie wichtig es ist, die Natur Ihrer Daten zu verstehen!
✅ Laut [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) hängt das Gewicht eines Bushels von der Art des Erzeugnisses ab, da es sich um ein Volumenmaß handelt. „Ein Bushel Tomaten soll zum Beispiel 56 Pfund wiegen... Blätter und Grünes nehmen mehr Platz bei geringerer Masse ein, ein Bushel Spinat wiegt so nur 20 Pfund.“ Alles ziemlich kompliziert! Lass uns also auf eine Umrechnung von Bushel zu Pfund verzichten und stattdessen die Preise pro Bushel angeben. Diese Untersuchung der Bushel-Kürbisse zeigt jedoch, wie wichtig es ist, die Beschaffenheit der Daten zu verstehen!
Nun können Sie die Preise pro Einheit basierend auf ihrer Bushel-Messung analysieren. Wenn Sie die Daten noch einmal ausgeben, sehen Sie, wie sie standardisiert wurden.
Jetzt kannst du die Preise pro Einheit basierend auf ihrer Bushel-Messung analysieren. Wenn du die Daten noch einmal ausgibst, siehst du, wie sie standardisiert sind.
✅ Haben Sie bemerkt, dass Kürbisse, die nach dem halben Bushel verkauft werden, sehr teuer sind? Können Sie herausfinden, warum? Hinweis: Kleine Kürbisse sind viel teurer als große, wahrscheinlich weil es viel mehr davon pro Bushel gibt, da ein großer hohler Kürbis viel Platz einnimmt.
✅ Hast du bemerkt, dass Kürbisse, die im halben Bushel verkauft werden, sehr teuer sind? Kannst du herausfinden warum? Tipp: Kleine Kürbisse sind viel teurer als große, wahrscheinlich weil viel mehr davon in einen Bushel passen, im Gegensatz zu einem großen hohlen Pie-Kürbis, der ungenutzten Platz einnimmt.
## Visualisierungsstrategien
Ein Teil der Aufgabe eines Datenwissenschaftlers besteht darin, die Qualität und Beschaffenheit der Daten, mit denen er arbeitet, zu demonstrieren. Dazu erstellen sie oft interessante Visualisierungen, wie Diagramme, Grafiken und Charts, die verschiedene Aspekte der Daten zeigen. Auf diese Weise können sie Beziehungen und Lücken visuell darstellen, die sonst schwer zu erkennen wären.
Ein Teil der Rolle des Datenwissenschaftlers ist es, die Qualität und Beschaffenheit der Daten, mit denen er arbeitet, zu demonstrieren. Dazu erstellen sie oft interessante Visualisierungen oder Plots, Graphen und Diagramme, die verschiedene Aspekte der Daten zeigen. So können sie Beziehungen und Lücken visuell darstellen, die sonst schwer zu entdecken sind.
[![ML für Anfänger - Wie man Daten mit Matplotlib visualisiert](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML für Anfänger - Wie man Daten mit Matplotlib visualisiert")
> 🎥 Klicken Sie auf das Bild oben, um ein kurzes Video zur Visualisierung der Daten für diese Lektion anzusehen.
> 🎥 Klicke auf das obige Bild für ein kurzes Video, das die Visualisierung der Daten für diese Lektion zeigt.
Visualisierungen können auch dabei helfen, die am besten geeignete Machine-Learning-Technik für die Daten zu bestimmen. Ein Streudiagramm, das einer Linie zu folgen scheint, deutet beispielsweise darauf hin, dass die Daten gut für eine lineare Regression geeignet sind.
Visualisierungen können auch helfen, die am besten geeignete Machine-Learning-Technik für die Daten zu bestimmen. Ein Streudiagramm, das einer Linie zu folgen scheint, zeigt zum Beispiel, dass die Daten gut für eine lineare Regression geeignet sein könnten.
Eine Datenvisualisierungsbibliothek, die gut in Jupyter-Notebooks funktioniert, ist [Matplotlib](https://matplotlib.org/) (die Sie auch in der vorherigen Lektion gesehen haben).
Eine Datenvisualisierungsbibliothek, die gut in Jupyter-Notebooks funktioniert, ist [Matplotlib](https://matplotlib.org/) (die du auch in der vorherigen Lektion gesehen hast).
> Erhalten Sie mehr Erfahrung mit der Datenvisualisierung in [diesen Tutorials](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott).
> Sammle mehr Erfahrung mit Datenvisualisierung in [diesen Tutorials](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott).
## Übung - Experimentieren mit Matplotlib
## Übung Experimentiere mit Matplotlib
Versuchen Sie, einige grundlegende Diagramme zu erstellen, um das neue Dataframe anzuzeigen, das Sie gerade erstellt haben. Was würde ein einfaches Liniendiagramm zeigen?
Versuche, einige grundlegende Diagramme zu erstellen, um den neuen DataFrame, den du gerade erstellt hast, darzustellen. Was würde ein einfaches Liniendiagramm zeigen?
1. Importieren Sie Matplotlib am Anfang der Datei, unter dem Pandas-Import:
1. Importiere Matplotlib oben in der Datei, unter dem Pandas-Import:
```python
import matplotlib.pyplot as plt
```
1. Führen Sie das gesamte Notebook erneut aus, um es zu aktualisieren.
1. Fügen Sie am Ende des Notebooks eine Zelle hinzu, um die Daten als Box-Diagramm darzustellen:
1. Führe das gesamte Notebook erneut aus, um es zu aktualisieren.
1. Füge am Ende des Notebooks eine Zelle hinzu, um die Daten als Box-Plot darzustellen:
```python
price = new_pumpkins.Price
@ -174,38 +174,113 @@ Versuchen Sie, einige grundlegende Diagramme zu erstellen, um das neue Dataframe
plt.show()
```
![Ein Streudiagramm, das die Beziehung zwischen Preis und Monat zeigt](../../../../2-Regression/2-Data/images/scatterplot.png)
![Ein Streudiagramm zeigt die Beziehung zwischen Preis und Monat](../../../../translated_images/de/scatterplot.b6868f44cbd2051c.webp)
Ist dies ein nützliches Diagramm? Überrascht Sie etwas daran?
Ist das ein nützliches Diagramm? Überrasch dich etwas daran?
Es ist nicht besonders nützlich, da es nur die Verteilung Ihrer Daten in einem bestimmten Monat anzeigt.
Es ist nicht besonders nützlich, da es nur deine Daten als Verteilung von Punkten in einem bestimmten Monat anzeigt.
### Machen Sie es nützlich
### Mach es nützlich
Um Diagramme nützlich zu machen, müssen Sie die Daten in der Regel irgendwie gruppieren. Versuchen wir, ein Diagramm zu erstellen, bei dem die y-Achse die Monate zeigt und die Daten die Verteilung darstellen.
Um Diagramme nützlich zu machen, muss man die Daten normalerweise irgendwie gruppieren. Lass uns versuchen, ein Diagramm zu erstellen, bei dem die y-Achse die Monate zeigt und die Daten die Verteilung demonstrieren.
1. Fügen Sie eine Zelle hinzu, um ein gruppiertes Balkendiagramm zu erstellen:
1. Füge eine Zelle hinzu, um ein gruppiertes Balkendiagramm zu erstellen:
```python
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')
plt.ylabel("Pumpkin Price")
```
![Ein Balkendiagramm, das die Beziehung zwischen Preis und Monat zeigt](../../../../2-Regression/2-Data/images/barchart.png)
![Ein Balkendiagramm zeigt die Beziehung zwischen Preis und Monat](../../../../translated_images/de/barchart.a833ea9194346d76.webp)
Das ist eine nützlichere Datenvisualisierung! Sie zeigt, dass die höchsten Preise für Kürbisse im September und Oktober auftreten. Entspricht das deinen Erwartungen? Warum oder warum nicht?
## Übung Experimentiere mit Seaborn
Matplotlib ist mächtig, aber es braucht oft viel Code, um ein ausgefeiltes Diagramm zu erzeugen. [Seaborn](https://seaborn.pydata.org/) ist eine Bibliothek, die _auf_ Matplotlib aufbaut und für statistische Datenvisualisierung entwickelt wurde. Sie arbeitet direkt mit Pandas DataFrames, verwendet attraktive Standardstile und ermöglicht es, mit viel weniger Code informative Diagramme zu erstellen. Da Seaborn Matplotlib-Objekte zurückgibt, kannst du alles, was du über Matplotlib weißt, nutzen, um das Ergebnis weiter anzupassen.
> Wenn du Seaborn noch nicht installiert hast, installiere es mit `pip install seaborn`.
1. Importiere Seaborn oben im Notebook unter den anderen Imports. Es wird konventionell als `sns` importiert:
```python
import seaborn as sns
```
### Streudiagramme zur Darstellung von Zusammenhängen
Ein großer Teil der Datenexploration vor dem Modellaufbau ist die Suche nach _Zusammenhängen_ zwischen Variablen. Ein [Streudiagramm](https://en.wikipedia.org/wiki/Scatter_plot) ist dafür eines der besten Werkzeuge: Wenn die Punkte einer Linie folgen, können die beiden Variablen korreliert sein das ist ein gutes Zeichen, dass ein lineares Regressionsmodell funktionieren könnte.
1. Erstelle das Streudiagramm von Preis zu Monat wie zuvor, diesmal mit Seaborns [`relplot()`](https://seaborn.pydata.org/generated/seaborn.relplot.html) (Relationsdiagramm), das direkt mit den DataFrame-Spalten arbeitet:
```python
sns.relplot(x="Price", y="Month", data=new_pumpkins)
```
![Ein Seaborn-Streudiagramm zeigt die Beziehung zwischen Preis und Monat](../../../../translated_images/de/relplot.a03837d8f0329cec.webp)
Beachte, wie du die _Spaltennamen_ und den DataFrame übergibst, und Seaborn kümmert sich um die Achsenbeschriftungen.
2. Du kannst zu einem Liniendiagramm wechseln, indem du `kind="line"` übergibst. Seaborn zeichnet sogar ein schattiertes Band, das das Konfidenzintervall um die Linie zeigt:
```python
sns.relplot(x="Price", y="Month", kind="line", data=new_pumpkins)
```
![Ein Seaborn-Liniendiagramm zeigt die Beziehung zwischen Preis und Monat](../../../../translated_images/de/lineplot.f9034ba47b1e30ee.webp)
Diese Daten sind recht stark verrauscht, daher ist ein Liniendiagramm hier nicht die klarste Wahl aber es zeigt, wie leicht du Diagrammtypen in Seaborn ändern kannst.
### Balkendiagramme zur Darstellung von Verteilungen
Früher hast du die Daten manuell gruppiert, um mit Matplotlib ein Balkendiagramm zu erstellen. Seaborns [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html) (kategorische Darstellung) kann die Gruppierung und Aggregation für dich übernehmen. Standardmäßig zeigt `kind="bar"` den Mittelwert jeder Kategorie zusammen mit einer schwarzen Linie, die das Konfidenzintervall anzeigt.
1. Erstelle ein Balkendiagramm des durchschnittlichen Preises pro Monat:
```python
sns.catplot(x="Month", y="Price", data=new_pumpkins, kind="bar")
```
![Ein Seaborn-Balkendiagramm, das die Preisverteilung pro Monat zeigt](../../../../translated_images/de/catplot.e73fc35fdf96242b.webp)
Dies bestätigt, was du mit Matplotlib gesehen hast — die Preise erreichen ihren Höhepunkt um September und Oktober — aber Seaborn visualisiert auch, wie stark der Preis innerhalb jedes Monats _variiert_.
### Heatmaps zur Darstellung von Korrelationen
Scatterplots vergleichen jeweils zwei Variablen. Wenn du mehrere numerische Spalten hast, ermöglicht dir eine [Heatmap](https://de.wikipedia.org/wiki/Heatmap) die Stärke der Beziehung zwischen _jedem_ Paar von Spalten auf einmal zu sehen. Dies ist eine gängige Methode, um zu erkennen, welche Merkmale am meisten korreliert sind, bevor du entscheidest, was du in ein Modell einspeist (und dieselbe Art von Diagramm wird später verwendet, um Verwechslungsmatrizen bei Klassifikationen darzustellen).
1. Erstelle mit Pandas eine Korrelationsmatrix, und zeichne sie dann mit Seaborns [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html). Die Option `annot=True` druckt die Korrelationswerte in jede Zelle:
```python
correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()
sns.heatmap(correlations, annot=True, cmap="coolwarm")
```
![Eine Seaborn-Heatmap, die Korrelationen zwischen den numerischen Spalten zeigt](../../../../translated_images/de/heatmap.bd98dce43b404c57.webp)
Werte nahe bei `1` (oder `-1`) bedeuten, dass die Spalten stark _linear_ korreliert sind. Beachte, wie `Low Price` und `High Price` fast perfekt korreliert sind. `Month` hingegen zeigt nur eine schwache lineare Korrelation mit dem Preis — obwohl das Balkendiagramm oben einen klaren saisonalen Höhepunkt im September und Oktober aufzeigte. Das ist eine wichtige Erkenntnis: der Korrelationskoeffizient misst nur _geradlinige_ Zusammenhänge, daher können saisonale oder anderweitig nicht-lineare Muster übersehen werden. ✅ Warum ist es nützlich, sowohl eine Heatmap als auch Diagramme wie das Balkendiagramm anzuschauen, bevor man entscheidet, welche Spalten man verwendet?
### Matplotlib oder Seaborn?
Beide Bibliotheken sind es wert, sie zu kennen:
- **Matplotlib** bietet dir eine feinkörnige Kontrolle über jedes Element eines Diagramms und ist die Grundlage, auf der fast jede andere Python-Plotting-Bibliothek aufbaut.
- **Seaborn** stellt höherstufige Funktionen und attraktive Standardwerte für statistische Diagramme bereit, arbeitet direkt mit DataFrames und ist oft schneller für explorative Datenanalysen.
Dies ist eine nützlichere Datenvisualisierung! Es scheint darauf hinzudeuten, dass die höchsten Preise für Kürbisse im September und Oktober auftreten. Entspricht das Ihrer Erwartung? Warum oder warum nicht?
Ein üblicher Arbeitsablauf besteht darin, zunächst Seaborn zu verwenden, um deine Daten schnell zu erkunden, und dann zu Matplotlib zu wechseln, wenn du die Details anpassen musst.
---
## 🚀 Herausforderung
## 🚀Herausforderung
Erforschen Sie die verschiedenen Arten von Visualisierungen, die Matplotlib bietet. Welche Arten sind am besten für Regressionsprobleme geeignet?
Erkunde die verschiedenen Visualisierungstypen, die Matplotlib und Seaborn anbieten. Welche Typen eignen sich am besten für Regressionsprobleme?
## [Quiz nach der Lektion](https://ff-quizzes.netlify.app/en/ml/)
## [Nachvorlesungs-Quiz](https://ff-quizzes.netlify.app/en/ml/)
## Rückblick & Selbststudium
Schauen Sie sich die vielen Möglichkeiten zur Datenvisualisierung an. Erstellen Sie eine Liste der verschiedenen verfügbaren Bibliotheken und notieren Sie, welche für bestimmte Aufgaben am besten geeignet sind, z. B. 2D-Visualisierungen vs. 3D-Visualisierungen. Was entdecken Sie?
Schau dir die vielen Möglichkeiten an, Daten zu visualisieren. Erstelle eine Liste der verfügbaren Bibliotheken und notiere, welche am besten für bestimmte Aufgaben geeignet sind, zum Beispiel 2D-Visualisierungen vs. 3D-Visualisierungen. Was entdeckst du?
## Aufgabe
@ -213,5 +288,7 @@ Schauen Sie sich die vielen Möglichkeiten zur Datenvisualisierung an. Erstellen
---
**Haftungsausschluss**:
Dieses Dokument wurde mithilfe des KI-Übersetzungsdienstes [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als maßgebliche Quelle betrachtet werden. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die sich aus der Nutzung dieser Übersetzung ergeben.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Haftungsausschluss**:
Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Bei kritischen Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -3,7 +3,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"## Lineare Regression für Kürbisse - Lektion 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": [
"## Visualisieren mit Seaborn\n",
"\n",
"[Seaborn](https://seaborn.pydata.org/) baut auf Matplotlib auf und arbeitet direkt mit DataFrames, wodurch es schnell möglich ist, attraktive statistische Diagramme mit sehr wenig Code zu erstellen.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Streudiagramme zur Darstellung von Beziehungen\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": [
"### Balkendiagramme zur Veranschaulichung von Verteilungen\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**Haftungsausschluss**: \nDieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als maßgebliche Quelle betrachtet werden. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die sich aus der Nutzung dieser Übersetzung ergeben.\n"
"### Heatmaps zur Darstellung von Korrelationen\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<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Haftungsausschluss**:\nDieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Bei kritischen Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -424,13 +487,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "95726f0b8283628d5356a4f8eb8b4b76",
"translation_date": "2025-09-04T01:36:47+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "de"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -1,47 +1,47 @@
# Einführung in Reinforcement Learning und Q-Learning
![Zusammenfassung von Reinforcement Learning in einer Sketchnote](../../../../sketchnotes/ml-reinforcement.png)
![Zusammenfassung der Verstärkung im maschinellen Lernen in einem Sketchnote](../../../../translated_images/de/ml-reinforcement.94024374d63348db.webp)
> Sketchnote von [Tomomi Imura](https://www.twitter.com/girlie_mac)
Reinforcement Learning umfasst drei wichtige Konzepte: den Agenten, einige Zustände und eine Menge von Aktionen pro Zustand. Indem der Agent in einem bestimmten Zustand eine Aktion ausführt, erhält er eine Belohnung. Stellen Sie sich erneut das Computerspiel Super Mario vor. Sie sind Mario, befinden sich in einem Level und stehen am Rand einer Klippe. Über Ihnen schwebt eine Münze. Sie, als Mario, in einem Level, an einer bestimmten Position ... das ist Ihr Zustand. Wenn Sie einen Schritt nach rechts machen (eine Aktion), fallen Sie über die Klippe, was Ihnen eine niedrige Punktzahl einbringt. Drücken Sie jedoch die Sprungtaste, können Sie eine Münze einsammeln und bleiben am Leben. Das ist ein positives Ergebnis und sollte mit einer positiven Punktzahl belohnt werden.
Reinforcement Learning umfasst drei wichtige Konzepte: den Agenten, einige Zustände und eine Menge von Aktionen pro Zustand. Durch das Ausführen einer Aktion in einem bestimmten Zustand erhält der Agent eine Belohnung. Stellen Sie sich wieder das Computerspiel Super Mario vor. Sie sind Mario, Sie befinden sich in einem Spiellevel, stehen neben einer Klippe. Über Ihnen ist eine Münze. Sie als Mario, in einem Spiellevel, an einer bestimmten Position ... das ist Ihr Zustand. Einen Schritt nach rechts zu gehen (eine Aktion) würde Sie über die Kante führen und das würde Ihnen eine niedrige Punktzahl geben. Der Sprung-Button zu drücken würde Ihnen jedoch einen Punkt bringen und Sie würden am Leben bleiben. Das ist ein positives Ergebnis, das Ihnen eine positive Punktzahl geben sollte.
Mit Reinforcement Learning und einem Simulator (dem Spiel) können Sie lernen, wie Sie das Spiel spielen, um die Belohnung zu maximieren, also am Leben zu bleiben und so viele Punkte wie möglich zu sammeln.
Mit Hilfe von Reinforcement Learning und einem Simulator (dem Spiel) können Sie lernen, wie man das Spiel spielt, um die Belohnung zu maximieren, nämlich am Leben zu bleiben und so viele Punkte wie möglich zu erzielen.
[![Einführung in Reinforcement Learning](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo)
> 🎥 Klicken Sie auf das Bild oben, um Dmitry über Reinforcement Learning sprechen zu hören.
> 🎥 Klicken Sie auf das obige Bild, um Dmitry über Reinforcement Learning sprechen zu hören
## [Quiz vor der Lektion](https://ff-quizzes.netlify.app/en/ml/)
## [Vorlesungsquiz](https://ff-quizzes.netlify.app/en/ml/)
## Voraussetzungen und Einrichtung
In dieser Lektion werden wir mit etwas Python-Code experimentieren. Sie sollten in der Lage sein, den Jupyter-Notebook-Code aus dieser Lektion entweder auf Ihrem Computer oder in der Cloud auszuführen.
In dieser Lektion werden wir mit etwas Code in Python experimentieren. Sie sollten in der Lage sein, den Jupyter Notebook-Code aus dieser Lektion entweder auf Ihrem Computer oder irgendwo in der Cloud auszuführen.
Sie können [das Notebook zur Lektion](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) öffnen und die Lektion Schritt für Schritt durchgehen.
Sie können [das Lektion-Notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) öffnen und diese Lektion durchgehen, um zu bauen.
> **Hinweis:** Wenn Sie diesen Code aus der Cloud öffnen, müssen Sie auch die Datei [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) abrufen, die im Notebook-Code verwendet wird. Fügen Sie sie in dasselbe Verzeichnis wie das Notebook ein.
> **Hinweis:** Wenn Sie diesen Code aus der Cloud öffnen, müssen Sie auch die Datei [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) herunterladen, die im Notebook-Code verwendet wird. Fügen Sie sie in dasselbe Verzeichnis wie das Notebook ein.
## Einführung
In dieser Lektion erkunden wir die Welt von **[Peter und der Wolf](https://de.wikipedia.org/wiki/Peter_und_der_Wolf)**, inspiriert von einem musikalischen Märchen des russischen Komponisten [Sergei Prokofjew](https://de.wikipedia.org/wiki/Sergei_Prokofjew). Wir verwenden **Reinforcement Learning**, um Peter seine Umgebung erkunden zu lassen, leckere Äpfel zu sammeln und dem Wolf auszuweichen.
In dieser Lektion werden wir die Welt von **[Peter und der Wolf](https://de.wikipedia.org/wiki/Peter_und_der_Wolf)** erforschen, inspiriert von einem musikalischen Märchen des russischen Komponisten [Sergej Prokofjew](https://de.wikipedia.org/wiki/Sergej_Prokofjew). Wir werden **Reinforcement Learning** verwenden, um Peter seine Umgebung erkunden zu lassen, leckere Äpfel zu sammeln und die Begegnung mit dem Wolf zu vermeiden.
**Reinforcement Learning** (RL) ist eine Lerntechnik, die es uns ermöglicht, das optimale Verhalten eines **Agenten** in einer bestimmten **Umgebung** durch viele Experimente zu erlernen. Ein Agent in dieser Umgebung sollte ein **Ziel** haben, das durch eine **Belohnungsfunktion** definiert ist.
**Reinforcement Learning** (RL) ist eine Lerntechnik, mit der wir ein optimales Verhalten eines **Agenten** in einer bestimmten **Umgebung** durch viele Experimente erlernen können. Ein Agent in dieser Umgebung sollte ein **Ziel** haben, das durch eine **Belohnungsfunktion** definiert ist.
## Die Umgebung
Der Einfachheit halber nehmen wir an, dass Peters Welt ein quadratisches Spielfeld der Größe `Breite` x `Höhe` ist, wie dieses:
Zur Vereinfachung betrachten wir Peters Welt als quadratisches Spielfeld der Größe `width` x `height`, so wie hier:
![Peters Umgebung](../../../../8-Reinforcement/1-QLearning/images/environment.png)
![Peters Umgebung](../../../../translated_images/de/environment.40ba3cb66256c93f.webp)
Jede Zelle auf diesem Spielfeld kann entweder sein:
* **Boden**, auf dem Peter und andere Wesen laufen können.
* **Wasser**, auf dem man offensichtlich nicht laufen kann.
* **Boden**, auf dem Peter und andere Kreaturen gehen können.
* **Wasser**, auf dem man offensichtlich nicht gehen kann.
* ein **Baum** oder **Gras**, ein Ort, an dem man sich ausruhen kann.
* ein **Apfel**, den Peter gerne finden würde, um sich zu ernähren.
* ein **Apfel**, der etwas darstellt, das Peter gerne finden würde, um sich zu ernähren.
* ein **Wolf**, der gefährlich ist und gemieden werden sollte.
Es gibt ein separates Python-Modul, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), das den Code für die Arbeit mit dieser Umgebung enthält. Da dieser Code nicht entscheidend für das Verständnis unserer Konzepte ist, importieren wir das Modul und verwenden es, um das Beispielbrett zu erstellen (Codeblock 1):
Es gibt ein separates Python-Modul, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), das den Code für die Arbeit mit dieser Umgebung enthält. Da dieser Code für das Verständnis unserer Konzepte nicht wichtig ist, werden wir das Modul importieren und verwenden, um das Beispielbrett zu erstellen (Codeblock 1):
```python
from rlboard import *
@ -52,15 +52,15 @@ m.randomize(seed=13)
m.plot()
```
Dieser Code sollte ein Bild der Umgebung ausgeben, das dem oben gezeigten ähnelt.
Dieser Code sollte ein Bild der Umgebung ähnlich dem oben genannten ausgeben.
## Aktionen und Strategie
In unserem Beispiel besteht Peters Ziel darin, einen Apfel zu finden, während er dem Wolf und anderen Hindernissen ausweicht. Dazu kann er sich im Grunde umherbewegen, bis er einen Apfel findet.
In unserem Beispiel wäre Peters Ziel, einen Apfel zu finden, während er den Wolf und andere Hindernisse vermeidet. Dazu kann er im Wesentlichen herumlaufen, bis er einen Apfel findet.
An jeder Position kann er zwischen den folgenden Aktionen wählen: nach oben, nach unten, nach links und nach rechts.
Deshalb kann er an jeder Position zwischen den folgenden Aktionen wählen: oben, unten, links und rechts.
Wir definieren diese Aktionen als ein Wörterbuch und ordnen sie Paaren von entsprechenden Koordinatenänderungen zu. Zum Beispiel würde die Bewegung nach rechts (`R`) einem Paar `(1,0)` entsprechen. (Codeblock 2):
Wir definieren diese Aktionen als ein Wörterbuch und ordnen sie Paaren entsprechender Koordinatenänderungen zu. Zum Beispiel würde das Bewegen nach rechts (`R`) einem Paar `(1,0)` entsprechen. (Codeblock 2):
```python
actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) }
@ -69,46 +69,46 @@ action_idx = { a : i for i,a in enumerate(actions.keys()) }
Zusammengefasst sind die Strategie und das Ziel dieses Szenarios wie folgt:
- **Die Strategie** unseres Agenten (Peter) wird durch eine sogenannte **Policy** definiert. Eine Policy ist eine Funktion, die die Aktion in einem bestimmten Zustand zurückgibt. In unserem Fall wird der Zustand des Problems durch das Spielfeld einschließlich der aktuellen Position des Spielers dargestellt.
- **Die Strategie**, unseres Agenten (Peter) wird durch eine sogenannte **Policy** definiert. Eine Policy ist eine Funktion, die in jedem Zustand die Aktion zurückgibt. In unserem Fall wird der Zustand des Problems durch das Spielfeld repräsentiert, einschließlich der aktuellen Position des Spielers.
- **Das Ziel** des Reinforcement Learning ist es, schließlich eine gute Policy zu erlernen, die es uns ermöglicht, das Problem effizient zu lösen. Als Ausgangspunkt betrachten wir jedoch die einfachste Policy, die als **Random Walk** bezeichnet wird.
- **Das Ziel** des Reinforcement Learning ist es schließlich, eine gute Policy zu lernen, die es uns ermöglicht, das Problem effizient zu lösen. Als Basis betrachten wir die einfachste Strategie, die **random walk** (zufälliger Spaziergang) genannt wird.
## Random Walk
## Zufälliger Spaziergang
Lassen Sie uns zunächst unser Problem lösen, indem wir eine Random-Walk-Strategie implementieren. Beim Random Walk wählen wir zufällig die nächste Aktion aus den erlaubten Aktionen, bis wir den Apfel erreichen (Codeblock 3).
Lassen Sie uns zuerst unser Problem lösen, indem wir eine Zufallsspagat-Strategie implementieren. Mit random walk wählen wir zufällig die nächste Aktion aus den erlaubten Aktionen, bis wir den Apfel erreichen (Codeblock 3).
1. Implementieren Sie den Random Walk mit dem folgenden Code:
1. Implementieren Sie den Zufallsspagat mit dem folgenden Code:
```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 # Anzahl der Schritte
# Anfangsposition setzen
if start_position:
m.human = start_position
else:
m.random_start()
while True:
if m.at() == Board.Cell.apple:
return n # success!
return n # Erfolg!
if m.at() in [Board.Cell.wolf, Board.Cell.water]:
return -1 # eaten by wolf or drowned
return -1 # vom Wolf gefressen oder ertrunken
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) # mache den eigentlichen Zug
break
n+=1
walk(m,random_policy)
```
Der Aufruf von `walk` sollte die Länge des entsprechenden Pfads zurückgeben, die von einem Lauf zum anderen variieren kann.
Der Aufruf von `walk` sollte die Länge des entsprechenden Pfades zurückgeben, die von Lauf zu Lauf variieren kann.
1. Führen Sie das Walk-Experiment mehrmals durch (z. B. 100 Mal) und geben Sie die resultierenden Statistiken aus (Codeblock 4):
1. Führen Sie das Spaziergang-Experiment mehrmals (z.B. 100) durch und geben Sie die Statistik aus (Codeblock 4):
```python
def print_statistics(policy):
@ -125,17 +125,17 @@ Lassen Sie uns zunächst unser Problem lösen, indem wir eine Random-Walk-Strate
print_statistics(random_policy)
```
Beachten Sie, dass die durchschnittliche Länge eines Pfads etwa 30-40 Schritte beträgt, was ziemlich viel ist, wenn man bedenkt, dass die durchschnittliche Entfernung zum nächsten Apfel etwa 5-6 Schritte beträgt.
Beachten Sie, dass die durchschnittliche Pfadlänge bei etwa 30-40 Schritten liegt, was relativ viel ist, wenn man bedenkt, dass die durchschnittliche Entfernung zum nächsten Apfel etwa 5-6 Schritte beträgt.
Sie können auch sehen, wie sich Peter während des Random Walks bewegt:
Sie können auch sehen, wie Peters Bewegung während des Zufallsspaziergangs aussieht:
![Peters Random Walk](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif)
![Peters zufälliger Spaziergang](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif)
## Belohnungsfunktion
Um unsere Policy intelligenter zu machen, müssen wir verstehen, welche Züge "besser" sind als andere. Dazu müssen wir unser Ziel definieren.
Um unsere Policy intelligenter zu machen, müssen wir verstehen, welche Bewegungen "besser" als andere sind. Dazu müssen wir unser Ziel definieren.
Das Ziel kann in Form einer **Belohnungsfunktion** definiert werden, die für jeden Zustand einen Punktwert zurückgibt. Je höher die Zahl, desto besser die Belohnung. (Codeblock 5)
Das Ziel kann durch eine **Belohnungsfunktion** definiert werden, die für jeden Zustand einen Bewertungswert zurückgibt. Je höher die Zahl, desto besser die Belohnungsfunktion. (Codeblock 5)
```python
move_reward = -0.1
@ -154,39 +154,115 @@ def reward(m,pos=None):
return move_reward
```
Eine interessante Eigenschaft von Belohnungsfunktionen ist, dass in den meisten Fällen *eine wesentliche Belohnung erst am Ende des Spiels gegeben wird*. Das bedeutet, dass unser Algorithmus irgendwie "gute" Schritte, die zu einer positiven Belohnung am Ende führen, speichern und deren Bedeutung erhöhen sollte. Ebenso sollten alle Züge, die zu schlechten Ergebnissen führen, entmutigt werden.
Eine interessante Sache an Belohnungsfunktionen ist, dass uns in den meisten Fällen *nur am Ende des Spiels eine bedeutende Belohnung gegeben wird*. Das bedeutet, dass unser Algorithmus irgendwie „gute“ Schritte, die zu einer positiven Belohnung am Ende führen, merken und deren Bedeutung erhöhen sollte. Ebenso sollten alle Züge, die zu schlechten Ergebnissen führen, entmutigt werden.
## Q-Learning
Ein Algorithmus, den wir hier besprechen werden, heißt **Q-Learning**. In diesem Algorithmus wird die Policy durch eine Funktion (oder eine Datenstruktur) definiert, die als **Q-Tabelle** bezeichnet wird. Sie zeichnet die "Güte" jeder Aktion in einem bestimmten Zustand auf.
Ein Algorithmus, den wir hier besprechen werden, heißt **Q-Learning**. In diesem Algorithmus wird die Policy durch eine Funktion (oder Datenstruktur) namens **Q-Tabelle** definiert. Sie zeichnet die „Güte“ jeder Aktion in einem bestimmten Zustand auf.
Die Q-Tabelle wird so genannt, weil es oft praktisch ist, sie als Tabelle oder mehrdimensionales Array darzustellen. Da unser Spielfeld die Dimensionen `Breite` x `Höhe` hat, können wir die Q-Tabelle mit einem numpy-Array der Form `Breite` x `Höhe` x `len(actions)` darstellen: (Codeblock 6)
Sie heißt Q-Tabelle, weil es oft praktisch ist, sie als Tabelle oder mehrdimensionales Array darzustellen. Da unser Spielfeld die Dimensionen `width` x `height` hat, können wir die Q-Tabelle mit einem numpy-Array der Form `width` x `height` x `len(actions)` darstellen: (Codeblock 6)
```python
Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions)
```
Beachten Sie, dass wir alle Werte der Q-Tabelle mit einem gleichen Wert initialisieren, in unserem Fall 0,25. Dies entspricht der "Random-Walk"-Policy, da alle Züge in jedem Zustand gleich gut sind. Wir können die Q-Tabelle an die `plot`-Funktion übergeben, um die Tabelle auf dem Spielfeld zu visualisieren: `m.plot(Q)`.
Beachten Sie, dass wir alle Werte der Q-Tabelle mit dem gleichen Wert initialisieren, in unserem Fall - 0,25. Dies entspricht der „random walk“ Policy, da alle Züge in jedem Zustand gleich gut sind. Wir können die Q-Tabelle an die `plot` Funktion übergeben, um die Tabelle auf dem Spielfeld zu visualisieren: `m.plot(Q)`.
![Peters Umgebung](../../../../8-Reinforcement/1-QLearning/images/env_init.png)
![Peters Umgebung](../../../../translated_images/de/env_init.04e8f26d2d60089e.webp)
In der Mitte jeder Zelle befindet sich ein "Pfeil", der die bevorzugte Bewegungsrichtung anzeigt. Da alle Richtungen gleich sind, wird ein Punkt angezeigt.
In der Mitte jeder Zelle befindet sich ein „Pfeil“, der die bevorzugte Bewegungsrichtung anzeigt. Da alle Richtungen gleich sind, wird ein Punkt angezeigt.
Nun müssen wir die Simulation ausführen, unsere Umgebung erkunden und eine bessere Verteilung der Q-Tabelle-Werte erlernen, die es uns ermöglicht, den Weg zum Apfel viel schneller zu finden.
Jetzt müssen wir die Simulation ausführen, unsere Umgebung erkunden und eine bessere Verteilung der Q-Tabellenwerte erlernen, die es uns ermöglichen wird, den Weg zum Apfel viel schneller zu finden.
## Essenz des Q-Learning: Bellman-Gleichung
## Kern von Q-Learning: Bellman-Gleichung
Sobald wir uns bewegen, hat jede Aktion eine entsprechende Belohnung, d. h. wir könnten theoretisch die nächste Aktion basierend auf der höchsten unmittelbaren Belohnung auswählen. In den meisten Zuständen wird der Zug jedoch nicht unser Ziel, den Apfel zu erreichen, erfüllen, und daher können wir nicht sofort entscheiden, welche Richtung besser ist.
Sobald wir anfangen zu bewegen, hat jede Aktion eine entsprechende Belohnung, d.h. theoretisch könnten wir die nächste Aktion basierend auf der höchsten unmittelbaren Belohnung auswählen. Allerdings wird der Zug in den meisten Zuständen nicht unser Ziel erreichen, den Apfel zu finden, und deshalb können wir nicht sofort entscheiden, welche Richtung besser ist.
> Denken Sie daran, dass nicht das unmittelbare Ergebnis zählt, sondern das Endergebnis, das wir am Ende der Simulation erhalten.
> Denken Sie daran, dass nicht das unmittelbare Ergebnis zählt, sondern das endgültige Ergebnis, das wir am Ende der Simulation erhalten.
Um diese verzögerte Belohnung zu berücksichtigen, müssen wir die Prinzipien der **[dynamischen Programmierung](https://de.wikipedia.org/wiki/Dynamische_Programmierung)** verwenden, die es uns ermöglichen, unser Problem rekursiv zu betrachten.
Angenommen, wir befinden uns jetzt im Zustand *s* und möchten zum nächsten Zustand *s'* wechseln. Indem wir dies tun, erhalten wir die unmittelbare Belohnung *r(s,a)*, die durch die Belohnungsfunktion definiert ist, plus eine zukünftige Belohnung. Wenn wir annehmen, dass unsere Q-Tabelle die "Attraktivität" jeder Aktion korrekt widerspiegelt, dann wählen wir im Zustand *s'* eine Aktion *a*, die dem maximalen Wert von *Q(s',a')* entspricht. Somit wird die bestmögliche zukünftige Belohnung, die wir im Zustand *s* erhalten könnten, durch `max`
Angenommen, wir befinden uns jetzt im Zustand *s* und wollen in den nächsten Zustand *s'* übergehen. Dabei erhalten wir die unmittelbare Belohnung *r(s,a)*, definiert durch die Belohnungsfunktion, plus eine zukünftige Belohnung. Wenn wir annehmen, dass unsere Q-Tabelle korrekt die „Attraktivität“ jeder Aktion widerspiegelt, wählen wir im Zustand *s'* eine Aktion *a* aus, die dem maximalen Wert von *Q(s',a')* entspricht. Somit ist die bestmögliche zukünftige Belohnung, die wir im Zustand *s* erhalten könnten, definiert als `max`<sub>a'</sub>*Q(s',a')* (das Maximum hier wird über alle möglichen Aktionen *a'* im Zustand *s'* berechnet).
## Überprüfung der Richtlinie
Dies ergibt die **Bellman-Gleichung** zur Berechnung des Wertes der Q-Tabelle im Zustand *s* bei Aktion *a*:
Da die Q-Tabelle die "Attraktivität" jeder Aktion in jedem Zustand auflistet, ist es recht einfach, sie zu nutzen, um eine effiziente Navigation in unserer Welt zu definieren. Im einfachsten Fall können wir die Aktion auswählen, die dem höchsten Wert in der Q-Tabelle entspricht: (Codeblock 9)
<img src="../../../../translated_images/de/bellman-equation.7c0c4c722e5a6b7c.webp"/>
Hier ist γ der sogenannte **Discount-Faktor**, der bestimmt, in welchem Maße Sie die aktuelle Belohnung der zukünftigen vorziehen oder umgekehrt bewerten sollten.
## Lernalgorithmus
Angesichts der obigen Gleichung können wir nun Pseudocode für unseren Lernalgorithmus schreiben:
* Initialisiere Q-Tabelle Q mit gleichen Werten für alle Zustände und Aktionen
* Setze Lernrate α ← 1
* Wiederhole die Simulation viele Male
1. Starte an einer zufälligen Position
1. Wiederhole
1. Wähle eine Aktion *a* im Zustand *s*
2. Führe die Aktion aus, indem du in einen neuen Zustand *s'* wechselst
3. Wenn Endbedingung des Spiels erreicht wird oder die Gesamtbelohnung zu niedrig ist - beende die Simulation
4. Berechne die Belohnung *r* im neuen Zustand
5. Aktualisiere die Q-Funktion gemäß Bellman-Gleichung: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ max<sub>a'</sub>Q(s',a'))*
6. *s* ← *s'*
7. Aktualisiere die Gesamtbelohnung und verringere α.
## Ausnutzen vs. erkunden
Im obigen Algorithmus haben wir nicht genau angegeben, wie wir bei Schritt 2.1 die Aktion auswählen sollen. Wenn wir die Aktion zufällig wählen, werden wir die Umgebung zufällig **erkunden** und es ist ziemlich wahrscheinlich, dass wir oft sterben und Bereiche erkunden, in die wir normalerweise nicht gehen würden. Eine alternative Herangehensweise wäre, die Q-Tabellenwerte, die wir bereits kennen, **auszunutzen** und somit die beste Aktion (mit höherem Q-Tabellenwert) im Zustand *s* zu wählen. Dies würde uns jedoch daran hindern, andere Zustände zu erkunden, und es ist wahrscheinlich, dass wir nicht die optimale Lösung finden.
Deshalb ist der beste Ansatz, ein Gleichgewicht zwischen Erkundung und Ausnutzung zu finden. Dies kann erreicht werden, indem man die Aktion im Zustand *s* mit Wahrscheinlichkeiten proportional zu den Werten in der Q-Tabelle auswählt. Anfangs, wenn alle Q-Tabelle Werte gleich sind, entspricht dies einer zufälligen Auswahl, aber je mehr wir über unsere Umgebung lernen, desto wahrscheinlicher ist es, dass wir der optimalen Route folgen und gleichzeitig dem Agenten erlauben, ab und zu einen unerforschten Weg zu wählen.
## Python-Implementierung
Wir sind nun bereit, den Lernalgorithmus zu implementieren. Bevor wir das tun, benötigen wir auch eine Funktion, die beliebige Zahlen in der Q-Tabelle in einen Wahrscheinlichkeitsvektor für die entsprechenden Aktionen umwandelt.
1. Erstellen Sie eine Funktion `probs()`:
```python
def probs(v,eps=1e-4):
v = v-v.min()+eps
v = v/v.sum()
return v
```
Wir fügen dem ursprünglichen Vektor einige `eps` hinzu, um eine Division durch 0 im Anfangsfall zu vermeiden, wenn alle Komponenten des Vektors identisch sind.
Führen Sie den Lernalgorithmus für 5000 Experimente, auch **Epochen** genannt, aus: (Codeblock 8)
```python
for epoch in range(5000):
# Startpunkt wählen
m.random_start()
# Beginnen Sie die Reise
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) # Wir erlauben dem Spieler, sich außerhalb des Spielfelds zu bewegen, was die Folge beendet
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
```
Nach Ausführung dieses Algorithmus sollte die Q-Tabelle mit Werten aktualisiert sein, die die Attraktivität verschiedener Aktionen in jedem Schritt definieren. Wir können versuchen, die Q-Tabelle zu visualisieren, indem wir in jeder Zelle einen Vektor zeichnen, der in die gewünschte Bewegungsrichtung zeigt. Zur Vereinfachung zeichnen wir anstelle eines Pfeilkopfes einen kleinen Kreis.
<img src="../../../../translated_images/de/learned.ed28bcd8484b5287.webp"/>
## Überprüfung der Policy
Da die Q-Tabelle die „Attraktivität“ jeder Aktion in jedem Zustand auflistet, ist es recht einfach, sie zur Definition der effizienten Navigation in unserer Welt zu verwenden. Im einfachsten Fall können wir die Aktion auswählen, die dem höchsten Q-Tabellenwert entspricht: (Codeblock 9)
```python
def qpolicy_strict(m):
@ -198,17 +274,18 @@ def qpolicy_strict(m):
walk(m,qpolicy_strict)
```
> Wenn Sie den obigen Code mehrmals ausprobieren, werden Sie möglicherweise feststellen, dass er manchmal "hängt" und Sie die STOP-Taste im Notebook drücken müssen, um ihn zu unterbrechen. Dies passiert, weil es Situationen geben kann, in denen zwei Zustände sich gegenseitig in Bezug auf den optimalen Q-Wert "zeigen", wodurch der Agent zwischen diesen Zuständen endlos hin- und herwechselt.
> Wenn du den oben stehenden Code mehrere Male ausprobierst, kann es vorkommen, dass er manchmal „hängen bleibt“ und du den STOP-Knopf im Notebook drücken musst, um ihn zu unterbrechen. Das passiert, weil es Situationen geben kann, in denen zwei Zustände sich in Bezug auf den optimalen Q-Wert „gegenseitig ansprechen“, sodass der Agent zwischen diesen Zuständen unendlich hin- und her wandert.
## 🚀Herausforderung
> **Aufgabe 1:** Ändern Sie die Funktion `walk`, um die maximale Pfadlänge auf eine bestimmte Anzahl von Schritten (z. B. 100) zu begrenzen, und beobachten Sie, wie der obige Code diesen Wert von Zeit zu Zeit zurückgibt.
> **Aufgabe 1:** Ändere die Funktion `walk` so ab, dass die maximale Pfadlänge auf eine bestimmte Anzahl von Schritten (zum Beispiel 100) begrenzt wird, und beobachte, dass der oben stehende Code von Zeit zu Zeit diesen Wert zurückgibt.
> **Aufgabe 2:** Ändern Sie die Funktion `walk` so, dass sie nicht an Orte zurückkehrt, an denen sie zuvor bereits war. Dies verhindert, dass `walk` in einer Schleife hängen bleibt. Allerdings kann der Agent dennoch in einer Position "gefangen" sein, aus der er nicht entkommen kann.
> **Aufgabe 2:** Ändere die Funktion `walk` so, dass sie nicht an Orte zurückkehrt, an denen sie bereits zuvor war. Das verhindert, dass `walk` in einer Schleife läuft, jedoch kann der Agent trotzdem an einem Ort „gefangen“ sein, aus dem er nicht entkommen kann.
## Navigation
Eine bessere Navigationsstrategie wäre die, die wir während des Trainings verwendet haben, die Ausnutzung und Erkundung kombiniert. In dieser Strategie wählen wir jede Aktion mit einer bestimmten Wahrscheinlichkeit aus, die proportional zu den Werten in der Q-Tabelle ist. Diese Strategie kann dazu führen, dass der Agent zu einer Position zurückkehrt, die er bereits erkundet hat. Wie Sie jedoch aus dem untenstehenden Code sehen können, führt sie zu einem sehr kurzen durchschnittlichen Pfad zur gewünschten Position (denken Sie daran, dass `print_statistics` die Simulation 100 Mal ausführt): (Codeblock 10)
Eine bessere Navigationsstrategie wäre die, die wir während des Trainings verwendet haben, und die Ausnutzung und Erkundung kombiniert. Bei dieser Strategie wählen wir jede Aktion mit einer gewissen Wahrscheinlichkeit, die proportional zu den Werten in der Q-Tabelle ist. Diese Strategie kann dazu führen, dass der Agent zu einer bereits erkundeten Position zurückkehrt, aber wie du im folgenden Code sehen kannst, führt sie zu einem sehr kurzen durchschnittlichen Pfad zur gewünschten Position (denk daran, dass `print_statistics` die Simulation 100 mal ausführt): (Codeblock 10)
```python
def qpolicy(m):
@ -220,28 +297,32 @@ def qpolicy(m):
print_statistics(qpolicy)
```
Nach Ausführung dieses Codes sollten Sie eine deutlich kürzere durchschnittliche Pfadlänge als zuvor erhalten, im Bereich von 3-6.
Nachdem du diesen Code ausgeführt hast, solltest du eine viel kleinere durchschnittliche Pfadlänge als zuvor erhalten, etwa im Bereich von 3-6.
## Untersuchung des Lernprozesses
Wie bereits erwähnt, ist der Lernprozess ein Gleichgewicht zwischen der Erkundung und der Nutzung des gewonnenen Wissens über die Struktur des Problemraums. Wir haben gesehen, dass die Ergebnisse des Lernens (die Fähigkeit, einem Agenten zu helfen, einen kurzen Weg zum Ziel zu finden) sich verbessert haben. Es ist jedoch auch interessant zu beobachten, wie sich die durchschnittliche Pfadlänge während des Lernprozesses verhält:
Wie wir bereits erwähnt haben, ist der Lernprozess ein Gleichgewicht zwischen Erkundung und Ausnutzung des gewonnenen Wissens über die Struktur des Problemraums. Wir haben gesehen, dass sich die Lernergebnisse (die Fähigkeit, einem Agenten zu helfen, einen kurzen Weg zum Ziel zu finden) verbessert haben, aber es ist auch interessant zu beobachten, wie sich die durchschnittliche Pfadlänge während des Lernprozesses verhält:
<img src="../../../../translated_images/de/lpathlen1.0534784add58d4eb.webp"/>
Die Erkenntnisse lassen sich wie folgt zusammenfassen:
Die Erkenntnisse lassen sich zusammenfassen als:
- **Durchschnittliche Pfadlänge nimmt zu**. Was wir hier sehen, ist, dass die durchschnittliche Pfadlänge zunächst zunimmt. Dies liegt wahrscheinlich daran, dass wir, wenn wir nichts über die Umgebung wissen, dazu neigen, in schlechten Zuständen, wie Wasser oder bei einem Wolf, gefangen zu werden. Wenn wir mehr lernen und dieses Wissen nutzen, können wir die Umgebung länger erkunden, wissen aber immer noch nicht genau, wo sich die Äpfel befinden.
- **Die durchschnittliche Pfadlänge nimmt zu.** Was wir hier sehen, ist, dass zuerst die durchschnittliche Pfadlänge zunimmt. Wahrscheinlich liegt das daran, dass wir am Anfang nichts über die Umgebung wissen und daher wahrscheinlich in schlechten Zuständen stecken bleiben, etwa Wasser oder Wolf. Wenn wir mehr lernen und dieses Wissen anwenden, können wir die Umgebung länger erkunden, aber wir wissen noch nicht genau, wo die Äpfel sind.
- **Pfadlänge nimmt ab, je mehr wir lernen**. Sobald wir genug gelernt haben, wird es für den Agenten einfacher, das Ziel zu erreichen, und die Pfadlänge beginnt abzunehmen. Wir sind jedoch weiterhin offen für Erkundungen, sodass wir oft vom besten Weg abweichen und neue Optionen erkunden, was den Pfad länger als optimal macht.
- **Die Pfadlänge nimmt ab, wenn wir mehr lernen.** Sobald wir genug gelernt haben, wird es für den Agenten einfacher, das Ziel zu erreichen, und die Pfadlänge beginnt zu sinken. Wir bleiben jedoch offen für Erkundungen, weshalb wir oft vom besten Weg abweichen und neue Optionen prüfen, was den Weg länger als optimal macht.
- **Länge nimmt abrupt zu**. Was wir auf diesem Diagramm ebenfalls beobachten, ist, dass die Länge an einem Punkt abrupt zunimmt. Dies zeigt die stochastische Natur des Prozesses und dass wir die Q-Tabellen-Koeffizienten durch Überschreiben mit neuen Werten "verderben" können. Dies sollte idealerweise minimiert werden, indem die Lernrate verringert wird (zum Beispiel passen wir gegen Ende des Trainings die Q-Tabellen-Werte nur noch geringfügig an).
- **Die Länge nimmt plötzlich zu.** Was wir ebenfalls auf dem Diagramm beobachten, ist, dass die Länge an einem Punkt plötzlich stark angestiegen ist. Das zeigt die stochastische Natur des Prozesses und dass wir die Q-Tabellen-Koeffizienten gelegentlich „versauen“ können, indem wir sie mit neuen Werten überschreiben. Das sollte idealerweise durch Verringerung der Lernrate minimiert werden (beispielsweise passen wir gegen Ende des Trainings die Q-Tabellen-Werte nur noch mit kleinen Schritten an).
Insgesamt ist es wichtig zu bedenken, dass der Erfolg und die Qualität des Lernprozesses stark von Parametern wie Lernrate, Abnahme der Lernrate und Diskontierungsfaktor abhängen. Diese werden oft als **Hyperparameter** bezeichnet, um sie von **Parametern** zu unterscheiden, die wir während des Trainings optimieren (zum Beispiel Q-Tabellen-Koeffizienten). Der Prozess, die besten Werte für die Hyperparameter zu finden, wird als **Hyperparameter-Optimierung** bezeichnet und verdient ein eigenes Thema.
Insgesamt ist es wichtig zu bedenken, dass Erfolg und Qualität des Lernprozesses maßgeblich von Parametern abhängen, etwa Lernrate, Lernratenabnahme und Diskontfaktor. Diese werden oft als **Hyperparameter** bezeichnet, um sie von **Parametern** zu unterscheiden, die während des Trainings optimiert werden (zum Beispiel Q-Tabellen-Koeffizienten). Der Prozess, die besten Werte für Hyperparameter zu finden, heißt **Hyperparameter-Optimierung** und verdient ein eigenes Thema.
## [Quiz nach der Vorlesung](https://ff-quizzes.netlify.app/en/ml/)
## Aufgabe
## Aufgabe
[Eine realistischere Welt](assignment.md)
---
**Haftungsausschluss**:
Dieses Dokument wurde mithilfe des KI-Übersetzungsdienstes [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als maßgebliche Quelle betrachtet werden. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die sich aus der Nutzung dieser Übersetzung ergeben.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Haftungsausschluss**:
Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Bei kritischen Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,12 +1,32 @@
# CartPole Skating
Das Problem, das wir in der vorherigen Lektion gelöst haben, mag wie ein Spielzeugproblem erscheinen, das in realen Szenarien nicht wirklich anwendbar ist. Das ist jedoch nicht der Fall, da viele reale Probleme dieses Szenario teilen darunter das Spielen von Schach oder Go. Sie sind ähnlich, weil wir auch ein Brett mit bestimmten Regeln und einen **diskreten Zustand** haben.
## [Vorlesungsvorquiz](https://ff-quizzes.netlify.app/en/ml/)
## Einführung
In dieser Lektion wenden wir die gleichen Prinzipien des Q-Learning auf ein Problem mit **kontinuierlichem Zustand** an, d.h. einem Zustand, der durch eine oder mehrere reelle Zahlen gegeben ist. Wir beschäftigen uns mit folgendem Problem:
> **Problem**: Wenn Peter vor dem Wolf fliehen will, muss er sich schneller bewegen können. Wir werden sehen, wie Peter mit Q-Learning das Skaten lernen kann, insbesondere, wie man das Gleichgewicht hält.
![Die große Flucht!](../../../../translated_images/de/escape.18862db9930337e3.webp)
> Peter und seine Freunde sind kreativ, um vor dem Wolf zu entkommen! Bild von [Jen Looper](https://twitter.com/jenlooper)
Wir verwenden eine vereinfachte Version des Balancierens, bekannt als **CartPole**-Problem. In der Cartpole-Welt haben wir einen horizontalen Schlitten, der sich nach links oder rechts bewegen kann, und das Ziel ist es, einen vertikalen Stab auf dem Schlitten zu balancieren.
<img alt="ein Cartpole" src="../../../../translated_images/de/cartpole.b5609cc0494a14f7.webp" width="200"/>
## Voraussetzungen
In dieser Lektion verwenden wir eine Bibliothek namens **OpenAI Gym**, um verschiedene **Umgebungen** zu simulieren. Du kannst den Code dieser Lektion lokal ausführen (z. B. in Visual Studio Code), wobei die Simulation in einem neuen Fenster geöffnet wird. Wenn du den Code online ausführst, musst du möglicherweise einige Anpassungen vornehmen, wie [hier](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) beschrieben.
In dieser Lektion verwenden wir eine Bibliothek namens **OpenAI Gym**, um verschiedene **Umgebungen** zu simulieren. Du kannst den Code dieser Lektion lokal ausführen (z.B. aus Visual Studio Code), in diesem Fall öffnet sich die Simulation in einem neuen Fenster. Wenn du den Code online ausführst, sind eventuell einige Anpassungen erforderlich, wie [hier](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) beschrieben.
## OpenAI Gym
In der vorherigen Lektion wurden die Spielregeln und der Zustand durch die `Board`-Klasse definiert, die wir selbst erstellt haben. Hier verwenden wir eine spezielle **Simulationsumgebung**, die die Physik hinter der balancierenden Stange simuliert. Eine der beliebtesten Simulationsumgebungen für das Training von Reinforcement-Learning-Algorithmen ist das [Gym](https://gym.openai.com/), das von [OpenAI](https://openai.com/) gepflegt wird. Mit diesem Gym können wir verschiedene **Umgebungen** erstellen, von einer CartPole-Simulation bis hin zu Atari-Spielen.
In der vorherigen Lektion wurden die Spielregeln und der Zustand von der selbst definierten `Board`-Klasse angegeben. Hier verwenden wir eine spezielle **Simulationsumgebung**, die die Physik hinter dem balancierenden Stab simuliert. Eine der beliebtesten Simulationsumgebungen zum Trainieren von Reinforcement-Learning-Algorithmen heißt [Gym](https://gym.openai.com/), das von [OpenAI](https://openai.com/) gepflegt wird. Mit diesem Gym können wir verschiedene **Umgebungen** erstellen von einer Cartpole-Simulation bis zu Atari-Spielen.
> **Hinweis**: Weitere Umgebungen von OpenAI Gym findest du [hier](https://gym.openai.com/envs/#classic_control).
> **Hinweis**: Andere verfügbare OpenAI Gym-Umgebungen findest du [hier](https://gym.openai.com/envs/#classic_control).
Zuerst installieren wir das Gym und importieren die benötigten Bibliotheken (Codeblock 1):
@ -20,13 +40,13 @@ import numpy as np
import random
```
## Übung - Initialisiere eine CartPole-Umgebung
## Übung Initialisiere eine Cartpole-Umgebung
Um mit dem CartPole-Balancierproblem zu arbeiten, müssen wir die entsprechende Umgebung initialisieren. Jede Umgebung ist mit einem:
Um mit dem Cartpole-Balancierproblem zu arbeiten, müssen wir die entsprechende Umgebung initialisieren. Jede Umgebung ist mit einem:
- **Beobachtungsraum** verbunden, der die Struktur der Informationen definiert, die wir von der Umgebung erhalten. Beim CartPole-Problem erhalten wir die Position der Stange, die Geschwindigkeit und einige andere Werte.
- **Beobachtungsraum** verknüpft, der die Struktur der Informationen definiert, die wir von der Umgebung erhalten. Für das Cartpole-Problem erhalten wir Position des Stabs, Geschwindigkeit und einige andere Werte.
- **Aktionsraum**, der mögliche Aktionen definiert. In unserem Fall ist der Aktionsraum diskret und besteht aus zwei Aktionen - **links** und **rechts**. (Codeblock 2)
- **Aktionsraum**, der mögliche Aktionen definiert. In unserem Fall ist der Aktionsraum diskret und besteht aus zwei Aktionen **links** und **rechts**. (Codeblock 2)
1. Um zu initialisieren, gib den folgenden Code ein:
@ -37,11 +57,11 @@ Um mit dem CartPole-Balancierproblem zu arbeiten, müssen wir die entsprechende
print(env.action_space.sample())
```
Um zu sehen, wie die Umgebung funktioniert, führen wir eine kurze Simulation für 100 Schritte durch. Bei jedem Schritt geben wir eine der Aktionen vor - in dieser Simulation wählen wir zufällig eine Aktion aus dem `action_space`.
Um zu sehen, wie die Umgebung funktioniert, führen wir eine kurze Simulation für 100 Schritte durch. Bei jedem Schritt geben wir eine der Aktionen vor in dieser Simulation wählen wir die Aktion zufällig aus dem `action_space` aus.
1. Führe den folgenden Code aus und sieh dir an, was passiert.
1. Führe den folgenden Code aus und schau, was passiert.
Denke daran, dass es bevorzugt wird, diesen Code in einer lokalen Python-Installation auszuführen! (Codeblock 3)
Es ist empfehlenswert, diesen Code in einer lokalen Python-Installation auszuführen! (Codeblock 3)
```python
env.reset()
@ -54,9 +74,9 @@ Um zu sehen, wie die Umgebung funktioniert, führen wir eine kurze Simulation f
Du solltest etwas Ähnliches wie dieses Bild sehen:
![nicht balancierendes CartPole](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif)
![nicht balancierender Cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif)
1. Während der Simulation müssen wir Beobachtungen erhalten, um zu entscheiden, wie wir handeln sollen. Tatsächlich gibt die `step`-Funktion aktuelle Beobachtungen, eine Belohnungsfunktion und ein `done`-Flag zurück, das anzeigt, ob es sinnvoll ist, die Simulation fortzusetzen oder nicht: (Codeblock 4)
1. Während der Simulation müssen wir Beobachtungen erhalten, um zu entscheiden, wie wir handeln. Die Schrittfunktion gibt tatsächlich aktuelle Beobachtungen, eine Belohnungsfunktion und das Done-Flag zurück, das anzeigt, ob es sinnvoll ist, die Simulation fortzusetzen oder nicht: (Codeblock 4)
```python
env.reset()
@ -69,7 +89,7 @@ Um zu sehen, wie die Umgebung funktioniert, führen wir eine kurze Simulation f
env.close()
```
Du wirst etwas Ähnliches wie dies in der Notebook-Ausgabe sehen:
Am Ende siehst du etwas Ähnliches in der Ausgabe des Notebooks:
```text
[ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0
@ -82,36 +102,36 @@ Um zu sehen, wie die Umgebung funktioniert, führen wir eine kurze Simulation f
[ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0
```
Der Beobachtungsvektor, der bei jedem Schritt der Simulation zurückgegeben wird, enthält die folgenden Werte:
- Position des Wagens
- Geschwindigkeit des Wagens
- Winkel der Stange
- Rotationsrate der Stange
Der Beobachtungsvektor, der bei jedem Simulationsschritt zurückgegeben wird, enthält die folgenden Werte:
- Position des Schlittens
- Geschwindigkeit des Schlittens
- Winkel des Stabs
- Rotationsrate des Stabs
1. Ermittle den minimalen und maximalen Wert dieser Zahlen: (Codeblock 5)
1. Erhalte Min- und Max-Werte dieser Zahlen: (Codeblock 5)
```python
print(env.observation_space.low)
print(env.observation_space.high)
```
Du wirst auch feststellen, dass der Belohnungswert bei jedem Simulationsschritt immer 1 ist. Das liegt daran, dass unser Ziel darin besteht, so lange wie möglich zu überleben, d. h. die Stange so lange wie möglich in einer einigermaßen vertikalen Position zu halten.
Du wirst auch bemerken, dass der Belohnungswert bei jedem Simulationsschritt immer 1 ist. Das liegt daran, dass unser Ziel ist, so lange wie möglich zu überleben, d.h. den Stab für die längste Zeit in einer einigermaßen vertikalen Position zu halten.
✅ Tatsächlich gilt die CartPole-Simulation als gelöst, wenn wir es schaffen, eine durchschnittliche Belohnung von 195 über 100 aufeinanderfolgende Versuche zu erreichen.
✅ Tatsächlich gilt die CartPole-Simulation als gelöst, wenn wir eine durchschnittliche Belohnung von 195 über 100 aufeinanderfolgende Versuche erreichen.
## Zustandsdiskretisierung
Beim Q-Learning müssen wir eine Q-Tabelle erstellen, die definiert, was in jedem Zustand zu tun ist. Um dies tun zu können, muss der Zustand **diskret** sein, genauer gesagt, er sollte eine endliche Anzahl diskreter Werte enthalten. Daher müssen wir unsere Beobachtungen irgendwie **diskretisieren**, indem wir sie auf eine endliche Menge von Zuständen abbilden.
Im Q-Learning müssen wir eine Q-Tabelle erstellen, die definiert, was in jedem Zustand zu tun ist. Um dies tun zu können, muss der Zustand **diskret** sein, genauer gesagt, er sollte eine endliche Anzahl diskreter Werte enthalten. Deshalb müssen wir unsere Beobachtungen irgendwie **diskretisieren**, indem wir sie auf eine endliche Menge von Zuständen abbilden.
Es gibt einige Möglichkeiten, dies zu tun:
Es gibt einige Methoden, wie wir das tun können:
- **In Bins aufteilen**. Wenn wir das Intervall eines bestimmten Wertes kennen, können wir dieses Intervall in eine Anzahl von **Bins** aufteilen und dann den Wert durch die Bin-Nummer ersetzen, zu der er gehört. Dies kann mit der numpy-Methode [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) durchgeführt werden. In diesem Fall kennen wir die Zustandsgröße genau, da sie von der Anzahl der Bins abhängt, die wir für die Digitalisierung auswählen.
- **In Bins unterteilen**. Wenn wir das Intervall eines bestimmten Werts kennen, können wir dieses Intervall in mehrere **Bins** unterteilen und dann den Wert durch die Bin-Nummer ersetzen, zu der er gehört. Dies kann mit der numpy-Methode [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) erfolgen. So wissen wir genau die Größe des Zustands, da sie von der Anzahl der Bins abhängt, die wir für die Digitalisierung auswählen.
✅ Wir können lineare Interpolation verwenden, um Werte auf ein endliches Intervall zu bringen (z.B. von -20 bis 20) und dann die Zahlen durch Runden in Ganzzahlen umwandeln. Das gibt uns weniger Kontrolle über die Größe des Zustands, insbesondere wenn wir die genauen Bereiche der Eingabewerte nicht kennen. Zum Beispiel haben 2 von 4 Werten in unserem Fall keine obere/untere Grenze, was zu einer unendlichen Anzahl von Zuständen führen kann.
✅ Wir können lineare Interpolation verwenden, um Werte auf ein endliches Intervall (z. B. von -20 bis 20) zu bringen, und dann Zahlen durch Runden in ganze Zahlen umwandeln. Dies gibt uns etwas weniger Kontrolle über die Größe des Zustands, insbesondere wenn wir die genauen Bereiche der Eingabewerte nicht kennen. Zum Beispiel haben in unserem Fall 2 von 4 Werten keine oberen/unteren Grenzen, was zu einer unendlichen Anzahl von Zuständen führen kann.
In unserem Beispiel wählen wir den zweiten Ansatz. Wie du später bemerken wirst, trotz undefinierter Ober-/Untergrenzen nehmen diese Werte nur selten Werte außerhalb bestimmter endlicher Intervalle an, sodass Zustände mit extremen Werten sehr selten sind.
In unserem Beispiel verwenden wir den zweiten Ansatz. Wie du später feststellen wirst, nehmen diese Werte trotz undefinierter oberer/unterer Grenzen selten Werte außerhalb bestimmter endlicher Intervalle an, sodass Zustände mit extremen Werten sehr selten sein werden.
1. Hier ist die Funktion, die die Beobachtung aus unserem Modell nimmt und ein Tupel aus 4 ganzzahligen Werten erzeugt: (Codeblock 6)
1. Hier ist die Funktion, die die Beobachtung unseres Modells entgegennimmt und ein Tupel mit 4 ganzzahligen Werten zurückgibt: (Codeblock 6)
```python
def discretize(x):
@ -126,17 +146,17 @@ In unserem Beispiel verwenden wir den zweiten Ansatz. Wie du später feststellen
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)] # Werteintervalle für jeden Parameter
nbins = [20,20,10,10] # Anzahl der Klassen für jeden Parameter
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. Lass uns nun eine kurze Simulation durchführen und diese diskreten Umgebungswerte beobachten. Probiere gerne sowohl `discretize` als auch `discretize_bins` aus und sieh, ob es einen Unterschied gibt.
1. Lass uns nun eine kurze Simulation durchführen und diese diskreten Umweltwerte beobachten. Probiere gerne beide `discretize` und `discretize_bins` aus und schau, ob es Unterschiede gibt.
`discretize_bins` gibt die Bin-Nummer zurück, die bei 0 beginnt. Für Eingabewerte um 0 gibt es daher die Zahl aus der Mitte des Intervalls (10) zurück. Bei `discretize` haben wir uns nicht um den Bereich der Ausgabewerte gekümmert, sodass sie negativ sein können, und 0 entspricht 0. (Codeblock 8)
`discretize_bins` gibt die Bin-Nummer zurück, die Null-basiert ist. Für Werte der Eingangsvariablen um 0 gibt es also die Zahl aus der Mitte des Intervalls (10) zurück. In `discretize` haben wir uns nicht um den Bereich der Ausgabewerte gekümmert, sodass sie negativ sein können, der Zustandswert ist nicht verschoben, und 0 entspricht 0. (Codeblock 8)
```python
env.reset()
@ -150,15 +170,15 @@ In unserem Beispiel verwenden wir den zweiten Ansatz. Wie du später feststellen
env.close()
```
✅ Kommentiere die Zeile, die mit `env.render` beginnt, aus, wenn du sehen möchtest, wie die Umgebung ausgeführt wird. Andernfalls kannst du sie im Hintergrund ausführen, was schneller ist. Wir werden diese "unsichtbare" Ausführung während unseres Q-Learning-Prozesses verwenden.
✅ Kommentiere die Zeile, die mit `env.render` beginnt, aus, wenn du sehen möchtest, wie die Umgebung ausgeführt wird. Ansonsten kannst du sie im Hintergrund ausführen lassen, was schneller ist. Diese „unsichtbare“ Ausführung verwenden wir während unseres Q-Learning-Prozesses.
## Die Struktur der Q-Tabelle
In unserer vorherigen Lektion war der Zustand ein einfaches Zahlenpaar von 0 bis 8, und daher war es praktisch, die Q-Tabelle durch einen numpy-Tensor mit einer Form von 8x8x2 darzustellen. Wenn wir die Bins-Diskretisierung verwenden, ist die Größe unseres Zustandsvektors ebenfalls bekannt, sodass wir denselben Ansatz verwenden und den Zustand durch ein Array der Form 20x20x10x10x2 darstellen können (hier ist 2 die Dimension des Aktionsraums, und die ersten Dimensionen entsprechen der Anzahl der Bins, die wir für jeden der Parameter im Beobachtungsraum ausgewählt haben).
In unserer vorherigen Lektion war der Zustand ein einfaches Zahlenpaar von 0 bis 8, somit war es praktisch, die Q-Tabelle als numpy-Tensor mit der Form 8x8x2 darzustellen. Wenn wir Bins-Diskretisierung verwenden, kennen wir auch die Größe unseres Zustandsvektors, sodass wir denselben Ansatz verwenden können und den Zustand als Array mit der Form 20x20x10x10x2 darstellen (hier ist 2 die Dimension des Aktionsraums, und die ersten Dimensionen entsprechen der Anzahl der Bins, die wir für jeden Parameter im Beobachtungsraum ausgewählt haben).
Manchmal sind jedoch die genauen Dimensionen des Beobachtungsraums nicht bekannt. Im Fall der `discretize`-Funktion können wir uns nie sicher sein, dass unser Zustand innerhalb bestimmter Grenzen bleibt, da einige der ursprünglichen Werte nicht begrenzt sind. Daher verwenden wir einen etwas anderen Ansatz und stellen die Q-Tabelle durch ein Wörterbuch dar.
Manchmal sind die genauen Dimensionen des Beobachtungsraums jedoch nicht bekannt. Im Fall der Funktion `discretize` können wir nie sicher sein, dass unser Zustand innerhalb bestimmter Grenzen bleibt, weil einige der ursprünglichen Werte nicht begrenzt sind. Deshalb verwenden wir einen etwas anderen Ansatz und stellen die Q-Tabelle als Dictionary dar.
1. Verwende das Paar *(state, action)* als Schlüssel des Wörterbuchs, und der Wert würde dem Eintrag der Q-Tabelle entsprechen. (Codeblock 9)
1. Verwende das Paar *(Zustand, Aktion)* als Schlüssel im Dictionary, und der Wert entspricht dem Eintrag in der Q-Tabelle. (Codeblock 9)
```python
Q = {}
@ -168,38 +188,38 @@ Manchmal sind jedoch die genauen Dimensionen des Beobachtungsraums nicht bekannt
return [Q.get((state,a),0) for a in actions]
```
Hier definieren wir auch eine Funktion `qvalues()`, die eine Liste von Q-Tabellenwerten für einen gegebenen Zustand zurückgibt, die allen möglichen Aktionen entspricht. Wenn der Eintrag nicht in der Q-Tabelle vorhanden ist, geben wir standardmäßig 0 zurück.
Hier definieren wir auch eine Funktion `qvalues()`, die eine Liste der Q-Tabellenwerte für einen gegebenen Zustand zurückgibt, die allen möglichen Aktionen entsprechen. Wenn der Eintrag nicht in der Q-Tabelle vorhanden ist, geben wir als Standardwert 0 zurück.
## Lass uns mit Q-Learning beginnen
## Starten wir mit Q-Learning
Jetzt sind wir bereit, Peter das Balancieren beizubringen!
Nun sind wir bereit, Peter das Balancieren beizubringen!
1. Zuerst setzen wir einige Hyperparameter: (Codeblock 10)
```python
# hyperparameters
# Hyperparameter
alpha = 0.3
gamma = 0.9
epsilon = 0.90
```
Hier ist `alpha` die **Lernrate**, die definiert, in welchem Ausmaß wir die aktuellen Werte der Q-Tabelle bei jedem Schritt anpassen sollten. In der vorherigen Lektion haben wir mit 1 begonnen und dann `alpha` während des Trainings auf niedrigere Werte reduziert. In diesem Beispiel halten wir es der Einfachheit halber konstant, und du kannst später mit der Anpassung der `alpha`-Werte experimentieren.
`gamma` ist der **Abzinsungsfaktor**, der zeigt, in welchem Ausmaß wir zukünftige Belohnungen gegenüber aktuellen Belohnungen priorisieren sollten.
Hier ist `alpha` die **Lernrate**, die angibt, in welchem Ausmaß wir die aktuellen Werte der Q-Tabelle bei jedem Schritt anpassen sollten. In der vorherigen Lektion haben wir mit 1 begonnen und dann `alpha` während des Trainings verringert. In diesem Beispiel halten wir sie der Einfachheit halber konstant, du kannst aber später experimentieren und `alpha`-Werte anpassen.
`epsilon` ist der **Explorations-/Exploiterungsfaktor**, der bestimmt, ob wir Exploration der Exploitation vorziehen sollten oder umgekehrt. In unserem Algorithmus wählen wir in `epsilon` Prozent der Fälle die nächste Aktion entsprechend den Q-Tabellenwerten aus, und in den verbleibenden Fällen führen wir eine zufällige Aktion aus. Dies ermöglicht es uns, Bereiche des Suchraums zu erkunden, die wir noch nie zuvor gesehen haben.
`gamma` ist der **Diskontierungsfaktor**, der zeigt, inwieweit zukünftige Belohnungen gegenüber aktuellen belohnt werden.
✅ In Bezug auf das Balancieren - das Auswählen einer zufälligen Aktion (Exploration) würde wie ein zufälliger Stoß in die falsche Richtung wirken, und die Stange müsste lernen, wie sie das Gleichgewicht aus diesen "Fehlern" wiederherstellt.
`epsilon` ist der **Explorations-/Exploitation-Faktor**, der bestimmt, ob wir Exploration der Exploitation vorziehen oder umgekehrt. In unserem Algorithmus wählen wir in `epsilon` Prozent der Fälle die nächste Aktion basierend auf den Q-Tabellenwerten, und in den restlichen Fällen führen wir eine zufällige Aktion aus. So erkunden wir Bereiche des Suchraums, die wir noch nicht gesehen haben.
### Den Algorithmus verbessern
✅ Beim Balancieren entspricht die Wahl einer zufälligen Aktion (Exploration) einem zufälligen Schlag in die falsche Richtung, und der Stab muss lernen, das Gleichgewicht aus diesen „Fehlern“ wiederherzustellen.
Wir können auch zwei Verbesserungen an unserem Algorithmus aus der vorherigen Lektion vornehmen:
### Verbesserung des Algorithmus
- **Durchschnittliche kumulative Belohnung berechnen**, über eine Anzahl von Simulationen. Wir drucken den Fortschritt alle 5000 Iterationen aus und mitteln unsere kumulative Belohnung über diesen Zeitraum. Das bedeutet, dass wir, wenn wir mehr als 195 Punkte erreichen, das Problem als gelöst betrachten können, und zwar mit einer noch höheren Qualität als erforderlich.
Wir können unseren Algorithmus aus der vorherigen Lektion auch in zwei Punkten verbessern:
- **Maximales durchschnittliches kumulatives Ergebnis berechnen**, `Qmax`, und wir speichern die Q-Tabelle, die diesem Ergebnis entspricht. Wenn du das Training ausführst, wirst du feststellen, dass manchmal das durchschnittliche kumulative Ergebnis zu sinken beginnt, und wir möchten die Werte der Q-Tabelle beibehalten, die dem besten während des Trainings beobachteten Modell entsprechen.
- **Berechne die durchschnittliche kumulative Belohnung**, über eine Anzahl von Simulationen. Wir geben den Fortschritt alle 5000 Iterationen aus und mitteln unsere kumulative Belohnung über diesen Zeitraum. Das bedeutet, wenn wir mehr als 195 Punkte erreichen, können wir das Problem als gelöst betrachten, sogar mit höherer Qualität als erforderlich.
- **Berechne den maximalen durchschnittlichen kumulativen Wert**, `Qmax`, und speichere die Q-Tabelle, die diesem Ergebnis entspricht. Während des Trainings wirst du bemerken, dass der durchschnittliche kumulative Wert manchmal zu sinken beginnt. Wir möchten die Q-Tabellenwerte speichern, die dem besten während des Trainings beobachteten Modell entsprechen.
1. Sammle alle kumulativen Belohnungen bei jeder Simulation im `rewards`-Vektor für eine spätere Darstellung. (Codeblock 11)
1. Sammle alle kumulativen Belohnungen jeder Simulation im `rewards`-Vektor für weitere Darstellungen. (Codeblock 11)
```python
def probs(v,eps=1e-4):
@ -214,15 +234,15 @@ Wir können auch zwei Verbesserungen an unserem Algorithmus aus der vorherigen L
obs = env.reset()
done = False
cum_reward=0
# == do the simulation ==
# == führe die Simulation durch ==
while not done:
s = discretize(obs)
if random.random()<epsilon:
# exploitation - chose the action according to Q-Table probabilities
# Ausbeutung - wähle die Aktion entsprechend der Wahrscheinlichkeiten der Q-Tabelle
v = probs(np.array(qvalues(s)))
a = random.choices(actions,weights=v)[0]
else:
# exploration - randomly chose the action
# Erforschung - wähle die Aktion zufällig
a = np.random.randint(env.action_space.n)
obs, rew, done, info = env.step(a)
@ -231,7 +251,7 @@ Wir können auch zwei Verbesserungen an unserem Algorithmus aus der vorherigen L
Q[(s,a)] = (1 - alpha) * Q.get((s,a),0) + alpha * (rew + gamma * max(qvalues(ns)))
cum_rewards.append(cum_reward)
rewards.append(cum_reward)
# == Periodically print results and calculate average reward ==
# == Drucke periodisch die Ergebnisse und berechne die durchschnittliche Belohnung ==
if epoch%5000==0:
print(f"{epoch}: {np.average(cum_rewards)}, alpha={alpha}, epsilon={epsilon}")
if np.average(cum_rewards) > Qmax:
@ -240,25 +260,25 @@ Wir können auch zwei Verbesserungen an unserem Algorithmus aus der vorherigen L
cum_rewards=[]
```
Was du aus diesen Ergebnissen feststellen kannst:
Was du aus diesen Ergebnissen erkennen kannst:
- **Nahe an unserem Ziel**. Wir sind dem Ziel, 195 kumulative Belohnungen über 100+ aufeinanderfolgende Simulationen zu erreichen, sehr nahe oder haben es möglicherweise sogar erreicht! Selbst wenn wir kleinere Zahlen erhalten, wissen wir es nicht genau, da wir über 5000 Läufe mitteln, und nur 100 Läufe sind im formalen Kriterium erforderlich.
- **Nahe an unserem Ziel**. Wir sind sehr nahe daran, das Ziel von 195 kumulativen Belohnungen über 100+ aufeinanderfolgende Durchläufe der Simulation zu erreichen, oder haben es möglicherweise sogar erreicht! Auch wenn wir kleinere Zahlen bekommen, wissen wir es noch nicht sicher, weil wir über 5000 Durchläufe mitteln, und nur 100 Durchläufe für das formale Kriterium erforderlich sind.
- **Belohnung beginnt zu fallen**. Manchmal beginnt die Belohnung zu fallen, was bedeutet, dass wir bereits gelernte Werte in der Q-Tabelle durch Werte überschreiben, die die Situation verschlimmern.
- **Belohnung beginnt zu sinken**. Manchmal beginnt die Belohnung zu sinken, was bedeutet, dass wir bereits gelernte Werte in der Q-Tabelle durch solche ersetzen können, die die Situation verschlechtern.
Diese Beobachtung wird deutlicher, wenn wir den Trainingsfortschritt darstellen.
Diese Beobachtung wird deutlicher, wenn wir den Trainingsfortschritt grafisch darstellen.
## Darstellung des Trainingsfortschritts
## Trainingsfortschritt darstellen
Während des Trainings haben wir den kumulativen Belohnungswert bei jeder Iteration im `rewards`-Vektor gesammelt. So sieht es aus, wenn wir es gegen die Iterationsnummer plotten:
Während des Trainings haben wir den kumulativen Belohnungswert bei jeder Iteration in den `rewards`-Vektor gesammelt. So sieht es aus, wenn wir ihn gegen die Iterationsnummer darstellen:
```python
plt.plot(rewards)
```
![roher Fortschritt](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png)
![roher Fortschritt](../../../../translated_images/de/train_progress_raw.2adfdf2daea09c59.webp)
Aus diesem Diagramm lässt sich nichts ableiten, da aufgrund der stochastischen Natur des Trainingsprozesses die Länge der Trainingseinheiten stark variiert. Um dieses Diagramm sinnvoller zu machen, können wir den **gleitenden Durchschnitt** über eine Reihe von Experimenten berechnen, sagen wir 100. Dies kann bequem mit `np.convolve` durchgeführt werden: (Codeblock 12)
Aus diesem Diagramm lässt sich nicht viel ablesen, da die Länge der Trainingssessions aufgrund der stochastischen Natur des Trainingsprozesses stark variiert. Um dieses Diagramm besser zu interpretieren, können wir den **laufenden Durchschnitt** über eine Serie von Experimenten, sagen wir 100, berechnen. Das geht bequem mit `np.convolve`: (Codeblock 12)
```python
def running_average(x,window):
@ -267,21 +287,24 @@ def running_average(x,window):
plt.plot(running_average(rewards,100))
```
![Trainingsfortschritt](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png)
![Trainingsfortschritt](../../../../translated_images/de/train_progress_runav.c71694a8fa9ab359.webp)
## Hyperparameter variieren
## Variation der Hyperparameter
Um das Lernen stabiler zu machen, macht es Sinn, einige unserer Hyperparameter während des Trainings anzupassen. Insbesondere:
- **Für die Lernrate**, `alpha`, können wir mit Werten nahe 1 beginnen und dann den Parameter schrittweise verringern. Mit der Zeit erhalten wir gute Wahrscheinlichkeitswerte in der Q-Tabelle, und daher sollten wir sie nur leicht anpassen und nicht vollständig mit neuen Werten überschreiben.
- **Für die Lernrate**, `alpha`, können wir mit Werten nahe 1 beginnen und den Parameter dann langsam verringern. Mit der Zeit erhalten wir gute Wahrscheinlichkeitswerte in der Q-Tabelle und sollten diese nur noch leicht anpassen und nicht mehr komplett überschreiben.
- **Erhöhe epsilon**. Wir könnten `epsilon` langsam erhöhen, um weniger zu explorieren und mehr zu exploitieren. Wahrscheinlich macht es Sinn, mit einem niedrigen Wert für `epsilon` zu starten und ihn bis fast 1 zu erhöhen.
> **Aufgabe 1**: Spiele mit den Hyperparameterwerten und schaue, ob du eine höhere kumulative Belohnung erzielen kannst. Kommst du über 195?
- **Epsilon erhöhen**. Wir könnten `epsilon` langsam erhöhen, um weniger zu explorieren und mehr zu exploiten. Es macht wahrscheinlich Sinn, mit einem niedrigeren Wert von `epsilon` zu beginnen und ihn auf fast 1 zu steigern.
> **Aufgabe 1**: Experimentiere mit den Hyperparametern und überprüfe, ob du eine höhere kumulative Belohnung erzielen kannst. Erreichst du mehr als 195?
> **Aufgabe 2**: Um das Problem formal zu lösen, musst du einen durchschnittlichen Reward von 195 über 100 aufeinanderfolgende Durchläufe erreichen. Messe dies während des Trainings und stelle sicher, dass du das Problem formal gelöst hast!
> **Aufgabe 2**: Um das Problem formell zu lösen, müssen Sie eine durchschnittliche Belohnung von 195 über 100 aufeinanderfolgende Durchläufe erreichen. Messen Sie das während des Trainings und stellen Sie sicher, dass Sie das Problem formell gelöst haben!
## Das Ergebnis in Aktion sehen
Es wäre interessant zu sehen, wie sich das trainierte Modell tatsächlich verhält. Lass uns die Simulation ausführen und dieselbe Aktionsauswahlstrategie wie während des Trainings anwenden, indem wir entsprechend der Wahrscheinlichkeitsverteilung in der Q-Tabelle sampeln: (Codeblock 13)
Es wäre interessant, tatsächlich zu sehen, wie sich das trainierte Modell verhält. Lassen Sie uns die Simulation laufen und dieselbe Aktionsauswahlstrategie wie beim Training verfolgen, indem wir entsprechend der Wahrscheinlichkeitsverteilung in der Q-Tabelle sampeln: (Codeblock 13)
```python
obs = env.reset()
@ -295,7 +318,7 @@ while not done:
env.close()
```
Du solltest etwas Ähnliches sehen wie hier:
Sie sollten so etwas sehen:
![ein balancierender Cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif)
@ -303,22 +326,24 @@ Du solltest etwas Ähnliches sehen wie hier:
## 🚀Herausforderung
> **Aufgabe 3**: Hier haben wir die finale Version der Q-Tabelle verwendet, die möglicherweise nicht die beste ist. Denke daran, dass wir die am besten performende Q-Tabelle in der Variable `Qbest` gespeichert haben! Probiere dasselbe Beispiel mit der am besten performenden Q-Tabelle aus, indem du `Qbest` in `Q` kopierst, und schau, ob du einen Unterschied bemerkst.
> **Aufgabe 3**: Hier haben wir die finale Kopie der Q-Tabelle verwendet, die möglicherweise nicht die beste ist. Denken Sie daran, dass wir die bestperformende Q-Tabelle in der Variable `Qbest` gespeichert haben! Versuchen Sie dasselbe Beispiel mit der bestperformenden Q-Tabelle, indem Sie `Qbest` auf `Q` kopieren, und sehen Sie, ob Sie einen Unterschied bemerken.
> **Aufgabe 4**: Hier haben wir nicht bei jedem Schritt die beste Aktion ausgewählt, sondern stattdessen entsprechend der Wahrscheinlichkeitsverteilung gesampelt. Wäre es sinnvoller, immer die beste Aktion mit dem höchsten Q-Tabelle-Wert auszuwählen? Das kann mit der Funktion `np.argmax` umgesetzt werden, um die Aktionsnummer mit dem höchsten Q-Tabelle-Wert zu ermitteln. Implementiere diese Strategie und überprüfe, ob sie das Balancieren verbessert.
> **Aufgabe 4**: Hier haben wir nicht bei jedem Schritt die beste Aktion ausgewählt, sondern stattdessen entsprechend der Wahrscheinlichkeitsverteilung gesampelt. Würde es mehr Sinn machen, immer die beste Aktion mit dem höchsten Q-Tabellenwert auszuwählen? Das kann durch die Verwendung der Funktion `np.argmax` geschehen, um die Aktionsnummer zu finden, die dem höchsten Q-Tabellenwert entspricht. Implementieren Sie diese Strategie und prüfen Sie, ob sich das Balancieren verbessert.
## [Quiz nach der Vorlesung](https://ff-quizzes.netlify.app/en/ml/)
## Aufgabe
[Trainiere ein Mountain Car](assignment.md)
[Trainieren eines Mountain Car](assignment.md)
## Fazit
Wir haben nun gelernt, wie man Agenten trainiert, um gute Ergebnisse zu erzielen, indem man ihnen lediglich eine Reward-Funktion bereitstellt, die den gewünschten Zustand des Spiels definiert, und ihnen die Möglichkeit gibt, den Suchraum intelligent zu erkunden. Wir haben den Q-Learning-Algorithmus erfolgreich in Fällen mit diskreten und kontinuierlichen Umgebungen angewendet, jedoch mit diskreten Aktionen.
Wir haben nun gelernt, wie man Agenten trainiert, um gute Ergebnisse zu erzielen, indem man ihnen nur eine Belohnungsfunktion gibt, die den gewünschten Zustand des Spiels definiert, und indem man ihnen die Möglichkeit gibt, den Suchraum intelligent zu erkunden. Wir haben den Q-Learning-Algorithmus erfolgreich sowohl bei diskreten als auch bei kontinuierlichen Umgebungen angewendet, allerdings mit diskreten Aktionen.
Es ist auch wichtig, Situationen zu untersuchen, in denen der Aktionsraum ebenfalls kontinuierlich ist und der Beobachtungsraum viel komplexer wird, wie beispielsweise ein Bild vom Bildschirm eines Atari-Spiels. In solchen Problemen müssen oft leistungsstärkere Machine-Learning-Techniken wie neuronale Netze eingesetzt werden, um gute Ergebnisse zu erzielen. Diese fortgeschritteneren Themen sind Gegenstand unseres kommenden, weiterführenden KI-Kurses.
Es ist wichtig, auch Situationen zu untersuchen, bei denen die Aktionsdimension ebenfalls kontinuierlich ist und der Beobachtungsraum viel komplexer ist, zum Beispiel ein Bild vom Atari-Spielbildschirm. In solchen Problemen müssen wir oft leistungsfähigere maschinelle Lernmethoden wie neuronale Netze verwenden, um gute Ergebnisse zu erzielen. Diese fortgeschritteneren Themen sind Gegenstand unseres bevorstehenden, fortgeschrittenen AI-Kurses.
---
**Haftungsausschluss**:
Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als maßgebliche Quelle betrachtet werden. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die sich aus der Nutzung dieser Übersetzung ergeben.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Haftungsausschluss**:
Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Bei kritischen Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -24,8 +24,8 @@
"language_code": "ru"
},
"1-Introduction/3-fairness/README.md": {
"original_hash": "9a6b702d1437c0467e3c5c28d763dac2",
"translation_date": "2025-09-06T08:31:33+00:00",
"original_hash": "0f00d72169a0d37eecfd16d71e01700a",
"translation_date": "2026-07-13T23:50:43+00:00",
"source_file": "1-Introduction/3-fairness/README.md",
"language_code": "ru"
},
@ -54,8 +54,8 @@
"language_code": "ru"
},
"2-Regression/1-Tools/README.md": {
"original_hash": "fa81d226c71d5af7a2cade31c1c92b88",
"translation_date": "2025-09-06T08:26:03+00:00",
"original_hash": "0b8635427b582d03ea4ab7089b93e505",
"translation_date": "2026-07-13T23:46:57+00:00",
"source_file": "2-Regression/1-Tools/README.md",
"language_code": "ru"
},
@ -72,8 +72,8 @@
"language_code": "ru"
},
"2-Regression/2-Data/README.md": {
"original_hash": "7c077988328ebfe33b24d07945f16eca",
"translation_date": "2025-09-06T08:26:38+00:00",
"original_hash": "a58b2c4d16c6b122643391745ac15af6",
"translation_date": "2026-07-13T23:47:50+00:00",
"source_file": "2-Regression/2-Data/README.md",
"language_code": "ru"
},
@ -89,6 +89,12 @@
"source_file": "2-Regression/2-Data/solution/Julia/README.md",
"language_code": "ru"
},
"2-Regression/2-Data/solution/notebook.ipynb": {
"original_hash": "96b95f8cf473481f2f371de8156f1571",
"translation_date": "2026-07-13T23:36:22+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "ru"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T20:12:31+00:00",
@ -457,7 +463,7 @@
},
"8-Reinforcement/1-QLearning/README.md": {
"original_hash": "911efd5e595089000cb3c16fce1beab8",
"translation_date": "2025-09-06T08:36:37+00:00",
"translation_date": "2026-07-13T23:48:45+00:00",
"source_file": "8-Reinforcement/1-QLearning/README.md",
"language_code": "ru"
},
@ -481,7 +487,7 @@
},
"8-Reinforcement/2-Gym/README.md": {
"original_hash": "107d5bb29da8a562e7ae72262d251a75",
"translation_date": "2025-09-06T08:37:10+00:00",
"translation_date": "2026-07-13T23:49:47+00:00",
"source_file": "8-Reinforcement/2-Gym/README.md",
"language_code": "ru"
},
@ -581,6 +587,19 @@
"source_file": "TROUBLESHOOTING.md",
"language_code": "ru"
},
"__translation_failures__": {
"sketchnotes/LICENSE.md": {
"original_hash": "fba3b94d88bfb9b81369b869a1e9a20f",
"source_file": "sketchnotes/LICENSE.md",
"language_code": "ru",
"failure_date": "2026-07-13T23:46: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-08-29T21:08:18+00:00",

@ -1,30 +1,30 @@
# Создание решений машинного обучения с ответственным ИИ
![Сводка об ответственном ИИ в машинном обучении в виде скетчнота](../../../../translated_images/ru/ml-fairness.ef296ebec6afc98a.webp)
> Скетчнот от [Tomomi Imura](https://www.twitter.com/girlie_mac)
![Сводка ответственного ИИ в машинном обучении в виде скетчноута](../../../../sketchnotes/ml-fairness.png)
> Скетчноут от [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [Тест перед лекцией](https://ff-quizzes.netlify.app/en/ml/)
## [Викторина перед лекцией](https://ff-quizzes.netlify.app/en/ml/)
## Введение
В этом курсе вы начнете узнавать, как машинное обучение влияет на нашу повседневную жизнь. Уже сейчас системы и модели участвуют в принятии решений в таких областях, как диагностика в здравоохранении, одобрение кредитов или выявление мошенничества. Поэтому важно, чтобы эти модели работали корректно и предоставляли надежные результаты. Как и любое программное приложение, системы ИИ могут не оправдывать ожидания или давать нежелательные результаты. Именно поэтому важно уметь понимать и объяснять поведение модели ИИ.
В этой учебной программе вы начнете изучать, как машинное обучение может и уже влияет на нашу повседневную жизнь. Даже сейчас системы и модели участвуют в ежедневных задачах принятия решений, таких как диагностирование заболеваний, одобрение кредитов или обнаружение мошенничества. Поэтому важно, чтобы эти модели хорошо работали и предоставляли надежные результаты. Как и любое программное обеспечение, системы ИИ могут не оправдать ожиданий или иметь нежелательные последствия. Вот почему важно уметь понимать и объяснять поведение модели ИИ.
Представьте, что может произойти, если данные, которые вы используете для создания моделей, не включают определенные демографические группы, такие как раса, пол, политические взгляды, религия, или непропорционально представляют такие группы. А что, если вывод модели интерпретируется так, что он благоприятствует одной демографической группе? Каковы последствия для приложения? Кроме того, что происходит, если модель приводит к негативным результатам и наносит вред людям? Кто несет ответственность за поведение системы ИИ? Это лишь некоторые из вопросов, которые мы будем изучать в этом курсе.
Представьте, что может произойти, если данные, которые вы используете для создания этих моделей, не включают определённые демографические группы, такие как раса, пол, политические взгляды, религия, или непропорционально представлены такие группы. Что если вывод модели интерпретируется так, что он благоприятствует какой-то демографической группе? Каковы последствия для приложения? Кроме того, что происходит, если результат модели оказывается негативным и вредным для людей? Кто несет ответственность за поведение системы ИИ? Это некоторые из вопросов, которые мы рассмотрим в этой учебной программе.
В этом уроке вы:
- Узнаете о важности справедливости в машинном обучении и связанных с этим вредах.
- Ознакомитесь с практикой изучения выбросов и необычных сценариев для обеспечения надежности и безопасности.
- Поймете необходимость создания инклюзивных систем, которые дают возможность каждому.
- Исследуете важность защиты конфиденциальности и безопасности данных и людей.
- Увидите, насколько важно иметь прозрачный подход для объяснения поведения моделей ИИ.
- Осознаете, что ответственность является ключевым фактором для построения доверия к системам ИИ.
- Повысите осведомленность о важности справедливости в машинном обучении и связанных с ней вредах.
- Ознакомитесь с практикой изучения выбросов и необычных сценариев для обеспечения надежности и безопасности
- Поймете необходимость расширения возможностей всех путём проектирования инклюзивных систем
- Изучите, насколько важно защищать конфиденциальность и безопасность данных и людей
- Увидите важность прозрачного (стеклянного) подхода к объяснению поведения моделей ИИ
- Осознаете, что ответственность необходима для создания доверия к системам ИИ
## Предварительные знания
## Предварительные требования
Перед началом курса рекомендуется пройти учебный путь "Принципы ответственного ИИ" и посмотреть видео на эту тему:
В качестве предварительного требования, пожалуйста, пройдите учебный путь "Принципы ответственного ИИ" и посмотрите видео ниже на эту тему:
Узнайте больше о ответственном ИИ, следуя этому [учебному пути](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
Узнайте больше об ответственном ИИ, следуя этому [Учебному пути](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
[![Подход Microsoft к ответственному ИИ](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Подход Microsoft к ответственному ИИ")
@ -32,124 +32,128 @@
## Справедливость
Системы ИИ должны относиться ко всем справедливо и избегать различного воздействия на схожие группы людей. Например, когда системы ИИ дают рекомендации по медицинскому лечению, заявкам на кредиты или трудоустройству, они должны делать одинаковые рекомендации для всех с похожими симптомами, финансовыми обстоятельствами или профессиональными квалификациями. Каждый из нас, как человек, носит в себе унаследованные предвзятости, которые влияют на наши решения и действия. Эти предвзятости могут проявляться в данных, которые мы используем для обучения систем ИИ. Такое влияние иногда происходит непреднамеренно. Часто трудно осознанно понять, когда вы вводите предвзятость в данные.
Системы ИИ должны справедливо относиться ко всем и избегать влияния на похожие группы людей по-разному. Например, когда системы ИИ дают рекомендации по медицинскому лечению, заявкам на кредиты или трудоустройству, они должны делать одинаковые рекомендации для всех с похожими симптомами, финансовыми обстоятельствами или профессиональной квалификацией. Каждый из нас как человек носит в себе унаследованные предубеждения, которые влияют на наши решения и действия. Эти предубеждения могут проявляться в данных, которые мы используем для обучения систем ИИ. Такая манипуляция иногда происходит непреднамеренно. Часто трудно сознательно понять, когда вы вносите предвзятость в данные.
**«Несправедливость»** охватывает негативные последствия или «вред» для группы людей, таких как те, которые определяются по расе, полу, возрасту или статусу инвалидности. Основные виды вреда, связанные со справедливостью, можно классифицировать следующим образом:
**«Несправедливость»** включает негативные воздействия или «вред» для группы людей, определяемой по расе, полу, возрасту или инвалидности. Основные виды вреда, связанные со справедливостью, можно классифицировать как:
- **Распределение**, если, например, один пол или этническая группа предпочитается другой.
- **Качество обслуживания**. Если данные обучены для одного конкретного сценария, но реальность гораздо сложнее, это приводит к плохой работе сервиса. Например, диспенсер для мыла, который не может распознать людей с темной кожей. [Источник](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Очернение**. Несправедливая критика или маркировка чего-либо или кого-либо. Например, технология распознавания изображений некорректно маркировала изображения темнокожих людей как горилл.
- **Пере- или недопредставленность**. Идея заключается в том, что определенная группа не представлена в определенной профессии, и любой сервис или функция, продолжающие это продвигать, способствуют вреду.
- **Стереотипизация**. Ассоциация определенной группы с заранее заданными атрибутами. Например, система перевода между английским и турецким может иметь неточности из-за слов, связанных со стереотипами о поле.
- **Распределение**, если, например, одному полу или этнической группе отдается предпочтение перед другой.
- **Качество обслуживания**. Если вы обучаете данные для одного конкретного сценария, но реальность гораздо сложнее, это приводит к плохому качеству сервиса. Например, диспенсер для мыла, который не распознает людей с темной кожей. [Ссылка](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Дениграция**. Несправедливо критиковать и маркировать что-то или кого-то. Например, технология распознавания изображений печально известна тем, что ошибочно маркировала изображения темнокожих людей как горилл.
- **Пере- или недопредставленность**. Идея состоит в том, что определённая группа не представлена в определённой профессии, и любая служба или функция, которая продолжает продвигать это, способствует нанесению вреда.
- **Стереотипизация**. Ассоциация определённой группы с предопределёнными атрибутами. Например, система перевода с английского на турецкий может иметь неточности из-за слов с гендерными стереотипическими ассоциациями.
![перевод на турецкий](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png)
![перевод на турецкий](../../../../translated_images/ru/gender-bias-translate-en-tr.f185fd8822c2d437.webp)
> перевод на турецкий
![перевод обратно на английский](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png)
> перевод обратно на английский
![обратно на английский](../../../../translated_images/ru/gender-bias-translate-tr-en.4eee7e3cecb8c70e.webp)
> обратно на английский
При проектировании и тестировании систем ИИ мы должны гарантировать, что ИИ справедлив и не запрограммирован на принятие предвзятых или дискриминационных решений, которые также запрещены для людей. Обеспечение справедливости в ИИ и машинном обучении остается сложной социотехнической задачей.
При проектировании и тестировании систем ИИ необходимо гарантировать справедливость ИИ и отсутствие программирования на предвзятые или дискриминационные решения, совершать которые также запрещено людям. Обеспечение справедливости в ИИ и машинном обучении остаётся сложной социотехнической задачей.
### Надежность и безопасность
Для построения доверия системы ИИ должны быть надежными, безопасными и стабильными как в обычных, так и в неожиданных условиях. Важно знать, как системы ИИ будут вести себя в различных ситуациях, особенно в случае выбросов. При создании решений ИИ необходимо уделять значительное внимание тому, как справляться с широким спектром обстоятельств, с которыми могут столкнуться решения ИИ. Например, самоуправляемый автомобиль должен ставить безопасность людей на первое место. Следовательно, ИИ, управляющий автомобилем, должен учитывать все возможные сценарии, с которыми автомобиль может столкнуться, такие как ночь, грозы или метели, дети, выбегающие на дорогу, домашние животные, дорожные работы и т.д. То, насколько хорошо система ИИ может справляться с широким спектром условий надежно и безопасно, отражает уровень подготовки, который разработчик данных или ИИ учел при проектировании или тестировании системы.
Для создания доверия системы ИИ должны быть надежными, безопасными и последовательными в обычных и неожиданных условиях. Важно знать, как системы ИИ будут вести себя в различных ситуациях, особенно когда они выходят за рамки обычного. При создании решений ИИ необходимо уделять значительное внимание тому, как обрабатывать разнообразные ситуации, с которыми могут столкнуться решения ИИ. Например, автопилот должен ставить безопасность людей на первое место. В результате ИИ, управляющий автомобилем, должен учитывать все возможные сценарии, такие как ночь, грозы или метели, дети, выбегающие на дорогу, животные, дорожные работы и т.п. Насколько хорошо система ИИ справляется с широким спектром условий надежно и безопасно, отражает уровень прогнозирования, который учёный по данным или разработчик ИИ учитывали при проектировании или тестировании системы.
> [🎥 Нажмите здесь, чтобы посмотреть видео: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
> [🎥 Нажмите здесь для видео: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
### Инклюзивность
Системы ИИ должны быть разработаны так, чтобы вовлекать и давать возможность каждому. При проектировании и внедрении систем ИИ специалисты по данным и разработчики ИИ выявляют и устраняют потенциальные барьеры в системе, которые могут непреднамеренно исключать людей. Например, в мире насчитывается 1 миллиард людей с инвалидностью. С развитием ИИ они могут легче получать доступ к широкому спектру информации и возможностей в своей повседневной жизни. Устранение барьеров создает возможности для инноваций и разработки продуктов ИИ с лучшим пользовательским опытом, который приносит пользу всем.
Системы ИИ должны быть разработаны так, чтобы вовлекать и расширять возможности всех. При проектировании и внедрении систем ИИ специалисты по данным и разработчики ИИ выявляют и устраняют потенциальные барьеры в системе, которые могут непреднамеренно исключать людей. Например, в мире насчитывается 1 миллиард человек с инвалидностью. С развитием ИИ они могут легче получать доступ к широкому спектру информации и возможностей в повседневной жизни. Устранение барьеров создает возможности для инноваций и разработки продуктов ИИ с лучшим опытом, которые приносят пользу всем.
> [🎥 Нажмите здесь, чтобы посмотреть видео: инклюзивность в ИИ](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
> [🎥 Нажмите здесь для видео: инклюзивность в ИИ](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
### Безопасность и конфиденциальность
Системы ИИ должны быть безопасными и уважать конфиденциальность людей. Люди меньше доверяют системам, которые ставят под угрозу их конфиденциальность, информацию или жизнь. При обучении моделей машинного обучения мы полагаемся на данные для получения наилучших результатов. При этом необходимо учитывать происхождение данных и их целостность. Например, были ли данные предоставлены пользователем или доступны публично? Далее, работая с данными, важно разрабатывать системы ИИ, которые могут защищать конфиденциальную информацию и противостоять атакам. По мере того, как ИИ становится более распространенным, защита конфиденциальности и обеспечение безопасности важной личной и бизнес-информации становятся все более критичными и сложными. Вопросы конфиденциальности и безопасности данных требуют особенно пристального внимания в ИИ, поскольку доступ к данным необходим для того, чтобы системы ИИ могли делать точные и информированные прогнозы и принимать решения о людях.
Системы ИИ должны быть безопасными и уважать конфиденциальность людей. Люди меньше доверяют системам, которые ставят под угрозу их конфиденциальность, информацию или жизни. При обучении моделей машинного обучения мы полагаемся на данные для получения лучших результатов. При этом необходимо учитывать происхождение данных и их целостность. Например, были ли данные предоставлены пользователями или доступны общественно? Далее, при работе с данными важно разрабатывать системы ИИ, которые могут защищать конфиденциальную информацию и противостоять атакам. По мере роста распространения ИИ защита конфиденциальности и обеспечение безопасности важной личной и деловой информации становятся всё более критичными и сложными. Вопросы конфиденциальности и безопасности данных требуют особого внимания в области ИИ, потому что доступ к данным необходим системам ИИ для точных и информированных прогнозов и решений о людях.
> [🎥 Нажмите здесь, чтобы посмотреть видео: безопасность в ИИ](https://www.microsoft.com/videoplayer/embed/RE4voJF)
> [🎥 Нажмите здесь для видео: безопасность в ИИ](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- В отрасли достигнуты значительные успехи в области конфиденциальности и безопасности, во многом благодаря таким регуляциям, как GDPR (Общий регламент по защите данных).
- Однако в системах ИИ мы должны признать напряжение между необходимостью получения большего объема персональных данных для повышения эффективности систем и конфиденциальностью.
- Как и с появлением подключенных компьютеров в интернете, мы также наблюдаем значительный рост числа проблем безопасности, связанных с ИИ.
- В то же время мы видим, как ИИ используется для улучшения безопасности. Например, большинство современных антивирусных сканеров работают на основе эвристики ИИ.
- Мы должны гарантировать, что наши процессы анализа данных гармонично сочетаются с последними практиками конфиденциальности и безопасности.
- Отрасль достигла значительного прогресса в области конфиденциальности и безопасности, во многом благодаря регламентам, таким как GDPR (Общий регламент по защите данных).
- Однако с системами ИИ мы должны признать противоречие между необходимостью большего объема персональных данных для повышения персонализации и эффективности систем и конфиденциальностью.
- Аналогично появлению подключенных компьютеров с интернетом, мы также наблюдаем резкий рост числа проблем с безопасностью, связанных с ИИ.
- В то же время ИИ используется для улучшения безопасности. Например, большинство современных антивирусных сканеров сегодня работают на основе эвристик ИИ.
- Мы должны обеспечить, чтобы наши процессы Data Science гармонично сочетались с последними практиками конфиденциальности и безопасности.
### Прозрачность
Системы ИИ должны быть понятными. Важной частью прозрачности является объяснение поведения систем ИИ и их компонентов. Улучшение понимания систем ИИ требует, чтобы заинтересованные стороны понимали, как и почему они функционируют, чтобы можно было выявить потенциальные проблемы производительности, вопросы безопасности и конфиденциальности, предвзятости, исключительные практики или непреднамеренные результаты. Мы также считаем, что те, кто использует системы ИИ, должны быть честными и открытыми в отношении того, когда, почему и как они решают внедрять их. А также о ограничениях систем, которые они используют. Например, если банк использует систему ИИ для поддержки своих решений по потребительскому кредитованию, важно изучить результаты и понять, какие данные влияют на рекомендации системы. Правительства начинают регулировать ИИ в различных отраслях, поэтому специалисты по данным и организации должны объяснять, соответствует ли система ИИ нормативным требованиям, особенно если возникает нежелательный результат.
### Прозрачность
Системы ИИ должны быть понятными. Важной частью прозрачности является объяснение поведения систем ИИ и их компонентов. Повышение понимания систем ИИ требует от заинтересованных сторон понимания того, как и почему они функционируют, чтобы можно было выявлять потенциальные проблемы с производительностью, вопросы безопасности и конфиденциальности, предвзятость, исключающие практики или непредвиденные результаты. Мы также считаем, что те, кто используют системы ИИ, должны быть честными и откровенными о том, когда, почему и как они выбирают их применять, а также о ограничениях используемых систем. Например, если банк использует систему ИИ для поддержки решений по кредитованию потребителей, важно изучить результаты и понять, какие данные влияют на рекомендации системы. Правительства начинают регулировать ИИ в различных отраслях, поэтому специалисты по данным и организации должны объяснять, соответствует ли система ИИ требованиям регулирования, особенно если возникает нежелательный результат.
> [🎥 Нажмите здесь, чтобы посмотреть видео: прозрачность в ИИ](https://www.microsoft.com/videoplayer/embed/RE4voJF)
> [🎥 Нажмите здесь для видео: прозрачность в ИИ](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Поскольку системы ИИ настолько сложны, трудно понять, как они работают и интерпретировать результаты.
- Это отсутствие понимания влияет на то, как эти системы управляются, внедряются и документируются.
- Более важно, это отсутствие понимания влияет на решения, принимаемые на основе результатов, которые производят эти системы.
- Поскольку системы ИИ очень сложны, трудно понять, как они работают, и интерпретировать результаты.
- Это непонимание влияет на то, как эти системы управляются, вводятся в эксплуатацию и документируются.
- И, что важнее, это непонимание влияет на решения, принимаемые на основе результатов, которые генерируют эти системы.
### Ответственность
Люди, которые разрабатывают и внедряют системы ИИ, должны нести ответственность за работу своих систем. Необходимость ответственности имеет особое значение для технологий с чувствительным использованием, таких как распознавание лиц. В последнее время усилился спрос на технологии распознавания лиц, особенно со стороны правоохранительных органов, которые видят потенциал этой технологии в таких применениях, как поиск пропавших детей. Однако эти технологии потенциально могут быть использованы правительством для подрыва фундаментальных свобод граждан, например, путем обеспечения постоянного наблюдения за конкретными лицами. Поэтому специалисты по данным и организации должны нести ответственность за влияние их системы ИИ на отдельных людей или общество.
Люди, которые проектируют и внедряют системы ИИ, должны нести ответственность за то, как их системы работают. Необходимость ответственности особенно важна для технологий чувствительного использования, таких как распознавание лиц. В последнее время растет спрос на технологии распознавания лиц, особенно со стороны правоохранительных органов, которые видят потенциал технологии в таких применениях, как поиск пропавших детей. Однако эти технологии могут быть использованы правительством для того, чтобы поставить под угрозу основные свободы граждан, например, путем постоянного наблюдения за конкретными людьми. Поэтому специалисты по данным и организации должны быть ответственными за то, как их система ИИ влияет на отдельных людей или общество.
[![Ведущий исследователь ИИ предупреждает о массовом наблюдении через распознавание лиц](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Подход Microsoft к ответственному ИИ")
[![Ведущий исследователь ИИ предупреждает о массовом наблюдении через распознавание лиц](../../../../translated_images/ru/accountability.41d8c0f4b85b6231.webp)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Подход Microsoft к ответственному ИИ")
> 🎥 Нажмите на изображение выше, чтобы посмотреть видео: Предупреждения о массовом наблюдении через распознавание лиц
> 🎥 Нажмите на изображение выше для видео: предупреждения о массовом наблюдении через распознавание лиц
В конечном итоге один из самых больших вопросов для нашего поколения, как первого поколения, которое внедряет ИИ в общество, заключается в том, как гарантировать, что компьютеры останутся подотчетными людям, и как гарантировать, что люди, которые проектируют компьютеры, останутся подотчетными всем остальным.
В конечном итоге один из главных вопросов для нашего поколения, как первого поколения, которое приносит ИИ в общество, — как обеспечить, чтобы компьютеры оставались ответственными перед людьми, и как гарантировать, чтобы люди, создающие компьютеры, оставались ответственными перед всеми остальными.
## Оценка воздействия
Перед обучением модели машинного обучения важно провести оценку воздействия, чтобы понять цель системы ИИ, предполагаемое использование, место внедрения и кто будет взаимодействовать с системой. Это полезно для рецензентов или тестировщиков, оценивающих систему, чтобы знать, какие факторы учитывать при выявлении потенциальных рисков и ожидаемых последствий.
Перед обучением модели машинного обучения важно провести оценку воздействия, чтобы понять цель системы ИИ; предполагаемое применение; где она будет внедряться; и кто будет взаимодействовать с системой. Эти сведения полезны для обзорщиков или тестировщиков системы, чтобы знать, какие факторы учитывать при выявлении потенциальных рисков и ожидаемых последствий.
Следующие области имеют ключевое значение при проведении оценки воздействия:
Следующие области являются ключевыми при проведении оценки воздействия:
* **Негативное воздействие на отдельных лиц**. Важно учитывать любые ограничения или требования, неподдерживаемое использование или известные ограничения, препятствующие работе системы, чтобы предотвратить использование системы таким образом, который может причинить вред людям.
* **Требования к данным**. Понимание того, как и где система будет использовать данные, позволяет обзорщикам изучать требования к данным, которые необходимо учитывать (например, регламенты GDPR или HIPAA). Кроме того, следует проверить, являются ли источник и количество данных достаточными для обучения.
* **Обзор воздействия**. Составьте список потенциальных вредов, которые могут возникнуть при использовании системы. В течение жизненного цикла машинного обучения проверяйте, устранены ли выявленные проблемы.
* **Применимые цели** для каждого из шести основных принципов. Оцените, достигнуты ли цели каждого принципа и есть ли пробелы.
* **Негативное воздействие на отдельных людей**. Осознание любых ограничений или требований, неподдерживаемого использования или известных ограничений, препятствующих работе системы, важно для того, чтобы система не использовалась таким образом, который может нанести вред людям.
* **Требования к данным**. Понимание того, как и где система будет использовать данные, позволяет рецензентам изучить любые требования к данным, которые необходимо учитывать (например, регуляции GDPR или HIPPA). Кроме того, необходимо проверить, является ли источник или объем данных достаточным для обучения.
* **Сводка воздействия**. Составьте список потенциальных вредов, которые могут возникнуть при использовании системы. На протяжении всего жизненного цикла ML проверяйте, устранены ли выявленные проблемы.
* **Применимые цели** для каждого из шести основных принципов. Оцените, достигнуты ли цели каждого из принципов и есть ли какие-либо пробелы.
## Отладка с ответственным ИИ
Как и отладка программного приложения, отладка системы ИИ — это необходимый процесс выявления и устранения проблем в системе. Существует множество факторов, которые могут повлиять на то, что модель не работает так, как ожидалось или ответственно. Большинство традиционных метрик производительности модели являются количественными агрегатами производительности модели, которые недостаточны для анализа того, как модель нарушает принципы ответственного ИИ. Более того, модель машинного обучения — это черный ящик, который затрудняет понимание того, что влияет на ее результаты, или предоставление объяснений, когда она допускает ошибку. Позже в этом курсе мы узнаем, как использовать панель управления ответственного ИИ для отладки систем ИИ. Панель управления предоставляет комплексный инструмент для специалистов по данным и разработчиков ИИ для выполнения:
Подобно отладке программного приложения, отладка системы ИИ — необходимый процесс выявления и устранения проблем в системе. Существует множество факторов, которые могут привести к тому, что модель не будет работать так, как ожидается, или ответственно. Большинство традиционных метрик производительности модели — это количественные агрегаты производительности модели, которых недостаточно для анализа того, как модель нарушает принципы ответственного ИИ. Более того, модель машинного обучения — это «черный ящик», что затрудняет понимание того, что влияет на её результат или объяснение ошибок. Позже на этом курсе мы научимся использовать панель управления Responsible AI для помощи в отладке систем ИИ. Эта панель предоставляет комплексный инструмент для специалистов по данным и разработчиков ИИ для выполнения:
* **Анализа ошибок**. Для выявления распределения ошибок модели, которые могут повлиять на справедливость или надежность системы.
* **Обзора модели**. Для обнаружения различий в производительности модели в различных когорт данных.
* **Анализа данных**. Для понимания распределения данных и выявления потенциальной предвзятости в данных, которая может привести к проблемам справедливости, инклюзивности и надежности.
* **Интерпретации модели**. Для понимания того, что влияет или влияет на прогнозы модели. Это помогает объяснить поведение модели, что важно для прозрачности и ответственности.
* **Обзора модели**. Чтобы обнаружить, где существуют различия в производительности модели среди различных групп данных.
* **Анализа данных**. Для понимания распределения данных и выявления потенциальной предвзятости в данных, которая может вызвать проблемы со справедливостью, инклюзивностью и надежностью.
* **Интерпретируемости модели**. Чтобы понять, что влияет или оказывает воздействие на предсказания модели. Это помогает объяснять поведение модели, что важно для прозрачности и ответственности.
## 🚀 Задание
Чтобы предотвратить возникновение вреда с самого начала, мы должны:
## 🚀 Вызов
Чтобы предотвратить появление вреда с самого начала, мы должны:
- обеспечить разнообразие опыта и точек зрения среди людей, работающих над системами
- инвестировать в наборы данных, которые отражают разнообразие нашего общества
- разработать лучшие методы на протяжении всего жизненного цикла машинного обучения для выявления и исправления проблем ответственного ИИ, когда они возникают
- иметь разнообразные фоновые и перспективные знания среди людей, работающих над системами
- инвестировать в датасеты, отражающие разнообразие нашего общества
- развивать лучшие методы на протяжении всего жизненного цикла машинного обучения для обнаружения и исправления нарушений принципов ответственного ИИ при их возникновении
Подумайте о реальных сценариях, где недоверие к модели очевидно в процессе создания и использования модели. Что еще следует учитывать?
Подумайте о реальных сценариях, в которых недоверие к модели проявляется в построении и использовании модели. Что еще следует учитывать?
## [Тест после лекции](https://ff-quizzes.netlify.app/en/ml/)
## [Викторина после лекции](https://ff-quizzes.netlify.app/en/ml/)
## Обзор и самостоятельное изучение
В этом уроке вы узнали основы концепций справедливости и несправедливости в машинном обучении.
Посмотрите этот воркшоп, чтобы глубже изучить темы:
В этом уроке вы узнали основы понятий справедливости и несправедливости в машинном обучении.
Просмотрите этот семинар, чтобы глубже погрузиться в темы:
- В поисках ответственного ИИ: Применение принципов на практике, авторы Бесмира Нуши, Мехрнуш Самеки и Амит Шарма
- В стремлении к ответственной ИИ: Применение принципов на практике от Бесмиры Нуши, Мехрнуш Самеки и Амита Шармы
[![Responsible AI Toolbox: Открытая платформа для создания ответственного ИИ](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Открытая платформа для создания ответственного ИИ")
[![Responsible AI Toolbox: An open-source framework for building responsible AI](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: An open-source framework for building responsible AI")
> 🎥 Нажмите на изображение выше, чтобы посмотреть видео: RAI Toolbox: Открытая платформа для создания ответственного ИИ, авторы Бесмира Нуши, Мехрнуш Самеки и Амит Шарма
> 🎥 Нажмите на изображение выше для просмотра видео: RAI Toolbox: Фреймворк с открытым исходным кодом для построения ответственной ИИ от Бесмиры Нуши, Мехрнуш Самеки и Амита Шармы
Также прочитайте:
Также прочитайте:
- Центр ресурсов Microsoft по ответственному ИИ: [Responsible AI Resources Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Центр ресурсов Microsoft по ответственной ИИ: [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 @@ RAI Toolbox:
---
**Отказ от ответственности**:
Этот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникающие в результате использования данного перевода.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Отказ от ответственности**:
Этот документ был переведен с использованием сервиса машинного перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия по обеспечению точности, имейте в виду, что автоматический перевод может содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется обратиться к профессиональному человеческому переводу. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования этого перевода.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,120 +1,121 @@
# Начало работы с Python и Scikit-learn для моделей регрессии
# Начинаем работу с Python и Scikit-learn для регрессионных моделей
![Сводка регрессий в виде скетчноута](../../../../sketchnotes/ml-regression.png)
![Сводка регрессий в скетчноуте](../../../../translated_images/ru/ml-regression.4e4f70e3b3ed446e.webp)
> Скетчноут от [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)
## Введение
В этих четырех уроках вы узнаете, как создавать модели регрессии. Мы скоро обсудим, для чего они нужны. Но прежде чем начать, убедитесь, что у вас есть все необходимые инструменты для работы!
В этих четырёх уроках вы узнаете, как строить регрессионные модели. Скоро мы обсудим, для чего они нужны. Но прежде чем что-либо делать, убедитесь, что у вас есть необходимые инструменты для начала работы!
В этом уроке вы научитесь:
- Настраивать ваш компьютер для локальных задач машинного обучения.
- Работать с Jupyter Notebook.
- Настраивать компьютер для локальных задач машинного обучения.
- Работать с Jupyter Notebooks.
- Использовать Scikit-learn, включая установку.
- Исследовать линейную регрессию через практическое упражнение.
- Исследовать линейную регрессию на практике.
## Установки и настройки
[![ML для начинающих - Настройте инструменты для создания моделей машинного обучения](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML для начинающих - Настройте инструменты для создания моделей машинного обучения")
[![ML для начинающих - Настройка инструментов для создания моделей машинного обучения](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML для начинающих - Настройка инструментов для создания моделей машинного обучения")
> 🎥 Нажмите на изображение выше, чтобы посмотреть короткое видео о настройке вашего компьютера для 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 уже установлен. Также существуют полезные [пакеты для программирования на 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/) для базовой настройки. В этом курсе вы будете использовать Python в Visual Studio Code, поэтому вам может быть полезно ознакомиться с [настройкой Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) для разработки на Python.
2. **Установите Visual Studio Code**. Убедитесь, что Visual Studio Code установлен на вашем компьютере. Следуйте этим инструкциям, чтобы [установить Visual Studio Code](https://code.visualstudio.com/) для базовой установки. В этом курсе вы будете использовать Python во Visual Studio Code, поэтому возможно стоит ознакомиться с тем, как [настроить Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) для разработки на Python.
> Ознакомьтесь с Python, пройдя эту коллекцию [модулей Learn](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
> Освойтесь с Python, проработав эту коллекцию [учебных модулей](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
>
> [![Настройка Python в Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Настройка Python в Visual Studio Code")
> [![Настройка Python с Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Настройка Python с Visual Studio Code")
>
> 🎥 Нажмите на изображение выше, чтобы посмотреть видео: использование Python в VS Code.
3. **Установите Scikit-learn**, следуя [этим инструкциям](https://scikit-learn.org/stable/install.html). Поскольку вам нужно использовать Python 3, рекомендуется использовать виртуальную среду. Обратите внимание, если вы устанавливаете эту библиотеку на Mac с процессором M1, на указанной странице есть специальные инструкции.
3. **Установите Scikit-learn**, следуя [этим инструкциям](https://scikit-learn.org/stable/install.html). Поскольку необходимо использовать Python 3, рекомендуется использовать виртуальное окружение. Обратите внимание, если вы устанавливаете библиотеку на M1 Mac, на указанной странице есть специальные инструкции.
4. **Установите Jupyter Notebook**. Вам нужно [установить пакет Jupyter](https://pypi.org/project/jupyter/).
1. **Установите Jupyter Notebook**. Вам понадобится [установить пакет Jupyter](https://pypi.org/project/jupyter/).
## Ваша среда разработки ML
Вы будете использовать **ноутбуки** для разработки кода на Python и создания моделей машинного обучения. Этот тип файлов является распространенным инструментом для специалистов по данным, и их можно идентифицировать по суффиксу или расширению `.ipynb`.
Вы будете использовать **notebooks** для разработки вашего Python-кода и создания моделей машинного обучения. Этот тип файлов является распространённым инструментом для специалистов по данным и определяется по расширению `.ipynb`.
Ноутбуки представляют собой интерактивную среду, которая позволяет разработчику одновременно писать код, добавлять заметки и документацию вокруг кода, что очень полезно для экспериментальных или исследовательских проектов.
Notebooks — это интерактивная среда, которая позволяет разработчику не только писать код, но и добавлять заметки и документацию вокруг кода, что очень полезно для экспериментальных или исследовательских проектов.
[![ML для начинающих - Настройка Jupyter Notebook для создания моделей регрессии](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML для начинающих - Настройка Jupyter Notebook для создания моделей регрессии")
[![ML для начинающих - Настройка Jupyter Notebooks для начала создания регрессионных моделей](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML для начинающих - Настройка Jupyter Notebooks для начала создания регрессионных моделей")
> 🎥 Нажмите на изображение выше, чтобы посмотреть короткое видео о выполнении этого упражнения.
> 🎥 Нажмите на изображение выше для короткого видео о выполнении этого упражнения.
### Упражнение - работа с ноутбуком
### Упражнение — работа с notebook
В этой папке вы найдете файл _notebook.ipynb_.
1. Откройте _notebook.ipynb_ в Visual Studio Code.
Jupyter сервер запустится с Python 3+. Вы найдете области ноутбука, которые можно `запустить`, куски кода. Вы можете запустить блок кода, выбрав значок, похожий на кнопку воспроизведения.
Запустится Jupyter сервер с запущенным Python 3+. Вы увидите участки в notebook, которые можно `run` — блоки кода. Чтобы запустить блок кода, выберите иконку, похожую на кнопку «play».
2. Выберите значок `md` и добавьте немного markdown, а также следующий текст **# Добро пожаловать в ваш ноутбук**.
1. Выберите иконку `md` и добавьте немного markdown с текстом **# Добро пожаловать в ваш notebook**.
Затем добавьте немного кода на Python.
3. Введите **print('hello notebook')** в блоке кода.
4. Выберите стрелку, чтобы запустить код.
1. Введите **print('hello notebook')** в блоке кода.
1. Выберите стрелку, чтобы запустить код.
Вы должны увидеть напечатанное сообщение:
Вы должны увидеть распечатанное сообщение:
```output
hello notebook
```
![VS Code с открытым ноутбуком](../../../../2-Regression/1-Tools/images/notebook.jpg)
![VS Code с открытым notebook](../../../../translated_images/ru/notebook.4a3ee31f396b8832.webp)
Вы можете чередовать ваш код с комментариями, чтобы документировать ноутбук.
Вы можете чередовать код с комментариями, чтобы самодокументировать notebook.
✅ Подумайте минуту, насколько отличается рабочая среда веб-разработчика от среды специалиста по данным.
✅ Подумайте минуту, насколько рабочая среда веб-разработчика отличается от среды специалиста по данным.
## Начало работы с Scikit-learn
## Работа со Scikit-learn
Теперь, когда Python настроен в вашей локальной среде, и вы освоились с Jupyter Notebook, давайте также освоимся с Scikit-learn (произносится как `sci`, как в `science`). Scikit-learn предоставляет [обширный API](https://scikit-learn.org/stable/modules/classes.html#api-ref), который поможет вам выполнять задачи машинного обучения.
Теперь, когда Python настроен в вашей локальной среде и вы комфортно чувствуете себя с Jupyter Notebooks, давайте привыкнем к Scikit-learn (произносится `сай` как в слове `science`). Scikit-learn предоставляет [обширный API](https://scikit-learn.org/stable/modules/classes.html#api-ref), который поможет вам выполнять задачи ML.
Согласно их [веб-сайту](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn — это библиотека машинного обучения с открытым исходным кодом, которая поддерживает обучение с учителем и без учителя. Она также предоставляет различные инструменты для подгонки моделей, предварительной обработки данных, выбора и оценки моделей, а также множество других утилит."
Согласно их [веб-сайту](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn — это библиотека машинного обучения с открытым исходным кодом, поддерживающая контролируемое и неконтролируемое обучение. Она также предоставляет различные инструменты для подгонки моделей, предварительной обработки данных, выбора моделей и оценки, а также множество других утилит."
В этом курсе вы будете использовать Scikit-learn и другие инструменты для создания моделей машинного обучения для выполнения задач, которые мы называем "традиционным машинным обучением". Мы намеренно избегали нейронных сетей и глубокого обучения, так как они лучше освещены в нашей предстоящей учебной программе "AI для начинающих".
В этом курсе вы будете использовать Scikit-learn и другие инструменты для создания моделей машинного обучения, выполняющих так называемые «традиционные задачи машинного обучения». Мы сознательно избегали нейронных сетей и глубокого обучения, так как они лучше рассматриваются в нашем предстоящем курсе «ИИ для начинающих».
Scikit-learn делает процесс создания моделей и их оценки простым и удобным. Она в основном ориентирована на использование числовых данных и содержит несколько готовых наборов данных для обучения. Также она включает предварительно созданные модели, которые студенты могут попробовать. Давайте изучим процесс загрузки готовых данных и использования встроенного оценщика для первой модели машинного обучения с Scikit-learn на основе базовых данных.
Scikit-learn упрощает создание моделей и их оценку для использования. Он в первую очередь ориентирован на работу с числовыми данными и содержит несколько готовых датасетов, которые можно использовать в учебных целях. Также включены преднастроенные модели для практики студентов. Давайте исследуем процесс загрузки встроенных данных и использования встроенного оценщика — первой ML-модели с Scikit-learn на простых данных.
## Упражнение - ваш первый ноутбук с Scikit-learn
## Упражнение — ваш первый notebook с 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) на веб-сайте Scikit-learn.
[![ML для начинающих - Ваш первый проект линейной регрессии на Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML для начинающих - Ваш первый проект линейной регрессии на Python")
> 🎥 Нажмите на изображение выше, чтобы посмотреть короткое видео о выполнении этого упражнения.
> 🎥 Нажмите на изображение выше для короткого видео о выполнении этого упражнения.
В файле _notebook.ipynb_, связанном с этим уроком, очистите все ячейки, нажав на значок "мусорной корзины".
В файле _notebook.ipynb_, связанном с этим уроком, очистите все ячейки, нажав на значок «корзина».
В этом разделе вы будете работать с небольшим набором данных о диабете, который встроен в Scikit-learn для учебных целей. Представьте, что вы хотите протестировать лечение для пациентов с диабетом. Модели машинного обучения могут помочь вам определить, какие пациенты лучше отреагируют на лечение, основываясь на комбинациях переменных. Даже очень базовая модель регрессии, при визуализации, может показать информацию о переменных, которые помогут вам организовать ваши теоретические клинические испытания.
В этой части вы будете работать с небольшим датасетом о диабете, встроенным в Scikit-learn для учебных целей. Представьте, что вы хотите протестировать лечение для пациентов с диабетом. Модели машинного обучения могут помочь определить, какие пациенты лучше отреагируют на лечение, основываясь на комбинациях переменных. Даже очень простая регрессионная модель, визуализированная, может показать информацию о переменных, которая поможет организовать теоретические клинические испытания.
✅ Существует множество методов регрессии, и выбор метода зависит от вопроса, на который вы хотите получить ответ. Если вы хотите предсказать вероятный рост человека определенного возраста, вы бы использовали линейную регрессию, так как вы ищете **числовое значение**. Если вас интересует, следует ли считать определенную кухню веганской или нет, вы ищете **категориальное назначение**, поэтому вы бы использовали логистическую регрессию. Позже вы узнаете больше о логистической регрессии. Подумайте немного о вопросах, которые можно задать данным, и о том, какой из этих методов будет более подходящим.
✅ Существует много типов регрессионных методов, и выбор зависит от ответа, который вы ищете. Если вы хотите предсказать вероятный рост человека определённого возраста, вы используете линейную регрессию, так как ищете **числовое значение**. Если вы хотите определить, считать ли тип кухни веганской или нет, вы ищете **присвоение категории**, поэтому используете логистическую регрессию. Вы узнаете больше о логистической регрессии позже. Подумайте немного о вопросах, которые можно задать данным, и какой из методов будет более подходящим.
Давайте начнем выполнение задачи.
Давайте приступим к этой задаче.
### Импорт библиотек
Для этой задачи мы импортируем несколько библиотек:
Для этой задачи мы импортируем некоторые библиотеки:
- **matplotlib**. Это полезный [инструмент для построения графиков](https://matplotlib.org/), который мы будем использовать для создания линейного графика.
- **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`, а также `datasets`, `linear_model` и `model_selection` из `sklearn`. `model_selection` используется для разделения данных на обучающие и тестовые наборы.
В коде выше вы импортируете `matplotlib`, `numpy` и импортируете `datasets`, `linear_model` и `model_selection` из `sklearn`. `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 признаками, некоторые из которых включают:
- возраст: возраст в годах
- bmi: индекс массы тела
- bp: среднее кровяное давление
- s1 tc: Т-клетки (тип белых кровяных клеток)
- bp: среднее артериальное давление
- s1 tc: Т-лимфоциты (тип белых кровяных клеток)
✅ Этот набор данных включает концепцию "пол" как переменную, важную для исследований о диабете. Многие медицинские наборы данных включают этот тип бинарной классификации. Подумайте немного о том, как такие категории могут исключать определенные части населения из лечения.
✅ Этот датасет включает понятие «пол» как признак, важный для исследований диабета. Многие медицинские датасеты используют такого рода бинарную классификацию. Подумайте немного о том, как такие категоризации могут исключать части населения из лечения.
Теперь загрузите данные X и y.
> 🎓 Помните, это обучение с учителем, и нам нужна целевая переменная '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])
```
То, что вы получаете в ответ, — это кортеж. Вы присваиваете два первых значения кортежа переменным `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-й столбец набора данных. Вы можете сделать это, используя оператор `:` для выбора всех строк, а затем выбрав 3-й столбец, используя индекс (2). Вы также можете изменить форму данных на 2D массив — как требуется для построения графика — используя `reshape(n_rows, n_columns)`. Если один из параметров равен -1, соответствующее измерение рассчитывается автоматически.
2. Далее выберите часть этого датасета для построения графика, выбрав 3-й столбец. Используйте оператор `:`, чтобы выбрать все строки, а затем 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) на тестовый и обучающий наборы. В Scikit-learn есть простой способ сделать это: можно разделить данные по заданному индексу.
```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()`это функция, которую вы увидите во многих библиотеках ML, таких как TensorFlow.
`model.fit()`функция, которую вы встретите во многих библиотеках машинного обучения, таких как TensorFlow
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()
```
![диаграмма рассеяния, показывающая точки данных о диабете](../../../../2-Regression/1-Tools/images/scatterplot.png)
✅ Подумайте, что здесь происходит. Прямая линия проходит через множество маленьких точек данных, но что именно она делает? Можете ли вы понять, как с помощью этой линии можно предсказать, где новый, ранее не виденный точечный элемент должен находиться относительно оси y графика? Попробуйте сформулировать практическое применение этой модели.
![диаграмма рассеяния, показывающая точки данных по диабету](../../../../translated_images/ru/scatterplot.ad8b356bcbb33be6.webp)
Поздравляем, вы создали свою первую модель линейной регрессии, сделали предсказание с её помощью и отобразили его на графике!
---
## 🚀Задание
✅ Подумайте немного о том, что здесь происходит. Прямая линия проходит через множество маленьких точек данных, но что именно она делает? Видите ли вы, как с помощью этой линии можно предсказать, где должна располагаться новая, ранее не виденная точка данных относительно оси 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 делает процесс создания моделей и их
---
**Отказ от ответственности**:
Этот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Отказ от ответственности**:
Этот документ был переведен с использованием сервиса машинного перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия по обеспечению точности, имейте в виду, что автоматический перевод может содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется обратиться к профессиональному человеческому переводу. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования этого перевода.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,62 +1,62 @@
# Построение модели регрессии с использованием Scikit-learn: подготовка и визуализация данных
# Построение регрессионной модели с использованием Scikit-learn: подготовка и визуализация данных
![Инфографика визуализации данных](../../../../2-Regression/2-Data/images/data-visualization.png)
![Инфографика визуализации данных](../../../../translated_images/ru/data-visualization.54e56dded7c1a804.webp)
Инфографика от [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [Тест перед лекцией](https://ff-quizzes.netlify.app/en/ml/)
## [Викторина перед лекцией](https://ff-quizzes.netlify.app/en/ml/)
> ### [Этот урок доступен на языке R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
> ### [Этот урок доступен на R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
## Введение
Теперь, когда вы настроили инструменты, необходимые для создания моделей машинного обучения с помощью Scikit-learn, вы готовы начать задавать вопросы вашим данным. Работая с данными и применяя решения ML, очень важно уметь задавать правильные вопросы, чтобы максимально раскрыть потенциал вашего набора данных.
Теперь, когда у вас настроены инструменты, необходимые для начала построения моделей машинного обучения с использованием Scikit-learn, вы готовы начать задавать вопросы своим данным. При работе с данными и применении решений на основе машинного обучения очень важно понимать, как правильно формулировать вопрос, чтобы раскрыть потенциал вашего набора данных.
В этом уроке вы узнаете:
- Как подготовить данные для построения модели.
- Как использовать Matplotlib для визуализации данных.
- Как использовать Seaborn для более выразительной визуализации данных.
## Задаем правильные вопросы к данным
## Правильный вопрос к вашим данным
Вопрос, на который вы хотите получить ответ, определит, какие алгоритмы машинного обучения вы будете использовать. А качество ответа будет сильно зависеть от характера ваших данных.
Вопрос, на который вы хотите получить ответ, определит, какие типы алгоритмов машинного обучения вы будете использовать. А качество ответа во многом зависит от характера ваших данных.
Посмотрите на [данные](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' и другие значения. Фактически данные довольно запутаны.
[![ML для начинающих - Как анализировать и очищать набор данных](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML для начинающих - Как анализировать и очищать набор данных")
> 🎥 Нажмите на изображение выше, чтобы посмотреть короткое видео о подготовке данных для этого урока.
> 🎥 Нажмите на изображение выше для просмотра короткого видео о подготовке данных для этого урока.
На самом деле, редко можно получить набор данных, который полностью готов к использованию для создания модели машинного обучения "из коробки". В этом уроке вы научитесь готовить необработанный набор данных с использованием стандартных библиотек Python. Вы также узнаете различные техники визуализации данных.
На самом деле, редко когда предоставляют готовый набор данных, полностью пригодный для непосредственного создания модели машинного обучения. В этом уроке вы научитесь готовить необработанный набор данных с помощью стандартных библиотек Python. Также вы узнаете различные техники визуализации данных.
## Пример: рынок тыкв
## Кейсовое исследование: «рынок тыкв»
В этой папке вы найдете .csv файл в корневой папке `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), распространяемых Министерством сельского хозяйства США.
В этой папке вы найдете .csv файл в корневой папке `data`, который называется [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv). В нем 1757 строк данных о рынке тыкв, сгруппированных по городам. Это необработанные данные, извлечённые из [Специальных отчетов терминальных рынков сельхозпродукции](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. Преобразуйте даты в формат месяца (это даты США, формат `MM/DD/YYYY`).
1. Преобразуйте даты в формат месяца (это даты в американском формате `MM/DD/YYYY`).
2. Извлеките месяц в новый столбец.
Откройте файл _notebook.ipynb_ в Visual Studio Code и импортируйте таблицу в новый датафрейм Pandas.
Откройте файл _notebook.ipynb_ в Visual Studio Code и импортируйте таблицу в новый DataFrame Pandas.
1. Используйте функцию `head()`, чтобы просмотреть первые пять строк.
1. Используйте функцию `head()` чтобы просмотреть первые пять строк.
```python
import pandas as pd
@ -66,28 +66,28 @@
✅ Какую функцию вы бы использовали, чтобы просмотреть последние пять строк?
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,23 +96,23 @@
```
Вы можете вывести любые данные для проверки, используя `print(month)`.
Можете вывести любые данные на печать для проверки с помощью `print(month)`.
2. Теперь скопируйте преобразованные данные в новый датафрейм Pandas:
2. Теперь скопируйте преобразованные данные в новый DataFrame Pandas:
```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 бушеля', некоторые — '1/2 бушеля', некоторые — по одной тыкве, некоторые — за фунт, а некоторые — большими коробками разной ширины.
> Тыквы, кажется, очень сложно взвесить одинаково
> Похоже, тыквы очень трудно взвесить однородно
Изучая исходные данные, интересно, что все, у чего `Unit of Sale` равно 'EACH' или 'PER BIN', также имеют тип `Package` в дюймах, на ящик или 'each'. Тыквы, кажется, очень сложно взвесить одинаково, поэтому давайте отфильтруем их, выбрав только тыквы со строкой 'bushel' в столбце `Package`.
При детальном изучении исходных данных, интересно, что все записи с `Unit of Sale`, равным 'EACH' или 'PER BIN', имеют тип `Package` с указанием в дюймах, per bin или 'each'. Тыквы действительно сложно взвесить точно, так что отфильтруем их, выбрав только тыквы с строкой 'bushel' в столбце `Package`.
1. Добавьте фильтр в начале файла, под импортом .csv:
@ -120,13 +120,13 @@
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
```
Если вы выведете данные сейчас, вы увидите, что получаете только около 415 строк данных, содержащих тыквы по бушелю.
Если вывести данные сейчас, вы увидите только около 415 строк с тыквами в мерах бушеля.
### Но подождите! Нужно сделать еще кое-что
### Но подождите! Нужно сделать ещё кое-что
Вы заметили, что количество бушелей варьируется по строкам? Вам нужно нормализовать цены, чтобы показать цены за бушель, поэтому выполните некоторые вычисления для стандартизации.
Замечали, что количество бушелей варьируется в каждой строке? Нужно нормализовать цены, чтобы показывать цену за один бушель, поэтому сделайте соответствующие арифметические преобразования для стандартизации.
1. Добавьте эти строки после блока, создающего датафрейм new_pumpkins:
1. Добавьте эти строки после блока, создающего DataFrame new_pumpkins:
```python
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)
@ -134,38 +134,38 @@
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 фунтов». Всё довольно сложно! Давайте не будем преобразовывать бушель в фунты, а определим цену за бушель. Все эти исследования бушелей тыкв показывают, насколько важно понимать природу ваших данных!
Теперь вы можете анализировать цены за единицу на основе их измерения в бушелях. Если вы снова выведете данные, вы увидите, как они стандартизированы.
Теперь вы можете анализировать цены за единицу, основываясь на их мере бушеля. Если вы выведете данные ещё раз, увидите, как они стандартизированы.
Вы заметили, что тыквы, продаваемые за полбушеля, очень дорогие? Можете ли вы понять, почему? Подсказка: маленькие тыквы намного дороже больших, вероятно, потому что их намного больше на бушель, учитывая неиспользованное пространство, занимаемое одной большой пустой тыквой для пирога.
Заметили, что тыквы, продающиеся по половине бушеля, очень дорогие? Можете понять, почему? Подсказка: маленькие тыквы значительно дороже больших, вероятно потому, что их гораздо больше в одном бушеле, учитывая неиспользуемое пространство, занятое одной большой пустой тыквой для пирога.
## Стратегии визуализации
Часть работы специалиста по данным заключается в демонстрации качества и характера данных, с которыми он работает. Для этого они часто создают интересные визуализации, такие как графики, диаграммы и таблицы, показывающие различные аспекты данных. Таким образом, они могут визуально показать отношения и пробелы, которые иначе трудно обнаружить.
Часть работы специалиста по данным — демонстрировать качество и характер данных, с которыми он работает. Для этого часто создают интересные визуализации, диаграммы, графики и таблицы, показывая разные аспекты данных. Так они могут визуально показать взаимосвязи и пробелы, которые иначе трудно обнаружить.
[![ML для начинающих - Как визуализировать данные с помощью Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML для начинающих - Как визуализировать данные с помощью Matplotlib")
[![ML для начинающих - Как визуализировать данные с Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML для начинающих - Как визуализировать данные с Matplotlib")
> 🎥 Нажмите на изображение выше, чтобы посмотреть короткое видео о визуализации данных для этого урока.
> 🎥 Нажмите на изображение выше для просмотра короткого видео о визуализации данных для этого урока.
Визуализации также могут помочь определить технику машинного обучения, наиболее подходящую для данных. Например, диаграмма рассеяния, которая, кажется, следует линии, указывает на то, что данные подходят для упражнения по линейной регрессии.
Визуализации также помогают определить, какой метод машинного обучения лучше всего подходит для данных. Диаграмма рассеяния, которая кажется идущей по линии, например, указывает, что данные подходят для линейной регрессии.
Одна из библиотек визуализации данных, которая хорошо работает в Jupyter notebooks, — это [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
Попробуйте создать несколько базовых графиков, чтобы отобразить новый датафрейм, который вы только что создали. Что покажет базовый линейный график?
Попробуйте создать базовые графики для отображения нового DataFrame, который вы создали. Что бы показал простой линейный график?
1. Импортируйте Matplotlib в начале файла, под импортом Pandas:
1. Импортируйте Matplotlib вверху файла, под импортом Pandas:
```python
import matplotlib.pyplot as plt
```
1. Перезапустите весь notebook, чтобы обновить данные.
1. Внизу notebook добавьте ячейку для построения данных в виде коробки:
1. Перезапустите весь ноутбук для обновления.
1. Внизу ноутбука добавьте ячейку для построения box-графика (ящика с усами):
```python
price = new_pumpkins.Price
@ -174,44 +174,121 @@
plt.show()
```
![Диаграмма рассеяния, показывающая связь между ценой и месяцем](../../../../2-Regression/2-Data/images/scatterplot.png)
![Диаграмма рассеяния, показывающая зависимость цены от месяца](../../../../translated_images/ru/scatterplot.b6868f44cbd2051c.webp)
Является ли это полезным графиком? Удивляет ли вас что-то в нем?
Это полезный график? Что-то вас удивило?
Это не особенно полезно, так как он просто отображает ваши данные в виде набора точек в заданный месяц.
На самом деле, он не очень полезен, так как просто показывает разброс ваших данных по месяцам в виде точек.
### Сделаем его полезным
### Сделайте его полезным
Чтобы графики отображали полезные данные, обычно нужно как-то сгруппировать данные. Давайте попробуем создать график, где ось y показывает месяцы, а данные демонстрируют распределение.
Чтобы графики показывали полезную информацию, обычно данные нужно как-то сгруппировать. Попробуем создать график со столбцами, где ось Y показывает месяцы, а данные демонстрируют распределение.
1. Добавьте ячейку для создания сгруппированной столбчатой диаграммы:
1. Добавьте ячейку для построения сгруппированной столбчатой диаграммы:
```python
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')
plt.ylabel("Pumpkin Price")
```
![Столбчатая диаграмма, показывающая связь между ценой и месяцем](../../../../2-Regression/2-Data/images/barchart.png)
![Сгруппированная столбчатая диаграмма, показывающая зависимость цены от месяца](../../../../translated_images/ru/barchart.a833ea9194346d76.webp)
Это более полезная визуализация! Похоже, что самая высокая цена на тыквы бывает в сентябре и октябре. Совпадает ли это с вашими ожиданиями? Почему да или почему нет?
## Упражнение — экспериментируем с Seaborn
Matplotlib мощная библиотека, но для создания аккуратной диаграммы может потребоваться много кода. [Seaborn](https://seaborn.pydata.org/) — библиотека, построенная а основе_ Matplotlib, предназначенная для статистической визуализации данных. Она работает напрямую с DataFrame Pandas, применяет привлекательные стили по умолчанию и позволяет создавать информативные графики с гораздо меньшим кодом. Поскольку Seaborn возвращает объекты Matplotlib, вы можете использовать всё, что уже знаете о Matplotlib, для тонкой настройки результатов.
> Если у вас ещё не установлена библиотека Seaborn, установите её с помощью `pip install seaborn`.
1. Импортируйте Seaborn в начале ноутбука, под другими импортами. По традиции импортируется как `sns`:
```python
import seaborn as sns
```
### Диаграммы рассеяния для демонстрации взаимосвязей
Важная часть исследования данных перед созданием модели — поиск _взаимосвязей_ между переменными. [Диаграмма рассеяния](https://ru.wikipedia.org/wiki/Диаграмма_рассеяния) — один из лучших инструментов для этого: если точки на ней располагаются вдоль линии, переменные могут коррелировать, что хорошо подходит для построения модели линейной регрессии.
1. Воссоздайте диаграмму рассеяния «цена к месяцу» с помощью функции Seaborn [`relplot()`](https://seaborn.pydata.org/generated/seaborn.relplot.html) (relation plot), которая работает напрямую со столбцами вашего DataFrame:
```python
sns.relplot(x="Price", y="Month", data=new_pumpkins)
```
![Диаграмма рассеяния Seaborn, показывающая зависимость цены от месяца](../../../../translated_images/ru/relplot.a03837d8f0329cec.webp)
Обратите внимание, как вы передаете азвания столбцов_ и DataFrame, а Seaborn сам заботится о подписях осей.
2. Вы можете переключиться на линейный график, передав параметр `kind="line"`. Seaborn даже рисует затемнённую область, показывающую доверительный интервал вокруг линии:
```python
sns.relplot(x="Price", y="Month", kind="line", data=new_pumpkins)
```
![Линейный график Seaborn, показывающий зависимость цены от месяца](../../../../translated_images/ru/lineplot.f9034ba47b1e30ee.webp)
Эти данные довольно шумные, поэтому линейный график далеко не самый наглядный выбор — но он показывает, как легко изменить тип диаграммы в Seaborn.
### Столбчатые диаграммы для демонстрации распределений
Ранее вы вручную группировали данные, чтобы создать столбчатую диаграмму с помощью Matplotlib. Seaborn's [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html) (категориальный график) может выполнять группировку и агрегацию за вас. По умолчанию `kind="bar"` показывает среднее значение каждой категории вместе с черной линией, указывающей доверительный интервал.
1. Создайте столбчатую диаграмму средней цены за месяц:
```python
sns.catplot(x="Month", y="Price", data=new_pumpkins, kind="bar")
```
![A Seaborn bar chart showing the price distribution per month](../../../../translated_images/ru/catplot.e73fc35fdf96242b.webp)
Это подтверждает то, что вы видели с Matplotlib — цены достигают пика примерно в сентябре и октябре — но Seaborn также визуализирует, насколько сильно цена арьируется_ в каждом месяце.
### Тепловые карты для отображения корреляций
Точечные диаграммы сравнивают по два переменных одновременно. Когда у вас есть несколько числовых столбцов, [тепловая карта](https://en.wikipedia.org/wiki/Heat_map) позволяет просмотреть силу связи между аждой_ парой столбцов одновременно. Это распространённый способ определить, какие признаки наиболее коррелированы, перед выбором того, что использовать в модели (а такой же тип диаграммы позже используется для отображения матриц ошибок классификации).
1. Постройте корреляционную матрицу с помощью Pandas, затем отобразите её с помощью [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html) из Seaborn. Опция `annot=True` добавляет значения корреляции в каждую ячейку:
```python
correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()
sns.heatmap(correlations, annot=True, cmap="coolwarm")
```
![A Seaborn heatmap showing correlations between the numeric columns](../../../../translated_images/ru/heatmap.bd98dce43b404c57.webp)
Значения, близкие к `1` (или `-1`), означают, что столбцы сильно _линейно_ коррелированы. Обратите внимание, как `Low Price` и `High Price` почти идеально коррелируют. `Month`, с другой стороны, показывает лишь слабую линейную корреляцию с ценой — хотя столбчатая диаграмма выше выявила явный сезонный пик в сентябре и октябре. Это важный урок: коэффициент корреляции измеряет только _прямолинейные_ отношения, поэтому он может не заметить сезонные или иные нелинейные паттерны. ✅ Почему полезно смотреть и на тепловую карту, *и* на такие графики, как столбчатая диаграмма, перед тем как решать, какие столбцы использовать?
### Matplotlib или Seaborn?
Обе библиотеки стоит знать:
- **Matplotlib** даёт тонкий контроль над каждым элементом графика и является основой, на которой строятся почти все другие библиотеки для построения графиков на Python.
- **Seaborn** предлагает функции более высокого уровня и привлекательные настройки по умолчанию для статистических графиков, работает напрямую с датафреймами и часто быстрее подходит для разведочного анализа данных.
Это более полезная визуализация данных! Кажется, она указывает на то, что самая высокая цена на тыквы приходится на сентябрь и октябрь. Соответствует ли это вашим ожиданиям? Почему или почему нет?
Распространённый рабочий процесс — сначала использовать Seaborn для быстрой первичной оценки данных, а затем переходить к Matplotlib, когда требуется детальное кастомное оформление.
---
## 🚀Задача
Исследуйте различные типы визуализации, которые предлагает Matplotlib. Какие типы наиболее подходят для задач регрессии?
Исследуйте разные типы визуализаций, которые предлагают Matplotlib и Seaborn. Какие типы наиболее подходят для задач регрессии?
## [Тест после лекции](https://ff-quizzes.netlify.app/en/ml/)
## Обзор и самостоятельное изучение
Изучите множество способов визуализации данных. Составьте список различных доступных библиотек и отметьте, какие из них лучше подходят для определенных типов задач, например, 2D-визуализации против 3D-визуализации. Что вы обнаруживаете?
Ознакомьтесь с множеством способов визуализации данных. Составьте список различных доступных библиотек и отметьте, какие лучше всего подходят для выполнения определённых задач, например, двумерной или трёхмерной визуализации. Что вы обнаружите?
## Задание
## Домашнее задание
[Исследование визуализации](assignment.md)
[Изучение визуализации](assignment.md)
---
**Отказ от ответственности**:
Этот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Отказ от ответственности**:
Этот документ был переведен с использованием сервиса машинного перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия по обеспечению точности, имейте в виду, что автоматический перевод может содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется обратиться к профессиональному человеческому переводу. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования этого перевода.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -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Этот документ был переведен с использованием сервиса автоматического перевода [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<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Отказ от ответственности**:\nЭтот документ был переведен с использованием сервиса машинного перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия по обеспечению точности, имейте в виду, что автоматический перевод может содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется обратиться к профессиональному человеческому переводу. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования этого перевода.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -424,13 +487,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "95726f0b8283628d5356a4f8eb8b4b76",
"translation_date": "2025-08-29T23:10:52+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "ru"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -1,47 +1,47 @@
# Введение в обучение с подкреплением и Q-Learning
# Введение в обучение с подкреплением и Q-обучение
![Краткое описание обучения с подкреплением в машинном обучении в виде скетчноута](../../../../sketchnotes/ml-reinforcement.png)
![Краткое содержание обучения с подкреплением в машинном обучении в виде скетчноута](../../../../translated_images/ru/ml-reinforcement.94024374d63348db.webp)
> Скетчноут от [Tomomi Imura](https://www.twitter.com/girlie_mac)
Обучение с подкреплением включает три важных понятия: агент, состояния и набор действий для каждого состояния. Выполняя действие в определённом состоянии, агент получает награду. Представьте компьютерную игру Super Mario. Вы — Марио, находитесь на уровне игры, стоите рядом с краем обрыва. Над вами монета. Вы, будучи Марио, находитесь на уровне игры в определённой позиции — это ваше состояние. Шаг вправо (действие) приведёт вас к падению с обрыва, что даст низкий числовой результат. Однако нажатие кнопки прыжка позволит вам заработать очко и остаться в живых. Это положительный исход, который должен принести вам положительный числовой результат.
Обучение с подкреплением включает три важных понятия: агент, некоторые состояния и набор действий для каждого состояния. Выполняя действие в заданном состоянии, агент получает награду. Снова представьте себе компьютерную игру Super Mario. Вы — Марио, вы на уровне игры, стоите рядом с краем обрыва. Над вами монета. Вы — Марио, на уровне игры, в конкретной позиции ... это ваше состояние. Сделать шаг вправо (действие) приведёт к тому, что вы упадёте с обрыва, и получите низкий числовой балл. Однако нажатие кнопки прыжка позволит вам заработать очко и остаться в живых. Это положительный исход, и за него вам должна быть присуждена положительная числовая награда.
Используя обучение с подкреплением и симулятор (игру), вы можете научиться играть в игру, чтобы максимизировать награду, оставаясь в живых и набирая как можно больше очков.
Используя обучение с подкреплением и симулятор (игру), вы можете научиться играть так, чтобы максимизировать награду — оставаться в живых и набирать как можно больше очков.
[![Введение в обучение с подкреплением](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo)
> 🎥 Нажмите на изображение выше, чтобы услышать, как Дмитрий рассказывает об обучении с подкреплением.
> 🎥 Нажмите на изображение выше, чтобы послушать Дмитрия, рассказывающего об обучении с подкреплением
## [Тест перед лекцией](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), который используется в коде блокнота. Поместите его в ту же папку, что и блокнот.
## Введение
В этом уроке мы исследуем мир **[Петя и волк](https://ru.wikipedia.org/wiki/Петя_и_волк)**, вдохновлённый музыкальной сказкой русского композитора [Сергея Прокофьева](https://ru.wikipedia.org/wiki/Сергей_Прокофьев). Мы будем использовать **обучение с подкреплением**, чтобы позволить Пете исследовать его окружение, собирать вкусные яблоки и избегать встречи с волком.
В этом уроке мы исследуем мир **[Петра и Волка](https://ru.wikipedia.org/wiki/Петя_и_волк)**, вдохновлённый музыкальной сказкой русского композитора, [Сергей Прокофьев](https://ru.wikipedia.org/wiki/Сергей_Прокофьев). Мы будем использовать **обучение с подкреплением**, чтобы позволить Петру исследовать окружение, собирать вкусные яблоки и избегать встречи с волком.
**Обучение с подкреплением** (RL) — это метод обучения, который позволяет нам изучить оптимальное поведение **агента** в некоторой **среде**, проводя множество экспериментов. Агент в этой среде должен иметь **цель**, определённую с помощью **функции награды**.
**Обучение с подкреплением** (RL) — это метод обучения, позволяющий нам узнать оптимальное поведение **агента** в некоторой **среде** путём проведения множества экспериментов. Агент в этой среде должен иметь некоторую **цель**, определённую через **функцию награды**.
## Среда
Для простоты представим мир Пети в виде квадратной доски размером `width` x `height`, как показано ниже:
Для простоты давайте представим мир Петра в виде квадратной доски размером `width` x `height`, вот такой:
![Среда Пети](../../../../8-Reinforcement/1-QLearning/images/environment.png)
![Среда Петра](../../../../translated_images/ru/environment.40ba3cb66256c93f.webp)
Каждая ячейка на этой доске может быть:
Каждая ячейка в этой доске может быть:
* **землёй**, по которой Петя и другие существа могут ходить.
* **водой**, по которой, очевидно, ходить нельзя.
* **деревом** или **травой**, местом, где можно отдохнуть.
* **яблоком**, которое Петя будет рад найти, чтобы подкрепиться.
* **яблоком**, которое Петя будет рад найти, чтобы накормить себя.
* **волком**, который опасен и которого следует избегать.
Существует отдельный модуль 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 *
@ -56,59 +56,59 @@ 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()) }
```
Итак, стратегия и цель этого сценария следующие:
В итоге стратегия и цель этого сценария таковы:
- **Стратегия** нашего агента (Пети) определяется так называемой **политикой**. Политика — это функция, которая возвращает действие для любого заданного состояния. В нашем случае состояние задачи представлено доской, включая текущую позицию игрока.
- **Стратегия** нашего агента (Петра) определяется так называемой **политикой**. Политика — это функция, возвращающая действие для любого заданного состояния. В нашем случае состояние задачи представлено доской, включая текущую позицию игрока.
- **Цель** обучения с подкреплением — в конечном итоге изучить хорошую политику, которая позволит нам эффективно решать задачу. Однако для начала рассмотрим самую простую политику, называемую **случайной прогулкой**.
- **Цель** обучения с подкреплением — в конечном итоге научиться хорошей политике, которая позволит эффективно решать задачу. Однако, для базового варианта рассмотрим самую простую политику, называемую **случайным блужданием**.
## Случайная прогулка
## Случайное блуждание
Сначала решим нашу задачу, реализовав стратегию случайной прогулки. При случайной прогулке мы будем случайным образом выбирать следующее действие из разрешённых действий, пока не достигнем яблока (блок кода 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 шагов.
Вы также можете увидеть, как выглядит движение Пети во время случайной прогулки:
Также вы можете увидеть, как выглядят перемещения Петра во время случайного блуждания:
![Случайная прогулка Пети](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif)
![Случайное блуждание Петра](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif)
## Функция награды
Чтобы сделать нашу политику более разумной, нам нужно понять, какие шаги "лучше" других. Для этого нам нужно определить нашу цель.
Чтобы сделать нашу политику более «умной», нам нужно понять, какие ходы «лучше» других. Для этого нужно определить нашу цель.
Цель может быть определена с помощью **функции награды**, которая возвращает некоторое числовое значение для каждого состояния. Чем выше число, тем лучше награда. (блок кода 5)
Цель можно выразить через **функцию награды**, которая возвращает численное значение для каждого состояния. Чем выше число, тем лучше награда. (кодовый блок 5)
```python
move_reward = -0.1
@ -154,39 +154,115 @@ def reward(m,pos=None):
return move_reward
```
Интересно, что в большинстве случаев *существенная награда даётся только в конце игры*. Это означает, что наш алгоритм должен каким-то образом запомнить "хорошие" шаги, которые приводят к положительной награде в конце, и увеличить их значимость. Аналогично, все шаги, ведущие к плохим результатам, должны быть исключены.
Интересная особенность функций награды заключается в том, что в большинстве случаев *нам даётся существенная награда только в конце игры*. Это означает, что наш алгоритм должен как-то запоминать «хорошие» шаги, которые приводят к положительной награде в конце, и повышать их значимость. Аналогично, все действия, ведущие к плохим результатам, должны поощряться меньше.
## Q-Learning
## Q-обучение
Алгоритм, который мы рассмотрим здесь, называется **Q-Learning**. В этом алгоритме политика определяется функцией (или структурой данных), называемой **Q-таблицей**. Она фиксирует "качество" каждого действия в заданном состоянии.
Алгоритм, который мы здесь рассмотрим, называется **Q-обучение**. В этом алгоритме политика определяется функцией (или структурой данных), называемой **Q-таблицей**. Она хранит «качество» каждого действия в каждом состоянии.
Она называется Q-таблицей, потому что её удобно представлять в виде таблицы или многомерного массива. Поскольку наша доска имеет размеры `width` x `height`, мы можем представить Q-таблицу с помощью массива numpy формы `width` x `height` x `len(actions)`: (блок кода 6)
Её называют Q-таблицей, потому что удобно представить её в виде таблицы или многомерного массива. Поскольку наша доска имеет размеры `width` x `height`, мы можем представить Q-таблицу с помощью массива 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)`.
Обратите внимание, что все значения Q-таблицы инициализируются одинаковым значением, в нашем случае — 0.25. Это соответствует политике случайного блуждания, поскольку все действия в каждом состоянии равнозначны. Мы можем передать Q-таблицу в функцию `plot` для визуализации таблицы на доске: `m.plot(Q)`.
![Среда Пети](../../../../8-Reinforcement/1-QLearning/images/env_init.png)
![Среда Петра](../../../../translated_images/ru/env_init.04e8f26d2d60089e.webp)
В центре каждой ячейки находится "стрелка", указывающая предпочтительное направление движения. Поскольку все направления равны, отображается точка.
В центре каждой ячейки показана «стрелка», указывающая предпочтительное направление движения. Поскольку все направления равны, отображается точка.
Теперь нам нужно запустить симуляцию, исследовать нашу среду и изучить лучшее распределение значений Q-таблицы, которое позволит нам гораздо быстрее найти путь к яблоку.
Теперь нам нужно запустить симуляцию, исследовать среду и обучить лучшее распределение значений Q-таблицы, что позволит нам гораздо быстрее находить путь к яблоку.
## Суть Q-Learning: уравнение Беллмана
## Суть Q-обучения: уравнение Беллмана
Как только мы начинаем двигаться, каждое действие будет иметь соответствующую награду, то есть теоретически мы можем выбрать следующее действие на основе наивысшей немедленной награды. Однако в большинстве состояний шаг не приведёт нас к цели — достижению яблока, и мы не сможем сразу решить, какое направление лучше.
Как только мы начнём движение, каждое действие будет иметь соответствующую награду, то есть мы теоретически можем выбрать следующее действие, основываясь на наивысшей немедленной награде. Однако во многих состояниях ход не приведёт к нашей цели — достижению яблока, и поэтому мы не можем сразу определить, какое направление лучше.
> Помните, что важен не немедленный результат, а конечный результат, который мы получим в конце симуляции.
> Помните, что важен не немедленный результат, а итоговый результат, который мы получим в конце симуляции.
Чтобы учитывать эту отложенную награду, нам нужно использовать принципы **[динамического программирования](https://ru.wikipedia.org/wiki/Динамическое_программирование)**, которые позволяют рассматривать нашу задачу рекурсивно.
Чтобы учитывать эту отложенную награду, нам нужно использовать принципы **[динамического программирования](https://ru.wikipedia.org/wiki/Динамическое_программирование)**, позволяющие рекурсивно рассматривать нашу задачу.
Предположим, что мы сейчас находимся в состоянии *s* и хотим перейти в следующее состояние *s'*. При этом мы получим немедленную награду *r(s,a)*, определённую функцией награды, плюс некоторую будущую награду. Если предположить, что наша Q-таблица правильно отражает "привлекательность" каждого действия, то в состоянии *s'* мы выберем действие *a*, соответствующее максимальному значению *Q(s',a')*. Таким образом, лучшая возможная будущая награда, которую мы могли бы получить в состоянии *s*, будет определена как `max`
Предположим, что мы сейчас в состоянии *s* и хотим перейти в следующее состояние *s'*. При этом мы получим немедленную награду *r(s,a)*, заданную функцией награды, плюс некоторую будущую награду. Если предположить, что наша Q-таблица корректно отражает «привлекательность» каждого действия, то в состоянии *s'* мы выберем действие *a*, соответствующее максимальному значению *Q(s',a')*. Таким образом, лучшая возможная будущая награда для состояния *s* определяется как `max`<sub>a'</sub>*Q(s',a')* (максимум берётся по всем возможным действиям *a'* в состоянии *s'*).
Это даёт **формулу Беллмана** для вычисления значения Q-таблицы в состоянии *s* при выборе действия *a*:
<img src="../../../../translated_images/ru/bellman-equation.7c0c4c722e5a6b7c.webp"/>
Здесь γ — так называемый **коэффициент дисконтирования**, определяющий, в какой степени нужно отдавать предпочтение текущей награде перед будущей и наоборот.
## Алгоритм обучения
Исходя из приведённого уравнения, мы можем записать псевдокод нашего алгоритма обучения:
* Инициализировать Q-таблицу Q одинаковыми числами для всех состояний и действий
* Установить скорость обучения α ← 1
* Повторять симуляцию много раз
1. Начать с случайной позиции
1. Повторять
1. Выбрать действие *a* в состоянии *s*
2. Выполнить действие, перейдя в новое состояние *s'*
3. Если достигнуто условие окончания игры или итоговая награда слишком мала — завершить симуляцию
4. Вычислить награду *r* в новом состоянии
5. Обновить Q-функцию согласно уравнению Беллмана: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ max<sub>a'</sub>Q(s',a'))*
6. *s* ← *s'*
7. Обновить суммарную награду и уменьшить α.
## Использование vs исследование
В приведённом алгоритме не уточняется, как именно выбрать действие на шаге 2.1. Если выбирать действие случайно, то мы будем случайно **исследовать** среду, и, вероятно, часто погибать, а также исследовать области, куда мы обычно не зашли бы. Альтернативным подходом было бы **использовать** значения Q-таблицы, которые мы уже знаем, и выбирать лучшее действие (с наивысшим значением Q) в состоянии *s*. Однако это помешало бы исследовать другие состояния, и, вероятно, мы не нашли бы оптимальное решение.
Таким образом, лучший подход — найти баланс между исследованием и использованием. Это можно сделать, выбирая действие в состоянии *s* с вероятностями, пропорциональными значениям в Q-таблице. Вначале, когда все значения в Q-таблице одинаковы, это будет соответствовать случайному выбору, но по мере нашего обучения мы будем чаще следовать оптимальному маршруту, позволяя агенту иногда выбирать неизведанный путь.
## Реализация на Python
Теперь мы готовы реализовать алгоритм обучения. Перед этим нам нужна функция, которая преобразует произвольные числа из Q-таблицы в вектор вероятностей для соответствующих действий.
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
```
После выполнения этого алгоритма Q-таблица должна обновиться значениями, определяющими привлекательность разных действий на каждом шаге. Мы можем попытаться визуализировать Q-таблицу, нарисовав в каждой ячейке вектор, который указывает в желаемом направлении для движения. Для простоты вместо наконечника стрелки рисуем маленький кружок.
<img src="../../../../translated_images/ru/learned.ed28bcd8484b5287.webp"/>
## Проверка политики
Поскольку Q-Table содержит "привлекательность" каждого действия в каждом состоянии, использовать её для определения эффективной навигации в нашем мире довольно просто. В самом простом случае мы можем выбрать действие, соответствующее наибольшему значению в Q-Table: (код блок 9)
Поскольку Q-таблица показывает «привлекательность» каждого действия в каждом состоянии, довольно просто использовать её для определения эффективной навигации в нашем мире. В простейшем случае мы можем выбрать действие, соответствующее наивысшему значению Q-таблицы: (кодовый блок 9)
```python
def qpolicy_strict(m):
@ -198,17 +274,18 @@ def qpolicy_strict(m):
walk(m,qpolicy_strict)
```
> Если вы попробуете код выше несколько раз, то заметите, что иногда он "зависает", и вам нужно нажать кнопку STOP в ноутбуке, чтобы прервать выполнение. Это происходит потому, что могут возникнуть ситуации, когда два состояния "указывают" друг на друга с точки зрения оптимального значения Q-Value, в результате чего агент бесконечно перемещается между этими состояниями.
> Если вы попробуете запустить код выше несколько раз, вы можете заметить, что иногда он "зависает", и вам приходится нажимать кнопку СТОП в блокноте, чтобы прервать выполнение. Это происходит потому, что могут быть ситуации, когда два состояния "смотрят" друг на друга с точки зрения оптимального 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,21 +297,23 @@ def qpolicy(m):
print_statistics(qpolicy)
```
После выполнения этого кода вы должны получить значительно меньшую среднюю длину пути, в диапазоне от 3 до 6.
После запуска этого кода вы получите значительно меньшую среднюю длину пути, чем раньше, в диапазоне от 3 до 6.
## Исследование процесса обучения
Как мы уже упоминали, процесс обучения — это баланс между исследованием и использованием накопленных знаний о структуре пространства задачи. Мы видели, что результаты обучения (способность агента находить короткий путь к цели) улучшились, но также интересно наблюдать, как средняя длина пути изменяется в процессе обучения:
Как мы уже упоминали, процесс обучения — это баланс между исследованием и использованием накопленных знаний о структуре пространства задачи. Мы видели, что результаты обучения (способность помогать агенту находить короткий путь к цели) улучшились, но также интересно наблюдать, как средняя длина пути ведёт себя во время процесса обучения:
<img src="../../../../translated_images/ru/lpathlen1.0534784add58d4eb.webp"/>
## Выводы из обучения:
Результаты обучения можно обобщить так:
- **Средняя длина пути увеличивается**. На начальном этапе средняя длина пути увеличивается. Это, вероятно, связано с тем, что, не зная ничего о среде, мы склонны попадать в плохие состояния, такие как вода или волк. По мере того как мы узнаём больше и начинаем использовать эти знания, мы можем исследовать среду дольше, но всё ещё плохо знаем, где находятся яблоки.
- **Средняя длина пути увеличивается**. Здесь мы видим, что сначала средняя длина пути увеличивается. Это, вероятно, связано с тем, что, не зная ничего об окружении, агент велик шанс «застрять» в плохих состояниях, таких как вода или волк. По мере получения знаний мы можем исследовать окружение дольше, но всё ещё плохо знаем, где находятся яблоки.
- **Длина пути уменьшается по мере обучения**. Когда мы узнаём достаточно, агенту становится легче достигать цели, и длина пути начинает уменьшаться. Однако мы всё ещё открыты для исследования, поэтому часто отклоняемся от оптимального пути и пробуем новые варианты, что делает путь длиннее, чем оптимальный.
- **Длина пути уменьшается по мере обучения**. Когда агент достаточно научился, ему становится легче достигать цели, и длина пути начинает сокращаться. Однако мы всё ещё не исключаем исследование, и агент часто отклоняется от лучшего пути, исследуя новые варианты, из-за чего путь становится длиннее оптимального.
- **Резкое увеличение длины**. На графике также видно, что в какой-то момент длина пути резко увеличивается. Это указывает на стохастическую природу процесса, и на то, что мы можем "испортить" коэффициенты Q-Table, перезаписав их новыми значениями. Это желательно минимизировать, уменьшая скорость обучения (например, ближе к концу обучения мы корректируем значения Q-Table только на небольшую величину).
- **Резкий рост длины пути**. Также на этом графике видно, что в какой-то момент длина пути резко увеличилась. Это свидетельствует о стохастической природе процесса и о том, что мы в какой-то момент можем "испортить" коэффициенты Q-таблицы, перезаписав их новыми значениями. Этого желательно избегать, уменьшая скорость обучения (например, к концу тренировки мы корректируем значения Q-таблицы малыми величинами).
В целом важно помнить, что успех и качество процесса обучения значительно зависят от параметров, таких как скорость обучения, её уменьшение и коэффициент дисконтирования. Эти параметры часто называют **гиперпараметрами**, чтобы отличить их от **параметров**, которые мы оптимизируем во время обучения (например, коэффициенты Q-Table). Процесс поиска лучших значений гиперпараметров называется **оптимизацией гиперпараметров**, и он заслуживает отдельного обсуждения.
В целом важно помнить, что успех и качество процесса обучения существенно зависят от параметров, таких как скорость обучения, затухание скорости обучения и коэффициент дисконтирования. Их часто называют **гиперпараметрами**, чтобы отличить от **параметров**, которые мы оптимизируем во время обучения (например, коэффициенты Q-таблицы). Процесс поиска наилучших значений гиперпараметров называется **оптимизацией гиперпараметров** и заслуживает отдельной темы.
## [Тест после лекции](https://ff-quizzes.netlify.app/en/ml/)
@ -243,5 +322,7 @@ print_statistics(qpolicy)
---
**Отказ от ответственности**:
Этот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия обеспечить точность, имейте в виду, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Отказ от ответственности**:
Этот документ был переведен с использованием сервиса машинного перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия по обеспечению точности, имейте в виду, что автоматический перевод может содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется обратиться к профессиональному человеческому переводу. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования этого перевода.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,14 +1,34 @@
## Предварительные требования
# Катание на CartPole
В этом уроке мы будем использовать библиотеку **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-обучение.
![Великое бегство!](../../../../translated_images/ru/escape.18862db9930337e3.webp)
> Пётр и его друзья проявляют изобретательность, чтобы убежать от волка! Изображение от [Jen Looper](https://twitter.com/jenlooper)
Мы будем использовать упрощённую версию балансирования, известную как задача **CartPole**. В мире cartpole у нас есть горизонтальный ползунок, который может двигаться влево или вправо, а цель — удержать вертикальный стержень на ползунке в равновесии.
<img alt="a cartpole" src="../../../../translated_images/ru/cartpole.b5609cc0494a14f7.webp" width="200"/>
## Предварительные знания
В этом уроке мы будем использовать библиотеку **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 мы можем создавать различные **среды** — от симуляции CartPole до игр Atari.
На прошлом уроке правила игры и состояние задавались классом `Board`, который мы определили сами. Здесь мы будем использовать специальное **симуляционное окружение**, которое будет моделировать физику балансирующего стержня. Одно из самых популярных симуляционных окружений для обучения алгоритмов обучения с подкреплением называется [Gym](https://gym.openai.com/), поддерживаемое [OpenAI](https://openai.com/). Используя этот gym, мы можем создавать разные **окружения** — от симуляции cartpole до игр Atari.
> **Примечание**: Вы можете увидеть другие доступные среды 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,13 +40,13 @@ import numpy as np
import random
```
## Упражнение — инициализация среды CartPole
## Упражнение - инициализировать окружение cartpole
Чтобы работать с задачей балансировки CartPole, нам нужно инициализировать соответствующую среду. Каждая среда связана с:
Чтобы работать с задачей балансирования cartpole, нам нужно инициализировать соответствующее окружение. Каждое окружение связано с:
- **Пространством наблюдений**, которое определяет структуру информации, получаемой из среды. Для задачи CartPole мы получаем положение шеста, скорость и некоторые другие значения.
- **Пространством наблюдений (Observation space)**, которое определяет структуру информации, которую мы получаем из окружения. Для задачи cartpole мы получаем позицию стержня, скорость и некоторые другие значения.
- **Пространством действий**, которое определяет возможные действия. В нашем случае пространство действий дискретное и состоит из двух действий — **влево** и **вправо**. (блок кода 2)
- **Пространством действий (Action space)**, которое определяет возможные действия. В нашем случае пространство действий дискретное и состоит из двух действий — **влево** и **вправо**. (блок кода 2)
1. Для инициализации введите следующий код:
@ -37,11 +57,11 @@ import random
print(env.action_space.sample())
```
Чтобы понять, как работает среда, давайте запустим короткую симуляцию на 100 шагов. На каждом шаге мы предоставляем одно из действий, которое нужно выполнить — в этой симуляции мы просто случайным образом выбираем действие из `action_space`.
Чтобы понять, как работает окружение, давайте запустим короткую симуляцию на 100 шагов. На каждом шаге мы будем задавать одно из возможных действий — в этой симуляции мы просто случайным образом выбираем действие из `action_space`.
1. Запустите код ниже и посмотрите, к чему это приведет.
1. Запустите код ниже и посмотрите, к чему это приведёт.
✅ Помните, что предпочтительно запускать этот код на локальной установке Python! (блок кода 3)
✅ Помните, что предпочтительно выполнять этот код на локальной установке Python! (блок кода 3)
```python
env.reset()
@ -52,11 +72,11 @@ import random
env.close()
```
Вы должны увидеть что-то похожее на это изображение:
Вы должны увидеть нечто подобное на это изображение:
![небалансирующий CartPole](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif)
![cartpole без балансировки](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif)
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. Это потому, что наша цель — выживать как можно дольше, то есть удерживать стержень в достаточно вертикальном положении максимально долго.
На самом деле симуляция CartPole считается решенной, если нам удается получить среднее вознаграждение 195 за 100 последовательных попыток.
Фактически, симуляция CartPole считается решённой, если мы достигаем среднего вознаграждения 195 за 100 последовательных испытаний.
## Дискретизация состояния
В Q-Learning нам нужно построить Q-таблицу, которая определяет, что делать в каждом состоянии. Чтобы это сделать, состояние должно быть **дискретным**, точнее, оно должно содержать конечное количество дискретных значений. Таким образом, нам нужно каким-то образом **дискретизировать** наши наблюдения, сопоставляя их с конечным набором состояний.
В Q-обучении нам нужно построить Q-таблицу, которая определяет, что делать в каждом состоянии. Чтобы это сделать, наше состояние должно быть **дискретным**, точнее, должно содержать конечное число дискретных значений. Значит, нам нужно как-то **дискретизировать** наши наблюдения, отображая их в конечный набор состояний.
Есть несколько способов сделать это:
Есть несколько способов это сделать:
- **Разделение на интервалы**. Если мы знаем интервал определенного значения, мы можем разделить этот интервал на несколько **интервалов**, а затем заменить значение номером интервала, к которому оно принадлежит. Это можно сделать с помощью метода numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html). В этом случае мы точно будем знать размер состояния, так как он будет зависеть от количества интервалов, которые мы выберем для дискретизации.
- **Разбиение на интервалы (bins)**. Если мы знаем интервал некоторого значения, мы можем разделить этот интервал на несколько **корзин (bins)** и заменить значение номером корзины, к которой оно принадлежит. Это можно сделать с помощью функции numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html). В этом случае мы точно знаем размерность состояния, так как она будет зависеть от количества выбранных корзин для дискретизации.
✅ Можно использовать линейную интерполяцию, чтобы привести значения к некоторому конечному интервалу (скажем, от -20 до 20), а затем преобразовать числа в целые, округляя их. Это даёт меньше контроля над размером состояния, особенно если вы не знаете точные диапазоны входных значений. Например, в нашем случае 2 из 4 значений не имеют верхних или нижних границ, что может привести к бесконечному количеству состояний.
✅ Мы можем использовать линейную интерполяцию, чтобы привести значения к некоторому конечному интервалу (например, от -20 до 20), а затем преобразовать числа в целые, округляя их. Это дает нам немного меньше контроля над размером состояния, особенно если мы не знаем точных диапазонов входных значений. Например, в нашем случае 2 из 4 значений не имеют верхних/нижних границ, что может привести к бесконечному количеству состояний.
В нашем примере мы выберем второй подход. Как вы увидите позже, несмотря на неопределённые границы, эти значения редко выходят за пределы некоторых конечных интервалов, значит состояния с экстремальными значениями будут очень редки.
В нашем примере мы выберем второй подход. Как вы можете заметить позже, несмотря на неопределенные верхние/нижние границы, эти значения редко выходят за пределы определенных конечных интервалов, поэтому состояния с экстремальными значениями будут очень редкими.
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 @@ import random
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 @@ import random
env.close()
```
✅ Раскомментируйте строку, начинающуюся с `env.render`, если хотите увидеть, как выполняется среда. В противном случае вы можете выполнить ее в фоновом режиме, что быстрее. Мы будем использовать это "невидимое" выполнение во время процесса Q-Learning.
✅ Раскомментируйте строку, начинающуюся с env.render, если хотите видеть выполнение окружения. В противном случае можно выполнять его в фоновом режиме — это быстрее. Мы будем использовать такое «невидимое» выполнение во время процесса Q-обучения.
## Структура Q-таблицы
В предыдущем уроке состояние было простой парой чисел от 0 до 8, и поэтому было удобно представлять Q-таблицу в виде тензора numpy с формой 8x8x2. Если мы используем дискретизацию с интервалами, размер нашего вектора состояния также известен, поэтому мы можем использовать тот же подход и представлять состояние в виде массива формы 20x20x10x10x2 (здесь 2 — это размерность пространства действий, а первые измерения соответствуют количеству интервалов, которые мы выбрали для каждого из параметров в пространстве наблюдений).
В предыдущем уроке состояние было простой парой чисел от 0 до 8, и поэтому было удобно представлять Q-таблицу как numpy-тензор размером 8x8x2. Если мы используем дискретизацию корзинами, размерность нашего вектора состояния тоже известна, поэтому мы можем использовать тот же подход и представить состояние массивом формы 20x20x10x10x2 (где 2 — размерность пространства действий, а первые размеры соответствуют количеству корзин для каждого из параметров в пространстве наблюдений).
Однако иногда точные размеры пространства наблюдений неизвестны. В случае функции `discretize` мы никогда не можем быть уверены, что наше состояние остается в определенных пределах, потому что некоторые из исходных значений не ограничены. Таким образом, мы будем использовать немного другой подход и представлять Q-таблицу в виде словаря.
Однако иногда точный размер пространства наблюдений неизвестен. В случае функции `discretize` мы никогда не можем быть уверены, что наше состояние останется в определённых пределах, так как некоторые из исходных значений не ограничены. Поэтому мы используем немного другой подход и представим Q-таблицу словарём.
1. Используйте пару *(state,action)* в качестве ключа словаря, а значение будет соответствовать значению записи Q-таблицы. (блок кода 9)
1. Используйте пару *(state,action)* как ключ словаря, а значением будет соответствующая запись Q-таблицы. (блок кода 9)
```python
Q = {}
@ -168,38 +188,38 @@ import random
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` позже.
`gamma` — это **коэффициент дисконтирования**, который показывает, в какой степени мы должны отдавать предпочтение будущему вознаграждению над текущим.
Здесь `alpha` — это **скорость обучения**, которая определяет, насколько сильно мы должны корректировать текущие значения Q-таблицы на каждом шаге. В предыдущем уроке мы начинали с 1, а затем уменьшали `alpha` во время обучения. В этом примере мы оставим её постоянной для простоты, хотя вы можете потом поэкспериментировать и изменить значение `alpha`.
`epsilon` — это **фактор исследования/эксплуатации**, который определяет, должны ли мы предпочитать исследование или эксплуатацию. В нашем алгоритме мы будем в `epsilon` процентах случаев выбирать следующее действие в соответствии со значениями Q-таблицы, а в оставшихся случаях выполнять случайное действие. Это позволит нам исследовать области пространства поиска, которые мы никогда раньше не видели.
`gamma` — это **коэффициент дисконтирования**, показывающий, насколько важно учитывать будущее вознаграждение по сравнению с текущим.
В терминах балансировки — выбор случайного действия (исследование) будет действовать как случайный толчок в неправильном направлении, и шесту придется научиться восстанавливать баланс после этих "ошибок".
`epsilon` — это **фактор исследования/использования**, который определяет, стоит ли предпочесть исследование или использование. В нашем алгоритме в `epsilon` процентов случаев следующее действие выбирается на основе значений Q-таблицы, а в оставшихся случаях выполняется случайное действие. Это позволяет исследовать области пространства поиска, которые мы ранее не видели.
### Улучшение алгоритма
✅ Что касается балансировки — выбор случайного действия (исследование) действует как случайный толчок в неправильном направлении, и стержень должен научиться восстанавливаться после этих «ошибок».
Мы также можем внести два улучшения в наш алгоритм из предыдущего урока:
### Улучшаем алгоритм
- **Рассчитать среднее накопленное вознаграждение** за ряд симуляций. Мы будем выводить прогресс каждые 5000 итераций и усреднять наше накопленное вознаграждение за этот период времени. Это означает, что если мы получим более 195 очков, мы можем считать задачу решенной, с качеством даже выше требуемого.
Мы также можем внести два улучшения в наш алгоритм с предыдущего урока:
- **Рассчитать максимальный средний накопленный результат**, `Qmax`, и мы будем сохранять Q-таблицу, соответствующую этому результату. Когда вы запустите обучение, вы заметите, что иногда средний накопленный результат начинает снижаться, и мы хотим сохранить значения Q-таблицы, которые соответствуют лучшей модели, наблюдаемой во время обучения.
- **Вычислять среднюю накопленную награду** за несколько симуляций. Мы будем выводить прогресс каждые 5000 итераций и усреднять накопленную награду за этот период. Это значит, что если мы получаем более 195 очков — мы можем считать задачу решённой с ещё более высоким качеством, чем требуется.
- **Вычислять максимальный средний накопленный результат**, `Qmax`, и сохранять Q-таблицу для этой лучшей модели. При запуске обучения вы заметите, что средний накопленный результат иногда начинает падать, и мы хотим сохранить значения Q-таблицы, соответствующие лучшей модели, найденной во время тренировки.
1. Соберите все накопленные вознаграждения на каждой симуляции в вектор `rewards` для дальнейшего построения графика. (блок кода 11)
1. Собираем все накопленные награды каждой симуляции в вектор `rewards` для последующего построения графиков. (блок кода 11)
```python
def probs(v,eps=1e-4):
@ -214,15 +234,15 @@ import random
obs = env.reset()
done = False
cum_reward=0
# == do the simulation ==
# == выполнить симуляцию ==
while not done:
s = discretize(obs)
if random.random()<epsilon:
# exploitation - chose the action according to Q-Table probabilities
# эксплуатация - выбрать действие согласно вероятностям в Q-таблице
v = probs(np.array(qvalues(s)))
a = random.choices(actions,weights=v)[0]
else:
# exploration - randomly chose the action
# исследование - случайно выбрать действие
a = np.random.randint(env.action_space.n)
obs, rew, done, info = env.step(a)
@ -231,7 +251,7 @@ import random
Q[(s,a)] = (1 - alpha) * Q.get((s,a),0) + alpha * (rew + gamma * max(qvalues(ns)))
cum_rewards.append(cum_reward)
rewards.append(cum_reward)
# == Periodically print results and calculate average reward ==
# == Периодически выводить результаты и вычислять среднее вознаграждение ==
if epoch%5000==0:
print(f"{epoch}: {np.average(cum_rewards)}, alpha={alpha}, epsilon={epsilon}")
if np.average(cum_rewards) > Qmax:
@ -240,25 +260,25 @@ import random
cum_rewards=[]
```
Что вы можете заметить из этих результатов:
Что можно заметить по этим результатам:
- **Близко к нашей цели**. Мы очень близки к достижению цели получения 195 накопленных вознаграждений за 100+ последовательных запусков симуляции, или мы могли бы фактически достичь ее! Даже если мы получаем меньшие числа, мы все равно не знаем, потому что усредняем за 5000 запусков, а формальный критерий требует только 100 запусков.
- **Близко к цели**. Мы очень близки к достижению цели — получить 195 накопленных очков за 100 и более последовательных запусков симуляции, и, возможно, уже достигли её! Даже если получаются меньшие числа, мы всё равно не можем точно сказать, так как усредняем по 5000 прогонов, а формальный критерий требует всего 100.
- **Награда начинает падать**. Иногда награда начинает снижаться, что означает, что мы можем «разрушить» уже выученные значения в Q-таблице новыми, ухудшающими ситуацию.
- **Вознаграждение начинает снижаться**. Иногда вознаграждение начинает снижаться, что означает, что мы можем "разрушить" уже изученные значения в Q-таблице новыми, которые ухудшают ситуацию.
Это наблюдение лучше видно на графике прогресса обучения.
Это наблюдение становится более очевидным, если мы построим график прогресса обучения.
## График прогресса обучения
## Построение графика прогресса обучения
Во время обучения мы собрали значение накопленного вознаграждения на каждой итерации в вектор `rewards`. Вот как это выглядит, если построить график зависимости от номера итерации:
Во время обучения мы собирали значение накопленной награды на каждой итерации в вектор `rewards`. Вот как это выглядит при построении графика зависимости от номера итерации:
```python
plt.plot(rewards)
```
![сырой прогресс](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png)
![сырое состояние прогресса](../../../../translated_images/ru/train_progress_raw.2adfdf2daea09c59.webp)
На этом графике невозможно ничего сказать, потому что из-за природы стохастического процесса обучения длина обучающих сессий сильно варьируется. Чтобы придать этому графику больше смысла, мы можем рассчитать **скользящее среднее** за серию экспериментов, скажем, 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))
```
![прогресс обучения](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png)
![прогресс обучения](../../../../translated_images/ru/train_progress_runav.c71694a8fa9ab359.webp)
## Изменение гиперпараметров
Чтобы сделать обучение более стабильным, имеет смысл корректировать некоторые из наших гиперпараметров во время обучения. В частности:
Чтобы обучение было более стабильным, имеет смысл изменять некоторые гиперпараметры во время тренировки. В частности:
- **По коэффициенту обучения** `alpha` можно начать с значения близкого к 1, а затем постепенно снижать этот параметр. Со временем мы будем получать надежные значения вероятностей в Q-таблице, и нужно лишь небольшое корректирование, а не полное переписывание значений.
- **Увеличивать epsilon**. Можно увеличивать `epsilon` постепенно, чтобы уменьшать исследование и увеличивать использование. Вероятно, имеет смысл начать с низкого `epsilon` и подниматься до почти 1.
> **Задание 1**: Поиграйте с гиперпараметрами и попробуйте добиться большей накопленной награды. Получается ли у вас больше 195?
- **Для скорости обучения**, `alpha`, мы можем начать с значений, близких к 1, а затем постепенно уменьшать параметр. Со временем мы будем получать хорошие вероятностные значения в Q-таблице, и поэтому мы должны корректировать их слегка, а не полностью перезаписывать новыми значениями.
- **Увеличить epsilon**. Мы можем постепенно увеличивать `epsilon`, чтобы меньше исследовать и больше использовать. Вероятно, имеет смысл начать с низкого значения `epsilon` и двигаться к почти 1.
> **Задача 1**: Попробуйте изменить значения гиперпараметров и посмотрите, сможете ли вы достичь более высокого суммарного вознаграждения. Удается ли вам превысить 195?
> **Задача 2**: Чтобы формально решить задачу, необходимо достичь среднего вознаграждения в 195 за 100 последовательных запусков. Измеряйте это во время обучения и убедитесь, что задача формально решена!
> **Задача 2**: Для формального решения задачи необходимо получить среднюю награду 195 за 100 последовательных запусков. Измеряйте это во время обучения и убедитесь, что вы формально решили задачу!
## Просмотр результата в действии
## Наблюдение результата в действии
Было бы интересно увидеть, как ведет себя обученная модель. Давайте запустим симуляцию и будем следовать той же стратегии выбора действий, что и во время обучения, выбирая действия в соответствии с вероятностным распределением в Q-таблице: (блок кода 13)
Было бы интересно увидеть, как ведет себя обученная модель. Запустим симуляцию и выберем действия по той же стратегии выбора, что и во время обучения, с выборкой согласно вероятностному распределению в Q-таблице: (кодовый блок 13)
```python
obs = env.reset()
@ -297,28 +320,30 @@ env.close()
Вы должны увидеть что-то вроде этого:
![балансирующая тележка](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif)
![балансирующий маятник на тележке](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif)
---
## 🚀Испытание
## 🚀Вызов
> **Задача 3**: Здесь мы использовали финальную копию Q-таблицы, которая может быть не самой лучшей. Помните, что мы сохранили лучшую Q-таблицу в переменной `Qbest`! Попробуйте тот же пример с лучшей Q-таблицей, скопировав `Qbest` в `Q`, и посмотрите, заметите ли вы разницу.
> **Задача 3**: Здесь мы использовали финальную копию Q-таблицы, которая может быть не лучшей. Помните, что мы сохранили лучшую Q-таблицу в переменную `Qbest`! Попробуйте тот же пример, заменив `Q` на `Qbest` и посмотрите, заметите ли вы разницу.
> **Задача 4**: Здесь мы не выбирали лучшее действие на каждом шаге, а выбирали действия на основе соответствующего вероятностного распределения. Было бы логичнее всегда выбирать лучшее действие с наибольшим значением в Q-таблице? Это можно сделать с помощью функции `np.argmax`, чтобы определить номер действия, соответствующий наибольшему значению в Q-таблице. Реализуйте эту стратегию и посмотрите, улучшит ли она балансировку.
> **Задача 4**: Здесь мы не выбирали лучшее действие на каждом шаге, а выбирали с вероятностью, соответствующей распределению. Будет ли более разумно всегда выбирать лучшее действие с наивысшим значением в Q-таблице? Это можно сделать с помощью функции `np.argmax`, чтобы определить номер действия с максимальным значением в Q-таблице. Реализуйте эту стратегию и посмотрите, улучшится ли балансирование.
## [Тест после лекции](https://ff-quizzes.netlify.app/en/ml/)
## [Викторина после лекции](https://ff-quizzes.netlify.app/en/ml/)
## Задание
[Обучите модель для Mountain Car](assignment.md)
[Обучите машину в горах](assignment.md)
## Заключение
Теперь мы научились обучать агентов достигать хороших результатов, просто предоставляя им функцию вознаграждения, которая определяет желаемое состояние игры, и давая им возможность разумно исследовать пространство поиска. Мы успешно применили алгоритм Q-Learning в случаях дискретных и непрерывных сред, но с дискретными действиями.
Теперь мы научились тренировать агентов добиваться хороших результатов, просто предоставляя функцию награды, которая определяет желаемое состояние игры, и давая им возможность интеллектуально исследовать пространство поиска. Мы успешно применили алгоритм Q-обучения как в дискретных, так и в непрерывных средах, но с дискретными действиями.
Важно также изучить ситуации, когда пространство действий является непрерывным, а пространство наблюдений гораздо более сложным, например, изображение с экрана игры Atari. В таких задачах часто требуется использовать более мощные методы машинного обучения, такие как нейронные сети, чтобы достичь хороших результатов. Эти более сложные темы будут рассмотрены в нашем следующем продвинутом курсе по искусственному интеллекту.
Важно также изучать ситуации, когда пространство действий тоже непрерывно, а пространство наблюдений намного сложнее, например изображение с экрана игры Atari. В таких задачах часто необходимо использовать более мощные методы машинного обучения, такие как нейронные сети, чтобы добиться хороших результатов. Эти более продвинутые темы будут предметом нашего следующего более продвинутого курса по ИИ.
---
**Отказ от ответственности**:
Этот документ был переведен с использованием сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Хотя мы стремимся к точности, пожалуйста, имейте в виду, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Отказ от ответственности**:
Этот документ был переведен с использованием сервиса машинного перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия по обеспечению точности, имейте в виду, что автоматический перевод может содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется обратиться к профессиональному человеческому переводу. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования этого перевода.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
Loading…
Cancel
Save