[fa,ur,zh-CN] chore(i18n): sync translations

Sync translations with latest source changes.
Languages: Persian (Farsi) [fa], Urdu [ur], Chinese (Simplified) [zh-CN]
update-translations
localizeflow[bot] 1 month ago
parent 281a04e3c3
commit 59062d5b8e

@ -101,6 +101,12 @@
"source_file": "8-Reinforcement/2-Gym/images/cartpole.png",
"language_code": "fa"
},
"catplot.e73fc35fdf96242b.webp": {
"original_hash": "90cd4782a2f9b40dec8218b224b29c1c",
"translation_date": "2026-07-14T03:40:34+00:00",
"source_file": "2-Regression/2-Data/images/catplot.png",
"language_code": "fa"
},
"centroid.097fde836cf6c918.webp": {
"original_hash": "c8f866ed446563d8e59087f1bca1f97d",
"translation_date": "2026-01-16T08:59:40+00:00",
@ -383,6 +389,12 @@
"source_file": "2-Regression/3-Linear/images/heatmap.png",
"language_code": "fa"
},
"heatmap.bd98dce43b404c57.webp": {
"original_hash": "7f2f2fbd993018bc01346e1eb8ae692e",
"translation_date": "2026-07-14T03:40:46+00:00",
"source_file": "2-Regression/2-Data/images/heatmap.png",
"language_code": "fa"
},
"hierarchical.bf59403aa43c8c47.webp": {
"original_hash": "50b9bc3298659c463ae76564ca645b12",
"translation_date": "2026-01-16T08:59:19+00:00",
@ -473,6 +485,12 @@
"source_file": "2-Regression/3-Linear/images/linear.png",
"language_code": "fa"
},
"lineplot.f9034ba47b1e30ee.webp": {
"original_hash": "b3959c0ed0f02f668009c76b95c4ebbb",
"translation_date": "2026-07-14T03:40:52+00:00",
"source_file": "2-Regression/2-Data/images/lineplot.png",
"language_code": "fa"
},
"lobe.2fa0806408ef9923.webp": {
"original_hash": "e6ec71dbe350aef39135dbf88bc89163",
"translation_date": "2026-01-16T08:56:22+00:00",
@ -743,6 +761,12 @@
"source_file": "2-Regression/3-Linear/images/recipes.png",
"language_code": "fa"
},
"relplot.a03837d8f0329cec.webp": {
"original_hash": "4733544cb1c2e58e987087283e66b4a5",
"translation_date": "2026-07-14T03:40:38+00:00",
"source_file": "2-Regression/2-Data/images/relplot.png",
"language_code": "fa"
},
"scaled.91897dfbaa26ca4a.webp": {
"original_hash": "789c70fafe6f6dd6e377a90b66e7d740",
"translation_date": "2026-01-16T09:11:55+00:00",

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 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": "ur"
},
"catplot.e73fc35fdf96242b.webp": {
"original_hash": "90cd4782a2f9b40dec8218b224b29c1c",
"translation_date": "2026-07-14T03:40:35+00:00",
"source_file": "2-Regression/2-Data/images/catplot.png",
"language_code": "ur"
},
"centroid.097fde836cf6c918.webp": {
"original_hash": "c8f866ed446563d8e59087f1bca1f97d",
"translation_date": "2026-01-16T08:59:43+00:00",
@ -383,6 +389,12 @@
"source_file": "2-Regression/3-Linear/images/heatmap.png",
"language_code": "ur"
},
"heatmap.bd98dce43b404c57.webp": {
"original_hash": "7f2f2fbd993018bc01346e1eb8ae692e",
"translation_date": "2026-07-14T03:40:48+00:00",
"source_file": "2-Regression/2-Data/images/heatmap.png",
"language_code": "ur"
},
"hierarchical.bf59403aa43c8c47.webp": {
"original_hash": "50b9bc3298659c463ae76564ca645b12",
"translation_date": "2026-01-16T08:59:24+00:00",
@ -473,6 +485,12 @@
"source_file": "2-Regression/3-Linear/images/linear.png",
"language_code": "ur"
},
"lineplot.f9034ba47b1e30ee.webp": {
"original_hash": "b3959c0ed0f02f668009c76b95c4ebbb",
"translation_date": "2026-07-14T03:40:53+00:00",
"source_file": "2-Regression/2-Data/images/lineplot.png",
"language_code": "ur"
},
"lobe.2fa0806408ef9923.webp": {
"original_hash": "e6ec71dbe350aef39135dbf88bc89163",
"translation_date": "2026-01-16T08:56:31+00:00",
@ -743,6 +761,12 @@
"source_file": "2-Regression/3-Linear/images/recipes.png",
"language_code": "ur"
},
"relplot.a03837d8f0329cec.webp": {
"original_hash": "4733544cb1c2e58e987087283e66b4a5",
"translation_date": "2026-07-14T03:40:40+00:00",
"source_file": "2-Regression/2-Data/images/relplot.png",
"language_code": "ur"
},
"scaled.91897dfbaa26ca4a.webp": {
"original_hash": "789c70fafe6f6dd6e377a90b66e7d740",
"translation_date": "2026-01-16T09:11:56+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.2 KiB

@ -101,6 +101,12 @@
"source_file": "8-Reinforcement/2-Gym/images/cartpole.png",
"language_code": "zh-CN"
},
"catplot.e73fc35fdf96242b.webp": {
"original_hash": "90cd4782a2f9b40dec8218b224b29c1c",
"translation_date": "2026-07-14T03:40:36+00:00",
"source_file": "2-Regression/2-Data/images/catplot.png",
"language_code": "zh-CN"
},
"centroid.097fde836cf6c918.webp": {
"original_hash": "c8f866ed446563d8e59087f1bca1f97d",
"translation_date": "2026-01-16T08:59:47+00:00",
@ -383,6 +389,12 @@
"source_file": "2-Regression/3-Linear/images/heatmap.png",
"language_code": "zh-CN"
},
"heatmap.bd98dce43b404c57.webp": {
"original_hash": "7f2f2fbd993018bc01346e1eb8ae692e",
"translation_date": "2026-07-14T03:40:50+00:00",
"source_file": "2-Regression/2-Data/images/heatmap.png",
"language_code": "zh-CN"
},
"hierarchical.bf59403aa43c8c47.webp": {
"original_hash": "50b9bc3298659c463ae76564ca645b12",
"translation_date": "2026-01-16T08:59:28+00:00",
@ -473,6 +485,12 @@
"source_file": "2-Regression/3-Linear/images/linear.png",
"language_code": "zh-CN"
},
"lineplot.f9034ba47b1e30ee.webp": {
"original_hash": "b3959c0ed0f02f668009c76b95c4ebbb",
"translation_date": "2026-07-14T03:40:55+00:00",
"source_file": "2-Regression/2-Data/images/lineplot.png",
"language_code": "zh-CN"
},
"lobe.2fa0806408ef9923.webp": {
"original_hash": "e6ec71dbe350aef39135dbf88bc89163",
"translation_date": "2026-01-16T08:56:38+00:00",
@ -743,6 +761,12 @@
"source_file": "2-Regression/3-Linear/images/recipes.png",
"language_code": "zh-CN"
},
"relplot.a03837d8f0329cec.webp": {
"original_hash": "4733544cb1c2e58e987087283e66b4a5",
"translation_date": "2026-07-14T03:40:43+00:00",
"source_file": "2-Regression/2-Data/images/relplot.png",
"language_code": "zh-CN"
},
"scaled.91897dfbaa26ca4a.webp": {
"original_hash": "789c70fafe6f6dd6e377a90b66e7d740",
"translation_date": "2026-01-16T09:11:57+00:00",

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

@ -24,8 +24,8 @@
"language_code": "fa"
},
"1-Introduction/3-fairness/README.md": {
"original_hash": "9a6b702d1437c0467e3c5c28d763dac2",
"translation_date": "2025-09-04T22:39:13+00:00",
"original_hash": "0f00d72169a0d37eecfd16d71e01700a",
"translation_date": "2026-07-14T03:27:38+00:00",
"source_file": "1-Introduction/3-fairness/README.md",
"language_code": "fa"
},
@ -54,8 +54,8 @@
"language_code": "fa"
},
"2-Regression/1-Tools/README.md": {
"original_hash": "fa81d226c71d5af7a2cade31c1c92b88",
"translation_date": "2025-09-04T22:33:17+00:00",
"original_hash": "0b8635427b582d03ea4ab7089b93e505",
"translation_date": "2026-07-14T03:23:38+00:00",
"source_file": "2-Regression/1-Tools/README.md",
"language_code": "fa"
},
@ -72,8 +72,8 @@
"language_code": "fa"
},
"2-Regression/2-Data/README.md": {
"original_hash": "7c077988328ebfe33b24d07945f16eca",
"translation_date": "2025-09-04T22:33:56+00:00",
"original_hash": "a58b2c4d16c6b122643391745ac15af6",
"translation_date": "2026-07-14T03:24:42+00:00",
"source_file": "2-Regression/2-Data/README.md",
"language_code": "fa"
},
@ -89,6 +89,12 @@
"source_file": "2-Regression/2-Data/solution/Julia/README.md",
"language_code": "fa"
},
"2-Regression/2-Data/solution/notebook.ipynb": {
"original_hash": "96b95f8cf473481f2f371de8156f1571",
"translation_date": "2026-07-14T03:19:36+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "fa"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T19:49:31+00:00",
@ -457,7 +463,7 @@
},
"8-Reinforcement/1-QLearning/README.md": {
"original_hash": "911efd5e595089000cb3c16fce1beab8",
"translation_date": "2025-09-04T22:45:00+00:00",
"translation_date": "2026-07-14T03:25:43+00:00",
"source_file": "8-Reinforcement/1-QLearning/README.md",
"language_code": "fa"
},
@ -481,7 +487,7 @@
},
"8-Reinforcement/2-Gym/README.md": {
"original_hash": "107d5bb29da8a562e7ae72262d251a75",
"translation_date": "2025-09-04T22:45:37+00:00",
"translation_date": "2026-07-14T03:26:45+00:00",
"source_file": "8-Reinforcement/2-Gym/README.md",
"language_code": "fa"
},
@ -581,6 +587,19 @@
"source_file": "TROUBLESHOOTING.md",
"language_code": "fa"
},
"__translation_failures__": {
"sketchnotes/LICENSE.md": {
"original_hash": "fba3b94d88bfb9b81369b869a1e9a20f",
"source_file": "sketchnotes/LICENSE.md",
"language_code": "fa",
"failure_date": "2026-07-14T03:22:46+00:00",
"status": "failed",
"error_type": "TranslationIncompleteError",
"error_message": "Markdown translation remained incomplete for chunk 1.1.1 of 'LICENSE.md', and the chunk could not be split further.",
"translator_version": "0.20.0",
"failure_policy_version": 1
}
},
"docs/_sidebar.md": {
"original_hash": "68dd06c685f6ce840e0acfa313352e7c",
"translation_date": "2025-09-03T23:14:07+00:00",

@ -1,153 +1,167 @@
# ساخت راه‌حل‌های یادگیری ماشین با هوش مصنوعی مسئولانه
![خلاصه‌ای از هوش مصنوعی مسئولانه در یادگیری ماشین در یک اسکچ نوت](../../../../translated_images/fa/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) بیشتر درباره هوش مصنوعی مسئولانه بیاموزید.
[![رویکرد مایکروسافت به هوش مصنوعی مسئولانه](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/fa/gender-bias-translate-en-tr.f185fd8822c2d437.webp)
> ترجمه به ترکی
![ترجمه به انگلیسی](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png)
> ترجمه به انگلیسی
![ترجمه بازگشت به انگلیسی](../../../../translated_images/fa/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)
- از آنجا که سیستم‌های هوش مصنوعی بسیار پیچیده هستند، درک نحوه عملکرد آن‌ها و تفسیر نتایج دشوار است.
- این عدم درک بر نحوه مدیریت، عملیاتی شدن و مستندسازی این سیستم‌ها تأثیر می‌گذارد.
- این عدم درک مهم‌تر از همه بر تصمیماتی که با استفاده از نتایج تولید شده توسط این سیستم‌ها گرفته می‌شود، تأثیر می‌گذارد.
- به دلیل پیچیدگی سیستم‌های هوش مصنوعی، درک چگونگی کار آن‌ها و تفسیر نتایج دشوار است.
- این کمبود درک بر نحوه مدیریت، عملیاتی شدن و مستندسازی این سیستم‌ها تأثیر می‌گذارد.
- این کمبود درک بخصوص روی تصمیماتی که بر اساس نتایج این سیستم‌ها گرفته می‌شود، تأثیرگذار است.
### مسئولیت‌پذیری
افرادی که سیستم‌های هوش مصنوعی را طراحی و پیاده‌سازی می‌کنند باید مسئول چگونگی عملکرد سیستم‌هایشان باشند. نیاز به مسئولیت‌پذیری به ویژه برای فناوری‌های حساس مانند تشخیص چهره حیاتی است. اخیراً تقاضا برای فناوری تشخیص چهره رو به افزایش است، به خصوص از طرف سازمان‌های اجرای قانون که پتانسیل این فناوری را در مواردی مانند یافتن کودکان گمشده می‌بینند. با این حال، این فناوری‌ها می‌توانند توسط دولت‌ها برای تهدید آزادی‌های اساسی شهروندان استفاده شوند، به عنوان مثال با نظارت مداوم بر افراد خاص. بنابراین، دانشمندان داده و سازمان‌ها باید مسئول باشند که سیستم هوش مصنوعی‌شان چگونه بر افراد یا جامعه تأثیر می‌گذارد.
افرادی که سیستم‌های هوش مصنوعی را طراحی و اجرا می‌کنند باید مسئول نحوه عملکرد سیستم‌های خود باشند. نیاز به مسئولیت‌پذیری به ویژه در فناوری‌های حساس مانند تشخیص چهره بسیار مهم است. اخیراً، تقاضا برای فناوری تشخیص چهره افزایش یافته است، به ویژه از سوی سازمان‌های اجرای قانون که پتانسیل این فناوری را در استفاده‌هایی مانند یافتن کودکان گمشده می‌بینند. با این حال، این فناوری‌ها می‌توانند به طور بالقوه توسط یک دولت برای به خطر انداختن آزادی‌های اساسی شهروندان خود استفاده شوند، به عنوان مثال، با امکان نظارت مداوم بر افراد خاص. بنابراین، دانشمندان داده و سازمان‌ها باید مسئول تأثیر سیستم هوش مصنوعی خود بر افراد یا جامعه باشند.
[![هشدار محقق برجسته هوش مصنوعی درباره نظارت گسترده از طریق تشخیص چهره](../../../../translated_images/fa/accountability.41d8c0f4b85b6231.webp)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "رویکرد مایکروسافت به هوش مصنوعی مسئولانه")
[![هشدار محقق برجسته هوش مصنوعی درباره نظارت گسترده از طریق تشخیص چهره](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "رویکرد مایکروسافت به هوش مصنوعی مسئولانه")
> 🎥 برای ویدیو: هشدارهای نظارت گسترده از طریق تشخیص چهره، روی تصویر بالا کلیک کنید
> 🎥 روی تصویر بالا کلیک کنید برای ویدئو: هشدار درباره نظارت گسترده از طریق تشخیص چهره
در نهایت یکی از بزرگ‌ترین سوالات نسل ما، به عنوان نسل اولی که هوش مصنوعی را به جامعه وارد می‌کند، این است که چگونه اطمینان حاصل کنیم که کامپیوترها همچنان نسبت به مردم پاسخگو باقی بمانند و چگونه اطمینان حاصل کنیم کسانی که کامپیوترها را طراحی می‌کنند نسبت به همه باقی مردم پاسخگو باشند.
در نهایت یکی از بزرگ‌ترین سوالات برای نسل ما، به عنوان اولین نسلی که هوش مصنوعی را به جامعه می‌آورد، این است که چگونه می‌توان اطمینان حاصل کرد که کامپیوترها همچنان مسئولیت‌پذیر باقی می‌مانند و چگونه می‌توان اطمینان حاصل کرد که افرادی که کامپیوترها را طراحی می‌کنند مسئولیت‌پذیر باقی می‌مانند.
## ارزیابی تاثیر
## ارزیابی تأثیر
قبل از آموزش یک مدل یادگیری ماشین، مهم است که ارزیابی تأثیر انجام شود تا هدف از سیستم هوش مصنوعی، نحوه استفاده مورد نظر، محل استقرار و افرادی که با سیستم تعامل دارند، درک شود. این موارد برای ارزیابان یا تست‌کنندگان سیستم مفید است تا عوامل مورد توجه هنگام شناسایی خطرات احتمالی و پیامدهای پیش‌بینی شده را بدانند.
قبل از آموزش یک مدل یادگیری ماشین، مهم است که یک ارزیابی تأثیر انجام شود تا هدف سیستم هوش مصنوعی، استفاده مورد نظر، محل اجرا و افرادی که با سیستم تعامل خواهند داشت، درک شود. این موارد برای بازبین‌ها یا آزمایش‌کنندگان سیستم مفید هستند تا بدانند چه عواملی را باید هنگام شناسایی خطرات بالقوه و پیامدهای مورد انتظار در نظر بگیرند.
حوزه‌های اصلی هنگام انجام ارزیابی تأثیر عبارتند از:
موارد زیر حوزه‌های تمرکز هنگام انجام ارزیابی تأثیر هستند:
* **تأثیر منفی بر افراد**. آگاهی از هرگونه محدودیت یا نیازمندی، استفاده غیرمجاز یا هر محدودیت شناخته شده که کارایی سیستم را مختل کند، برای اطمینان از عدم استفاده سیستم به روش مضر برای افراد حیاتی است.
* **نیازهای داده‌ای**. درک این که سیستم چگونه و کجا از داده استفاده می‌کند، به ارزیابان این امکان را می‌دهد که هر نیاز داده‌ای که باید رعایت شود (مانند مقررات GDPR یا HIPAA) را بررسی کنند. علاوه بر این، منبع یا مقدار داده برای آموزش کافی بودن را ارزیابی کنند.
* **خلاصه تأثیر**. فهرستی از آسیب‌های احتمالی ناشی از استفاده از سیستم جمع‌آوری کنید. در طول چرخه عمر یادگیری ماشین، بررسی کنید که آیا مسائل شناسایی شده کاهش یافته یا برطرف شده‌اند.
* **اهداف قابل اعمال** برای هر یک از شش اصل اصلی. ارزیابی کنید که آیا اهداف هر اصل برآورده شده‌اند و آیا شکاف‌هایی وجود دارد یا خیر.
* **تأثیر نامطلوب بر افراد**. آگاهی از هرگونه محدودیت یا الزامات، استفاده غیرپشتیبانی شده یا هر محدودیت شناخته شده‌ای که عملکرد سیستم را مختل می‌کند، برای اطمینان از اینکه سیستم به گونه‌ای استفاده نمی‌شود که به افراد آسیب برساند، حیاتی است.
* **نیازهای داده**. درک نحوه و محل استفاده سیستم از داده‌ها به بازبین‌ها امکان می‌دهد تا هرگونه نیاز داده‌ای را که باید به آن توجه شود (مانند مقررات داده GDPR یا HIPPA) بررسی کنند. علاوه بر این، بررسی کنید که آیا منبع یا مقدار داده برای آموزش کافی است.
* **خلاصه تأثیر**. فهرستی از آسیب‌های بالقوه‌ای که ممکن است از استفاده از سیستم ایجاد شود، جمع‌آوری کنید. در طول چرخه عمر یادگیری ماشین، بررسی کنید که آیا مسائل شناسایی شده کاهش یافته یا برطرف شده‌اند.
* **اهداف قابل اجرا** برای هر یک از شش اصل اصلی. ارزیابی کنید که آیا اهداف هر یک از اصول برآورده شده‌اند و آیا شکاف‌هایی وجود دارد.
## اشکال‌زدایی با هوش مصنوعی مسئولانه
مشابه اشکال‌زدایی یک برنامه نرم‌افزاری، اشکال‌زدایی یک سیستم هوش مصنوعی فرآیند ضروری شناسایی و حل مشکلات در سیستم است. عوامل زیادی وجود دارند که می‌توانند باعث شوند یک مدل به طور مورد انتظار یا مسئولانه عمل نکند. اکثر معیارهای عملکرد مدل‌های سنتی، تجمعات کمی از عملکرد مدل هستند که برای تحلیل نحوه نقض اصول هوش مصنوعی مسئولانه کافی نیستند. علاوه بر این، یک مدل یادگیری ماشین یک جعبه سیاه است که درک آنچه باعث نتیجه آن می‌شود یا ارائه توضیح زمانی که اشتباه می‌کند، دشوار است. در ادامه این دوره، یاد خواهیم گرفت که چگونه از داشبورد هوش مصنوعی مسئولانه برای کمک به اشکال‌زدایی سیستم‌های هوش مصنوعی استفاده کنیم. این داشبورد ابزار جامعی برای دانشمندان داده و توسعه‌دهندگان هوش مصنوعی فراهم می‌کند تا انجام دهند:
مشابه اشکال‌زدایی برنامه نرم‌افزاری، اشکال‌زدایی سیستم هوش مصنوعی فرآیندی ضروری برای شناسایی و حل مشکلات در سیستم است. عوامل زیادی می‌توانند باعث شوند مدل مطابق انتظار یا به صورت مسئولانه عمل نکند. اکثر معیارهای عملکرد مدل سنتی، مقادیر عددی کلی عملکرد مدل هستند که برای تحلیل نقض اصول هوش مصنوعی مسئولانه کافی نیستند. علاوه بر این، مدل یادگیری ماشین جعبه سیاهی است که درک محرک‌های خروجی آن یا ارائه توضیح در هنگام خطا را دشوار می‌کند. در ادامه این دوره، یاد می‌گیریم چگونه از داشبورد هوش مصنوعی مسئولانه برای کمک به اشکال‌زدایی سیستم‌های هوش مصنوعی استفاده کنیم. این داشبورد ابزار جامع برای دانشمندان داده و توسعه‌دهندگان هوش مصنوعی فراهم می‌کند تا:
* **تحلیل خطا**. شناسایی توزیع خطاهای مدل که می‌تواند بر عدالت یا قابلیت اطمینان سیستم تأثیر بگذارد.
* **نمای کلی مدل**. کشف نقاط اختلاف عملکرد مدل در داده‌های گروه‌های مختلف.
* **تحلیل داده**. فهم توزیع داده‌ها و شناسایی هر گونه تعصب احتمالی که ممکن است به مشکلات عدالت، جامعیت یا قابلیت اطمینان منجر شود.
* **تفسیری بودن مدل**. درک عوامل مؤثر بر پیش‌بینی‌های مدل که به توضیح رفتار مدل، مهم برای شفافیت و مسئولیت‌پذیری کمک می‌کند.
* **تحلیل خطا**. برای شناسایی توزیع خطاهای مدل که می‌تواند بر عدالت یا قابلیت اطمینان سیستم تأثیر بگذارد.
* **نمای کلی مدل**. برای کشف اینکه کجا در عملکرد مدل در میان گروه‌های داده تفاوت وجود دارد.
* **تحلیل داده‌ها**. برای درک توزیع داده‌ها و شناسایی هرگونه تعصب بالقوه در داده‌ها که می‌تواند منجر به مسائل عدالت، فراگیری و قابلیت اطمینان شود.
* **قابلیت تفسیر مدل**. برای درک اینکه چه چیزی بر پیش‌بینی‌های مدل تأثیر می‌گذارد یا آن‌ها را تحت تأثیر قرار می‌دهد. این امر به توضیح رفتار مدل کمک می‌کند که برای شفافیت و مسئولیت‌پذیری مهم است.
## 🚀 چالش
برای جلوگیری از وارد شدن آسیب‌ها از ابتدا، باید:
- تنوعی از پیش‌زمینه‌ها و دیدگاه‌ها را در میان افرادی که روی سیستم‌ها کار می‌کنند داشته باشیم.
- در مجموعه داده‌هایی سرمایه‌گذاری کنیم که تنوع جامعه ما را منعکس کنند.
- روش‌های بهتری در طول چرخه عمر یادگیری ماشین برای شناسایی و اصلاح هوش مصنوعی مسئولانه هنگام وقوع آن توسعه دهیم.
درباره سناریوهای واقعی فکر کنید که در آن عدم اطمینان مدل در ساخت و استفاده از مدل مشخص است. چه موارد دیگری باید در نظر بگیریم؟
## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/)
برای جلوگیری از معرفی آسیب‌ها در وهله اول، باید:
## مرور و خودآموزی
- تنوع در پیشینه‌ها و دیدگاه‌ها در میان افرادی که روی سیستم‌ها کار می‌کنند داشته باشیم.
- در مجموعه داده‌هایی که تنوع جامعه ما را منعکس می‌کنند سرمایه‌گذاری کنیم.
- روش‌های بهتری در طول چرخه
تماشای این کارگاه برای بررسی عمیق‌تر موضوعات:
در این درس، شما برخی اصول اولیه مفاهیم عدالت و بی‌عدالتی در یادگیری ماشین را یاد گرفته‌اید.
برای بررسی عمیق‌تر موضوعات، این کارگاه را تماشا کنید:
- در جستجوی هوش مصنوعی مسئولانه: تبدیل اصول به عمل توسط بسیمرا نوشی، مهرنوش سامکی و آمیت شارما
- در جستجوی هوش مصنوعی مسئولانه: به‌کارگیری اصول در عمل توسط بِسمیرا نوشی، مهرنوش سامکی و آمیـت شارما
[![جعبه‌ابزار هوش مصنوعی مسئولانه: یک چارچوب متن‌باز برای ساخت هوش مصنوعی مسئولانه](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 "جعبه‌ابزار هوش مصنوعی مسئولانه: چارچوب متن‌باز برای ساخت هوش مصنوعی مسئول")
> 🎥 برای مشاهده ویدیو روی تصویر بالا کلیک کنید: جعبه‌ابزار هوش مصنوعی مسئولانه: یک چارچوب متن‌باز برای ساخت هوش مصنوعی مسئولانه توسط بسیمرا نوشی، مهرنوش سامکی و آمیت شارما
> 🎥 برای مشاهده ویدئو، روی تصویر بالا کلیک کنید: جعبه‌ابزار هوش مصنوعی مسئولانه: چارچوب متن‌باز برای ساخت هوش مصنوعی مسئول توسط بِسمیرا نوشی، مهرنوش سامکی و آمیـت شارما
همچنین بخوانید:
همچنین بخوانید:
- مرکز منابع هوش مصنوعی مسئولانه مایکروسافت: [منابع هوش مصنوعی مسئولانه Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- مرکز منابع هوش مصنوعی مسئول ماکروسافت: [منابع هوش مصنوعی مسئول Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- گروه تحقیقاتی FATE مایکروسافت: [FATE: عدالت، پاسخگویی، شفافیت و اخلاق در هوش مصنوعی - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
- گروه پژوهشی FATE ماکروسافت: [FATE: عدالت، پاسخگویی، شفافیت و اخلاق در هوش مصنوعی - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
جعبه‌ابزار هوش مصنوعی مسئولانه:
جعبه‌ابزار هوش مصنوعی مسئولانه:
- [مخزن GitHub جعبه‌ابزار هوش مصنوعی مسئولانه](https://github.com/microsoft/responsible-ai-toolbox)
- [مخزن گیت‌هاب جعبه‌ابزار هوش مصنوعی مسئولانه](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)
## تکلیف
## تمرین
[جعبه‌ابزار هوش مصنوعی مسئولانه را بررسی کنید](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,118 +1,119 @@
# شروع کار با پایتون و Scikit-learn برای مدل‌های رگرسیون
![خلاصه‌ای از رگرسیون‌ها در یک اسکچ‌نوت](../../../../sketchnotes/ml-regression.png)
![خلاصه‌ای از رگرسیون‌ها در یک اسکچ‌نوت](../../../../translated_images/fa/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 notebooks کار کنید.
- رایانه خود را برای انجام وظایف یادگیری ماشین محلی پیکربندی کنید.
- با Jupyter Notebooks کار کنید.
- از 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. **نصب پایتون**. مطمئن شوید که [پایتون](https://www.python.org/downloads/) روی کامپیوتر شما نصب شده است. شما از پایتون برای بسیاری از وظایف علم داده و یادگیری ماشین استفاده خواهید کرد. اکثر سیستم‌های کامپیوتری از قبل شامل نصب پایتون هستند. همچنین بسته‌های [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) مفیدی وجود دارند که تنظیمات را برای برخی کاربران آسان‌تر می‌کنند.
1. **نصب پایتون**. مطمئن شوید که [پایتون](https://www.python.org/downloads/) روی رایانه شما نصب شده است. شما برای بسیاری از کارهای داده‌کاوی و یادگیری ماشین به پایتون نیاز خواهید داشت. بیشتر سیستم‌های کامپیوتری از قبل پایتون را نصب دارند. بسته‌های [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) مفیدی هم موجود است که نصب را برای برخی کاربران آسان‌تر می‌کند.
برخی کاربردهای پایتون ممکن است به یک نسخه خاص از نرم‌افزار نیاز داشته باشند، در حالی که دیگر کاربردها به نسخه دیگری نیاز دارند. به همین دلیل، کار کردن در یک [محیط مجازی](https://docs.python.org/3/library/venv.html) مفید است.
برخی کاربردهای پایتون نیاز به نسخه خاصی از نرم‌افزار دارند، در حالی که برخی دیگر نسخه‌ای متفاوت. به همین دلیل، کار در یک [محیط مجازی](https://docs.python.org/3/library/venv.html) مفید است.
2. **نصب Visual Studio Code**. مطمئن شوید که Visual Studio Code روی کامپیوتر شما نصب شده است. دستورالعمل‌های [نصب Visual Studio Code](https://code.visualstudio.com/) را برای نصب پایه دنبال کنید. شما در این دوره از پایتون در Visual Studio Code استفاده خواهید کرد، بنابراین ممکن است بخواهید نحوه [تنظیم Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) برای توسعه پایتون را مرور کنید.
2. **نصب Visual Studio Code**. مطمئن شوید که Visual Studio Code روی رایانه شما نصب شده است. برای نصب پایه‌ای به این دستورالعمل‌ها برای [نصب Visual Studio Code](https://code.visualstudio.com/) مراجعه کنید. شما در این دوره قرار است از پایتون در Visual Studio Code استفاده کنید، پس ممکن است بخواهید نحوه [پیکربندی Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) برای توسعه پایتون را مرور کنید.
> با کار کردن روی این مجموعه [ماژول‌های یادگیری](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)، با پایتون راحت شوید.
>
> [![تنظیم پایتون با Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "تنظیم پایتون با Visual Studio Code")
> [![راه‌اندازی پایتون با Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "راه‌اندازی پایتون با Visual Studio Code")
>
> 🎥 روی تصویر بالا کلیک کنید تا یک ویدئو درباره استفاده از پایتون در VS Code مشاهده کنید.
> 🎥 برای ویدیویی درباره استفاده از پایتون در VS Code روی تصویر بالا کلیک کنید.
3. **نصب Scikit-learn**، با دنبال کردن [این دستورالعمل‌ها](https://scikit-learn.org/stable/install.html). از آنجا که باید مطمئن شوید که از پایتون 3 استفاده می‌کنید، توصیه می‌شود از یک محیط مجازی استفاده کنید. توجه داشته باشید، اگر این کتابخانه را روی یک مک M1 نصب می‌کنید، دستورالعمل‌های خاصی در صفحه لینک شده وجود دارد.
3. **نصب Scikit-learn**، با دنبال کردن [این دستورالعمل‌ها](https://scikit-learn.org/stable/install.html). از آنجایی که باید از پایتون ۳ استفاده کنید، توصیه می‌شود از محیط مجازی استفاده کنید. اگر این کتابخانه را روی یک مک با پردازنده M1 نصب می‌کنید، دستورالعمل‌های خاصی در صفحه فوق وجود دارد.
4. **نصب Jupyter Notebook**. شما باید [بسته Jupyter](https://pypi.org/project/jupyter/) را نصب کنید.
1. **نصب Jupyter Notebook**. شما باید [بسته Jupyter](https://pypi.org/project/jupyter/) را نصب کنید.
## محیط نویسندگی یادگیری ماشین شما
## محیط نویسندگی شما برای یادگیری ماشین
شما از **notebooks** برای توسعه کد پایتون و ایجاد مدل‌های یادگیری ماشین استفاده خواهید کرد. این نوع فایل یک ابزار رایج برای دانشمندان داده است و با پسوند `.ipynb` شناسایی می‌شود.
شما از **دفترچه‌ها (notebooks)** برای توسعه کد پایتون خود و ایجاد مدل‌های یادگیری ماشین استفاده خواهید کرد. این نوع فایل ابزاری رایج در علوم داده است و با پسوند `.ipynb` شناسایی می‌شود.
نوت‌بوک‌ها یک محیط تعاملی هستند که به توسعه‌دهنده اجازه می‌دهند هم کدنویسی کنند و هم یادداشت‌ها و مستندات پیرامون کد بنویسند، که برای پروژه‌های آزمایشی یا تحقیقاتی بسیار مفید است.
دفترچه‌ها محیطی تعاملی هستند که به توسعه‌دهنده اجازه می‌دهد هم کد بنویسد و هم یادداشت‌ها و مستندات پیرامون کد را اضافه کند که برای پروژه‌های تجربی یا پژوهشی بسیار مفید است.
[![یادگیری ماشین برای مبتدیان - تنظیم Jupyter Notebooks برای شروع ساخت مدل‌های رگرسیون](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "یادگیری ماشین برای مبتدیان - تنظیم Jupyter Notebooks برای شروع ساخت مدل‌های رگرسیون")
[![یادگیری ماشین برای مبتدیان - راه‌اندازی Jupyter Notebooks برای شروع ساخت مدل‌های رگرسیون](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "یادگیری ماشین برای مبتدیان - راه‌اندازی Jupyter Notebooks برای شروع ساخت مدل‌های رگرسیون")
> 🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره این تمرین مشاهده کنید.
> 🎥 برای مشاهده ویدیوی کوتاه درباره این تمرین روی تصویر بالا کلیک کنید.
### تمرین - کار با یک نوت‌بوک
### تمرین - کار با یک دفترچه
در این پوشه، فایل _notebook.ipynb_ را پیدا خواهید کرد.
1. فایل _notebook.ipynb_ را در Visual Studio Code باز کنید.
یک سرور Jupyter با پایتون 3+ شروع خواهد شد. شما بخش‌هایی از نوت‌بوک را پیدا خواهید کرد که می‌توانند `اجرا شوند`، قطعات کد. شما می‌توانید یک بلوک کد را با انتخاب آیکونی که شبیه دکمه پخش است اجرا کنید.
یک سرور Jupyter با پایتون ۳+ شروع به کار خواهد کرد. بخش‌هایی از دفترچه که می‌توانید آن‌ها را `run` کنید، بخش‌هایی از کد هستند. می‌توانید یک بلوک کد را با انتخاب آیکونی که شبیه دکمه پخش است اجرا کنید.
2. آیکون `md` را انتخاب کنید و کمی متن مارک‌داون اضافه کنید، و متن زیر را وارد کنید **# خوش آمدید به نوت‌بوک خود**.
1. آیکون `md` را انتخاب کنید و کمی متن مارک‌داون اضافه کنید، از جمله متن زیر: **# به دفترچه خود خوش آمدید**
سپس کمی کد پایتون اضافه کنید.
سپس، کمی کد پایتون اضافه کنید.
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/fa/notebook.4a3ee31f396b8832.webp)
شما می‌توانید کد خود را با نظرات ترکیب کنید تا نوت‌بوک را خود-مستند کنید.
می‌توانید کد خود را با کامنت‌هایی برای خودتان همراه کنید تا دفترچه مستند شود.
برای یک دقیقه فکر کنید که محیط کاری یک توسعه‌دهنده وب چقدر با محیط کاری یک دانشمند داده متفاوت است.
کمی فکر کنید که محیط کاری یک توسعه‌دهنده وب چقدر با محیط کاری یک دانشمند داده متفاوت است.
## شروع کار با Scikit-learn
## راه‌اندازی و شروع کار با Scikit-learn
اکنون که پایتون در محیط محلی شما تنظیم شده است و با Jupyter notebooks راحت هستید، بیایید با Scikit-learn نیز راحت شویم (تلفظ آن `sci` مانند `science`). Scikit-learn یک [API گسترده](https://scikit-learn.org/stable/modules/classes.html#api-ref) ارائه می‌دهد تا به شما در انجام وظایف یادگیری ماشین کمک کند.
حال که پایتون در محیط محلی شما راه‌اندازی شده است و با Jupyter Notebooks راحت هستید، بیایید با 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 و ابزارهای دیگر برای ساخت مدل‌های یادگیری ماشین استفاده خواهید کرد تا وظایفی را که به آن‌ها "یادگیری ماشین سنتی" می‌گوییم انجام دهید. ما عمداً از شبکه‌های عصبی و یادگیری عمیق اجتناب کرده‌ایم، زیرا آن‌ها بهتر در برنامه درسی آینده ما با عنوان "AI برای مبتدیان" پوشش داده می‌شوند.
در این دوره، از Scikit-learn و ابزارهای دیگر برای ساخت مدل‌های یادگیری ماشین استفاده خواهید کرد تا وظایفی که ما «یادگیری ماشین سنتی» می‌نامیم را انجام دهید. عمدتاً از شبکه‌های عصبی و یادگیری عمیق اجتناب کرده‌ایم، چون آن‌ها را بهتر در دوره آینده «هوش مصنوعی برای مبتدیان» پوشش خواهیم داد.
Scikit-learn ساخت مدل‌ها و ارزیابی آن‌ها برای استفاده را ساده می‌کند. این کتابخانه عمدتاً بر استفاده از داده‌های عددی تمرکز دارد و شامل چندین مجموعه داده آماده برای استفاده به عنوان ابزارهای یادگیری است. همچنین مدل‌های پیش‌ساخته‌ای برای دانش‌آموزان دارد تا امتحان کنند. بیایید فرآیند بارگذاری داده‌های از پیش بسته‌بندی شده و استفاده از یک تخمین‌گر برای اولین مدل یادگیری ماشین با Scikit-learn را با داده‌های پایه بررسی کنیم.
Scikit-learn ساخت مدل‌ها و ارزیابی آن‌ها را بسیار ساده کرده است. عمدتاً بر استفاده از داده‌های عددی تمرکز دارد و چندین مجموعه داده آماده برای یادگیری دارد. همچنین مدل‌هایی آماده برای امتحان دانشجویان دارد. ابتدا پروسه بارگذاری داده‌های بسته‌بندی شده و استفاده از یک تخمین‌زن داخلی را برای اولین مدل ML با Scikit-learn و داده‌های پایه بررسی کنیم.
## تمرین - اولین نوت‌بوک Scikit-learn شما
## تمرین - اولین دفترچه Scikit-learn شما
> این آموزش بر اساس [مثال رگرسیون خطی](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) در وب‌سایت 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://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "یادگیری ماشین برای مبتدیان - اولین پروژه رگرسیون خطی شما در پایتون")
> 🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره این تمرین مشاهده کنید.
> 🎥 برای مشاهده ویدیوی کوتاه درباره این تمرین روی تصویر بالا کلیک کنید.
در فایل _notebook.ipynb_ مرتبط با این درس، تمام سلول‌ها را با فشار دادن آیکون 'سطل زباله' پاک کنید.
در فایل _notebook.ipynb_ مربوط به این درس، همه سلول‌ها را با کلیک روی آیکون سطل زباله پاک کنید.
در این بخش، شما با یک مجموعه داده کوچک درباره دیابت که در Scikit-learn برای اهداف یادگیری ساخته شده است کار خواهید کرد. تصور کنید که می‌خواهید یک درمان برای بیماران دیابتی آزمایش کنید. مدل‌های یادگیری ماشین ممکن است به شما کمک کنند تعیین کنید کدام بیماران بر اساس ترکیب متغیرها بهتر به درمان پاسخ می‌دهند. حتی یک مدل رگرسیون بسیار پایه، زمانی که بصری‌سازی شود، ممکن است اطلاعاتی درباره متغیرهایی ارائه دهد که به شما در سازماندهی آزمایش‌های بالینی نظری کمک کند.
در این بخش، با یک مجموعه داده کوچک درباره دیابت کار خواهید کرد که به منظور یادگیری در Scikit-learn ساخته شده است. تصور کنید می‌خواهید درمانی برای بیماران دیابتی آزمایش کنید. مدل‌های یادگیری ماشین می‌توانند به شما کمک کنند تعیین کنید کدام بیماران بهتر به درمان پاسخ می‌دهند، بر اساس ترکیبی از متغیرها. حتی یک مدل رگرسیون بسیار ساده، وقتی تجسم شود، می‌تواند اطلاعاتی درباره متغیرها نشان دهد که به سازماندهی آزمایشات بالینی نظری شما کمک کند.
✅ روش‌های رگرسیون زیادی وجود دارند، و انتخاب شما بستگی به پاسخی دارد که به دنبال آن هستید. اگر می‌خواهید ارتفاع احتمالی یک فرد را بر اساس سن او پیش‌بینی کنید، از رگرسیون خطی استفاده می‌کنید، زیرا به دنبال یک **مقدار عددی** هستید. اگر علاقه‌مند به کشف این هستید که آیا یک نوع غذا باید به عنوان وگان در نظر گرفته شود یا نه، به دنبال یک **تخصیص دسته‌بندی** هستید، بنابراین از رگرسیون لجستیک استفاده می‌کنید. بعداً درباره رگرسیون لجستیک بیشتر یاد خواهید گرفت. کمی فکر کنید که چه سوالاتی می‌توانید از داده‌ها بپرسید و کدام یک از این روش‌ها مناسب‌تر خواهد بود.
✅ روش‌های مختلف رگرسیون وجود دارند و انتخاب یکی به پاسخ موردنظر شما بستگی دارد. اگر بخواهید ارتفاع احتمالی یک شخص در سن مشخص را پیش‌بینی کنید، از رگرسیون خطی استفاده می‌کنید چون دنبال یک **مقدار عددی** هستید. اگر بخواهید بدانید یک نوع غذای خاص باید به عنوان گیاه‌خواری شمرده شود یا نه، به دنبال **دسته‌بندی** هستید، پس از رگرسیون لجستیک استفاده می‌کنید. درباره رگرسیون لجستیک بعداً بیشتر خواهید آموخت. کمی در مورد سوالاتی که می‌توانید از داده‌ها بپرسید فکر کنید و کدام روش برای آن مناسب‌تر است.
بیایید این کار را شروع کنیم.
بریم سراغ این کار.
### وارد کردن کتابخانه‌ها
برای این کار، ما برخی کتابخانه‌ها را وارد خواهیم کرد:
برای این کار برخی کتابخانه‌ها را وارد می‌کنیم:
- **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) است.
- **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 @@ Scikit-learn ساخت مدل‌ها و ارزیابی آن‌ها برای اس
from sklearn import datasets, linear_model, model_selection
```
در بالا، شما `matplotlib` و `numpy` را وارد می‌کنید و `datasets`، `linear_model` و `model_selection` را از `sklearn` وارد می‌کنید. `model_selection` برای تقسیم داده‌ها به مجموعه‌های آموزشی و آزمایشی استفاده می‌شود.
شما در بالا `matplotlib`، `numpy` را وارد کرده‌اید و نیز از `sklearn`، `datasets`، `linear_model` و `model_selection` را وارد کرده‌اید. `model_selection` برای تقسیم داده‌ها به مجموعه‌های آموزش و تست استفاده می‌شود.
### مجموعه داده دیابت
مجموعه داده [دیابت](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) شامل 442 نمونه داده درباره دیابت است، با 10 متغیر ویژگی، برخی از آن‌ها شامل:
مجموعه داده [دیابت داخلی](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) شامل ۴۴۲ نمونه داده درباره دیابت است، با ۱۰ متغیر ویژگی که برخی از آن‌ها شامل:
- age: سن به سال
- سن: سن بر حسب سال
- bmi: شاخص توده بدنی
- bp: فشار خون متوسط
- s1 tc: سلول‌های T (نوعی از گلبول‌های سفید خون)
- s1 tc: سلول‌های T (نوعی از سلول‌های سفید خون)
✅ این مجموعه داده شامل مفهوم 'جنسیت' به عنوان یک متغیر ویژگی مهم برای تحقیق درباره دیابت است. بسیاری از مجموعه داده‌های پزشکی شامل این نوع طبقه‌بندی دودویی هستند. کمی فکر کنید که چگونه چنین دسته‌بندی‌هایی ممکن است بخش‌هایی از جمعیت را از درمان‌ها حذف کنند.
✅ این مجموعه داده مفهوم «جنسیت» را به عنوان متغیر ویژگی مهمی برای تحقیقات درباره دیابت شامل می‌شود. بسیاری از مجموعه داده‌های پزشکی این نوع دسته‌بندی دودویی را دارند. کمی فکر کنید که چنین دسته‌بندی‌هایی چطور ممکن است بخشی از جمعیت را از درمان‌ها کنار بگذارند.
اکنون داده‌های X و y را بارگذاری کنید.
حال، داده‌های X و y را بارگذاری کنید.
> 🎓 به یاد داشته باشید، این یادگیری نظارت‌شده است و ما به یک هدف 'y' نام‌گذاری شده نیاز داریم.
> 🎓 به یاد داشته باشید، این یادگیری نظارت‌شده است و باید «y» هدف نام‌گذاری شده وجود داشته باشد.
در یک سلول کد جدید، مجموعه داده دیابت را با فراخوانی `load_diabetes()` بارگذاری کنید. ورودی `return_X_y=True` نشان می‌دهد که `X` یک ماتریس داده خواهد بود و `y` هدف رگرسیون خواهد بود.
در یک سلول کد جدید، مجموعه داده دیابت را با فراخوانی `load_diabetes()` بارگذاری کنید. ورودی `return_X_y=True` به معنای این است که `X` یک ماتریس داده و `y` هدف رگرسیون خواهد بود.
1. برخی دستورات چاپ اضافه کنید تا شکل ماتریس داده و اولین عنصر آن را نشان دهید:
1. چند دستور print برای نشان دادن شکل ماتریس داده و اولین عنصر آن اضافه کنید:
```python
X, y = datasets.load_diabetes(return_X_y=True)
@ -149,9 +150,9 @@ Scikit-learn ساخت مدل‌ها و ارزیابی آن‌ها برای اس
print(X[0])
```
چیزی که به عنوان پاسخ دریافت می‌کنید، یک tuple است. کاری که انجام می‌دهید این است که دو مقدار اول tuple را به ترتیب به `X` و `y` اختصاص دهید. بیشتر درباره [tupleها](https://wikipedia.org/wiki/Tuple) یاد بگیرید.
آنچه برمی‌گردید به صورت یک تاپل است. کاری که می‌کنید این است که دو مقدار اول تاپل را به ترتیب به `X` و `y` انتساب دهید. درباره [تاپلها](https://wikipedia.org/wiki/Tuple) بیشتر بدانید.
شما می‌توانید ببینید که این داده‌ها شامل 442 آیتم هستند که در آرایه‌هایی با 10 عنصر شکل گرفته‌اند:
می‌توانید ببینید این داده ۴۴۲ مورد دارد که در آرایه‌ای با ۱۰ عنصر شکل داده شده است:
```text
(442, 10)
@ -159,39 +160,39 @@ Scikit-learn ساخت مدل‌ها و ارزیابی آن‌ها برای اس
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
✅ کمی فکر کنید درباره رابطه بین دادهها و هدف رگرسیون. رگرسیون خطی روابط بین ویژگی X و متغیر هدف y را پیش‌بینی می‌کند. آیا می‌توانید [هدف](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) مجموعه داده دیابت را در مستندات پیدا کنید؟ این مجموعه داده چه چیزی را نشان می‌دهد، با توجه به هدف؟
✅ کمی درباره رابطه بین داده و هدف رگرسیون فکر کنید. رگرسیون خطی روابط بین ویژگی X و متغیر هدف y را پیش‌بینی می‌کند. آیا می‌توانید [هدف](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) مجموعه داده دیابت را در مستندات پیدا کنید؟ این مجموعه داده با آن هدف چه چیزی را نشان می‌دهد؟
2. سپس، بخشی از این مجموعه داده را برای رسم انتخاب کنید، با انتخاب ستون سوم مجموعه داده. شما می‌توانید این کار را با استفاده از عملگر `:` برای انتخاب تمام ردیف‌ها انجام دهید، و سپس ستون سوم را با استفاده از ایندکس (2) انتخاب کنید. همچنین می‌توانید داده‌ها را به یک آرایه 2D تغییر شکل دهید - همانطور که برای رسم لازم است - با استفاده از `reshape(n_rows, n_columns)`. اگر یکی از پارامترها -1 باشد، بعد مربوطه به طور خودکار محاسبه می‌شود.
2. سپس بخشی از این مجموعه داده را برای رسم انتخاب کنید، با انتخاب ستون سوم مجموعه داده. برای این کار می‌توانید از عملگر `:` برای انتخاب همه ردیف‌ها استفاده کنید، و سپس ستون سوم را با ایندکس (2) انتخاب کنید. همچنین می‌توانید داده را به آرایه ۲ بعدی تغییر شکل دهید - برای رسم لازم است - با استفاده از `reshape(n_rows, n_columns)`. اگر یکی از پارامترها -۱ باشد، بعد متناظر به طور خودکار محاسبه می‌شود.
```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 ابزاری بسیار مفید برای این کار است. یک scatterplot از تمام داده‌های تست X و y ایجاد کنید، و با استفاده از پیش‌بینی خط را در مناسب‌ترین محل بین گروه‌های داده مدل رسم کنید.
```python
plt.scatter(X_test, y_test, color='black')
@ -202,29 +203,32 @@ Scikit-learn ساخت مدل‌ها و ارزیابی آن‌ها برای اس
plt.show()
```
![یک نمودار پراکندگی که نقاط داده درباره دیابت را نشان می‌دهد](../../../../2-Regression/1-Tools/images/scatterplot.png)
✅ کمی فکر کنید که اینجا چه اتفاقی می‌افتد. یک خط مستقیم از میان نقاط کوچک زیادی از داده عبور می‌کند، اما دقیقاً چه کاری انجام می‌دهد؟ آیا می‌توانید ببینید که چگونه باید بتوانید از این خط برای پیش‌بینی محل قرارگیری یک نقطه داده جدید و دیده‌نشده نسبت به محور y نمودار استفاده کنید؟ سعی کنید کاربرد عملی این مدل را به زبان بیاورید.
![یک نمودار پراکندگی که نقاط داده مرتبط با دیابت را نشان می‌دهد](../../../../translated_images/fa/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) را برای تعمیق درک خود بگذرانید.
## تکلیف
## تمرین
[یک مجموعه داده متفاوت](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,62 +1,62 @@
# ساخت مدل رگرسیون با استفاده از Scikit-learn: آماده‌سازی و مصورسازی داده‌ها
# ساخت مدل رگرسیون با استفاده از Scikit-learn: آماده‌سازی و تجسم داده‌ها
![اینفوگرافیک مصورسازی داده‌ها](../../../../2-Regression/2-Data/images/data-visualization.png)
![تصویر اینفوگرافیک تجسم داده‌ها](../../../../translated_images/fa/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)
## مقدمه
حالا که ابزارهای لازم برای شروع ساخت مدل‌های یادگیری ماشین با Scikit-learn را آماده کرده‌اید، آماده‌اید تا سوالاتی از داده‌های خود بپرسید. هنگام کار با داده‌ها و اعمال راه‌حل‌های یادگیری ماشین، بسیار مهم است که بدانید چگونه سوالات درست بپرسید تا بتوانید پتانسیل‌های داده‌های خود را به درستی کشف کنید.
حال که ابزارهای لازم برای شروع ساخت مدل ماشین لرنینگ با Scikit-learn را آماده کرده‌اید، آماده‌اید که شروع به پرسیدن سوال از داده‌های خود کنید. هنگام کار با داده‌ها و اعمال راه‌حل‌های ML، بسیار مهم است که بدانید چگونه سوال درست را بپرسید تا به طور صحیح پتانسیل‌های مجموعه داده شما باز شود.
در این درس، یاد خواهید گرفت:
در این درس، شما یاد خواهید گرفت:
- چگونه داده‌های خود را برای ساخت مدل آماده کنید.
- چگونه از Matplotlib برای مصورسازی داده‌ها استفاده کنید.
- چگونه از Matplotlib برای تجسم داده‌ها استفاده کنید.
- چگونه از Seaborn برای تجسم داده‌های بیانگرتر استفاده کنید.
## پرسیدن سوالات درست از داده‌ها
## پرسیدن سوال صحیح از داده‌های شما
سوالی که نیاز دارید به آن پاسخ داده شود، نوع الگوریتم‌های یادگیری ماشین که استفاده خواهید کرد را تعیین می‌کند. کیفیت پاسخی که دریافت می‌کنید نیز به شدت به ماهیت داده‌های شما وابسته است.
سوالی که باید پاسخ داده شود نوع الگوریتم‌های ML مورد استفاده را تعیین می‌کند. و کیفیت پاسخی که دریافت می‌کنید به شدت به ماهیت داده شما بستگی دارد.
به [داده‌ها](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) ارائه‌شده برای این درس نگاهی بیندازید. می‌توانید این فایل .csv را در VS Code باز کنید. یک نگاه سریع نشان می‌دهد که داده‌ها شامل جاهای خالی و ترکیبی از رشته‌ها و داده‌های عددی هستند. همچنین یک ستون عجیب به نام 'Package' وجود دارد که داده‌های آن ترکیبی از 'sacks'، 'bins' و مقادیر دیگر است. در واقع، داده‌ها کمی به‌هم‌ریخته هستند.
نگاهی به [داده‌ها](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) ارائه شده برای این درس بیندازید. می‌توانید این فایل .csv را در VS Code باز کنید. نگاه کوتاهی فوراً نشان می‌دهد که جاهای خالی وجود دارد و ترکیبی از داده‌های متنی و عددی است. همچنین ستونی عجیب به نام 'Package' وجود دارد که داده‌های آن ترکیبی از 'کیسه‌ها'، 'سطل‌ها' و مقادیر دیگر است. در واقع، داده‌ها کمی درهم‌برهم هستند.
[![یادگیری ماشین برای مبتدیان - چگونه یک مجموعه داده را تحلیل و پاکسازی کنیم](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "یادگیری ماشین برای مبتدیان - چگونه یک مجموعه داده را تحلیل و پاکسازی کنیم")
[![ML برای مبتدیان - چگونه یک مجموعه داده را تحلیل و پاکسازی کنیم](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML برای مبتدیان - چگونه یک مجموعه داده را تحلیل و پاکسازی کنیم")
> 🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره آماده‌سازی داده‌ها برای این درس مشاهده کنید.
> 🎥 برای مشاهده ویدیوی کوتاه درباره آماده‌سازی داده‌ها برای این درس، روی تصویر بالا کلیک کنید.
در واقع، بسیار نادر است که یک مجموعه داده کاملاً آماده برای استفاده جهت ساخت مدل یادگیری ماشین به شما داده شود. در این درس، یاد خواهید گرفت که چگونه یک مجموعه داده خام را با استفاده از کتابخانه‌های استاندارد پایتون آماده کنید. همچنین تکنیک‌های مختلفی برای مصورسازی داده‌ها خواهید آموخت.
در واقع، معمولاً مجموعه داده‌ای که کاملاً آماده استفاده برای ساخت مدل ML باشد از ابتدا ارائه نمی‌شود. در این درس، شما یاد می‌گیرید چگونه یک مجموعه داده خام را با استفاده از کتابخانه‌های استاندارد پایتون آماده کنید. همچنین تکنیک‌های مختلفی برای تجسم داده‌ها خواهید آموخت.
## مطالعه موردی: 'بازار کدو تنبل'
## مطالعه موردی: «بازار کدو تنبل»
در این پوشه، یک فایل .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 با نام [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) در پوشه ریشه `data` پیدا خواهید کرد که شامل 1757 خط داده درباره بازار کدو تنبل‌ها است که بر اساس شهر گروه‌بندی شده است. این داده خام استخراج شده از گزارش‌های استاندارد بازار ترمینال محصولات تخصصی ([Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice)) منتشر شده توسط وزارت کشاورزی ایالات متحده است.
### آماده‌سازی داده‌ها
این داده‌ها در حوزه عمومی قرار دارند. می‌توان آن‌ها را از وب‌سایت USDA در فایل‌های جداگانه، برای هر شهر، دانلود کرد. برای جلوگیری از داشتن فایل‌های جداگانه زیاد، ما تمام داده‌های شهرها را در یک صفحه گسترده ترکیب کرده‌ایم، بنابراین تا حدی داده‌ها را _آمادهسازی_ کرده‌ایم. حالا بیایید نگاهی دقیق‌تر به داده‌ها بیندازیم.
این داده‌ها در مالکیت عمومی هستند. می‌توان آن‌ها را از وب‌سایت USDA در چندین فایل جداگانه، بر اساس شهر، دانلود کرد. برای جلوگیری از فایل‌های جداگانه زیاد، ما تمام داده‌های شهرها را در یک صفحه گسترده concatenated کرده‌ایم، بنابراین ما داده‌ها را کمی _آماده_ کرده‌ایم. حالا، بیایید نگاهی دقیق‌تر به داده‌ها بیندازیم.
### داده‌های کدو تنبل - نتیجه‌گیری اولیه
### داده کدو تنبل - نتیجه‌گیری اولیه
چه چیزی در مورد این داده‌ها متوجه می‌شوید؟ قبلاً دیدید که ترکیبی از رشته‌ها، اعداد، جاهای خالی و مقادیر عجیب وجود دارد که باید آن‌ها را درک کنید.
درباره این داده‌ها چه می‌بینید؟ شما قبلاً دیدید که ترکیبی از رشته‌ها، اعداد، جاهای خالی و مقادیر عجیب وجود دارد که باید مفهوم آن‌ها را فهمید.
چه سوالی می‌توانید از این داده‌ها بپرسید، با استفاده از تکنیک رگرسیون؟ مثلاً "پیش‌بینی قیمت کدو تنبل برای فروش در یک ماه خاص". با نگاه دوباره به داده‌ها، تغییراتی وجود دارد که باید انجام دهید تا ساختار داده‌ها را برای این وظیفه ایجاد کنید.
چه سوالی می‌توانید با استفاده از تکنیک رگرسیون از این داده‌ها بپرسید؟ مثلاً "پیش‌بینی قیمت یک کدو تنبل برای فروش در یک ماه خاص". دوباره به داده‌ها نگاه کنید، تغییراتی هست که باید انجام دهید تا ساختار داده لازم برای این کار ایجاد شود.
## تمرین - تحلیل داده کدو تنبل
## تمرین - تحلیل داده‌های کدو تنبل
بیایید از [Pandas](https://pandas.pydata.org/) (نام آن مخفف تحلیل داده‌های پایتون است)، که ابزاری بسیار مفید برای شکل دادن به داده‌هاست، استفاده کنیم تا این داده کدو تنبل را تحلیل و آماده کنیم.
بیایید از [Pandas](https://pandas.pydata.org/) (نام آن مخفف `Python Data Analysis` است)، ابزاری بسیار مفید برای شکل‌دهی داده‌ها، استفاده کنیم تا داده‌های کدو تنبل را تحلیل و آماده کنیم.
### ابتدا، بررسی برای تاریخ‌های غایب
### ابتدا، بررسی تاریخ‌های گم‌شده
ابتدا باید اقداماتی برای بررسی وجود تاریخ‌های گم‌شده انجام دهید:
ابتدا باید اقداماتی برای بررسی تاریخ‌های گم‌شده انجام دهید:
1. تاریخ‌ها را به فرمت ماه تبدیل کنید (این‌ها تاریخ‌های آمریکایی هستند، بنابراین فرمت `MM/DD/YYYY` است).
2. ماه را استخراج کرده و در ستون جدیدی قرار دهید.
1. تاریخ‌ها را به فرمت ماه تبدیل کنید (این‌ها تاریخ‌های ایالات متحده هستند، بنابراین فرمت آن‌ها `MM/DD/YYYY` است).
2. ماه را به یک ستون جدید استخراج کنید.
فایل _notebook.ipynb_ را در Visual Studio Code باز کرده و صفحه گسترده را به یک dataframe جدید Pandas وارد کنید.
فایل _notebook.ipynb_ را در Visual Studio Code باز کنید و صفحه گسترده را به یک دیتافریم جدید Pandas وارد کنید.
1. از تابع `head()` برای مشاهده پنج ردیف اول استفاده کنید.
1. با استفاده از تابع `head()` پنج ردیف اول را مشاهده کنید.
```python
import pandas as pd
@ -64,30 +64,30 @@
pumpkins.head()
```
از چه تابعی برای مشاهده پنج ردیف آخر استفاده می‌کنید؟
✅ چه تابعی را برای مشاهده پنج ردیف آخر استفاده می‌کنید؟
1. بررسی کنید که آیا داده‌های گم‌شده در دیتافریم فعلی وجود دارد:
1. بررسی کنید که آیا داده‌ای در dataframe فعلی گم شده است یا خیر:
```python
pumpkins.isnull().sum()
```
داده‌های گم‌شده وجود دارند، اما شاید برای وظیفه مورد نظر اهمیتی نداشته باشند.
داده‌ای گم شده وجود دارد، اما شاید برای کار جاری مهم نباشد.
1. برای آسان‌تر کردن کار با دیتافریم خود، فقط ستون‌هایی را که نیاز دارید انتخاب کنید، با استفاده از تابع `loc` که از دیتافریم اصلی گروهی از ردیف‌ها (به عنوان پارامتر اول) و ستون‌ها (به عنوان پارامتر دوم) استخراج می‌کند. عبارت `:` در مثال زیر به معنای "همه ردیف‌ها" است.
1. برای راحت‌تر کردن کار با dataframe، فقط ستون‌های مورد نیاز را انتخاب کنید، با استفاده از تابع `loc` که از dataframe اصلی گروهی از ردیف‌ها (پارامتر اول) و ستون‌ها (پارامتر دوم) را استخراج می‌کند. عبارت `:` در اینجا به معنی "همه ردیف‌ها" است.
```python
columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']
pumpkins = pumpkins.loc[:, columns_to_select]
```
### دوم، تعیین میانگین قیمت کدو تنبل
### دوم، تعیین قیمت متوسط کدو تنبل
فکر کنید چگونه می‌توانید میانگین قیمت کدو تنبل را در یک ماه خاص تعیین کنید. برای این وظیفه چه ستون‌هایی را انتخاب می‌کنید؟ نکته: شما به 3 ستون نیاز دارید.
به این فکر کنید که چگونه می‌توان قیمت متوسط یک کدو تنبل در یک ماه مشخص را تعیین کرد. برای این کار از چه ستون‌هایی باید استفاده کنید؟ نکته: شما به 3 ستون نیاز خواهید داشت.
راه‌حل: میانگین ستون‌های `Low Price` و `High Price` را محاسبه کنید تا ستون جدید Price را پر کنید، و ستون Date را به گونه‌ای تبدیل کنید که فقط ماه را نشان دهد. خوشبختانه، طبق بررسی بالا، هیچ داده گم‌شده‌ای برای تاریخ‌ها یا قیمت‌ها وجود ندارد.
راه حل: میانگین ستون‌های `Low Price` و `High Price` را بگیرید تا ستون قیمت جدید پر شود، و ستون تاریخ را فقط به ماه تبدیل کنید. خوشبختانه، بر اساس بررسی فوق، داده‌هایی برای تاریخ‌ها یا قیمت‌ها گم نیست.
1. برای محاسبه میانگین، کد زیر را اضافه کنید:
1. برای محاسبه متوسط، کد زیر را اضافه کنید:
```python
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2
@ -96,37 +96,37 @@
```
هر داده‌ای را که دوست دارید بررسی کنید با استفاده از `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` آن نیز به صورت اندازه بر اینچ، بر سطل، یا 'هرکدام' است. به نظر می‌رسد کدو تنبل‌ها بسیار سخت بتوانند به صورت یکنواخت وزن‌کشی شوند، پس بیایید فقط کدو تنبل‌های دارای رشته 'bushel' در ستون `Package` خود را فیلتر کنیم.
1. یک فیلتر در بالای فایل، زیر وارد کردن اولیه .csv اضافه کنید:
1. فیلتر را در بالای فایل، زیر وارد کردن اولیه .csv اضافه کنید:
```python
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 پوند است." همه این‌ها کمی پیچیده است! بیا تبدیل بوشل به پوند را کنار بگذاریم و قیمت را بر اساس بوشل در نظر بگیریم. با این حال، این مطالعه در مورد بوشل‌های کدو تنبل نشان می‌دهد چقدر مهم است که ماهیت داده‌ها را درک کنیم!
حالا می‌توانید قیمت‌گذاری به ازای واحد را بر اساس اندازه‌گیری بوشل تحلیل کنید. اگر داده‌ها را یک بار دیگر چاپ کنید، می‌توانید ببینید که چگونه استاندارد شده‌اند.
اکنون می‌توانید قیمت‌گذاری بر اساس واحد بر اساس اندازه‌گیری بوشل آن‌ها را تحلیل کنید. اگر یک بار دیگر داده‌ها را چاپ کنید، خواهید دید که چگونه استاندارد شده است.
آیا متوجه شدید که کدو تنبل‌هایی که به ازای نیم‌بوشل فروخته می‌شوند بسیار گران هستند؟ آیا می‌توانید دلیل آن را پیدا کنید؟ نکته: کدو تنبل‌های کوچک بسیار گران‌تر از کدو تنبل‌های بزرگ هستند، احتمالاً به این دلیل که تعداد بیشتری از آن‌ها در هر بوشل وجود دارد، با توجه به فضای خالی که توسط یک کدو تنبل بزرگ توخالی اشغال می‌شود.
متوجه شده‌اید کدو تنبل‌هایی که نصف بوشل فروخته می‌شوند بسیار گران‌ترند؟ می‌توانید دلیل آن را حدس بزنید؟ نکته: کدو تنبل‌های کوچک احتمالاً خیلی گران‌ترند چون تعدادشان در هر بوشل خیلی بیشتر است، به دلیل فضای بلااستفاده‌ای که یک کدو تنبل بزرگ توخالی اشغال می‌کند.
## استراتژی‌های مصورسازی
## استراتژی‌های تجسم داده‌ها
بخشی از نقش دانشمند داده این است که کیفیت و ماهیت داده‌هایی که با آن‌ها کار می‌کند را نشان دهد. برای این کار، آن‌ها اغلب مصورسازی‌های جالبی، مانند نمودارها، گراف‌ها و چارت‌ها، ایجاد می‌کنند که جنبه‌های مختلف داده‌ها را نشان می‌دهند. به این ترتیب، آن‌ها می‌توانند روابط و شکاف‌هایی را که در غیر این صورت سخت است کشف شوند، به صورت بصری نشان دهند.
بخشی از نقش دانشمند داده این است که کیفیت و ماهیت داده‌هایی را که با آن‌ها کار می‌کند نشان دهد. برای این منظور، اغلب تجسم‌های جالب، یا نمودارها، گراف‌ها و چارت‌های مختلفی ایجاد می‌کنند که جنبه‌های متفاوت داده را نمایش می‌دهد. به این ترتیب، آن‌ها می‌توانند روابط و شکاف‌هایی که سخت قابل کشف هستند را به‌صورت بصری نشان دهند.
[![یادگیری ماشین برای مبتدیان - چگونه داده‌ها را با Matplotlib مصورسازی کنیم](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "یادگیری ماشین برای مبتدیان - چگونه داده‌ها را با Matplotlib مصورسازی کنیم")
[![ML برای مبتدیان - چگونه با Matplotlib داده‌ها را تجسم کنیم](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML برای مبتدیان - چگونه با Matplotlib داده‌ها را تجسم کنیم")
> 🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره مصورسازی داده‌ها برای این درس مشاهده کنید.
> 🎥 برای مشاهده ویدیوی کوتاه درباره تجسم داده‌ها برای این درس، روی تصویر بالا کلیک کنید.
مصورسازی‌ها همچنین می‌توانند به تعیین تکنیک یادگیری ماشین مناسب برای داده‌ها کمک کنند. یک نمودار پراکندگی که به نظر می‌رسد یک خط را دنبال می‌کند، به عنوان مثال، نشان می‌دهد که داده‌ها کاندیدای خوبی برای یک تمرین رگرسیون خطی هستند.
تجسم‌ها همچنین می‌توانند در تعیین مناسب‌ترین تکنیک ماشین لرنینگ برای داده‌ها کمک کنند. مثلاً یک نمودار پراکندگی که به نظر می‌رسد یک خط را دنبال می‌کند، نشان می‌دهد که داده‌ها گزینه خوبی برای تمرین رگرسیون خطی هستند.
یکی از کتابخانه‌های مصورسازی داده که در نوت‌بوک‌های Jupyter خوب کار می‌کند، [Matplotlib](https://matplotlib.org/) است (که در درس قبلی نیز آن را دیدید).
یکی از کتابخانه‌های تجسم داده که در نوت‌بوک‌های Jupyter خوب کار می‌کند، [Matplotlib](https://matplotlib.org/) است (که قبلاً هم در درس قبل آن را دیدهاید).
> تجربه بیشتری در مصورسازی داده‌ها در [این آموزش‌ها](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) کسب کنید.
> تجربه بیشتر با تجسم داده‌ها در [این آموزش‌ها](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) کسب کنید.
## تمرین - آزمایش با Matplotlib
سعی کنید برخی نمودارهای پایه برای نمایش دیتافریم جدیدی که ایجاد کرده‌اید، بسازید. یک نمودار خطی پایه چه چیزی را نشان می‌دهد؟
سعی کنید چند نمودار پایه برای نمایش dataframe جدیدی که ساخته‌اید ایجاد کنید. یک نمودار خطی ساده چه چیزی را نشان می‌دهد؟
1. Matplotlib را در بالای فایل، زیر وارد کردن Pandas وارد کنید:
1. Matplotlib را در بالای فایل، زیر وارد کردن Pandas، وارد کنید:
```python
import matplotlib.pyplot as plt
```
1. کل نوت‌بوک را دوباره اجرا کنید تا تازه شود.
1. در پایین نوت‌بوک، یک سلول برای رسم داده‌ها به صورت جعبه اضافه کنید:
1. کل نوت‌بوک را دوباره اجرا کنید تا تازه‌سازی شود.
1. در پایین نوت‌بوک، یک سلول اضافه کنید تا داده‌ها را به صورت نمودار جعبه‌ای (box plot) رسم کند:
```python
price = new_pumpkins.Price
@ -174,44 +174,121 @@
plt.show()
```
![یک نمودار پراکندگی که رابطه قیمت با ماه را نشان می‌دهد](../../../../2-Regression/2-Data/images/scatterplot.png)
![یک نمودار پراکندگی که رابطه قیمت و ماه را نشان می‌دهد](../../../../translated_images/fa/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/fa/barchart.a833ea9194346d76.webp)
این تجسم داده مفیدتری است! به نظر می‌رسد بالاترین قیمت کدو تنبل در سپتامبر و اکتبر رخ می‌دهد. آیا این با انتظار شما مطابقت دارد؟ چرا یا چرا نه؟
## تمرین - آزمایش با Seaborn
Matplotlib قدرتمند است، اما ممکن است نیاز به کد زیادی برای ساخت یک نمودار صیقل‌خورده باشد. [Seaborn](https://seaborn.pydata.org/) کتابخانه‌ای است که _روی_ Matplotlib ساخته شده و برای تجسم داده‌های آماری طراحی شده است. این کتابخانه مستقیماً با dataframes پاندا کار می‌کند، استایل‌های پیش‌فرض جذابی دارد و اجازه می‌دهد نمودارهای آموزنده با کد بسیار کمتر بسازید. چون 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 که مستقیماً با ستون‌های dataframe شما کار می‌کند:
```python
sns.relplot(x="Price", y="Month", data=new_pumpkins)
```
![یک نمودار پراکندگی Seaborn که رابطه قیمت به ماه را نشان می‌دهد](../../../../translated_images/fa/relplot.a03837d8f0329cec.webp)
توجه کنید چگونه نام‌ ستون‌ها و dataframe را می‌دهید و Seaborn برچسب‌های محورها را برای شما تعیین می‌کند.
2. می‌توانید با دادن `kind="line"` به یک نمودار خطی تغییر دهید. Seaborn حتی نوار سایه‌داری برای نشان دادن بازه اطمینان در اطراف خط رسم می‌کند:
```python
sns.relplot(x="Price", y="Month", kind="line", data=new_pumpkins)
```
![یک نمودار خطی Seaborn که رابطه قیمت به ماه را نشان می‌دهد](../../../../translated_images/fa/lineplot.f9034ba47b1e30ee.webp)
این داده خاص نویزی است پس نمودار خطی بهترین انتخاب نیست — اما نشان می‌دهد چقدر راحت می‌توانید نوع نمودار را در Seaborn تغییر دهید.
### نمودارهای میله‌ای برای نمایش توزیع‌ها
پیش‌تر داده‌ها را به صورت دستی گروه‌بندی کردید تا نمودار میله‌ای با Matplotlib بسازید. تابع [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html) در Seaborn (نمودار دسته‌ای) می‌تواند گروه‌بندی و تجمیع را برای شما انجام دهد. به‌طور پیش‌فرض `kind="bar"` میانگین هر دسته را به همراه یک خط سیاه که بازه اطمینان را نشان می‌دهد نمایش می‌دهد.
1. یک نمودار میله‌ای از میانگین قیمت در هر ماه بسازید:
```python
sns.catplot(x="Month", y="Price", data=new_pumpkins, kind="bar")
```
![یک نمودار میله‌ای Seaborn که توزیع قیمت در هر ماه را نشان می‌دهد](../../../../translated_images/fa/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/fa/heatmap.bd98dce43b404c57.webp)
مقادیری نزدیک به `1` (یا `-1`) به این معنی است که ستون‌ها به‌شدت با هم _خطی_ همبسته هستند. ببینید چطور `Low Price` و `High Price` تقریباً به طور کامل همبسته‌اند. از سوی دیگر، `Month` فقط همبستگی خطی ضعیفی با قیمت نشان می‌دهد — حتی اگر نمودار میله‌ای فوق اوج فصلی روشنی در سپتامبر و اکتبر را نمایش داده است. این یک درس مهم است: ضریب همبستگی فقط روابط _خط مستقیم_ را اندازه‌گیری می‌کند، بنابراین ممکن است الگوهای فصلی یا غیرخطی را نادیده بگیرد. ✅ چرا نگاه‌کردن هم‌زمان به نقشه حرارتی *و* نمودارهای مثل نمودار میله‌ای قبل از تصمیم‌گیری درباره ستون‌هایی که استفاده می‌کنید مفید است؟
### Matplotlib یا Seaborn؟
هر دو کتابخانه ارزش یادگیری دارند:
- **Matplotlib** کنترل دقیق روی هر عنصر یک نمودار را به شما می‌دهد و پایه‌ای است که تقریباً هر کتابخانه رسم دیگری در پایتون روی آن ساخته شده است.
- **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 -->

@ -4,7 +4,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## رگرسیون خطی برای کدو تنبل - درس ۲\n"
"## رگرسیون خطی برای کدو حلوایی - درس ۲\n"
]
},
{
@ -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-09-04T01:36:54+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "fa"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -1,47 +1,47 @@
# مقدمه‌ای بر یادگیری تقویتی و Q-Learning
# معرفی یادگیری تقویتی و Q-یادگیری
![خلاصه‌ای از یادگیری تقویتی در یادگیری ماشین در یک اسکچ‌نوت](../../../../sketchnotes/ml-reinforcement.png)
> اسکچ‌نوت توسط [Tomomi Imura](https://www.twitter.com/girlie_mac)
![خلاصه‌ای از یادگیری تقویتی در یادگیری ماشین در یک اسکچ نوت](../../../../translated_images/fa/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/)
## پیش‌نیازها و تنظیمات
## پیش‌نیازها و راه‌اندازی
در این درس، ما با کدی در پایتون آزمایش خواهیم کرد. شما باید بتوانید کد 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) یک تکنیک یادگیری است که به ما اجازه می‌دهد رفتار بهینه یک **عامل** را در یک **محیط** با اجرای آزمایش‌های متعدد یاد بگیریم. یک عامل در این محیط باید یک **هدف** داشته باشد که توسط یک **تابع پاداش** تعریف شده است.
یادگیری تقویتی (RL) تکنیکی است که به ما اجازه می‌دهد رفتار بهینه یک **عامل** را در یک **محیط** با انجام آزمایش‌های متعدد یاد بگیریم. عامل در این محیط باید یک **هدف** داشته باشد که توسط یک **تابع پاداش** تعریف می‌شود.
## محیط
برای سادگی، دنیای پیتر را به صورت یک تخته مربعی با اندازه `عرض` x `ارتفاع` در نظر بگیریم، مانند این:
برای سادگی، اجازه دهید دنیای پیتر را یک صفحه مربع به اندازه `width` در `height` در نظر بگیریم، مانند این:
![محیط پیتر](../../../../8-Reinforcement/1-QLearning/images/environment.png)
![محیط پیتر](../../../../translated_images/fa/environment.40ba3cb66256c93f.webp)
هر سلول در این تخته می‌تواند یکی از موارد زیر باشد:
هر خانه در این صفحه می‌تواند یکی از موارد زیر باشد:
* **زمین**، که پیتر و موجودات دیگر می‌توانند روی آن راه بروند.
* **آب**، که به وضوح نمی‌توانید روی آن راه بروید.
* یک **درخت** یا **چمن**، جایی که می‌توانید استراحت کنید.
* یک **سیب**، که چیزی است که پیتر خوشحال می‌شود پیدا کند تا خودش را تغذیه کند.
* یک **گرگ**، که خطرناک است و باید از آن اجتناب کرد.
* **زمین**، که پیتر و دیگر موجودات می‌توانند روی آن راه بروند.
* **آب**، که البته نمی‌توانید روی آن راه بروید.
* یک **درخت** یا **چمن**، مکانی برای استراحت.
* یک **سیب**، که نمایانگر چیزی است که پیتر خوشحال می‌شود آن را پیدا کند و خودش را تغذیه کند.
* یک **گرگ**، که خطرناک است و باید از آن اجتناب شود.
یک ماژول جداگانه پایتون، [`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 *
@ -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 قدم است.
توجه داشته باشید که طول متوسط مسیر حدود ۳۰ تا ۴۰ قدم است که نسبتاً زیاد است، با توجه به اینکه فاصله متوسط تا نزدیک‌ترین سیب حدود ۵ تا ۶ قدم است.
همچنین می‌توانید ببینید حرکت پیتر در طول قدم زدن تصادفی چگونه به نظر می‌رسد:
همچنین می‌توانید ببینید حرکت پیتر در طی گام تصادفی چگونه است:
![قدم زدن تصادفی پیتر](../../../../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 نامیده می‌شود زیرا اغلب راحت است که آن را به صورت یک جدول یا آرایه چندبعدی نمایش دهیم. از آنجا که تخته ما ابعاد `عرض` x `ارتفاع` دارد، می‌توانیم جدول Q را با استفاده از یک آرایه numpy با شکل `عرض` x `ارتفاع` x `طول(actions)` نمایش دهیم: (بلوک کد 6)
این جدول به نام جدول Q نامیده می‌شود زیرا معمولاً نمایش آن به صورت یک جدول یا آرایه چندبعدی راحت است. از آنجا که صفحه ما ابعاد `width` در `height` دارد، می‌توانیم جدول Q را با استفاده از آرایه numpy به شکل `width` در `height` در `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 را با یک مقدار مساوی، در مورد ما ۰.۲۵، مقداردهی اولیه می‌کنیم. این متناظر با سیاست «گام تصادفی» است، زیرا همه حرکات در هر حالت به یک اندازه خوب هستند. ما می‌توانیم جدول Q را به تابع `plot` بدهیم تا جدول را روی صفحه ترسیم کنیم: `m.plot(Q)`.
![محیط پیتر](../../../../8-Reinforcement/1-QLearning/images/env_init.png)
![محیط پیتر](../../../../translated_images/fa/env_init.04e8f26d2d60089e.webp)
در مرکز هر سلول یک "فلش" وجود دارد که جهت ترجیحی حرکت را نشان می‌دهد. از آنجا که همه جهت‌ها برابر هستند، یک نقطه نمایش داده می‌شود.
در مرکز هر خانه یک «فلش» وجود دارد که جهت اولویت حرکت را نشان می‌دهد. از آنجایی که همه جهت‌ها برابر هستند، یک نقطه نمایش داده می‌شود.
اکنون باید شبیه‌سازی را اجرا کنیم، محیط خود را کشف کنیم، و یک توزیع بهتر از مقادیر جدول Q یاد بگیریم، که به ما اجازه می‌دهد مسیر رسیدن به سیب را بسیار سریع‌تر پیدا کنیم.
اکنون باید شبیه‌سازی را اجرا کنیم، محیط خود را کاوش کنیم و توزیع بهتری از مقادیر جدول Q بیاموزیم که به ما اجازه دهد مسیر به سمت سیب را سریع‌تر پیدا کنیم.
## جوهره Q-Learning: معادله بلمن
## ماهیت Q-یادگیری: معادله بلمن
هنگامی که شروع به حرکت می‌کنیم، هر اقدام یک پاداش مربوطه خواهد داشت، یعنی ما از نظر تئوری می‌توانیم اقدام بعدی را بر اساس بالاترین پاداش فوری انتخاب کنیم. با این حال، در بیشتر حالت‌ها، حرکت به هدف ما برای رسیدن به سیب نمی‌رسد، و بنابراین نمی‌توانیم بلافاصله تصمیم بگیریم کدام جهت بهتر است.
وقتی شروع به حرکت می‌کنیم، هر عمل پاداش مربوط به خود را دارد، یعنی ما به طور نظری می‌توانیم اقدام بعدی را بر اساس بالاترین پاداش فوری انتخاب کنیم. اما در اکثر حالت‌ها، حرکت به هدف رسیدن به سیب نمی‌انجامد، بنابراین نمی‌توانیم فوراً تصمیم بگیریم کدام جهت بهتر است.
> به یاد داشته باشید که نتیجه فوری مهم نیست، بلکه نتیجه نهایی که در پایان شبیه‌سازی به دست خواهیم آورد اهمیت دارد.
> به یاد داشته باشید که نتیجه فوری مهم نیست، بلکه نتیجه نهایی مهم است که در پایان شبیه‌سازی به دست می‌آوریم.
برای در نظر گرفتن این پاداش تأخیری، باید از اصول **[برنامه‌ریزی پویا](https://en.wikipedia.org/wiki/Dynamic_programming)** استفاده کنیم، که به ما اجازه می‌دهد به صورت بازگشتی درباره مسئله خود فکر کنیم.
برای لحاظ کردن این پاداش با تأخیر، باید اصول **[برنامه‌ریزی پویا](https://en.wikipedia.org/wiki/Dynamic_programming)** را به کار ببریم، که به ما اجازه می‌دهد مسئله خود را به شکل بازگشتی بررسی کنیم.
فرض کنید اکنون در حالت *s* هستیم و می‌خواهیم به حالت بعدی *s'* حرکت کنیم. با انجام این کار، پاداش فوری *r(s,a)* را دریافت خواهیم کرد، که توسط تابع پاداش تعریف شده است، به علاوه مقداری پاداش آینده. اگر فرض کنیم که جدول Q ما به درستی "جذابیت" هر اقدام را منعکس می‌کند، در حالت *s'* ما اقدامی *a* را انتخاب خواهیم کرد که به مقدار حداکثر *Q(s',a')* مربوط باشد. بنابراین، بهترین پاداش آینده ممکن که می‌توانیم در حالت *s* دریافت کنیم به صورت `max`
فرض کنید اکنون در حالت *s* هستیم و می‌خواهیم به حالت بعدی *s'* حرکت کنیم. با انجام این کار، پاداش فوری *r(s,a)* که توسط تابع پاداش تعریف شده را دریافت می‌کنیم، به علاوه مقداری پاداش آینده. اگر فرض کنیم جدول Q ما به‌درستی «جذابیت» هر عمل را منعکس کند، آنگاه در حالت *s'* عمل *a* را انتخاب خواهیم کرد که متناظر با بیشینه مقدار *Q(s',a')* است. بنابراین بهترین پاداش آینده ممکن در حالت *s* به صورت `max`<sub>a'</sub>*Q(s',a')* تعریف می‌شود (بیشینه‌گیری در اینجا روی همه اقدامات ممکن *a'* در حالت *s'* انجام می‌شود).
این معادله، **فرمول بلمن** برای محاسبه مقدار جدول Q در حالت *s* با اقدام *a* است:
<img src="../../../../translated_images/fa/bellman-equation.7c0c4c722e5a6b7c.webp"/>
در اینجا γ همان **ضریب تخفیف** است که تعیین می‌کند چقدر باید پاداش کنونی را به پاداش آینده ترجیح دهیم و بالعکس.
## الگوریتم یادگیری
با توجه به معادله فوق، می‌توان الآن شبه‌کدی برای الگوریتم یادگیری خود نوشت:
* مقداردهی اولیه جدول Q با اعداد مساوی برای همه حالات و اقدامات
* تنظیم نرخ یادگیری α۱
* تکرار شبیه‌سازی به دفعات زیاد
1. شروع در موقعیت تصادفی
1. تکرار
1. انتخاب یک اقدام *a* در حالت *s*
۲. اجرای اقدام با حرکت به حالت جدید *s'*
۳. اگر شرط پایان بازی برقرار شد یا مجموع پاداش خیلی کم بود - شبیه‌سازی را متوقف کن
۴. محاسبه پاداش *r* در حالت جدید
۵. به‌روزرسانی تابع Q بر اساس معادله بلمن: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ max<sub>a'</sub>Q(s',a'))*
۶. *s* ← *s'*
۷. به‌روزرسانی مجموع پاداش و کاهش α.
## بهره‌برداری و کاوش
در الگوریتم بالا، ما مشخص نکردیم دقیقا در مرحله ۲.۱ چگونه باید اقدام انتخاب شود. اگر اقدام را به صورت تصادفی انتخاب کنیم، به طور تصادفی محیط را **کاوش** می‌کنیم و احتمالاً زیاد خواهیم مرد و به مناطق غیرمعمول خواهیم رفت. رویکرد جایگزین این است که **از مقادیر جدول Q که قبلاً می‌دانیم استفاده کنیم** و بهترین اقدام (با بالاترین مقدار جدول Q) را در حالت *s* انتخاب کنیم. البته این مانع از کاوش سایر حالات می‌شود و احتمال دارد راه حل بهینه را پیدا نکنیم.
بنابراین بهترین رویکرد حفظ تعادل بین کاوش و بهره‌برداری است. این کار با انتخاب اقدام در حالت *s* با احتمالات متناسب با مقادیر جدول Q امکان‌پذیر است. ابتدا که مقادیر جدول Q همه برابرند، این انتخاب مانند انتخاب تصادفی است، اما با یادگیری بیشتر درباره محیط، احتمالاً مسیر بهینه دنبال می‌شود در حالی که گاهی به عامل اجازه داده می‌شود مسیر ناکاوش شده را انتخاب کند.
## پیاده‌سازی پایتون
اکنون آماده‌ایم الگوریتم یادگیری را پیاده‌سازی کنیم. قبل از این، نیاز به تابعی داریم که اعداد دلخواه در جدول Q را به برداری از احتمالات متناظر با اقدامات تبدیل کند.
1. تابع `probs()` را ایجاد کنید:
```python
def probs(v,eps=1e-4):
v = v-v.min()+eps
v = v/v.sum()
return v
```
چند `eps` به بردار اصلی اضافه می‌کنیم تا از تقسیم بر صفر در حالت اولیه جلوگیری شود، زمانی که همه مؤلفه‌های بردار برابرند.
الگوریتم یادگیری را در ۵۰۰۰ آزمایش، که به آن **اپوک** نیز می‌گویند، اجرا کنید: (بلوک کد 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/fa/learned.ed28bcd8484b5287.webp"/>
## بررسی سیاست
از آنجا که جدول Q "جذابیت" هر اقدام را در هر حالت فهرست می‌کند، استفاده از آن برای تعریف ناوبری کارآمد در دنیای ما بسیار آسان است. در ساده‌ترین حالت، می‌توانیم اقدامی را انتخاب کنیم که با بالاترین مقدار جدول Q مطابقت دارد: (کد بلاک 9)
از آنجا که جدول Q «جذابیت» هر اقدام در هر حالت را لیست می‌کند، استفاده از آن برای تعریف مسیریابی موثر در دنیای ما بسیار آسان است. در ساده‌ترین حالت، می‌توانیم اقدامی را انتخاب کنیم که بیشترین مقدار جدول Q را داشته باشد: (بلوک کد 9)
```python
def qpolicy_strict(m):
@ -198,17 +274,18 @@ def qpolicy_strict(m):
walk(m,qpolicy_strict)
```
> اگر کد بالا را چندین بار امتحان کنید، ممکن است متوجه شوید که گاهی اوقات "گیر" می‌کند و باید دکمه STOP را در نوت‌بوک فشار دهید تا آن را متوقف کنید. این اتفاق به این دلیل رخ می‌دهد که ممکن است شرایطی وجود داشته باشد که دو حالت از نظر مقدار Q-Value بهینه به یکدیگر "اشاره" کنند، که در این صورت عامل بین این حالت‌ها به طور نامحدود حرکت می‌کند.
> اگر کد بالا را چندین بار اجرا کنید، ممکن است متوجه شوید که گاهی اوقات "گیر می‌کند" و لازم است دکمه STOP در دفترچه یادداشت را برای قطع اجرا فشار دهید. این اتفاق می‌افتد چون ممکن است شرایطی پیش بیاید که دو حالت از نظر مقدار بهینه Q-Value به یکدیگر "اشاره" کنند، در این حالت عامل به طور نامحدود بین آن دو حالت حرکت می‌کند.
## 🚀چالش
> **وظیفه 1:** تابع `walk` را تغییر دهید تا طول مسیر را به تعداد مشخصی از مراحل (مثلاً 100) محدود کند و مشاهده کنید که کد بالا گاهی اوقات این مقدار را برمی‌گرداند.
> **وظیفه ۱:** تابع `walk` را طوری تغییر دهید که طول مسیر حداکثر به تعداد معینی از گام‌ها (مثلاً ۱۰۰) محدود شود و ببینید کد بالا گاهی اوقات این مقدار را بازمی‌گرداند.
> **وظیفه 2:** تابع `walk` را تغییر دهید تا به مکان‌هایی که قبلاً در آن‌ها بوده است بازنگردد. این کار از حلقه زدن `walk` جلوگیری می‌کند، اما عامل همچنان ممکن است در مکانی "گیر" کند که قادر به فرار از آن نیست.
> **وظیفه ۲:** تابع `walk` را طوری تغییر دهید که به مکان‌هایی که قبلاً رفته باز نگردد. این کار از حلقه‌زدن `walk` جلوگیری می‌کند، اما با این حال ممکن است عامل در موقعیتی گرفتار شود که امکان فرار از آن را ندارد.
## ناوبری
سیاست ناوبری بهتر، همان سیاستی است که در طول آموزش استفاده کردیم، که ترکیبی از بهره‌برداری و اکتشاف است. در این سیاست، هر اقدام را با احتمال مشخصی انتخاب می‌کنیم که متناسب با مقادیر موجود در جدول Q است. این استراتژی ممکن است همچنان باعث شود عامل به موقعیتی که قبلاً بررسی کرده بازگردد، اما همان‌طور که از کد زیر می‌بینید، منجر به مسیر متوسط بسیار کوتاه‌تری به مکان مورد نظر می‌شود (به یاد داشته باشید که `print_statistics` شبیه‌سازی را 100 بار اجرا می‌کند): (کد بلاک 10)
سیاست ناوبری بهتر، همان سیاستی است که در طول آموزش استفاده کردیم، که اکتشاف و بهره‌برداری را ترکیب می‌کند. در این سیاست، هر عمل با احتمال مشخصی انتخاب می‌شود که متناسب با مقادیر در جدول Q است. این استراتژی ممکن است همچنان باعث شود عامل به موقعیتی که قبلاً کاوش کرده برگردد، اما همان‌طور که از کد زیر می‌بینید، منجر به متوسط مسیر بسیار کوتاه‌تری به مکان مطلوب می‌شود (به یاد داشته باشید که `print_statistics` شبیه‌سازی را ۱۰۰ بار اجرا می‌کند): (کد بلوک ۱۰)
```python
def qpolicy(m):
@ -220,28 +297,32 @@ def qpolicy(m):
print_statistics(qpolicy)
```
پس از اجرای این کد، باید طول مسیر متوسط بسیار کوتاه‌تری نسبت به قبل دریافت کنید، در محدوده 3-6.
پس از اجرای این کد، باید طول متوسط مسیر بسیار کوتاه‌تری نسبت به قبل، در محدوده ۳-۶ به دست آورید.
## بررسی روند یادگیری
## بررسی فرآیند یادگیری
همانطور که اشاره کردیم، روند یادگیری تعادلی است بین اکتشاف و بهره‌برداری از دانش به‌دست آمده درباره ساختار فضای مسئله. دیدیم که نتایج یادگیری (توانایی کمک به عامل برای پیدا کردن مسیر کوتاه به هدف) بهبود یافته است، اما مشاهده رفتار طول متوسط مسیر در طی فرآیند یادگیری نیز جالب است:
همان‌طور که اشاره کردیم، فرآیند یادگیری تعادلی بین اکتشاف و بهره‌برداری از دانش کسب‌شده درباره ساختار فضای مسئله است. مشاهده کردیم که نتایج یادگیری (توانایی کمک به عامل برای یافتن مسیر کوتاه به هدف) بهبود یافته است، اما همچنین جالب است که ببینیم طول مسیر متوسط در طول فرآیند یادگیری چگونه رفتار می‌کند:
<img src="../../../../translated_images/fa/lpathlen1.0534784add58d4eb.webp"/>
## خلاصه یادگیری‌ها:
نتایج یادگیری را می‌توان به شکل زیر خلاصه کرد:
- **طول مسیر متوسط افزایش می‌یابد**. آنچه در اینجا مشاهده می‌کنیم این است که در ابتدا طول مسیر متوسط افزایش می‌یابد. این احتمالاً به این دلیل است که وقتی هیچ اطلاعاتی درباره محیط نداریم، احتمالاً در حالت‌های بد، آب یا گرگ گیر می‌کنیم. با یادگیری بیشتر و استفاده از این دانش، می‌توانیم محیط را بیشتر بررسی کنیم، اما هنوز نمی‌دانیم سیب‌ها دقیقاً کجا هستند.
- **طول متوسط مسیر افزایش می‌یابد**. آنچه اینجا می‌بینیم این است که ابتدا، طول متوسط مسیر افزایش می‌یابد. این احتمالاً به این دلیل است که وقتی هیچ اطلاعاتی درباره محیط نداریم، احتمال گرفتار شدن در حالت‌های نامطلوب مانند آب یا گرگ زیاد است. وقتی بیشتر یاد می‌گیریم و شروع به استفاده از این دانش می‌کنیم، می‌توانیم مدت زمان بیشتری محیط را کاوش کنیم، اما هنوز به خوبی نمی‌دانیم سیب‌ها دقیقاً کجا هستند.
- **طول مسیر کاهش می‌یابد، با یادگیری بیشتر**. وقتی به اندازه کافی یاد می‌گیریم، رسیدن به هدف برای عامل آسان‌تر می‌شود و طول مسیر شروع به کاهش می‌کند. با این حال، همچنان به اکتشاف باز هستیم، بنابراین اغلب از مسیر بهینه منحرف می‌شویم و گزینه‌های جدیدی را بررسی می‌کنیم که باعث طولانی‌تر شدن مسیر از حد مطلوب می‌شود.
- **طول مسیر با یادگیری کمتر می‌شود**. وقتی به اندازه کافی یاد می‌گیریم، رسیدن به هدف برای عامل آسان‌تر می‌شود و طول مسیر شروع به کاهش می‌کند. با این حال، هنوز هم آماده اکتشاف هستیم، پس اغلب از بهترین مسیر منحرف شده و گزینه‌های جدیدی را کاوش می‌کنیم که مسیر را از حالت بهینه طولانی‌تر می‌کند.
- **طول مسیر به طور ناگهانی افزایش می‌یابد**. آنچه در این نمودار نیز مشاهده می‌کنیم این است که در برخی مواقع طول مسیر به طور ناگهانی افزایش می‌یابد. این نشان‌دهنده ماهیت تصادفی فرآیند است و اینکه ممکن است در برخی مواقع ضرایب جدول Q را با مقادیر جدید خراب کنیم. این موضوع باید به طور ایده‌آل با کاهش نرخ یادگیری به حداقل برسد (برای مثال، در پایان آموزش، فقط مقادیر جدول Q را با مقدار کمی تنظیم کنیم).
- **طول به طور ناگهانی افزایش می‌یابد**. همچنین در این نمودار مشاهده می‌کنیم که در نقطه‌ای طول مسیر به طور ناگهانی افزایش یافته است. این نشان‌دهنده طبیعت استوکستیک فرآیند است و اینکه ممکن است در برخی مواقع ضرایب جدول Q را با مقادیر جدید بازنویسی کرده و "خراب" کنیم. این موضوع به طور ایده‌آل باید با کاهش نرخ یادگیری به حداقل برسد (مثلاً در پایان آموزش، تنها مقادیر جدول Q را با مقدار کمی تنظیم کنیم).
به طور کلی، مهم است که به یاد داشته باشیم موفقیت و کیفیت فرآیند یادگیری به طور قابل توجهی به پارامترهایی مانند نرخ یادگیری، کاهش نرخ یادگیری و عامل تخفیف بستگی دارد. این پارامترها اغلب **ابرپارامتر** نامیده می‌شوند تا از **پارامترها** که در طول آموزش بهینه‌سازی می‌شوند (برای مثال، ضرایب جدول Q) متمایز شوند. فرآیند یافتن بهترین مقادیر ابرپارامترها **بهینه‌سازی ابرپارامتر** نامیده می‌شود و شایسته یک موضوع جداگانه است.
به طور کلی، مهم است که به خاطر بسپاریم موفقیت و کیفیت فرآیند یادگیری به طور قابل توجهی به پارامترهایی مانند نرخ یادگیری، کاهش نرخ یادگیری و ضریب تخفیف بستگی دارد. این پارامترها اغلب به عنوان **ابرپارامترها** شناخته می‌شوند، تا آنها را از **پارامترها** که در طول آموزش بهینه می‌شوند (مثلاً ضرایب جدول Q) متمایز کنند. فرایند یافتن بهترین مقادیر برای ابرپارامترها، **بهینه‌سازی ابرپارامتر** نامیده می‌شود و موضوع جداگانه‌ای است.
## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/)
## [آزمون پس از آموزش](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 -->

@ -1,14 +1,34 @@
## پیش‌نیازها
# اسکیت روی CartPole
در این درس، از کتابخانه‌ای به نام **OpenAI Gym** برای شبیه‌سازی محیط‌های مختلف استفاده خواهیم کرد. شما می‌توانید کد این درس را به صورت محلی اجرا کنید (مثلاً از طریق Visual Studio Code)، که در این صورت شبیه‌سازی در یک پنجره جدید باز خواهد شد. اگر کد را به صورت آنلاین اجرا می‌کنید، ممکن است نیاز باشد تغییراتی در کد ایجاد کنید، همانطور که [اینجا](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) توضیح داده شده است.
مشکلی که در درس قبلی حل کردیم ممکن است یک مسئله اسباب‌بازی به نظر برسد و برای سناریوهای واقعی کاربرد چندانی نداشته باشد. اما اینطور نیست، زیرا بسیاری از مسائل دنیای واقعی هم همین سناریو را دارند - از جمله بازی شطرنج یا گو. این موارد مشابه هستند چون ما یک صفحه بازی با قوانین معین و یک **حالت گسسته** داریم.
## OpenAI Gym
## [آزمون پیش از تدریس](https://ff-quizzes.netlify.app/en/ml/)
در درس قبلی، قوانین بازی و وضعیت توسط کلاس `Board` که خودمان تعریف کرده بودیم مشخص می‌شد. در اینجا از یک **محیط شبیه‌سازی خاص** استفاده خواهیم کرد که فیزیک پشت میله تعادل را شبیه‌سازی می‌کند. یکی از محبوب‌ترین محیط‌های شبیه‌سازی برای آموزش الگوریتم‌های یادگیری تقویتی، [Gym](https://gym.openai.com/) است که توسط [OpenAI](https://openai.com/) نگهداری می‌شود. با استفاده از این Gym می‌توانیم محیط‌های مختلفی از شبیه‌سازی CartPole تا بازی‌های Atari ایجاد کنیم.
## مقدمه
> **توجه**: می‌توانید سایر محیط‌های موجود در OpenAI Gym را [اینجا](https://gym.openai.com/envs/#classic_control) مشاهده کنید.
در این درس همان اصول Q-Learning را به مسئله‌ای با **حالت پیوسته** اعمال خواهیم کرد، یعنی حالتی که توسط یک یا چند عدد واقعی داده می‌شود. مسئله زیر را بررسی خواهیم کرد:
ابتدا Gym را نصب کرده و کتابخانه‌های مورد نیاز را وارد کنید (کد بلاک 1):
> **مسئله**: اگر پیتر بخواهد از گرگ فرار کند، باید بتواند سریع‌تر حرکت کند. خواهیم دید که چگونه پیتر می‌تواند یاد بگیرد اسکیت کند، به خصوص چگونه تعادل خود را حفظ کند، با استفاده از Q-Learning.
![فرار بزرگ!](../../../../translated_images/fa/escape.18862db9930337e3.webp)
> پیتر و دوستانش برای فرار از گرگ خلاقیت به خرج می‌دهند! تصویر از [Jen Looper](https://twitter.com/jenlooper)
ما از نسخه ساده‌شده‌ای از تعادل استفاده خواهیم کرد که به عنوان مسئله **CartPole** شناخته می‌شود. در دنیای CartPole، ما یک لغزنده افقی داریم که می‌تواند به چپ یا راست حرکت کند و هدف این است که یک قطب عمودی را روی لغزنده تعادل دهیم.
<img alt="a cartpole" src="../../../../translated_images/fa/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 تا بازی‌های آتاری بسازیم.
> **توجه**: دیگر محیط‌های موجود در OpenAI Gym را می‌توانید [اینجا](https://gym.openai.com/envs/#classic_control) مشاهده کنید.
ابتدا، بیایید gym را نصب کنیم و کتابخانه‌های مورد نیاز را وارد کنیم (کد بلاک 1):
```python
import sys
@ -20,15 +40,15 @@ import numpy as np
import random
```
## تمرین - مقداردهی اولیه به محیط CartPole
## تمرین - راه‌اندازی محیط CartPole
برای کار با مسئله تعادل CartPole، باید محیط مربوطه را مقداردهی اولیه کنیم. هر محیط دارای موارد زیر است:
برای کار با مسئله تعادل CartPole، باید محیط مربوطه را راه‌اندازی کنیم. هر محیط با یک:
- **فضای مشاهده** که ساختار اطلاعاتی را که از محیط دریافت می‌کنیم تعریف می‌کند. برای مسئله CartPole، موقعیت میله، سرعت و برخی مقادیر دیگر را دریافت می‌کنیم.
- **فضای مشاهده** که ساختار اطلاعات دریافتی از محیط را تعریف می‌کند. برای مسئله CartPole موقعیت قطب، سرعت و چند مقدار دیگر دریافت می‌کنیم.
- **فضای عمل** که اقدامات ممکن را تعریف می‌کند. در مورد ما، فضای عمل گسسته است و شامل دو عمل - **چپ** و **راست** می‌شود. (کد بلاک 2)
- **فضای عمل** که اعمال ممکن را تعریف می‌کند. در مورد ما فضای عمل گسسته است و شامل دو عمل - **چپ** و **راست** - می‌شود. (کد بلاک 2)
1. برای مقداردهی اولیه، کد زیر را تایپ کنید:
1. برای راه‌اندازی، کد زیر را تایپ کنید:
```python
env = gym.make("CartPole-v1")
@ -37,11 +57,11 @@ import random
print(env.action_space.sample())
```
برای مشاهده نحوه عملکرد محیط، یک شبیه‌سازی کوتاه برای 100 مرحله اجرا کنید. در هر مرحله، یکی از اقدامات را ارائه می‌دهیم - در این شبیه‌سازی، به صورت تصادفی یک اقدام از `action_space` انتخاب می‌شود.
برای دیدن نحوه عملکرد محیط، بیایید شبیه‌سازی کوتاهی روی 100 گام اجرا کنیم. در هر مرحله یکی از اعمال را انتخاب می‌کنیم در این شبیه‌سازی فقط به صورت تصادفی یک عمل از `action_space` انتخاب می‌شود.
1. کد زیر را اجرا کنید و ببینید چه نتیجه‌ای حاصل می‌شود.
1. کد زیر را اجرا کنید و ببینید نتیجه چه می‌شود.
✅ به یاد داشته باشید که ترجیحاً این کد را روی نصب محلی Python اجرا کنید! (کد بلاک 3)
    ✅ به خاطر داشته باشید بهتر است این کد را روی نصب محلی پایتون اجرا کنید! (کد بلاک 3)
```python
env.reset()
@ -52,11 +72,11 @@ import random
env.close()
```
باید چیزی مشابه این تصویر مشاهده کنید:
    شما باید چیزی شبیه به این تصویر ببینید:
![CartPole بدون تعادل](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif)
    ![cartpole بدون تعادل](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif)
1. در طول شبیه‌سازی، باید مشاهداتی دریافت کنیم تا تصمیم بگیریم چگونه عمل کنیم. در واقع، تابع step مشاهدات فعلی، یک تابع پاداش و یک پرچم done را که نشان می‌دهد آیا ادامه شبیه‌سازی منطقی است یا خیر، بازمی‌گرداند: (کد بلاک 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-Table بسازیم که مشخص کند در هر وضعیت چه کاری انجام دهیم. برای انجام این کار، وضعیت باید **گسسته** باشد، به طور دقیق‌تر، باید شامل تعداد محدودی از مقادیر گسسته باشد. بنابراین، باید به نوعی مشاهدات خود را **گسسته‌سازی** کنیم و آنها را به مجموعه‌ای محدود از وضعیت‌ها نگاشت کنیم.
در Q-Learning باید جدول Q ساخته شود که مشخص می‌کند در هر حالت چه باید انجام داد. برای این کار باید حالت به صورت **گسسته** باشد، دقیقا به این معنا که حالت شامل تعداد محدودی مقدار گسسته باشد. بنابراین باید مشاهدات خود را به یک مجموعه محدود از حالات نقشه‌برداری کنیم که به آن **گسسته‌سازی** گفته می‌شود.
چند روش برای انجام این کار وجود دارد:
چند روش برای انجام این کار وجود دارد:
- **تقسیم به بازه‌ها**. اگر بازه یک مقدار خاص را بدانیم، می‌توانیم این بازه را به تعدادی **بازه** تقسیم کنیم و سپس مقدار را با شماره بازه‌ای که به آن تعلق دارد جایگزین کنیم. این کار را می‌توان با استفاده از روش [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) در numpy انجام داد. در این حالت، اندازه وضعیت را دقیقاً می‌دانیم، زیرا به تعداد بازه‌هایی که برای دیجیتالی‌سازی انتخاب می‌کنیم بستگی دارد.
- **تقسیم به بازه‌ها**. اگر بازه یک مقدار مشخص باشد، می‌توانیم آن بازه را به تعدادی **باین (bin)** تقسیم کنیم و سپس مقدار را با شماره‌ی باین مربوطه جایگزین کنیم. این کار را می‌توان با روش `digitize` در numpy انجام داد. با این روش اندازه حالت دقیق مشخص می‌شود زیرا به تعداد باین‌های انتخابی بستگی دارد.
✅ می‌توانیم از درون‌یابی خطی استفاده کنیم تا مقادیر را به بازه‌ای محدود (مثلاً -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,39 +146,39 @@ 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 شروع می‌شود. بنابراین مقادیری نزدیک صفر عددی نزدیک به وسط بازه (10) را می‌دهد. در `discretize` ما به دامنه مقادیر خروجی اهمیت ندادیم و اجازه دادیم مقادیر منفی باشند، بنابراین مقادیر حالت جابه‌جا نشده و عدد صفر همان صفر است. (کد بلاک 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))
#چاپ مقادیر گسسته‌شده مشاهده‌ها
print(discretize(obs))
env.close()
```
✅ خطی که با `env.render` شروع می‌شود را اگر می‌خواهید ببینید محیط چگونه اجرا می‌شود، از حالت کامنت خارج کنید. در غیر این صورت می‌توانید آن را در پس‌زمینه اجرا کنید که سریع‌تر است. ما از این اجرای "نامرئی" در طول فرآیند Q-Learning استفاده خواهیم کرد.
    اگر می‌خواهید ببینید محیط چگونه اجرا می‌شود، خطی که با `env.render` شروع می‌شود را از حالت کامنت خارج کنید. در غیر این صورت می‌توانید کد را در پس‌زمینه اجرا کنید که سریع‌تر است. ما در فرآیند Q-Learning اجرای «نامرئی» را استفاده خواهیم کرد.
## ساختار Q-Table
## ساختار جدول Q
در درس قبلی، وضعیت یک جفت ساده از اعداد از 0 تا 8 بود و بنابراین راحت بود که Q-Table را با یک آرایه numpy با شکل 8x8x2 نمایش دهیم. اگر از گسسته‌سازی بازه‌ها استفاده کنیم، اندازه بردار وضعیت ما نیز مشخص است، بنابراین می‌توانیم از همان روش استفاده کنیم و وضعیت را با یک آرایه با شکل 20x20x10x10x2 نمایش دهیم (اینجا 2 بعد فضای عمل است و ابعاد اول متناظر با تعداد بازه‌هایی است که برای هر یک از پارامترهای فضای مشاهده انتخاب کرده‌ایم).
در درس قبلی حالت جفتی از اعداد 0 تا 8 بود و بنابراین برای نمایش جدول Q از یک تنسور numpy با شکل 8x8x2 استفاده کردیم. اگر از گسسته‌سازی با باین استفاده کنیم، اندازه بردار حالت هم مشخص است و می‌توانیم همان رویکرد را داشته باشیم و حالت را به آرایه‌ای با شکل 20x20x10x10x2 نمایش دهیم (اینجا 2 بعد فضای عمل است و ابعاد اولی تعداد باین تعیین‌شده برای هر پارامتر فضای مشاهده است).
با این حال، گاهی اوقات ابعاد دقیق فضای مشاهده مشخص نیست. در مورد تابع `discretize`، ممکن است هرگز مطمئن نباشیم که وضعیت ما در محدوده خاصی باقی می‌ماند، زیرا برخی از مقادیر اصلی محدود نیستند. بنابراین، از رویکرد کمی متفاوت استفاده خواهیم کرد و Q-Table را با یک دیکشنری نمایش می‌دهیم.
اما گاهی ابعاد دقیق فضای مشاهده معلوم نیست. در مورد تابع `discretize` هرگز نمی‌توانیم مطمئن باشیم که حالت در محدودهای خاص باقی می‌ماند زیرا بعضی مقادیر اصلی محدود نیستند. بنابراین رویکردی کمی متفاوت خواهیم داشت و جدول Q را به صورت دیکشنری نمایش می‌دهیم.
1. از زوج *(state,action)* به عنوان کلید دیکشنری استفاده کنید و مقدار متناظر با مقدار ورودی Q-Table باشد. (کد بلاک 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-Table را برای یک وضعیت مشخص که متناظر با تمام اقدامات ممکن است بازمی‌گرداند. اگر ورودی در Q-Table وجود نداشته باشد، مقدار پیش‌فرض 0 را بازمی‌گردانیم.
    اینجا همچنین تابع `qvalues()` تعریف شده که برای حالت داده شده مقادیر جدول Q را در قالب لیستی شامل تمام اعمال ممکن برمی‌گرداند. اگر مقدار در جدول Q موجود نباشد، مقدار پیش‌فرض 0 برگردانده می‌شود.
## شروع Q-Learning
## بیایید Q-Learning را شروع کنیم
حالا آماده‌ایم که به پیتر آموزش دهیم چگونه تعادل را حفظ کند!
اکنون آماده‌ایم به پیتر آموزش دهیم تعادلش را حفظ کند!
1. ابتدا برخی از هایپرپارامترها را تنظیم کنیم: (کد بلاک 10)
1. ابتدا چند ابرپارامتر را تنظیم کنیم: (کد بلاک 10)
```python
# hyperparameters
# ابرپارامترها
alpha = 0.3
gamma = 0.9
epsilon = 0.90
```
در اینجا، `alpha` **نرخ یادگیری** است که مشخص می‌کند تا چه حد باید مقادیر فعلی Q-Table را در هر مرحله تنظیم کنیم. در درس قبلی با مقدار 1 شروع کردیم و سپس `alpha` را در طول آموزش به مقادیر پایین‌تر کاهش دادیم. در این مثال برای سادگی مقدار آن را ثابت نگه می‌داریم و شما می‌توانید بعداً با تنظیم مقادیر `alpha` آزمایش کنید.
`gamma` **عامل تخفیف** است که نشان می‌دهد تا چه حد باید پاداش آینده را نسبت به پاداش فعلی اولویت دهیم.
    اینجا، `alpha` نرخ یادگیری است که مشخص می‌کند در هر گام تا چه حد باید مقادیر فعلی جدول Q را تنظیم کنیم. در درس قبلی با 1 شروع کردیم و سپس `alpha` را به مقادیر کمتر در طول آموزش کاهش دادیم. در این مثال برای سادگی ثابت نگه می‌داریم و می‌توانید بعداً با تغییر `alpha` آزمایش کنید.
`epsilon` **عامل اکتشاف/بهره‌برداری** است که تعیین می‌کند آیا باید اکتشاف را به بهره‌برداری ترجیح دهیم یا بالعکس. در الگوریتم ما، در درصد `epsilon` موارد، اقدام بعدی را بر اساس مقادیر Q-Table انتخاب می‌کنیم و در باقی موارد یک اقدام تصادفی اجرا می‌کنیم. این به ما امکان می‌دهد مناطقی از فضای جستجو را که قبلاً ندیده‌ایم کشف کنیم.
    `gamma` فاکتور تخفیف است که نشان می‌دهد تا چه حد باید پاداش آینده را به پاداش فعلی ترجیح دهیم.
✅ در مورد تعادل - انتخاب اقدام تصادفی (اکتشاف) مانند یک ضربه تصادفی در جهت اشتباه عمل می‌کند و میله باید یاد بگیرد چگونه از این "اشتباهات" تعادل خود را بازیابی کند.
    `epsilon` فاکتور اکتشاف/بهره‌برداری است که تعیین می‌کند آیا باید اکتشاف را ترجیح دهیم یا بهره‌برداری را. در الگوریتم ما در درصد `epsilon` بعدی عمل بر اساس مقادیر جدول Q انتخاب می‌شود و در باقی موارد عمل به صورت تصادفی انجام می‌شود. این اجازه می‌دهد بخش‌هایی از فضای جستجو را که قبلاً ندیده‌ایم کاوش کنیم.
### بهبود الگوریتم
    ✅ از لحاظ تعادل - انتخاب عمل تصادفی (اکتشاف) مانند یک ضربه تصادفی به جهت اشتباه است و قطب باید یاد بگیرد چگونه تعادل را از این «اشتباهات» بازیابی کند.
می‌توانیم دو بهبود در الگوریتم خود نسبت به درس قبلی ایجاد کنیم:
### بهبود الگوریتم
- **محاسبه میانگین پاداش تجمعی**، در طول تعدادی شبیه‌سازی. پیشرفت را هر 5000 تکرار چاپ می‌کنیم و میانگین پاداش تجمعی را در آن دوره زمانی محاسبه می‌کنیم. این بدان معناست که اگر بیش از 195 امتیاز کسب کنیم - می‌توانیم مسئله را حل شده در نظر بگیریم، حتی با کیفیتی بالاتر از حد مورد نیاز.
همچنین می‌توانیم دو بهبود نسبت به الگوریتم درس قبلی انجام دهیم:
- **محاسبه حداکثر نتیجه تجمعی میانگین**، `Qmax`، و Q-Table متناظر با آن نتیجه را ذخیره می‌کنیم. وقتی آموزش را اجرا می‌کنید، متوجه می‌شوید که گاهی میانگین نتیجه تجمعی شروع به کاهش می‌کند و می‌خواهیم مقادیر Q-Table را که متناظر با بهترین مدل مشاهده شده در طول آموزش است حفظ کنیم.
- **محاسبه میانگین پاداش تجمعی** روی تعدادی شبیه‌سازی. هر 5000 تکرار پیشرفت را چاپ می‌کنیم و میانگین پاداش تجمعی در این بازه زمانی گرفته می‌شود. این یعنی اگر بیش از 195 امتیاز بگیریم، می‌توانیم مسئله را حل شده با کیفیت بالاتر از حد لازم در نظر بگیریم.
- **محاسبه بیشینه میانگین نتیجه تجمعی**، `Qmax` و ذخیره جدول Q مربوط به آن نتیجه. وقتی آموزش را اجرا می‌کنید ممکن است ببینید که بعضی مواقع میانگین نتیجه تجمعی شروع به افت می‌کند و ما می‌خواهیم مقادیر جدول Q مربوط به بهترین مدل دیده شده در آموزش را نگه داریم.
1. تمام پاداش‌های تجمعی را در هر شبیه‌سازی در بردار `rewards` برای رسم نمودار بعدی جمع‌آوری کنید. (کد بلاک 11)
1. تمام پاداش‌های تجمعی هر شبیه‌سازی را در بردار `rewards` جمع‌آوری کنید برای رسم نمودارهای بعدی. (کد بلاک 11)
```python
def probs(v,eps=1e-4):
@ -214,15 +234,15 @@ 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-Table را با مقادیری که وضعیت را بدتر می‌کنند "خراب" کنیم.
این مشاهده واضح‌تر است اگر پیشرفت آموزش را رسم کنیم.
این مشاهده در صورتی که پیشرفت آموزش را رسم کنیم واضح‌تر است.
## رسم پیشرفت آموزش
## رسم پیشرفت آموزش
در طول آموزش، مقدار پاداش تجمعی را در هر یک از تکرارها در بردار `rewards` جمع‌آوری کرده‌ایم. اینجا نحوه نمایش آن در برابر شماره تکرار آمده است:
در طول آموزش مقدار پاداش تجمعی هر تکرار را در بردار `rewards` جمع‌آوری کردیم. اینجا وقتی آن را نسبت به شماره تکرار رسم کنیم اینطور دیده می‌شود:
```python
plt.plot(rewards)
```
![پیشرفت خام](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png)
![پیشرفت خام](../../../../translated_images/fa/train_progress_raw.2adfdf2daea09c59.webp)
از این نمودار نمی‌توان چیزی گفت، زیرا به دلیل ماهیت فرآیند آموزش تصادفی، طول جلسات آموزشی بسیار متفاوت است. برای درک بهتر این نمودار، می‌توان میانگین متحرک را در طول یک سری آزمایش‌ها، مثلاً 100، محاسبه کرد. این کار را می‌توان به راحتی با استفاده از `np.convolve` انجام داد: (کد بلاک 12)
از این نمودار نمی‌توان هیچ چیز خاصی فهمید چون به دلیل طبیعت تصادفی فرآیند آموزش طول جلسات آموزش بسیار متفاوت است. برای درک بهتر می‌توان میانگین متحرک (running average) در فاصله‌ای مثلاً 100 آزمایش حساب کرد. این کار راحت با `np.convolve` انجام می‌شود: (کد بلاک 12)
```python
def running_average(x,window):
@ -267,21 +287,24 @@ def running_average(x,window):
plt.plot(running_average(rewards,100))
```
![پیشرفت آموزش](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png)
![پیشرفت آموزش](../../../../translated_images/fa/train_progress_runav.c71694a8fa9ab359.webp)
## تغییر ابرپارامترها
برای پایدارتر کردن یادگیری، منطقی است که برخی از ابرپارامترها را در طول آموزش تنظیم کنیم. به خصوص:
- **برای نرخ یادگیری**، `alpha`، می‌توانیم با مقادیر نزدیک به 1 شروع کنیم و سپس این پارامتر را کم کم کاهش دهیم. با گذشت زمان مقادیر احتمال خوبی در جدول Q خواهیم داشت پس باید آنها را کمی تنظیم کنیم و به طور کامل بازنویسی نکنیم.
## تغییر هایپرپارامترها
- **افزایش epsilon**. ممکن است بخواهیم `epsilon` را به آرامی افزایش دهیم تا کمتر اکتشاف کنیم و بیشتر بهره‌برداری کنیم. احتمالاً منطقی است با مقدار کم `epsilon` شروع کنیم و به سمت مقدار نزدیک به 1 پیش برویم.
برای پایدارتر کردن یادگیری، منطقی است که برخی از هایپرپارامترهای خود را در طول آموزش تنظیم کنیم. به طور خاص:
> **وظیفه 1**: با مقادیر ابرپارامتر بازی کنید و ببینید می‌توانید پاداش تجمعی بالاتری به دست آورید. آیا امتیاز بالای 195 می‌گیرید؟
- **برای نرخ یادگیری**، `alpha`، می‌توانیم با مقادیر نزدیک به 1 شروع کنیم و سپس این پارامتر را کاهش دهیم. با گذشت زمان، احتمال‌های خوبی در Q-Table خواهیم داشت و بنابراین باید آنها را کمی تنظیم کنیم و نه اینکه کاملاً با مقادیر جدید بازنویسی کنیم.
- **افزایش epsilon**. ممکن است بخواهیم `epsilon` را به آرامی افزایش دهیم تا کمتر اکتشاف کنیم و بیشتر بهره‌برداری کنیم. احتمالاً منطقی است که با مقدار پایین‌تر `epsilon` شروع کنیم و به تدریج به تقریباً 1 برسیم.
> **وظیفه ۱**: با مقادیر هایپرپارامترها بازی کنید و ببینید آیا می‌توانید پاداش تجمعی بیشتری کسب کنید. آیا به بالای ۱۹۵ می‌رسید؟
> **وظیفه ۲**: برای حل رسمی مسئله، باید میانگین پاداش ۱۹۵ را در طول ۱۰۰ اجرای متوالی به دست آورید. این مقدار را در طول آموزش اندازه‌گیری کنید و مطمئن شوید که مسئله را به طور رسمی حل کرده‌اید!
> **وظیفه ۲**: برای حل رسمی مسئله، باید میانگین پاداش ۱۹۵ را در طول ۱۰۰ اجرای متوالی به دست آورید. این را در طول آموزش اندازه‌گیری کنید و مطمئن شوید که مسئله به صورت رسمی حل شده است!
## مشاهده نتیجه در عمل
## دیدن نتیجه در عمل
جالب است که ببینیم مدل آموزش‌دیده چگونه رفتار می‌کند. بیایید شبیه‌سازی را اجرا کنیم و همان استراتژی انتخاب عمل را که در طول آموزش استفاده کردیم دنبال کنیم، یعنی نمونه‌گیری بر اساس توزیع احتمالی در Q-Table: (بلوک کد ۱۳)
جالب خواهد بود که ببینیم مدل آموزش‌دیده چگونه رفتار می‌کند. بیایید شبیه‌سازی را اجرا کنیم و همان استراتژی انتخاب عمل در زمان آموزش را دنبال کنیم، نمونه‌برداری مطابق با توزیع احتمال در Q-Table: (بلاک کد ۱۳)
```python
obs = env.reset()
@ -297,15 +320,15 @@ env.close()
شما باید چیزی شبیه به این ببینید:
![یک چرخ دستی متعادل](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif)
![یک میله تعادلی روی چرخ‌دستی](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif)
---
## 🚀چالش
> **وظیفه ۳**: در اینجا، ما از نسخه نهایی Q-Table استفاده کردیم که ممکن است بهترین نسخه نباشد. به یاد داشته باشید که ما بهترین Q-Table را در متغیر `Qbest` ذخیره کرده‌ایم! همین مثال را با بهترین Q-Table امتحان کنید، با کپی کردن `Qbest` به `Q` و ببینید آیا تفاوتی مشاهده می‌کنید.
> **وظیفه ۳**: در اینجا، ما از نسخه نهایی Q-Table استفاده می‌کردیم، که ممکن است بهترین نسخه نباشد. به خاطر داشته باشید که بهترین Q-Table عملکرد را در متغیر `Qbest` ذخیره کرده‌ایم! همان مثال را با بهترین Q-Table امتحان کنید، با کپی کردن `Qbest` به `Q` و ببینید که آیا تفاوتی مشاهده می‌کنید یا خیر.
> **وظیفه ۴**: در اینجا ما بهترین عمل را در هر مرحله انتخاب نمی‌کردیم، بلکه بر اساس توزیع احتمالی مربوطه نمونه‌گیری می‌کردیم. آیا منطقی‌تر است که همیشه بهترین عمل را با بالاترین مقدار Q-Table انتخاب کنیم؟ این کار را می‌توان با استفاده از تابع `np.argmax` انجام داد تا شماره عمل مربوط به بالاترین مقدار Q-Table را پیدا کنید. این استراتژی را پیاده‌سازی کنید و ببینید آیا تعادل بهبود می‌یابد.
> **وظیفه ۴**: در اینجا ما بهترین عمل را در هر مرحله انتخاب نمی‌کردیم، بلکه نمونه‌برداری با توجه به توزیع احتمال مربوطه انجام می‌دادیم. آیا منطقی‌تر نیست که همیشه بهترین عمل، یعنی بالاترین مقدار Q-Table را انتخاب کنیم؟ این کار می‌تواند با استفاده از تابع `np.argmax` انجام شود تا شماره عملیات مربوط به بالاترین مقدار Q-Table را پیدا کند. این استراتژی را پیاده‌سازی کنید و ببینید آیا تعادل بهتری برقرار می‌شود یا خیر.
## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/)
@ -314,11 +337,13 @@ env.close()
## نتیجه‌گیری
ما اکنون یاد گرفته‌ایم که چگونه عوامل را آموزش دهیم تا فقط با ارائه یک تابع پاداش که حالت مطلوب بازی را تعریف می‌کند و با دادن فرصت به آن‌ها برای جستجوی هوشمندانه فضای جستجو، به نتایج خوبی دست یابند. ما الگوریتم Q-Learning را در موارد محیط‌های گسسته و پیوسته، اما با اعمال گسسته، با موفقیت اعمال کرده‌ایم.
ما اکنون یاد گرفته‌ایم که چگونه عاملها را آموزش دهیم تا فقط با ارائه تابع پاداش که حالت دلخواه بازی را تعریف می‌کند، و با دادن فرصت کاوش هوشمندانه در فضای جستجو، نتایج خوبی کسب کنند. ما الگوریتم Q-Learning را با موفقیت در محیط‌های گسسته و پیوسته، اما با اعمال گسسته، پیاده‌سازی کرده‌ایم.
مهم است که همچنین شرایطی را مطالعه کنیم که در آن حالت عمل نیز پیوسته باشد و فضای مشاهده بسیار پیچیده‌تر باشد، مانند تصویر صفحه بازی آتاری. در این مسائل، اغلب نیاز داریم از تکنیک‌های قدرتمندتر یادگیری ماشین، مانند شبکه‌های عصبی، برای دستیابی به نتایج خوب استفاده کنیم. این موضوعات پیشرفته‌تر، موضوع دوره پیشرفته‌تر هوش مصنوعی ما خواهد بود.
همچنین مهم است که موقعیت‌هایی را بررسی کنیم که حالت عمل نیز پیوسته است و زمانی که فضای مشاهده بسیار پیچیده‌تر است، مانند تصویر صفحه بازی آتاری. در این مسائل معمولاً باید از تکنیک‌های قدرتمندتر یادگیری ماشین، مانند شبکه‌های عصبی، برای کسب نتایج بهتر استفاده کنیم. این مباحث پیشرفته‌تر موضوع دوره پیشرفته‌تر آینده ما در هوش مصنوعی است.
---
**سلب مسئولیت**:
این سند با استفاده از سرویس ترجمه هوش مصنوعی [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": "ur"
},
"1-Introduction/3-fairness/README.md": {
"original_hash": "9a6b702d1437c0467e3c5c28d763dac2",
"translation_date": "2025-09-06T08:51:44+00:00",
"original_hash": "0f00d72169a0d37eecfd16d71e01700a",
"translation_date": "2026-07-14T03:33:55+00:00",
"source_file": "1-Introduction/3-fairness/README.md",
"language_code": "ur"
},
@ -54,8 +54,8 @@
"language_code": "ur"
},
"2-Regression/1-Tools/README.md": {
"original_hash": "fa81d226c71d5af7a2cade31c1c92b88",
"translation_date": "2025-09-06T08:45:16+00:00",
"original_hash": "0b8635427b582d03ea4ab7089b93e505",
"translation_date": "2026-07-14T03:30:32+00:00",
"source_file": "2-Regression/1-Tools/README.md",
"language_code": "ur"
},
@ -72,8 +72,8 @@
"language_code": "ur"
},
"2-Regression/2-Data/README.md": {
"original_hash": "7c077988328ebfe33b24d07945f16eca",
"translation_date": "2025-09-06T08:46:01+00:00",
"original_hash": "a58b2c4d16c6b122643391745ac15af6",
"translation_date": "2026-07-14T03:31:20+00:00",
"source_file": "2-Regression/2-Data/README.md",
"language_code": "ur"
},
@ -89,6 +89,12 @@
"source_file": "2-Regression/2-Data/solution/Julia/README.md",
"language_code": "ur"
},
"2-Regression/2-Data/solution/notebook.ipynb": {
"original_hash": "96b95f8cf473481f2f371de8156f1571",
"translation_date": "2026-07-14T03:19:46+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "ur"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T19:50:52+00:00",
@ -457,7 +463,7 @@
},
"8-Reinforcement/1-QLearning/README.md": {
"original_hash": "911efd5e595089000cb3c16fce1beab8",
"translation_date": "2025-09-06T08:57:34+00:00",
"translation_date": "2026-07-14T03:32:16+00:00",
"source_file": "8-Reinforcement/1-QLearning/README.md",
"language_code": "ur"
},
@ -481,7 +487,7 @@
},
"8-Reinforcement/2-Gym/README.md": {
"original_hash": "107d5bb29da8a562e7ae72262d251a75",
"translation_date": "2025-09-06T08:58:16+00:00",
"translation_date": "2026-07-14T03:33:12+00:00",
"source_file": "8-Reinforcement/2-Gym/README.md",
"language_code": "ur"
},
@ -581,6 +587,19 @@
"source_file": "TROUBLESHOOTING.md",
"language_code": "ur"
},
"__translation_failures__": {
"sketchnotes/LICENSE.md": {
"original_hash": "fba3b94d88bfb9b81369b869a1e9a20f",
"source_file": "sketchnotes/LICENSE.md",
"language_code": "ur",
"failure_date": "2026-07-14T03:29:47+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:33+00:00",

@ -1,161 +1,167 @@
# مشین لرننگ کے حل کو ذمہ دارانہ AI کے ساتھ بنانا
![مشین لرننگ میں ذمہ دارانہ AI کا خلاصہ ایک خاکے میں](../../../../sketchnotes/ml-fairness.png)
> خاکہ: [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [لیکچر سے پہلے کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
# ذمہ دار AI کے ساتھ مشین لرننگ حل تیار کرنا
![مشین لرننگ میں ذمہ دار AI کا خلاصہ ایک سکیچ نوٹ میں](../../../../translated_images/ur/ml-fairness.ef296ebec6afc98a.webp)
> سکیچنوٹ از [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [لیچرز سے پہلے کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
## تعارف
اس نصاب میں، آپ یہ دریافت کرنا شروع کریں گے کہ مشین لرننگ کس طرح اور کس حد تک ہماری روزمرہ کی زندگیوں پر اثر ڈال رہی ہے۔ آج بھی، سسٹمز اور ماڈلز روزمرہ کے فیصلوں میں شامل ہیں، جیسے صحت کی تشخیص، قرض کی منظوری، یا دھوکہ دہی کا پتہ لگانا۔ اس لیے یہ ضروری ہے کہ یہ ماڈلز ایسے نتائج فراہم کریں جو قابل اعتماد ہوں۔ جیسے کسی بھی سافٹ ویئر ایپلیکیشن میں، AI سسٹمز بھی توقعات پر پورا نہ اتر سکتے ہیں یا ناپسندیدہ نتائج دے سکتے ہیں۔ اسی لیے یہ سمجھنا اور وضاحت کرنا ضروری ہے کہ AI ماڈل کس طرح کام کرتا ہے۔
اس نصاب میں، آپ یہ دریافت کرنا شروع کریں گے کہ کس طرح مشین لرننگ ہماری روزمرہ زندگی پر اثر انداز ہو رہی ہے اور ہو چکی ہے۔ یہاں تک کہ اب بھی، نظام اور ماڈلز روزمرہ کی فیصلہ سازی کے کاموں میں شامل ہیں، جیسے صحت کی تشخیص، قرض کی منظوری یا دھوکہ دہی کی شناخت۔ اس لیے یہ ضروری ہے کہ یہ ماڈل اچھے طریقے سے کام کریں تاکہ قابل اعتماد نتائج فراہم کریں۔ جیسے کسی بھی سافٹ ویئر اپلیکیشن کی طرح، AI سسٹمز توقعات پر پورا نہیں اترتے یا غیر مطلوبہ نتیجہ دے سکتے ہیں۔ اسی وجہ سے AI ماڈل کے رویے کو سمجھنا اور بیان کرنا ضروری ہے۔
سوچیں کہ کیا ہو سکتا ہے جب آپ کے ماڈلز بنانے کے لیے استعمال ہونے والے ڈیٹا میں کچھ مخصوص گروہوں کی نمائندگی نہ ہو، جیسے نسل، جنس، سیاسی نظریہ، مذہب، یا ان کی غیر متناسب نمائندگی ہو۔ اگر ماڈل کے نتائج کسی خاص گروہ کو ترجیح دیتے ہیں تو اس کا اطلاق پر کیا اثر ہوگا؟ مزید یہ کہ، اگر ماڈل کے نتائج نقصان دہ ہوں تو اس کے اثرات کیا ہوں گے؟ AI سسٹمز کے رویے کے لیے کون ذمہ دار ہوگا؟ یہ وہ سوالات ہیں جنہیں ہم اس نصاب میں تلاش کریں گے۔
تصور کریں کہ کیا ہو سکتا ہے جب آپ جو ڈیٹا استعمال کر رہے ہیں ان ماڈلز کو بنانے کے لیے ان میں کچھ مخصوص آبادیاتی تفصیلات، جیسے نسل، جنس، سیاسی نظریہ، مذہب، یا غیر متناسب طور پر ایسی آبادیاتی تفصیلات ہوں۔ جب ماڈل کے نتائج کو کسی مخصوص آبادی کو فائدہ پہنچانے کے لیے تشریح کیا جائے تو کیا ہوگا؟ اس کا درخواست پر کیا اثر ہوگا؟ مزید برآں، جب ماڈل کا نتیجہ منفی ہو اور لوگوں کے لیے نقصان دہ ہو تو کیا ہوگا؟ AI سسٹم کے رویے کی ذمہ داری کس پر ہے؟ یہ چند سوالات ہیں جن کا ہم اس نصاب میں جائزہ لیں گے۔
اس سبق میں، آپ:
- مشین لرننگ میں انصاف پسندی اور اس سے جڑے نقصانات کی اہمیت کو سمجھیں گے۔
- غیر معمولی حالات کا جائزہ لینے کی مشق سے واقف ہوں گے تاکہ سسٹمز کی قابل اعتمادیت اور حفاظت کو یقینی بنایا جا سکے۔
- سب کے لیے شمولیتی نظام ڈیزائن کرنے کی ضرورت کو سمجھیں گے۔
- ڈیٹا اور لوگوں کی پرائیویسی اور سیکیورٹی کے تحفظ کی اہمیت کو دریافت کریں گے۔
- AI ماڈلز کے رویے کو سمجھنے کے لیے شفافیت کی اہمیت کو دیکھیں گے۔
- اس بات کا شعور حاصل کریں گے کہ AI سسٹمز میں اعتماد پیدا کرنے کے لیے جوابدہی کتنی ضروری ہے۔
- مشین لرننگ میں انصاف کی اہمیت اور انصاف سے متعلق نقصانات کے بارے میں اپنی آگاہی بڑھائیں گے۔
- انوکھے معاملات اور غیر معمولی حالات کو دریافت کرنے کی مشق سے واقف ہوں گے تاکہ بھروسے اور سلامتی کو یقینی بنایا جا سکے۔
- شامل نظام بنانے کی ضرورت کو سمجھیں گے تاکہ ہر فرد کو بااختیار بنایا جا سکے۔
- ڈیٹا اور لوگوں کی رازداری اور سیکورٹی کے تحفظ کی اہمیت کو دریافت کریں گے۔
- AI ماڈلز کے رویے کی وضاحت کے لیے شیشے کے ڈبے کے طریقہ کار کی اہمیت دیکھیں گے۔
- AI سسٹمز میں اعتماد قائم کرنے کے لیے احتساب کی اہمیت کا خیال رکھیں گے۔
## پیشگی شرط
## سابقہ علم
پیشگی شرط کے طور پر، براہ کرم "ذمہ دارانہ AI اصول" کا لرن پاتھ مکمل کریں اور نیچے دی گئی ویڈیو دیکھیں:
سابقہ علم کے طور پر، براہ کرم "ذمہ دار AI کے اصول" لرن پاتھ لیں اور نیچے دی گئی ویڈیو دیکھیں:
[ذمہ دارانہ AI کے بارے میں مزید جانیں](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
ذمہ دار AI کے بارے میں مزید جاننے کے لیے اس [لرننگ پاتھ](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) کی پیروی کریں۔
[![Microsoft کا ذمہ دارانہ AI کے لیے نقطہ نظر](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Microsoft کا ذمہ دارانہ AI کے لیے نقطہ نظر")
[![Microsoft کا ذمہ دار AI کیلئے طریقہ](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Microsoft کا ذمہ دار AI کیلئے طریقہ")
> 🎥 اوپر دی گئی تصویر پر کلک کریں: Microsoft کا ذمہ دارانہ AI کے لیے نقطہ نظر
> 🎥 ویڈیو کے لیے اوپر تصاویر پر کلک کریں: Microsoft کا ذمہ دار AI کیلئے طریقہ
## انصاف پسندی
## انصاف
AI سسٹمز کو سب کے ساتھ منصفانہ سلوک کرنا چاہیے اور مختلف گروہوں پر مختلف اثرات ڈالنے سے گریز کرنا چاہیے۔ مثال کے طور پر، جب AI سسٹمز طبی علاج، قرض کی درخواستوں، یا ملازمت کے بارے میں رہنمائی فراہم کرتے ہیں، تو انہیں ایک جیسے حالات والے تمام افراد کو یکساں سفارشات دینی چاہئیں۔ ہم سب انسانوں میں وراثتی تعصبات ہوتے ہیں جو ہمارے فیصلوں اور اعمال کو متاثر کرتے ہیں۔ یہ تعصبات اس ڈیٹا میں ظاہر ہو سکتے ہیں جو ہم AI سسٹمز کو تربیت دینے کے لیے استعمال کرتے ہیں۔ یہ تعصب بعض اوقات غیر ارادی طور پر بھی ہو سکتا ہے۔
AI سسٹمز کو سب کے ساتھ انصاف کرنا چاہیے اور ایک ہی طرح کے لوگوں کے گروہوں پر مختلف طریقے سے اثر انداز ہونے سے بچنا چاہیے۔ مثال کے طور پر، جب AI سسٹمز طبی علاج، قرض کی درخواستوں یا ملازمت پر رہنمائی فراہم کرتے ہیں تو انہیں ایک جیسے علامات، مالی حالات، یا پیشہ ورانہ قابلیت رکھنے والے ہر فرد کے لیے ایک جیسی سفارشات کرنی چاہئیں۔ ہم سب انسانوں کی حیثیت سے موروثی تعصبات رکھتے ہیں جو ہمارے فیصلوں اور اعمال کو متاثر کرتے ہیں۔ یہ تعصبات اس ڈیٹا میں نمایاں ہو سکتے ہیں جسے ہم AI سسٹمز کو تربیت دینے کے لیے استعمال کرتے ہیں۔ یہ تبدیلی بعض اوقات غیر جانبداری سے ہو سکتی ہے۔ شعوری طور پر یہ جاننا مشکل ہوتا ہے کہ آپ کب ڈیٹا میں تعصب شامل کر رہے ہیں۔
**"ناانصافی"** ان منفی اثرات یا "نقصانات" کو ظاہر کرتی ہے جو کسی گروہ پر پڑ سکتے ہیں، جیسے نسل، جنس، عمر، یا معذوری کی حیثیت کے لحاظ سے۔ انصاف پسندی سے متعلق نقصانات کو درج ذیل اقسام میں تقسیم کیا جا سکتا ہے:
**"ناانصافی"** منفی اثرات یا "نقصانات" شامل ہیں، جو ایک گروپ کے لیے ہوتے ہیں، جیسے نسل، جنس، عمر، یا معذوری کی حیثیت کی بنیاد پر۔ اہم انصاف سے متعلق نقصانات کو درج ذیل طور پر درجہ بند کیا جا سکتا ہے:
- **تقسیم**: اگر کسی جنس یا نسل کو دوسرے پر ترجیح دی جائے۔
- **سروس کا معیار**: اگر آپ نے ڈیٹا کو کسی خاص منظرنامے کے لیے تربیت دی ہو لیکن حقیقت زیادہ پیچیدہ ہو، تو یہ ناقص کارکردگی کا باعث بن سکتا ہے۔ مثال کے طور پر، ایک صابن ڈسپنسر جو گہرے رنگ کی جلد والے لوگوں کو پہچاننے میں ناکام رہا۔ [حوالہ](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **تنقید**: کسی چیز یا شخص پر غیر منصفانہ تنقید کرنا۔ مثال کے طور پر، ایک امیج لیبلنگ ٹیکنالوجی نے گہرے رنگ کی جلد والے لوگوں کی تصاویر کو غلط طور پر گوریلا کے طور پر لیبل کیا۔
- **زیادہ یا کم نمائندگی**: یہ تصور کہ کسی خاص گروہ کو کسی پیشے میں نہیں دیکھا جاتا، اور کوئی بھی سروس یا فنکشن جو اس کو فروغ دیتا ہے، نقصان کا باعث بنتا ہے۔
- **اسٹیریو ٹائپنگ**: کسی گروہ کو پہلے سے طے شدہ خصوصیات کے ساتھ جوڑنا۔ مثال کے طور پر، انگریزی اور ترکی کے درمیان زبان کے ترجمے کا نظام جنس سے متعلق دقیانوسی الفاظ کی وجہ سے غلطیاں کر سکتا ہے۔
- **تقسیم**، اگر جنس یا نسل کو دوسرے پر ترجیح دی جائے۔
- **سروس کا معیار**۔ اگر آپ مخصوص منظرنامے کے لیے ڈیٹا تربیت دیں لیکن حقیقت کہیں زیادہ پیچیدہ ہو تو اس کا نتیجہ ناقص کارکردگی والی سروس بنتا ہے۔ مثال کے طور پر، ایک ہاتھ دھونے والا صابن کا ڈسپنسر جو گہرے جلد والے لوگوں کو محسوس نہیں کر پاتا۔ [حوالہ](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **توہین آمیز رویہ**۔ کسی چیز یا کسی شخص پر ناجائز تنقید کرنا اور اسے غلط لیبل کرنا۔ مثال کے طور پر، ایک امیج لیبلنگ ٹیکنالوجی نے بدنامی سے گہرے جلد والے لوگوں کی تصاویر کو گوریل کے طور پر لیبل کیا تھا۔
- **زیادہ یا کم نمائندگی**۔ تصور یہ ہے کہ کسی مخصوص گروپ کو کسی مخصوص پیشے میں نہیں دیکھا جاتا، اور کوئی بھی سروس یا فنکشن جو اس کی ترویج کرتا ہے وہ نقصان میں حصہ ڈال رہا ہوتا ہے۔
- **سٹیریو ٹائپنگ**۔ کسی گروپ کو پہلے سے طے شدہ خصوصیات سے منسوب کرنا۔ مثال کے طور پر، انگریزی اور ترکی زبان کے ترجمے کے نظام میں جنس سے متعلق سٹیریو ٹائپیکل الفاظ کی وجہ سے غلطیاں ہو سکتی ہیں۔
![ترکی زبان میں ترجمہ](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png)
> ترکی زبان میں ترجمہ
![ترکی زبان میں ترجمہ](../../../../translated_images/ur/gender-bias-translate-en-tr.f185fd8822c2d437.webp)
> ترکی میں ترجمہ
![انگریزی میں واپس ترجمہ](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png)
![انگریزی میں واپس ترجمہ](../../../../translated_images/ur/gender-bias-translate-tr-en.4eee7e3cecb8c70e.webp)
> انگریزی میں واپس ترجمہ
AI سسٹمز کو ڈیزائن اور ٹیسٹ کرتے وقت، ہمیں یہ یقینی بنانا ہوگا کہ AI منصفانہ ہو اور تعصبی یا امتیازی فیصلے کرنے کے لیے پروگرام نہ کیا گیا ہو، جو انسانوں کے لیے بھی ممنوع ہیں۔ AI اور مشین لرننگ میں انصاف کو یقینی بنانا ایک پیچیدہ سماجی-تکنیکی چیلنج ہے۔
AI سسٹمز کو منصفانہ بنایا جانا چاہیے اور انہیں جانبدار یا امتیازی فیصلے کرنے کے لیے پروگرام نہیں کیا جانا چاہیے، جو انسانوں کو بھی منع ہے۔ AI اور مشین لرننگ میں انصاف کو یقینی بنانا ایک پیچیدہ سماجی تکنیکی چیلنج ہے۔
### قابل اعتمادیت اور حفاظت
### بھروسہ مندی اور سلامتی
اعتماد پیدا کرنے کے لیے، AI سسٹمز کو قابل اعتماد، محفوظ، اور عام اور غیر متوقع حالات میں مستقل ہونا چاہیے۔ یہ جاننا ضروری ہے کہ AI سسٹمز مختلف حالات میں کیسے کام کریں گے، خاص طور پر جب وہ غیر معمولی ہوں۔ AI حل بناتے وقت، ان تمام حالات پر توجہ مرکوز کرنا ضروری ہے جن کا سامنا AI حل کو ہو سکتا ہے۔ مثال کے طور پر، ایک خودکار گاڑی کو لوگوں کی حفاظت کو اولین ترجیح دینی چاہیے۔ اس کے نتیجے میں، گاڑی کو چلانے والے AI کو ان تمام ممکنہ منظرناموں پر غور کرنا ہوگا جن کا سامنا گاڑی کو ہو سکتا ہے، جیسے رات، طوفان، برفباری، سڑک پر دوڑتے بچے، پالتو جانور، سڑک کی تعمیرات وغیرہ۔
اعتماد قائم کرنے کے لیے، AI سسٹمز کو معمول اور غیر متوقع حالات میں قابل اعتماد، محفوظ، اور مستقل ہونا چاہیے۔ یہ جاننا ضروری ہے کہ AI سسٹمز مختلف حالات میں، خاص طور پر غیر معمولی حالات میں، کس طرح ردعمل دیں گے۔ AI حل بنانے کے دوران، مختلف حالات کو سنبھالنے پر خاص توجہ دینی چاہیے جو AI حل کو پیش آ سکتے ہیں۔ مثال کے طور پر، خودکار ڈرائیونگ کار کو لوگوں کی سلامتی کو اعلی ترین ترجیح دینی چاہیے۔ اس کے نتیجے میں، AI کو تمام ممکنہ حالات کو مدنظر رکھنا ہوگا جیسے رات، طوفان، برف باری، بچے سڑک پار کر رہے ہوں، جانور، سڑک کی تعمیر وغیرہ۔ ایک AI سسٹم کی صلاحیت کہ وہ مختلف حالات کو قدرے قابل اعتماد اور محفوظ طریقے سے سنبھال سکے اس بات کی عکاسی کرتی ہے کہ ڈیٹا سائنسدان یا AI ڈیویلپر نے ڈیزائن یا جانچ کے دوران کتنی پیش بینی کی ہے۔
> [🎥 یہاں ویڈیو کے لیے کلک کریں: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
> [🎥 ویڈیو کے لیے یہاں کلک کریں: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
### شمولیت
AI سسٹمز کو اس طرح ڈیزائن کیا جانا چاہیے کہ وہ سب کو شامل کریں اور سب کو بااختیار بنائیں۔ AI سسٹمز کو ڈیزائن اور نافذ کرتے وقت، ڈیٹا سائنسدان اور AI ڈویلپرز ان ممکنہ رکاوٹوں کی نشاندہی کرتے ہیں اور ان کا حل نکالتے ہیں جو غیر ارادی طور پر لوگوں کو خارج کر سکتی ہیں۔ مثال کے طور پر، دنیا بھر میں 1 ارب افراد معذوری کے ساتھ رہتے ہیں۔ AI کی ترقی کے ساتھ، وہ اپنی روزمرہ کی زندگی میں معلومات اور مواقع تک زیادہ آسانی سے رسائی حاصل کر سکتے ہیں۔ ان رکاوٹوں کو دور کرنے سے جدت کے مواقع پیدا ہوتے ہیں اور بہتر تجربات کے ساتھ AI مصنوعات تیار ہوتی ہیں جو سب کے لیے فائدہ مند ہیں۔
AI سسٹمز کو ایسا ڈیزائن کیا جانا چاہیے کہ وہ ہر شخص کو شامل کرے اور بااختیار بنائے۔ AI سسٹمز کے ڈیزائن اور نفاذ کے دوران، ڈیٹا سائنسدان اور AI ڈیویلپر ممکنہ رکاوٹوں کی نشاندہی اور حل کرتے ہیں جو افراد کو غیر ارادی طور پر خارج کر سکتی ہیں۔ مثال کے طور پر، دنیا بھر میں ایک بلین سے زائد معذور افراد ہیں۔ AI کی ترقی کے ساتھ، وہ اپنی روزانہ کی زندگی میں معلومات اور مواقع تک آسانی سے رسائی حاصل کر سکتے ہیں۔ رکاوٹوں کو دور کر کے، مواقع پیدا ہوتے ہیں تاکہ بہتر تجربات کے ساتھ AI مصنوعات تیار اور متعارف کرائی جا سکیں جو سب کے لیے فائدہ مند ہوں۔
> [🎥 یہاں ویڈیو کے لیے کلک کریں: AI میں شمولیت](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
> [🎥 ویڈیو کے لیے یہاں کلک کریں: AI میں شمولیت](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
### سیکیورٹی اور پرائیویسی
### سیکورٹی اور رازداری
AI سسٹمز کو محفوظ ہونا چاہیے اور لوگوں کی پرائیویسی کا احترام کرنا چاہیے۔ لوگ ان سسٹمز پر کم اعتماد کرتے ہیں جو ان کی پرائیویسی، معلومات، یا زندگیوں کو خطرے میں ڈال دیتے ہیں۔ مشین لرننگ ماڈلز کو تربیت دیتے وقت، ہم بہترین نتائج حاصل کرنے کے لیے ڈیٹا پر انحصار کرتے ہیں۔ ایسا کرتے وقت، ڈیٹا کے ماخذ اور اس کی سالمیت پر غور کرنا ضروری ہے۔ مثال کے طور پر، کیا ڈیٹا صارف نے فراہم کیا یا یہ عوامی طور پر دستیاب تھا؟ مزید برآں، ڈیٹا کے ساتھ کام کرتے وقت، یہ ضروری ہے کہ AI سسٹمز کو اس طرح تیار کیا جائے کہ وہ خفیہ معلومات کی حفاظت کر سکیں اور حملوں کے خلاف مزاحمت کر سکیں۔ جیسے جیسے AI زیادہ عام ہو رہا ہے، پرائیویسی کی حفاظت اور اہم ذاتی اور کاروباری معلومات کو محفوظ بنانا زیادہ اہم اور پیچیدہ ہوتا جا رہا ہے۔
AI سسٹمز کو محفوظ ہونا چاہیے اور لوگوں کی پرائیویسی کا احترام کرنا چاہیے۔ لوگ ایسے سسٹمز پر کم اعتماد کرتے ہیں جو ان کی رازداری، معلومات، یا زندگی کو خطرے میں ڈالیں۔ مشین لرننگ ماڈلز کو تربیت دیتے وقت، ہم بہترین نتائج کے لیے ڈیٹا پر انحصار کرتے ہیں۔ اس میں ڈیٹا کی اصل اور سالمیت کو مدنظر رکھنا ضروری ہے۔ مثال کے طور پر، کیا یہ ڈیٹا صارف نے جمع کروایا تھا یا یہ عوامی طور پر دستیاب تھا؟ اس کے بعد، ڈیٹا کے ساتھ کام کرتے ہوئے، AI سسٹمز کو ایسی طرح تیار کرنا ضروری ہے جو خفیہ معلومات کی حفاظت کر سکے اور حملوں کا مقابلہ کر سکے۔ جب AI زیادہ عام ہو رہا ہے، تو راز داری کا تحفظ اور اہم ذاتی و کاروباری معلومات کی سیکورٹی مزید اہم اور پیچیدہ ہو گئی ہے۔ پرائیویسی اور ڈیٹا کی سلامتی کے مسائل AI کے لیے خاص توجہ کے متقاضی ہیں کیونکہ AI سسٹمز کے لیے ڈیٹا تک رسائی درست اور باخبر پیش گوئیاں اور فیصلے کرنے کے لیے ضروری ہے۔
> [🎥 یہاں ویڈیو کے لیے کلک کریں: AI میں سیکیورٹی](https://www.microsoft.com/videoplayer/embed/RE4voJF)
> [🎥 ویڈیو کے لیے یہاں کلک کریں: AI میں سیکورٹی](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- صنعت میں ہم نے پرائیویسی اور سیکیورٹی میں نمایاں پیش رفت کی ہے، خاص طور پر GDPR (جنرل ڈیٹا پروٹیکشن ریگولیشن) جیسے ضوابط کی بدولت۔
- تاہم، AI سسٹمز کے ساتھ ہمیں اس تناؤ کو تسلیم کرنا ہوگا کہ زیادہ ذاتی ڈیٹا کی ضرورت سسٹمز کو زیادہ ذاتی اور مؤثر بناتی ہے اور پرائیویسی۔
- جیسے انٹرنیٹ کے ساتھ جڑے کمپیوٹرز کے آغاز کے وقت، ہم AI سے متعلق سیکیورٹی مسائل میں بھی زبردست اضافہ دیکھ رہے ہیں۔
- اسی وقت، ہم نے دیکھا ہے کہ AI سیکیورٹی کو بہتر بنانے کے لیے استعمال ہو رہا ہے۔ مثال کے طور پر، آج کے زیادہ تر جدید اینٹی وائرس اسکینرز AI ہیورسٹکس کے ذریعے چلتے ہیں۔
- ہمیں یہ یقینی بنانا ہوگا کہ ہمارے ڈیٹا سائنس کے عمل جدید پرائیویسی اور سیکیورٹی کے طریقوں کے ساتھ ہم آہنگ ہوں۔
- صنعت کے طور پر، ہم نے رازداری اور سیکورٹی میں نمایاں ترقی کی ہے، جو خاص طور پر GDPR (جنرل ڈیٹا پروٹیکشن ریگولیشن) جیسے قواعد و ضوابط کی وجہ سے ہے۔
- پھر بھی، AI سسٹمز کے ساتھ ہمیں اس دباؤ کو تسلیم کرنا ہوگا کہ سسٹمز کو زیادہ ذاتی اور موثر بنانے کے لیے زیادہ ذاتی ڈیٹا کی ضرورت اور رازداری کے درمیان تناؤ ہے۔
- انٹرنیٹ کے ساتھ کمپیوٹرز کے جڑنے کے آغاز کی طرح، ہم AI سے متعلق سیکورٹی مسائل میں بھی بڑھوتری دیکھ رہے ہیں۔
- اس کے ساتھ ہی، ہم نے سیکورٹی کو بہتر بنانے کے لیے AI کے استعمال کو بھی دیکھا ہے۔ مثال کے طور پر، آج کل زیادہ تر جدید اینٹی وائرس اسکینرز AI ہیورسٹک پر چلتے ہیں۔
- ہمیں یقین دلانا ہوگا کہ ہمارے ڈیٹا سائنس کے عمل جدید رازداری اور سیکورٹی کے طریقوں کے ساتھ ہم آہنگ ہوں۔
### شفافیت
AI سسٹمز کو سمجھنے کے قابل ہونا چاہیے۔ شفافیت کا ایک اہم حصہ AI سسٹمز اور ان کے اجزاء کے رویے کی وضاحت کرنا ہے۔ AI سسٹمز کی سمجھ کو بہتر بنانے کے لیے ضروری ہے کہ اسٹیک ہولڈرز یہ سمجھیں کہ وہ کیسے اور کیوں کام کرتے ہیں تاکہ وہ ممکنہ کارکردگی کے مسائل، سیکیورٹی اور پرائیویسی کے خدشات، تعصبات، اخراجی طریقوں، یا غیر ارادی نتائج کی نشاندہی کر سکیں۔ ہم یہ بھی یقین رکھتے ہیں کہ جو لوگ AI سسٹمز استعمال کرتے ہیں، انہیں ایماندار اور واضح ہونا چاہیے کہ وہ کب، کیوں، اور کیسے ان کا استعمال کرتے ہیں۔ نیز، ان سسٹمز کی حدود کے بارے میں بھی وضاحت ہونی چاہیے۔
### شفافیت
AI سسٹمز کو سمجھنے کے قابل ہونا چاہیے۔ شفافیت کا ایک اہم حصہ AI سسٹمز اور ان کے اجزاء کے رویے کی وضاحت ہے۔ AI سسٹمز کی سمجھ کو بہتر بنانے کے لیے یہ ضروری ہے کہ تمام متعلقہ افراد کو معلوم ہو کہ وہ کس طرح اور کیوں کام کرتے ہیں تاکہ وہ ممکنہ کارکردگی کے مسائل، سلامتی اور پرائیویسی کے خدشات، تعصبات، اخراج کی پریکٹس، یا غیر ارادی نتائج کی نشاندہی کر سکیں۔ ہم یہ بھی مانتے ہیں کہ جو لوگ AI سسٹمز استعمال کرتے ہیں انہیں ایماندار اور کھلے دل سے بتانا چاہیے کہ کب، کیوں اور کیسے وہ انہیں استعمال کرتے ہیں اور ان سسٹمز کی حدود کیا ہیں۔ مثال کے طور پر، اگر کوئی بینک AI نظام کا استعمال اپنے صارف کے قرض کے فیصلوں کو سہارا دینے کے لیے کرتا ہے، تو نتائج کا جائزہ لینا اور سمجھنا ضروری ہے کہ کونسا ڈیٹا نظام کی سفارشات کو متاثر کرتا ہے۔ حکومتیں مختلف صنعتوں میں AI کو ریگولیٹ کرنے لگیں ہیں، لہٰذا ڈیٹا سائنسدانوں اور تنظیموں کو یہ وضاحت کرنا ہوگی کہ آیا AI نظام ریگولیٹری ضروریات پر پورا اترتا ہے، خاص طور پر جب کوئی غیر مطلوبہ نتیجہ نکلے۔
> [🎥 یہاں ویڈیو کے لیے کلک کریں: AI میں شفافیت](https://www.microsoft.com/videoplayer/embed/RE4voJF)
> [🎥 ویڈیو کے لیے یہاں کلک کریں: AI میں شفافیت](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- AI سسٹمز اتنے پیچیدہ ہیں کہ یہ سمجھنا مشکل ہے کہ وہ کیسے کام کرتے ہیں اور ان کے نتائج کی تشریح کیسے کی جائے۔
- اس عدم تفہیم کا اثر ان سسٹمز کے انتظام، آپریشن، اور دستاویزات پر پڑتا ہے۔
- اس سے زیادہ اہم بات یہ ہے کہ یہ عدم تفہیم ان فیصلوں پر اثر ڈالتی ہے جو ان سسٹمز کے نتائج کی بنیاد پر کیے جاتے ہیں۔
- چونکہ AI سسٹمز بہت پیچیدہ ہیں، ان کو سمجھنا اور نتائج کی تشریح کرنا مشکل ہوتا ہے۔
- اس کمی کی وجہ سے ان سسٹمز کا انتظام، آپریشن، اور دستاویزات متاثر ہوتی ہیں۔
- اور بھی اہم، اس کمی کی وجہ سے ان نتائج کی بنیاد پر کیے جانے والے فیصلے متاثر ہوتے ہیں جو یہ سسٹمز پیدا کرتے ہیں۔
### جوابدہی
### احتساب
وہ لوگ جو AI سسٹمز ڈیزائن اور لگاتے ہیں انہیں اپنے سسٹمز کے کام کرنے کے طریقے کے لیے جوابدہ ہونا چاہیے۔ احتساب کی ضرورت حساس ٹیکنالوجیز جیسے چہرے کی پہچان کے ساتھ خاص طور پر اہم ہے۔ حال ہی میں، چہرے کی پہچان کی ٹیکنالوجی کی مانگ بڑھ رہی ہے، خاص طور پر قانون نافذ کرنے والے اداروں کی طرف سے جو اس ٹیکنالوجی کو لاپتہ بچوں کو تلاش کرنے جیسے استعمالات میں ممکنہ نظر آتی ہیں۔ تاہم، یہ ٹیکنالوجیز ممکنہ طور پر حکومت کی طرف سے اپنے شہریوں کی بنیادی آزادیوں کو خطرے میں ڈالنے کے لیے استعمال ہو سکتی ہیں، جیسے مخصوص افراد کی مسلسل نگرانی کو فعال کرنا۔ اس لیے ڈیٹا سائنسدانوں اور تنظیموں کو یہ ذمہ داری اٹھانی ہوگی کہ ان کا AI نظام افراد یا معاشرے پر کس طرح اثر انداز ہوتا ہے۔
جو لوگ AI سسٹمز کو ڈیزائن اور نافذ کرتے ہیں، انہیں ان کے کام کرنے کے طریقے کے لیے جوابدہ ہونا چاہیے۔ جوابدہی کی ضرورت خاص طور پر حساس ٹیکنالوجیز جیسے چہرے کی شناخت کے لیے اہم ہے۔ حالیہ دنوں میں، چہرے کی شناخت کی ٹیکنالوجی کی مانگ میں اضافہ ہوا ہے، خاص طور پر قانون نافذ کرنے والے اداروں کی طرف سے جو اس ٹیکنالوجی کو گمشدہ بچوں کو تلاش کرنے جیسے استعمالات میں ممکنہ طور پر دیکھتے ہیں۔ تاہم، یہ ٹیکنالوجیز حکومت کے ذریعے شہریوں کی بنیادی آزادیوں کو خطرے میں ڈال سکتی ہیں، جیسے مخصوص افراد کی مسلسل نگرانی کو فعال کرنا۔ اس لیے، ڈیٹا سائنسدانوں اور تنظیموں کو اس بات کے لیے ذمہ دار ہونا چاہیے کہ ان کے AI سسٹمز افراد یا معاشرے پر کیا اثر ڈال رہے ہیں۔
[![مہم والی AI ماہر چہرے کی پہچان کے ذریعے وسیع نگرانی کے بارے میں انتباہ دیتی ہیں](../../../../translated_images/ur/accountability.41d8c0f4b85b6231.webp)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft کا ذمہ دار AI کیلئے طریقہ")
[![AI کے ذریعے نگرانی کے خطرات](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft کا ذمہ دارانہ AI کے لیے نقطہ نظر")
> 🎥 ویڈیو کے لیے اوپر تصویر پر کلک کریں: چہرے کی پہچان کے ذریعے وسیع نگرانی کے انتبہات
> 🎥 اوپر دی گئی تصویر پر کلک کریں: چہرے کی شناخت کے ذریعے نگرانی کے خطرات
آخرکار، ہماری نسل کے لیے سب سے بڑے سوالات میں سے ایک یہ ہے کہ چونکہ ہم پہلی نسل ہیں جو AI کو معاشرے میں لا رہی ہے، تو یہ کس طرح یقینی بنایا جائے کہ کمپیوٹر لوگو ں کے لیے جوابدہ رہیں گے اور جو لوگ کمپیوٹر ڈیزائن کرتے ہیں وہ باقی سب کے لیے جوابدہ رہیں۔
آخرکار، ہماری نسل کے لیے سب سے بڑے سوالات میں سے ایک یہ ہے کہ ہم یہ کیسے یقینی بنائیں کہ کمپیوٹرز لوگوں کے لیے جوابدہ رہیں گے اور یہ کہ کمپیوٹرز کو ڈیزائن کرنے والے لوگ سب کے لیے جوابدہ رہیں۔
## اثرات کا جائزہ
## اثرات کی تشخیص
مشین لرننگ ماڈل کی تربیت سے پہلے، ضروری ہے کہ ایک اثرات کا جائزہ لیا جائے تاکہ AI نظام کے مقصد کو سمجھا جا سکے؛ اس کا متوقع استعمال کیا ہے؛ یہ کہاں نافذ کیا جائے گا؛ اور کون اس نظام کے ساتھ تعامل کرے گا۔ یہ جائزہ کار(وں) یا ٹیسٹرز کو خود نظام کے جائزہ لینے میں مدد دیتا ہے تاکہ وہ ممکنہ خطرات اور متوقع نتائج کے عوامل کو مدنظر رکھ سکیں۔
مشین لرننگ ماڈل کو تربیت دینے سے پہلے، یہ ضروری ہے کہ AI سسٹم کے مقصد کو سمجھنے کے لیے اثرات کی تشخیص کی جائے؛ اس کا ارادہ کیا ہے؛ یہ کہاں تعینات ہوگا؛ اور کون اس سسٹم کے ساتھ تعامل کرے گا۔ یہ جائزہ لینے والوں یا ٹیسٹرز کے لیے مددگار ثابت ہوتا ہے تاکہ وہ ان عوامل کو جان سکیں جن پر ممکنہ خطرات اور متوقع نتائج کی نشاندہی کرتے وقت غور کرنا چاہیے۔
اثرات کے جائزے کے دوران درج ذیل امور پر توجہ دی جاتی ہے:
اثرات کی تشخیص کرتے وقت درج ذیل نکات پر توجہ مرکوز کریں:
* **افراد پر منفی اثر**۔ کسی بھی بندش یا ضروریات، غیر معاون استعمال یا کسی معلوم حدود سے آگاہ ہونا ضروری ہے تاکہ نظام کا استعمال ایسے طریقے سے نہ ہو جو افراد کو نقصان پہنچا سکے۔
* **ڈیٹا کی ضروریات**۔ یہ سمجھنا کہ نظام ڈیٹا کو کیسے اور کہاں استعمال کرے گا، جائزہ لینے والوں کو کسی بھی ڈیٹا کی ضروریات پر غور کرنے میں مدد دیتا ہے (مثلاً GDPR یا HIPAA ڈیٹا کے قوانین)۔ اس کے علاوہ، یہ دیکھنا کہ آیا ڈیٹا کا ماخذ یا مقدار تربیت کے لیے کافی ہے۔
* **اثرات کا خلاصہ**۔ نظام کے استعمال سے پیدا ہونے والے ممکنہ نقصانات کی فہرست جمع کریں۔ مشین لرننگ کے پورے لائف سائیکل کے دوران، طے شدہ مسائل کی جانچ کریں کہ آیا انہیں کم یا حل کیا گیا ہے۔
* **مطلوبہ اہداف** ہر چھ بنیادی اصولوں کے لیے۔ یہ اندازہ لگائیں کہ اصولوں سے وابستہ اہداف پورے ہوئے یا نہیں اور کہیں کہیں فرق تو نہیں۔
- **افراد پر منفی اثرات**: کسی بھی پابندی یا ضرورت، غیر معاون استعمال، یا کسی معلوم حدود سے آگاہ ہونا ضروری ہے تاکہ یہ یقینی بنایا جا سکے کہ سسٹم کو اس طرح استعمال نہ کیا جائے جو افراد کو نقصان پہنچا سکے۔
- **ڈیٹا کی ضروریات**: یہ سمجھنا کہ سسٹم ڈیٹا کو کیسے اور کہاں استعمال کرے گا، جائزہ لینے والوں کو ان ڈیٹا کی ضروریات کو تلاش کرنے میں مدد دیتا ہے جن کا آپ کو خیال رکھنا ہوگا (مثلاً، GDPR یا HIPPA ڈیٹا کے ضوابط)۔ مزید برآں، یہ جانچنا کہ آیا ڈیٹا کا ماخذ یا مقدار تربیت کے لیے کافی ہے۔
- **اثرات کا خلاصہ**: ان ممکنہ نقصانات کی فہرست جمع کریں جو سسٹم کے استعمال سے پیدا ہو سکتے ہیں۔ ML کے پورے لائف سائیکل کے دوران، یہ جائزہ لیں کہ آیا شناخت شدہ مسائل کو کم کیا گیا ہے یا حل کیا گیا ہے۔
- **چھ بنیادی اصولوں کے لیے قابل اطلاق اہداف**: جائزہ لیں کہ آیا ہر اصول کے اہداف پورے کیے گئے ہیں اور کیا کوئی خلا موجود ہے۔
## ذمہ دارانہ AI کے ساتھ ڈیبگنگ
## ذمہ دار AI کے ساتھ ڈیبگنگ
جیسے سافٹ ویئر ایپلیکیشن کو ڈیبگ کرنا ضروری ہے، ویسے ہی AI سسٹم کو ڈیبگ کرنا بھی ضروری ہے تاکہ سسٹم میں موجود مسائل کی نشاندہی اور ان کا حل نکالا جا سکے۔ بہت سے عوامل ماڈل کی کارکردگی کو متاثر کر سکتے ہیں۔ زیادہ تر روایتی ماڈل کارکردگی کے میٹرکس ماڈل کی کارکردگی کے مقداری مجموعے ہوتے ہیں، جو یہ تجزیہ کرنے کے لیے کافی نہیں ہیں کہ ماڈل ذمہ دارانہ AI اصولوں کی خلاف ورزی کیسے کرتا ہے۔ مزید برآں، مشین لرننگ ماڈل ایک "بلیک باکس" ہوتا ہے، جس کی وجہ سے یہ سمجھنا مشکل ہوتا ہے کہ اس کے نتائج کو کیا چیز متاثر کرتی ہے یا جب یہ غلطی کرتا ہے تو اس کی وضاحت کیسے کی جائے۔ اس کورس کے بعد کے حصے میں، ہم سیکھیں گے کہ AI سسٹمز کو ڈیبگ کرنے کے لیے ذمہ دارانہ AI ڈیش بورڈ کا استعمال کیسے کریں۔ یہ ڈیش بورڈ ڈیٹا سائنسدانوں اور AI ڈویلپرز کے لیے ایک جامع ٹول فراہم کرتا ہے تاکہ وہ درج ذیل کام انجام دے سکیں:
کسی سافٹ ویئر اپلیکیشن کی طرح ہی، AI سسٹم کی ڈیبگنگ نظام میں مسائل کی شناخت اور حل کرنے کا ضروری عمل ہے۔ ایسے کئی عوامل ہیں جو کسی ماڈل کی متوقع یا ذمہ دارانہ کارکردگی کو متاثر کر سکتے ہیں۔ روایتی ماڈل کارکردگی کے پیمانے ماڈل کی کارکردگی کے مقداری مجموعے ہوتے ہیں، جو ذمہ دار AI اصولوں کی خلاف ورزی کا تجزیہ کرنے کے لیے کافی نہیں ہوتے۔ مزید یہ کہ، مشین لرننگ ماڈل ایک بلیک باکس ہوتا ہے جو نتائج کے اسباب کو سمجھنا اور غلطی کی صورت میں وضاحت فراہم کرنا مشکل بناتا ہے۔ اس کورس میں آگے ہم ذمہ دار AI ڈیش بورڈ کو استعمال کرنا سیکھیں گے جو AI سسٹمز کی ڈیبگنگ میں مدد دیتا ہے۔ یہ ڈیش بورڈ ڈیٹا سائنسدانوں اور AI ڈیویلپرز کو ایک مکمل ٹول فراہم کرتا ہے تاکہ وہ:
- **غلطی کا تجزیہ**: ماڈل کی غلطی کی تقسیم کی نشاندہی کرنا جو سسٹم کی انصاف پسندی یا قابل اعتمادیت کو متاثر کر سکتی ہے۔
- **ماڈل کا جائزہ**: یہ دریافت کرنا کہ ماڈل کی کارکردگی میں ڈیٹا کے مختلف گروہوں کے درمیان کہاں فرق ہے۔
- **ڈیٹا کا تجزیہ**: ڈیٹا کی تقسیم کو سمجھنا اور ڈیٹا میں کسی بھی ممکنہ تعصب کی نشاندہی کرنا جو انصاف پسندی، شمولیت، اور قابل اعتمادیت کے مسائل کا باعث بن سکتا ہے۔
- **ماڈل کی وضاحت**: یہ سمجھنا کہ ماڈل کی پیش گوئیوں کو کیا چیز متاثر کرتی ہے۔ یہ ماڈل کے رویے کی وضاحت کرنے میں مدد کرتا ہے، جو شفافیت اور جوابدہی کے لیے اہم ہے۔
* **خرابی کا تجزیہ**۔ ماڈل کی غلطی کی تقسیم کی شناخت کرنے کے لیے جو نظام کے انصاف یا بھروسے کو متاثر کر سکتی ہے۔
* **ماڈل کا جائزہ**۔ ماڈل کی کارکردگی میں ڈیٹا کے مختلف گروہوں میں فرق کی دریافت کے لیے۔
* **ڈیٹا کا تجزیہ**۔ ڈیٹا کی تقسیم کو سمجھنے اور ممکنہ تعصب کی نشاندہی کرنے کے لیے جو انصاف، شمولیت، اور بھروسے کے مسائل کو پیدا کر سکتا ہے۔
* **ماڈل کی تشریح**۔ سمجھنے کے لیے کہ ماڈل کی پیش گوئیوں پر کیا اثر انداز ہوتا ہے۔ یہ ماڈل کے رویے کی وضاحت میں مدد دیتا ہے، جو شفافیت اور احتساب کے لیے اہم ہے۔
## 🚀 چیلنج
نقصانات کو شروع میں ہی روکنے کے لیے، ہمیں:
## 🚀 چیلنج
نقصانات کو پہلے ہی سے پیدا ہونے سے روکنے کے لیے، ہمیں چاہیے کہ:
- سسٹمز پر کام کرنے والے لوگوں میں مختلف پس منظر اور نقطہ نظر شامل کرنے کی ضرورت ہے۔
- ایسے ڈیٹا سیٹس میں سرمایہ کاری کرنی چاہیے جو ہمارے معاشرے کی تنوع کی عکاسی کرتے ہوں۔
- مشین لرننگ کے لائف سائیکل کے دوران بہتر طریقے تیار کرنے کی ضرورت ہے تاکہ ذمہ دارانہ AI کی نشاندہی اور اصلاح کی جا سکے۔
- سسٹمز پر کام کرنے والے افراد میں مختلف پس منظر اور نقطہ نظر ہوں۔
- ایسے ڈیٹا سیٹس میں سرمایہ کاری کریں جو ہماری معاشرت کی تنوع کی عکاسی کریں۔
- مشین لرننگ کے پورے لائف سائیکل میں بہتر طریقے تیار کریں تاکہ ذمہ دار AI کی شناخت اور اصلاح ہو سکے۔
حقیقی زندگی کے ان منظرناموں کے بارے میں سوچیں جہاں ماڈل کی ناقابل اعتمادیت ماڈل کی تعمیر اور استعمال میں ظاہر ہوتی ہے۔ ہمیں اور کیا غور کرنا چاہیے؟
حقیقی زندگی کی مثالوں کے بارے میں سوچیں جہاں ایک ماڈل کی غیر قابل اعتماد صورتحال ماڈل کی تعمیر اور استعمال میں واضح ہو۔ اور ہم کیا باتیں غور میں لائیں؟
## [لیکچر کے بعد کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
## [لیچر کے بعد کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
## جائزہ اور خود مطالعہ
## جائزہ اور خود مطالعہ
اس سبق میں، آپ نے مشین لرننگ میں انصاف اور ناانصافی کے تصورات کے بنیادی اصولوں کے بارے میں سیکھا۔
اس ورکشاپ کو دیکھیں تاکہ موضوعات کو مزید گہرائی سے سمجھ سکیں:
اس سبق میں، آپ نے مشین لرننگ میں انصاف اور ناانصافی کے تصورات کی کچھ بنیادی باتیں سیکھی ہیں۔
اس ورکشاپ کو دیکھیں تاکہ موضوعات میں مزید گہرائی میں جا سکیں:
- ذمہ دار AI کی تلاش: اصولوں کو عملی جامہ پہنانا، پیشکش از بسمیرا نوشی، مہرنوش سمیقی اور امت شرما
- ذمہ دار AI کی تلاش میں: اصولوں کو عملی جامہ پہنانا از بسمیرا نوشی، مهرنوش سامیکی اور امت شرما
[![ذمہ دار AI ٹول باکس: ذمہ دار AI بنانے کے لیے ایک اوپن سورس فریم ورک](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: ذمہ دار AI بنانے کے لیے ایک اوپن سورس فریم ورک")
[![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: ذمہ دار AI بنانے کے لیے ایک اوپن سورس فریم ورک، پیشکش از بسمیرا نوشی، مہرنوش سمیقی اور امت شرما
> 🎥 ویڈیو کے لیے اوپر تصویر پر کلک کریں: RAI Toolbox: Besmira Nushi، Mehrnoosh Sameki، اور Amit Sharma کے ذریعہ ذمہ دار AI کی تعمیر کے لیے ایک اوپن سورس فریم ورک
یہ بھی پڑھیں:
مزید یہ بھی پڑھیں:
- مائیکروسافٹ کا RAI ریسورس سینٹر: [ذمہ دار AI وسائل Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- مائیکروسافٹ کا RAI وسیلہ مرکز: [Responsible AI Resources Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- مائیکروسافٹ کا FATE ریسرچ گروپ: [FATE: AI میں انصاف، جوابدہی، شفافیت، اور اخلاقیات - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
- مائیکروسافٹ کا FATE تحقیقی گروپ: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
RAI ٹول باکس:
RAI Toolbox:
- [ذمہ دار AI ٹول باکس GitHub ریپوزیٹری](https://github.com/microsoft/responsible-ai-toolbox)
- [Responsible AI Toolbox GitHub repository](https://github.com/microsoft/responsible-ai-toolbox)
Azure Machine Learning کے ٹولز کے بارے میں پڑھیں تاکہ انصاف کو یقینی بنایا جا سکے:
انصاف کو یقینی بنانے کے لیے Azure Machine Learning کے آلات کے بارے میں پڑھیں:
- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
## اسائنمنٹ
[RAI ٹول باکس کو دریافت کریں](assignment.md)
[RAI Toolbox کو دریافت کریں](assignment.md)
---
**ڈسکلیمر**:
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**ڈس کلیمر**:
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,106 +1,107 @@
# Python اور Scikit-learn کے ساتھ ریگریشن ماڈلز کے لیے شروعات کریں
# Python اور Scikit-learn کے ساتھ ریگریشن ماڈلز کے لیے شروع کریں
![ریگریشنز کا خلاصہ ایک خاکہ میں](../../../../sketchnotes/ml-regression.png)
![ریگریشنز کا خلاصہ ایک سکیتچنوٹ میں](../../../../translated_images/ur/ml-regression.4e4f70e3b3ed446e.webp)
> خاکہ [Tomomi Imura](https://www.twitter.com/girlie_mac) کی طرف سے
> سکیتچنوٹ از [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [لیکچر سے پہلے کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
## [پری لیکچر کوئز](https://ff-quizzes.netlify.app/en/ml/)
> ### [یہ سبق R میں بھی دستیاب ہے!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
> ### [یہ سبق R میں دستیاب ہے!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
## تعارف
ان چار اسباق میں، آپ ریگریشن ماڈلز بنانے کا طریقہ سیکھیں گے۔ ہم جلد ہی ان کے استعمال کے بارے میں بات کریں گے۔ لیکن کچھ بھی کرنے سے پہلے، یہ یقینی بنائیں کہ آپ کے پاس صحیح ٹولز موجود ہیں تاکہ آپ عمل شروع کر سکیں!
ان چار اسباق میں، آپ ریگریشن ماڈلز بنانے کا طریقہ سیکھیں گے۔ ہم جلد ہی بات کریں گے کہ یہ کس کام آتے ہیں۔ لیکن کچھ بھی کرنے سے پہلے، یقینی بنائیں کہ آپ کے پاس اس عمل کو شروع کرنے کے لیے صحیح اوزار موجود ہیں!
اس سبق میں، آپ سیکھیں گے کہ:
- اپنے کمپیوٹر کو مقامی مشین لرننگ کے کاموں کے لیے ترتیب دیں۔
- Jupyter نوٹ بکس کے ساتھ کام کریں۔
- Scikit-learn کا استعمال کریں، بشمول انسٹالیشن۔
- ایک عملی مشق کے ذریعے لینیئر ریگریشن کو دریافت کریں۔
- Scikit-learn استعمال کریں، بشمول تنصیب۔
- ایک عملی مشق کے ذریعے لینیئر ریگریشن کا جائزہ لیں۔
## انسٹالیشنز اور ترتیب
## تنصیبات اور ترتیبات
[![مشین لرننگ کے لیے ابتدائی - مشین لرننگ ماڈلز بنانے کے لیے اپنے ٹولز تیار کریں](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "مشین لرننگ کے لیے ابتدائی - مشین لرننگ ماڈلز بنانے کے لیے اپنے ٹولز تیار کریں")
[![نئے آنے والوں کے لیے ML - اپنے اوزار تیار کریں تاکہ مشین لرننگ ماڈلز بنائیں](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "نئے آنے والوں کے لیے ML - اپنے اوزار تیار کریں تاکہ مشین لرننگ ماڈلز بنائیں")
> 🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ اپنے کمپیوٹر کو مشین لرننگ کے لیے ترتیب دینے کے عمل کو دیکھ سکیں۔
> 🎥 اپنے کمپیوٹر کو ML کے لیے ترتیب دینے کے عمل سے گزرتے ہوئے ایک مختصر ویڈیو کے لیے اوپر والی تصویر پر کلک کریں۔
1. **Python انسٹال کریں**۔ یہ یقینی بنائیں کہ [Python](https://www.python.org/downloads/) آپ کے کمپیوٹر پر انسٹال ہے۔ آپ ڈیٹا سائنس اور مشین لرننگ کے بہت سے کاموں کے لیے Python استعمال کریں گے۔ زیادہ تر کمپیوٹر سسٹمز میں پہلے سے ہی Python انسٹال ہوتا ہے۔ کچھ صارفین کے لیے سیٹ اپ کو آسان بنانے کے لیے [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) بھی دستیاب ہیں۔
1. **Python انسٹال کریں**۔ اس بات کو یقینی بنائیں کہ آپ کے کمپیوٹر پر [Python](https://www.python.org/downloads/) انسٹال ہے۔ آپ بہت سے ڈیٹا سائنس اور مشین لرننگ کاموں کے لیے Python استعمال کریں گے۔ زیادہ تر کمپیوٹر سسٹمز میں پہلے سے Python انسٹال ہوتا ہے۔ کچھ صارفین کے لیے آسانی کے لیے مفید [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) بھی دستیاب ہیں۔
تاہم، Python کے کچھ استعمالات ایک ورژن کی ضرورت رکھتے ہیں، جبکہ دوسرے مختلف ورژن کی ضرورت رکھتے ہیں۔ اسی وجہ سے، [ورچوئل ماحول](https://docs.python.org/3/library/venv.html) میں کام کرنا مفید ہے۔
تاہم Python کے بعض استعمالات کے لیے سافٹ ویئر کا ایک ورژن چاہیے ہوتا ہے، جبکہ دوسرے کے لیے مختلف ورژن۔ اسی وجہ سے، ایک [ورچوئل ماحول](https://docs.python.org/3/library/venv.html) کے اندر کام کرنا مفید ہوتا ہے۔
2. **Visual Studio Code انسٹال کریں**۔ یہ یقینی بنائیں کہ Visual Studio Code آپ کے کمپیوٹر پر انسٹال ہے۔ [Visual Studio Code انسٹال کرنے](https://code.visualstudio.com/) کے بنیادی ہدایات پر عمل کریں۔ اس کورس میں آپ Python کو Visual Studio Code میں استعمال کریں گے، لہذا آپ [Visual Studio Code کو Python ڈیولپمنٹ کے لیے ترتیب دینے](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) کے بارے میں جاننا چاہیں گے۔
2. **Visual Studio Code انسٹال کریں**۔ یقینی بنائیں کہ آپ نے اپنے کمپیوٹر پر Visual Studio Code انسٹال کیا ہوا ہے۔ بنیادی تنصیب کے لیے ان ہدایات پر عمل کریں: [Visual Studio Code انسٹال کریں](https://code.visualstudio.com/)۔ آپ اس کورس میں Visual Studio Code میں Python استعمال کرنے جا رہے ہیں، لہٰذا آپ کو Python ترقی کے لیے [Visual Studio Code کو ترتیب دینا](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) آنا چاہیے۔
> Python کے ساتھ آرام دہ ہونے کے لیے اس [Learn modules](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) کے مجموعے پر کام کریں۔
> Python کے ساتھ آرام دہ ہونے کے لیے اس مجموعے کے [Learn modules](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) سے گزر کر کام کریں۔
>
> [![Visual Studio Code کے ساتھ Python ترتیب دیں](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Visual Studio Code کے ساتھ Python ترتیب دیں")
> [![Visual Studio Code کے ساتھ Python سیٹ اپ کریں](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Visual Studio Code کے ساتھ Python سیٹ اپ کریں")
>
> 🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ Visual Studio Code میں Python استعمال کرنے کا ویڈیو دیکھ سکیں۔
> 🎥 اوپر تصویر پر کلک کریں ایک ویڈیو کے لیے: VS Code میں Python کا استعمال۔
3. **Scikit-learn انسٹال کریں**، [ان ہدایات](https://scikit-learn.org/stable/install.html) پر عمل کرتے ہوئے۔ چونکہ آپ کو Python 3 استعمال کرنے کی ضرورت ہے، یہ تجویز کیا جاتا ہے کہ آپ ورچوئل ماحول استعمال کریں۔ نوٹ کریں، اگر آپ یہ لائبریری M1 Mac پر انسٹال کر رہے ہیں، تو صفحے پر دی گئی خاص ہدایات پر عمل کریں۔
3. **Scikit-learn انسٹال کریں**، ان [ہدایات](https://scikit-learn.org/stable/install.html) پر عمل کرتے ہوئے۔ چونکہ آپ کو یہ یقینی بنانا ہے کہ آپ Python 3 استعمال کر رہے ہیں، اس لیے ورچوئل ماحول استعمال کرنے کی سفارش کی جاتی ہے۔ اگر آپ M1 Mac پر یہ لائبریری انسٹال کر رہے ہیں، تو مخصوص ہدایات اوپر دی گئی صفحہ پر موجود ہیں۔
4. **Jupyter Notebook انسٹال کریں**۔ آپ کو [Jupyter پیکیج انسٹال](https://pypi.org/project/jupyter/) کرنے کی ضرورت ہوگی۔
1. **Jupyter Notebook انسٹال کریں**۔ آپ کو [Jupyter پیکیج انسٹال کرنا](https://pypi.org/project/jupyter/) ہوگا۔
## آپ کا مشین لرننگ تخلیقی ماحول
## آپ کا ML مصنف ماحول
آپ **نوٹ بکس** استعمال کریں گے تاکہ Python کوڈ تیار کریں اور مشین لرننگ ماڈلز بنائیں۔ یہ فائل کی قسم ڈیٹا سائنسدانوں کے لیے ایک عام ٹول ہے، اور انہیں ان کے لاحقہ یا توسیع `.ipynb` سے پہچانا جا سکتا ہے۔
آپ **نوٹ بکس** استعمال کریں گے اپنی Python کوڈنگ اور مشین لرننگ ماڈلز بنانے کے لیے۔ یہ قسم کا فائل ڈیٹا سائنسدانوں کے لیے ایک عام آلہ ہے، اور انہیں ان کے پسوند یا توسیع `.ipynb` سے پہچانا جا سکتا ہے۔
نوٹ بکس ایک انٹرایکٹو ماحول فراہم کرتی ہیں جو ڈیولپر کو کوڈ لکھنے اور اس کے ارد گرد نوٹس اور دستاویزات شامل کرنے کی اجازت دیتی ہیں، جو تجرباتی یا تحقیقی منصوبوں کے لیے کافی مددگار ثابت ہوتی ہیں۔
نوٹ بکس ایک تعاملی ماحول ہیں جو ڈویلپر کو نہ صرف کوڈ لکھنے بلکہ اس کے گرد نوٹس اور دستاویزات شامل کرنے کی اجازت دیتے ہیں، جو تحقیقی یا تجرباتی منصوبوں کے لیے مفید ہے۔
[![مشین لرننگ کے لیے ابتدائی - Jupyter نوٹ بکس ترتیب دیں تاکہ ریگریشن ماڈلز بنانا شروع کریں](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "مشین لرننگ کے لیے ابتدائی - Jupyter نوٹ بکس ترتیب دیں تاکہ ریگریشن ماڈلز بنانا شروع کریں")
[![نئے آنے والوں کے لیے ML - ریگریشن ماڈلز بنانے کے لیے Jupyter نوٹ بکس تیار کریں](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "نئے آنے والوں کے لیے ML - ریگریشن ماڈلز بنانے کے لیے Jupyter نوٹ بکس تیار کریں")
> 🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ اس مشق کے عمل کو دیکھ سکیں۔
> 🎥 اس مشق کو کرتے ہوئے ایک مختصر ویڈیو کے لیے اوپر تصویر پر کلک کریں۔
### مشق - نوٹ بک کے ساتھ کام کریں
### مشق - ایک نوٹ بک کے ساتھ کام کریں
اس فولڈر میں، آپ کو فائل _notebook.ipynb_ ملے گی۔
1. _notebook.ipynb_ کو Visual Studio Code میں کھولیں۔
1. Visual Studio Code میں _notebook.ipynb_ کھولیں۔
ایک Jupyter سرور Python 3+ کے ساتھ شروع ہوگا۔ آپ کو نوٹ بک کے وہ حصے ملیں گے جو `run` کیے جا سکتے ہیں، یعنی کوڈ کے ٹکڑے۔ آپ کوڈ بلاک کو چلانے کے لیے اس آئیکن کو منتخب کر سکتے ہیں جو پلے بٹن کی طرح دکھائی دیتا ہے۔
Python 3+ کے ساتھ ایک Jupyter سرور شروع ہوگا۔ آپ نوٹ بک کے حصے دیکھیں گے جنہیں `run` کیا جا سکتا ہے، یعنی کوڈ کے ٹکڑے۔ آپ کوڈ بلاک کو اس کے پلے بٹن نما آئیکن کو منتخب کر کے چلا سکتے ہیں۔
2. `md` آئیکن منتخب کریں اور تھوڑا سا مارک ڈاؤن شامل کریں، اور درج ذیل متن **# اپنی نوٹ بک میں خوش آمدید** لکھیں۔
1. `md` آئیکن منتخب کریں اور تھوڑا سا مارک ڈاؤن اور مندرجہ ذیل متن شامل کریں **# Welcome to your notebook**۔
اس کے بعد کچھ Python کوڈ شامل کریں۔
پھر، کچھ 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/ur/notebook.4a3ee31f396b8832.webp)
آپ اپنے کوڈ کے ساتھ تبصرے شامل کر سکتے ہیں تاکہ نوٹ بک کو خود دستاویز کریں۔
آپ اپنے کوڈ کے ساتھ تبصرے شامل کر کے نوٹ بک خود دستاویزی بنا سکتے ہیں۔
✅ ایک لمحے کے لیے سوچیں کہ ویب ڈیولپر کے کام کرنے کے ماحول اور ڈیٹا سائنسدان کے کام کرنے کے ماحول میں کتنا فرق ہے۔
✅ ایک لمحہ سوچیں کہ ویب ڈویلپر کا کام کرنے کا ماحول ڈیٹا سائنسدان کے ماحول سے کتنا مختلف ہوتا ہے۔
## Scikit-learn کے ساتھ شروعات
## Scikit-learn کے ساتھ کام شروع کریں
اب جب کہ Python آپ کے مقامی ماحول میں ترتیب دی گئی ہے، اور آپ Jupyter نوٹ بکس کے ساتھ آرام دہ ہیں، آئیے Scikit-learn کے ساتھ بھی اتنا ہی آرام دہ ہو جائیں (اسے `sci` جیسے `science` میں تلفظ کریں)۔ Scikit-learn آپ کو مشین لرننگ کے کام انجام دینے میں مدد دینے کے لیے ایک [وسیع API](https://scikit-learn.org/stable/modules/classes.html#api-ref) فراہم کرتا ہے۔
اب جب Python آپ کے مقامی ماحول میں سیٹ اپ ہے، اور آپ Jupyter نوٹ بکس میں آرام دہ ہیں، تو آئیے Scikit-learn (جسے `sci` جیسا کہ `science` کہتے ہیں) کے ساتھ بھی اتنا ہی آرام دہ ہو جائیں۔ Scikit-learn ایک [وسیع API](https://scikit-learn.org/stable/modules/classes.html#api-ref) فراہم کرتا ہے جو آپ کو مشین لرننگ کے کام انجام دینے میں مدد دیتا ہے۔
ان کے [ویب سائٹ](https://scikit-learn.org/stable/getting_started.html) کے مطابق، "Scikit-learn ایک اوپن سورس مشین لرننگ لائبریری ہے جو سپروائزڈ اور ان سپروائزڈ لرننگ کو سپورٹ کرتی ہے۔ یہ ماڈل فٹنگ، ڈیٹا پری پروسیسنگ، ماڈل سلیکشن اور ایویلیوایشن، اور دیگر کئی یوٹیلیٹیز کے لیے مختلف ٹولز فراہم کرتی ہے۔"
ان کی [ویب سائٹ](https://scikit-learn.org/stable/getting_started.html) کے مطابق، "Scikit-learn ایک اوپن سورس مشین لرننگ لائبریری ہے جو سپروائزڈ اور انسپروائزڈ لرننگ کی حمایت کرتی ہے۔ یہ ماڈل فٹنگ، ڈیٹا پری پروسیسنگ، ماڈل سلیکشن اور ایوالویشن، اور بہت سے دیگر آلات بھی فراہم کرتی ہے۔"
اس کورس میں، آپ Scikit-learn اور دیگر ٹولز کا استعمال کریں گے تاکہ مشین لرننگ ماڈلز بنائیں جو ہم 'روایتی مشین لرننگ' کام کہتے ہیں۔ ہم نے جان بوجھ کر نیورل نیٹ ورکس اور ڈیپ لرننگ سے گریز کیا ہے، کیونکہ یہ ہمارے آنے والے 'AI for Beginners' نصاب میں بہتر طور پر شامل کیے گئے ہیں۔
اس کورس میں، آپ Scikit-learn اور دیگر اوزار استعمال کر کے مشین لرننگ ماڈلز بنائیں گے تاکہ جو کام ہم 'روایتی مشین لرننگ' کہتے ہیں انجام دے سکیں۔ ہم نے جان بوجھ کر نیورل نیٹ ورکس اور ڈیپ لرننگ سے گریز کیا ہے کیونکہ وہ ہمارے آنے والے 'AI for Beginners' نصاب میں بہتر طور پر شامل کیے جائیں گے۔
Scikit-learn ماڈلز بنانے اور ان کا استعمال کرنے کے لیے ان کا جائزہ لینے کو آسان بناتا ہے۔ یہ بنیادی طور پر عددی ڈیٹا کے استعمال پر مرکوز ہے اور سیکھنے کے ٹولز کے طور پر استعمال کے لیے کئی تیار شدہ ڈیٹاسیٹس شامل کرتا ہے۔ یہ طلباء کے لیے آزمائش کے لیے پہلے سے تیار شدہ ماڈلز بھی شامل کرتا ہے۔ آئیے پہلے Scikit-learn کے ساتھ کچھ بنیادی ڈیٹا کے ساتھ پہلے ML ماڈل کو دریافت کریں۔
Scikit-learn ماڈلز بنانے اور ان کے استعمال کے لیے جائزہ لینے کو آسان بناتا ہے۔ یہ بنیادی طور پر عددی ڈیٹا استعمال کرتا ہے اور کئی تیار شدہ ڈیٹاسیٹس سیکھنے کے لیے فراہم کرتا ہے۔ اس میں طلباء کے لیے پر بنا ماڈلز بھی شامل ہیں جنہیں آزمایا جا سکتا ہے۔ آئیے پہلے پیک کیے ہوئے ڈیٹا کو لوڈ کرنے اور ایک بلٹ ان ایسٹی میٹر کے ساتھ Scikit-learn میں پہلا مشین لرننگ ماڈل بنانے کے عمل کو دریافت کریں۔
## مشق - آپ کی پہلی Scikit-learn نوٹ بک
> یہ ٹیوٹوریل 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) سے متاثر ہو کر بنایا گیا ہے۔
[![مشین لرننگ کے لیے ابتدائی - Python میں آپ کا پہلا لینیئر ریگریشن پروجیکٹ](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "مشین لرننگ کے لیے ابتدائی - Python میں آپ کا پہلا لینیئر ریگریشن پروجیکٹ")
> 🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ اس مشق کے عمل کو دیکھ سکیں۔
[![نئے آنے والوں کے لیے ML - Python میں آپ کا پہلا لینیئر ریگریشن پروجیکٹ](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "نئے آنے والوں کے لیے ML - Python میں آپ کا پہلا لینیئر ریگریشن پروجیکٹ")
_نوٹ بک.ipynb_ فائل میں، تمام سیلز کو 'trash can' آئیکن دباکر صاف کریں۔
> 🎥 اس مشق کو کرتے ہوئے ایک مختصر ویڈیو کے لیے اوپر تصویر پر کلک کریں۔
اس سیکشن میں، آپ Scikit-learn میں سیکھنے کے مقاصد کے لیے شامل ایک چھوٹے ڈیٹاسیٹ کے ساتھ کام کریں گے جو ذیابیطس کے بارے میں ہے۔ تصور کریں کہ آپ ذیابیطس کے مریضوں کے لیے علاج کی جانچ کرنا چاہتے ہیں۔ مشین لرننگ ماڈلز آپ کو یہ تعین کرنے میں مدد دے سکتے ہیں کہ کون سے مریض علاج کے لیے بہتر ردعمل دیں گے، متغیرات کے امتزاج کی بنیاد پر۔ یہاں تک کہ ایک بہت ہی بنیادی ریگریشن ماڈل، جب بصری بنایا جائے، متغیرات کے بارے میں معلومات دکھا سکتا ہے جو آپ کو اپنے نظریاتی کلینیکل ٹرائلز کو منظم کرنے میں مدد دے سکتے ہیں۔
_notebook.ipynb_ فائل جو اس سبق سے منسلک ہے، کی تمام سیلز کو 'ٹراش کین' آئیکن دباکر صاف کریں۔
✅ ریگریشن کے کئی طریقے ہیں، اور آپ کون سا منتخب کرتے ہیں اس کا انحصار اس جواب پر ہوتا ہے جس کی آپ تلاش کر رہے ہیں۔ اگر آپ کسی دیے گئے عمر کے شخص کے لیے ممکنہ قد کی پیش گوئی کرنا چاہتے ہیں، تو آپ لینیئر ریگریشن استعمال کریں گے، کیونکہ آپ ایک **عددی قدر** تلاش کر رہے ہیں۔ اگر آپ یہ دریافت کرنا چاہتے ہیں کہ آیا کسی قسم کے کھانے کو ویگن سمجھا جانا چاہیے یا نہیں، تو آپ ایک **زمرہ تفویض** تلاش کر رہے ہیں، لہذا آپ لاجسٹک ریگریشن استعمال کریں گے۔ آپ لاجسٹک ریگریشن کے بارے میں بعد میں مزید سیکھیں گے۔ ڈیٹا سے کچھ سوالات کے بارے میں سوچیں، اور ان طریقوں میں سے کون سا زیادہ مناسب ہوگا۔
اس سیکشن میں، آپ اس چھوٹے ڈیٹاسیٹ کے ساتھ کام کریں گے جو ڈایابیٹیز کے بارے میں ہے اور Scikit-learn میں سیکھنے کے لیے بنایا گیا ہے۔ تصور کریں کہ آپ ذیابیطس کے مریضوں کے علاج کی جانچ کرنا چاہتے ہیں۔ مشین لرننگ ماڈلز آپ کو مدد دے سکتے ہیں کہ کون سے مریض علاج کا بہتر جواب دیں گے، مختلف متغیرات کے امتزاج کی بنیاد پر۔ ایک بہت سادہ ریگریشن ماڈل بھی جب بصری شکل میں دکھایا جائے، تو ایسے متغیرات کی معلومات فراہم کر سکتا ہے جو آپ کے نظریاتی کلینیکل ٹرائلز کو بہتر منظم کرنے میں مددگار ہوں۔
✅ ریگریشن کے کئی طریقے ہیں، اور آپ کون سا منتخب کرتے ہیں یہ آپ کے مطلوبہ جواب پر منحصر ہے۔ اگر آپ کسی دیے گئے عمر کے شخص کی ممکنہ قد کی پیش گوئی کرنا چاہتے ہیں، تو آپ لینیئر ریگریشن استعمال کریں گے کیونکہ آپ ایک **عددی قدر** تلاش کر رہے ہیں۔ اگر آپ یہ جاننا چاہتے ہیں کہ کسی کھانے کی قسم ویگن کہلانی چاہیے یا نہیں، تو آپ ایک **زمرہ بندی** چاہتے ہیں، تو آپ لاجسٹک ریگریشن استعمال کریں گے۔ آپ لاجسٹک ریگریشن کے بارے میں بعد میں مزید سیکھیں گے۔ ڈیٹا سے پوچھے جانے والے کچھ سوالات کے بارے میں تھوڑا سوچیں، اور ان میں سے کون سا طریقہ زیادہ مناسب ہو گا۔
آئیے اس کام کو شروع کریں۔
@ -108,13 +109,13 @@ _نوٹ بک.ipynb_ فائل میں، تمام سیلز کو 'trash can' آئی
اس کام کے لیے ہم کچھ لائبریریاں درآمد کریں گے:
- **matplotlib**۔ یہ ایک مفید [گرافنگ ٹول](https://matplotlib.org/) ہے اور ہم اسے لائن پلاٹ بنانے کے لیے استعمال کریں گے۔
- **numpy**۔ [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) Python میں عددی ڈیٹا کو سنبھالنے کے لیے ایک مفید لائبریری ہے۔
- **matplotlib**۔ یہ ایک مفید [گراف بنانے والا آلہ](https://matplotlib.org/) ہے اور ہم اسے لائن پلاٹ بنانے کے لیے استعمال کریں گے۔
- **numpy**۔ [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) Python میں عددی ڈیٹا کے لیے ایک مفید لائبریری ہے۔
- **sklearn**۔ یہ [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) لائبریری ہے۔
اپنے کاموں میں مدد کے لیے کچھ لائبریریاں درآمد کریں۔
اپنے کام کے لیے کچھ لائبریریاں درآمد کریں۔
1. درج ذیل کوڈ لکھ کر درآمدات شامل کریں:
1. درج ذیل کوڈ ٹائپ کر کے امپورٹس شامل کریں:
```python
import matplotlib.pyplot as plt
@ -122,24 +123,24 @@ _نوٹ بک.ipynb_ فائل میں، تمام سیلز کو 'trash can' آئی
from sklearn import datasets, linear_model, model_selection
```
اوپر آپ `matplotlib`، `numpy` درآمد کر رہے ہیں اور آپ `datasets`، `linear_model` اور `model_selection` کو `sklearn` سے درآمد کر رہے ہیں۔ `model_selection` ڈیٹا کو ٹریننگ اور ٹیسٹ سیٹس میں تقسیم کرنے کے لیے استعمال ہوتا ہے۔
اوپر آپ `matplotlib`, `numpy` درآمد کر رہے ہیں اور `sklearn` سے `datasets`, `linear_model` اور `model_selection` درآمد کر رہے ہیں۔ `model_selection` ڈیٹا کو ٹریننگ اور ٹیسٹ سیٹ میں تقسیم کرنے کے لیے استعمال ہوتا ہے۔
### ذیابیطس ڈیٹاسیٹ
### ذیابیطس کا ڈیٹاسیٹ
بلٹ ان [ذیابیطس ڈیٹاسیٹ](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) میں ذیابیطس کے ارد گرد 442 نمونے شامل ہیں، جن میں 10 فیچر متغیرات شامل ہیں، جن میں سے کچھ یہ ہیں:
ان بلٹ [ذیابیطس ڈیٹاسیٹ](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) میں ذیابیطس کے بارے میں 442 نمونے شامل ہیں، جن میں 10 فیچر متغیرات ہیں، جن میں سے کچھ یہ ہیں:
- عمر: سالوں میں عمر
- bmi: باڈی ماس انڈیکس
- عمر: عمر سالوں میں
- bmi: جسمانی ماس انڈیکس
- bp: اوسط بلڈ پریشر
- s1 tc: ٹی سیلز (سفید خون کے خلیوں کی ایک قسم)
- s1 tc: ٹی سیلز (سفید خون کے خلیات کی ایک قسم)
✅ اس ڈیٹاسیٹ میں ذیابیطس کے ارد گرد تحقیق کے لیے ایک اہم فیچر متغیر کے طور پر 'جنس' کا تصور شامل ہے۔ بہت سے طبی ڈیٹاسیٹس میں اس قسم کی بائنری درجہ بندی شامل ہوتی ہے۔ اس بارے میں تھوڑا سوچیں کہ اس طرح کی درجہ بندی علاج سے آبادی کے کچھ حصوں کو کیسے خارج کر سکتی ہے۔
✅ اس ڈیٹاسیٹ میں 'جنس' کا تصور بھی بطور فیچر متغیر شامل ہے جو ذیابیطس کی تحقیق کے لیے اہم ہے۔ بہت سے طبی ڈیٹاسیٹس میں اس قسم کی بائنری درجہ بندی شامل ہوتی ہے۔ تھوڑا سوچیں کہ اس طرح کی درجہ بندیاں کسی آبادی کے کچھ حصے کو علاج سے کیسے خارج کر سکتی ہیں۔
اب، X اور y ڈیٹا لوڈ کریں۔
> 🎓 یاد رکھیں، یہ سپروائزڈ لرننگ ہے، اور ہمیں ایک نامزد 'y' ہدف کی ضرورت ہے۔
ایک نئے کوڈ سیل میں، ذیابیطس ڈیٹاسیٹ کو `load_diabetes()` کال کرکے لوڈ کریں۔ ان پٹ `return_X_y=True` اشارہ دیتا ہے کہ `X` ایک ڈیٹا میٹرکس ہوگا، اور `y` ریگریشن ہدف ہوگا۔
ایک نئے کوڈ سیل میں، `load_diabetes()` کال کر کے ذیابیطس ڈیٹاسیٹ لوڈ کریں۔ ان پٹ `return_X_y=True` سے اشارہ ملتا ہے کہ `X` ایک ڈیٹا میٹرکس ہوگا، اور `y` ریگریشن کا ہدف ہوگا۔
1. ڈیٹا میٹرکس کی شکل اور اس کے پہلے عنصر کو دکھانے کے لیے کچھ پرنٹ کمانڈز شامل کریں:
@ -149,9 +150,9 @@ _نوٹ بک.ipynb_ فائل میں، تمام سیلز کو 'trash can' آئی
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 @@ _نوٹ بک.ipynb_ فائل میں، تمام سیلز کو 'trash can' آئی
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
✅ ڈیٹا اور ریگریشن ہدف کے درمیان تعلق کے بارے میں تھوڑا سوچیں۔ لینیئر ریگریشن فیچر X اور ہدف متغیر y کے درمیان تعلقات کی پیش گوئی کرتا ہے۔ کیا آپ ذیابیطس ڈیٹاسیٹ کے لیے [ہدف](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) کو دستاویزات میں تلاش کر سکتے ہیں؟ یہ ڈیٹاسیٹ کیا ظاہر کر رہا ہے، دیے گئے ہدف کے ساتھ؟
تھوڑا سوچیں کہ ڈیٹا اور ریگریشن ہدف کے درمیان کیا تعلق ہے۔ لینیئر ریگریشن خصوصیت X اور ہدف متغیر y کے درمیان تعلقات کی پیش گوئی کرتا ہے۔ کیا آپ دستاویزات میں ذیابیطس ڈیٹاسیٹ کے [ہدف](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) کو تلاش کر سکتے ہیں؟ یہ ڈیٹاسیٹ اس ہدف کے تناظر میں کیا مظاہرہ کر رہا ہے؟
2. اگلا، اس ڈیٹاسیٹ کے ایک حصے کو منتخب کریں تاکہ اسے پلاٹ کیا جا سکے، ڈیٹاسیٹ کے تیسرے کالم کو منتخب کرکے۔ آپ `:` آپریٹر کا استعمال کرکے تمام قطاریں منتخب کر سکتے ہیں، اور پھر انڈیکس (2) کا استعمال کرکے تیسرے کالم کو منتخب کر سکتے ہیں۔ آپ ڈیٹا کو 2D ارے میں تبدیل کرنے کے لیے `reshape(n_rows, n_columns)` کا استعمال بھی کر سکتے ہیں - جیسا کہ پلاٹنگ کے لیے ضروری ہے۔ اگر ایک پیرامیٹر -1 ہے، تو متعلقہ جہت خود بخود حساب کی جاتی ہے۔
2. اب، اس ڈیٹاسیٹ کے ایک حصے کو منتخب کریں تاکہ آپ اسے پلاٹ کر سکیں، اس کے لیے ڈیٹاسیٹ کا تیسرا کالم منتخب کریں۔ آپ `:` آپریٹر استعمال کر کے تمام قطاریں منتخب کر سکتے ہیں، اور پھر انڈیکس (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. اب آپ اپنے ماڈل کو تربیت دینے کے لیے تیار ہیں! لینیئر ریگریشن ماڈل لوڈ کریں اور `model.fit()` استعمال کر کے اپنے X اور y کے ٹریننگ سیٹ پر اس کی تربیت کریں:
```python
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
```
`model.fit()` ایک فنکشن ہے جو آپ کو TensorFlow جیسے کئی ML لائبریریوں میں نظر آئے گا۔
`model.fit()` ایک فنکشن ہے جو آپ کئی ML لائبریریوں جیسے 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 @@ _نوٹ بک.ipynb_ فائل میں، تمام سیلز کو 'trash can' آئی
plt.show()
```
![ذیابیطس کے ارد گرد ڈیٹا پوائنٹس دکھانے والا ایک اسکیٹر پلاٹ](../../../../2-Regression/1-Tools/images/scatterplot.png)
✅ سوچیں کہ یہاں کیا ہو رہا ہے۔ ایک سیدھی لکیر کئی چھوٹے ڈیٹا پوائنٹس کے درمیان سے گزر رہی ہے، لیکن یہ اصل میں کیا کر رہی ہے؟ کیا آپ دیکھ سکتے ہیں کہ آپ اس لکیر کو کیسے استعمال کر سکتے ہیں تاکہ اندازہ لگا سکیں کہ ایک نیا، غیر دیکھے گئے ڈیٹا پوائنٹ کو پلاٹ کے y محور کے ساتھ کس تعلق میں ہونا چاہیے؟ اس ماڈل کے عملی استعمال کو الفاظ میں بیان کرنے کی کوشش کریں۔
![ذیابیطس کے گرد ڈیٹا پوائنٹس دکھانے والا اسکٹرپلاٹ](../../../../translated_images/ur/scatterplot.ad8b356bcbb33be6.webp)
مبارک ہو، آپ نے اپنا پہلا لینیئر ریگریشن ماڈل بنایا، اس کے ساتھ ایک پیش گوئی کی، اور اسے ایک پلاٹ میں دکھایا!
✅ یہاں جو کچھ ہو رہا ہے اس کے بارے میں تھوڑی سوچیں۔ ایک سیدھی لائن بہت سے چھوٹے ڈیٹا پوائنٹس کے ایک راستے سے گزر رہی ہے، لیکن یہ بالکل کیا کر رہی ہے؟ کیا آپ دیکھ سکتے ہیں کہ آپ کو اس لائن کو کیسے استعمال کرنا چاہیے تاکہ پیش گوئی کی جا سکے کہ ایک نیا، نا دیکھا ہوا ڈیٹا پوائنٹ پلاٹ کی y محور کے لحاظ سے کہاں فٹ ہوگا؟ اس ماڈل کے عملی استعمال کو الفاظ میں بیان کرنے کی کوشش کریں۔
مبارک ہو، آپ نے اپنا پہلا لینیئر ریگریشن ماڈل تیار کیا، اس کے ساتھ پیش گوئی کی، اور اسے ایک پلاٹ میں دکھایا!
---
## 🚀چیلنج
اس ڈیٹا سیٹ سے ایک مختلف متغیر کو پلاٹ کریں۔ اشارہ: اس لائن کو ایڈٹ کریں: `X = X[:,2]`۔ اس ڈیٹا سیٹ کے ہدف کو دیکھتے ہوئے، آپ ذیابیطس کی بیماری کے ارتقاء کے بارے میں کیا دریافت کر سکتے ہیں؟
## [لیکچر کے بعد کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
اس ڈیٹا سیٹ سے کوئی مختلف متغیر پلاٹ کریں۔ اشارہ: اس لائن کو ترمیم کریں: `X = X[:,2]`۔ اس ڈیٹا سیٹ کے ہدف کے پیش نظر، آپ ذیابیطس کو ایک بیماری کے طور پر کس طرح ترقی پذیر دیکھ سکتے ہیں؟
## [لیکچر کے بعد کوئز](https://ff-quizzes.netlify.app/en/ml/)
## جائزہ اور خود مطالعہ
اس ٹیوٹوریل میں، آپ نے سادہ لینیئر ریگریشن کے ساتھ کام کیا، نہ کہ یونیویریٹ یا ملٹیپل لینیئر ریگریشن کے ساتھ۔ ان طریقوں کے درمیان فرق کے بارے میں تھوڑا پڑھیں، یا [اس ویڈیو](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) کو دیکھیں۔
اس ٹیوٹوریل میں، آپ نے سادہ لینیئر ریگریشن کے ساتھ کام کیا، نہ کہ یونی وریٹ یا ملٹی پل لینیئر ریگریشن کے ساتھ۔ ان طریقوں کے درمیان فرق کے بارے میں تھوڑا پڑھیں، یا [اس ویڈیو](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) کو دیکھیں۔
ریگریشن کے تصور کے بارے میں مزید پڑھیں اور سوچیں کہ اس تکنیک کے ذریعے کس قسم کے سوالات کے جواب دیے جا سکتے ہیں۔ اپنی سمجھ کو گہرا کرنے کے لیے یہ [ٹیوٹوریل](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) لیں۔
ریگریشن کے تصور کے بارے میں مزید پڑھیں اور سوچیں کہ اس تکنیک سے کس قسم کے سوالات کے جوابات دیے جا سکتے ہیں۔ اپنی سمجھ کو گہرا کرنے کے لیے [یہ ٹیوٹوریل](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) کریں۔
## اسائنمنٹ
@ -226,5 +228,7 @@ _نوٹ بک.ipynb_ فائل میں، تمام سیلز کو 'trash can' آئی
---
**ڈسکلیمر**:
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**ڈس کلیمر**:
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,62 +1,62 @@
# سکائٹ لرن کے ذریعے ریگریشن ماڈل بنائیں: ڈیٹا تیار کریں اور بصری بنائیں
# Scikit-learn استعمال کرتے ہوئے ریگریشن ماڈل بنائیں: ڈیٹا کی تیاری اور بصری نمائندگی
![ڈیٹا بصری انفوگرافک](../../../../2-Regression/2-Data/images/data-visualization.png)
![ڈیٹا کی بصری نمائندگی کا انفو گرافک](../../../../translated_images/ur/data-visualization.54e56dded7c1a804.webp)
انفوگرافک از [دسانی مڈیپالی](https://twitter.com/dasani_decoded)
انفوگرافک از [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [لیکچر سے پہلے کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
## [پری لیکچر کوئز](https://ff-quizzes.netlify.app/en/ml/)
> ### [یہ سبق R میں دستیاب ہے!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
## تعارف
اب جب کہ آپ سکائٹ لرن کے ساتھ مشین لرننگ ماڈل بنانے کے لیے ضروری ٹولز کے ساتھ تیار ہیں، آپ اپنے ڈیٹا سے سوالات پوچھنے کے لیے تیار ہیں۔ جب آپ ڈیٹا کے ساتھ کام کرتے ہیں اور ایم ایل حل لاگو کرتے ہیں، تو یہ سمجھنا بہت ضروری ہے کہ اپنے ڈیٹا سیٹ کی صلاحیتوں کو صحیح طریقے سے کھولنے کے لیے صحیح سوال کیسے پوچھا جائے۔
اب جب کہ آپ کے پاس Scikit-learn کے ساتھ مشین لرننگ ماڈل بنانے کے لیے درکار آلات موجود ہیں، آپ اپنے ڈیٹا سے سوالات کرنا شروع کرنے کے لیے تیار ہیں۔ جب آپ ڈیٹا کے ساتھ کام کرتے ہیں اور مشین لرننگ کے حل لاگو کرتے ہیں، تو یہ سمجھنا بہت ضروری ہے کہ صحیح سوال کیسے پوچھا جائے تاکہ آپ کے ڈیٹا سیٹ کی صلاحیتوں کو مناسب طریقے سے کھولا جا سکے۔
اس سبق میں، آپ سیکھیں گے:
- ماڈل بنانے کے لیے اپنے ڈیٹا کو کیسے تیار کریں۔
- ڈیٹا بصری کے لیے میٹپلاٹ لائبریری کا استعمال کیسے کریں۔
- اپنے ماڈل بنانے کے لیے ڈیٹا کیسے تیار کریں۔
- ڈیٹا کی بصری نمائندگی کے لیے Matplotlib کا استعمال کیسے کریں۔
- زیادہ موثر ڈیٹا بصری نمائندگی کے لیے Seaborn کا استعمال کیسے کریں۔
## اپنے ڈیٹا سے صحیح سوال پوچھنا
جو سوال آپ کے جواب کا منتظر ہے وہ طے کرے گا کہ آپ کس قسم کے ایم ایل الگورتھم استعمال کریں گے۔ اور جو جواب آپ کو واپس ملے گا اس کا معیار آپ کے ڈیٹا کی نوعیت پر بہت زیادہ منحصر ہوگا۔
جس سوال کا جواب آپ چاہتے ہیں وہ اس بات کا تعین کرے گا کہ آپ کون سے مشین لرننگ الگورتھمز استعمال کریں گے۔ اور جو جواب آپ کو ملے گا اس کی کیفیت آپ کے ڈیٹا کی نوعیت پر بہت زیادہ منحصر ہوگی۔
اس سبق کے لیے فراہم کردہ [ڈیٹا](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) پر ایک نظر ڈالیں۔ آپ اس .csv فائل کو VS کوڈ میں کھول سکتے ہیں۔ ایک فوری نظر سے پتہ چلتا ہے کہ خالی جگہیں ہیں اور اس میں سٹرنگز اور عددی ڈیٹا کا امتزاج ہے۔ ایک عجیب کالم بھی ہے جسے 'پیکیج' کہا جاتا ہے جہاں ڈیٹا 'سیکس'، 'بِنز' اور دیگر اقدار کے درمیان ملا ہوا ہے۔ حقیقت میں، یہ ڈیٹا تھوڑا سا گڑبڑ ہے۔
اس سبق کے لیے فراہم کردہ [ڈیٹا](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 "مشین لرننگ کے ابتدائی افراد کے لیے - ڈیٹا سیٹ کا تجزیہ اور صفائی کیسے کریں")
[![بیگنرز کے لیے ML - ڈیٹا سیٹ کا تجزیہ اور صفائی کیسے کریں](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "بیگنرز کے لیے ML - ڈیٹا سیٹ کا تجزیہ اور صفائی کیسے کریں")
> 🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ اس سبق کے لیے ڈیٹا تیار کرنے پر ایک مختصر ویڈیو دیکھ سکیں۔
> 🎥 اس سبق کے لیے ڈیٹا کی تیاری کے طریقہ کار پر مختصر ویڈیو دیکھنے کے لیے اوپر دی گئی تصویر پر کلک کریں۔
حقیقت میں، یہ بہت عام نہیں ہے کہ آپ کو ایک ایسا ڈیٹا سیٹ دیا جائے جو ایم ایل ماڈل بنانے کے لیے مکمل طور پر تیار ہو۔ اس سبق میں، آپ سیکھیں گے کہ معیاری پائتھن لائبریریوں کا استعمال کرتے ہوئے ایک خام ڈیٹا سیٹ کو کیسے تیار کیا جائے۔ آپ ڈیٹا کو بصری بنانے کے مختلف طریقے بھی سیکھیں گے۔
حقیقت میں، یہ بہت عام نہیں کہ آپ کو ایسا ڈیٹا سیٹ ملے جو بالکل استعمال کے لیے تیار ہو اور اسے فوراً مشین لرننگ ماڈل بنانے کے لیے استعمال کیا جا سکے۔ اس سبق میں، آپ سیکھیں گے کہ کس طرح عام Python لائبریریوں کا استعمال کرتے ہوئے خام ڈیٹا سیٹ کو تیار کیا جائے۔ آپ مختلف تکنیکیں بھی سیکھیں گے جو ڈیٹا کی بصری نمائندگی کے لیے استعمال ہوتی ہیں۔
## کیس اسٹڈی: 'کدو کی مارکیٹ'
## کیس اسٹڈی: 'کدو کا بازار'
اس فولڈر میں آپ کو روٹ `data` فولڈر میں ایک .csv فائل ملے گی جسے [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) سے نکالا گیا ہے، جو کہ ریاستہائے متحدہ کے محکمہ زراعت کی طرف سے تقسیم کیا گیا ہے۔
اس فولڈر میں آپ کو روٹ `data` فولڈر کے اندر [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) نامی ایک .csv فائل ملے گی جس میں کدو کے بازار کے بارے میں 1757 لائنیں ہیں، جو شہر کے لحاظ سے گروپ کی گئی ہیں۔ یہ خام ڈیٹا ہے جو امریکہ کی زرعی وزارت کے [اسپیشلٹی کروپس ٹرمینل مارکیٹس اسٹینڈرڈ رپورٹس](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) سے نکالا گیا ہے۔
### ڈیٹا تیار کرنا
### ڈیٹا کی تیاری
یہ ڈیٹا عوامی ڈومین میں ہے۔ اسے USDA ویب سائٹ سے کئی الگ الگ فائلوں میں، ہر شہر کے لیے، ڈاؤن لوڈ کیا جا سکتا ہے۔ بہت زیادہ الگ الگ فائلوں سے بچنے کے لیے، ہم نے تمام شہر کے ڈیٹا کو ایک اسپریڈشیٹ میں جوڑ دیا ہے، اس طرح ہم نے پہلے ہی ڈیٹا کو تھوڑا سا _تیار_ کر لیا ہے۔ اگلا، آئیے ڈیٹا کو قریب سے دیکھتے ہیں۔
یہ ڈیٹا عوامی دسترس میں ہے۔ اسے USDA کی ویب سائٹ سے ہر شہر کے لیے الگ الگ فائلوں میں ڈاؤن لوڈ کیا جا سکتا ہے۔ بہت سی الگ فائلز سے بچنے کے لیے ہم نے تمام شہر کے ڈیٹا کو ایک اسپریڈشیٹ میں جوڑ دیا ہے، لہذا ہم نے کچھ حد تک ڈیٹا کو پہلے ہی _تیار_ کر لیا ہے۔ آئیں اب ڈیٹا کو قریب سے دیکھتے ہیں۔
### کدو کا ڈیٹا - ابتدائی نتائج
### کدو کے ڈیٹا پر ابتدائی نتائج
آپ اس ڈیٹا کے بارے میں کیا نوٹ کرتے ہیں؟ آپ نے پہلے ہی دیکھا ہے کہ اس میں سٹرنگز، نمبرز، خالی جگہیں اور عجیب اقدار کا امتزاج ہے جنہیں آپ کو سمجھنا ہوگا۔
آپ اس ڈیٹا سے ریگریشن تکنیک کا استعمال کرتے ہوئے کون سا سوال پوچھ سکتے ہیں؟ کیا "کسی دیے گئے مہینے کے دوران فروخت کے لیے کدو کی قیمت کی پیش گوئی کریں" مناسب ہوگا؟ ڈیٹا کو دوبارہ دیکھتے ہوئے، آپ کو ڈیٹا اسٹرکچر بنانے کے لیے کچھ تبدیلیاں کرنے کی ضرورت ہے جو اس کام کے لیے ضروری ہے۔
آپ نے اس ڈیٹا میں کیا دیکھا؟ آپ نے پہلے ہی دیکھا تھا کہ یہاں سٹرنگز، نمبرز، خالی خانے اور عجیب و غریب اقدار کا مرکب ہے جنہیں آپ کو سمجھنا ہے۔
آپ اس ڈیٹا سے ریگریشن تکنیک استعمال کرتے ہوئے کیا سوال پوچھ سکتے ہیں؟ مثلا "کسی دیے گئے مہینے میں فروخت کے لیے کدو کی قیمت کی پیش گوئی۔" دوبارہ ڈیٹا کو دیکھتے ہوئے، آپ کو کام کے لیے مطلوبہ ڈیٹا سٹرکچر بنانے کے لیے کچھ تبدیلیاں کرنی ہوں گی۔
## مشق - کدو کے ڈیٹا کا تجزیہ کریں
آئیے [پینڈاز](https://pandas.pydata.org/) استعمال کریں، (اس کا نام `Python Data Analysis` کے لیے ہے) جو ڈیٹا کو شکل دینے کے لیے ایک بہت مفید ٹول ہے، تاکہ اس کدو کے ڈیٹا کا تجزیہ اور تیاری کی جا سکے۔
چلیے [Pandas](https://pandas.pydata.org/) استعمال کرتے ہیں، (یہ نام `Python Data Analysis` کے لیے مختصر ہے) جو ڈیٹا کی تشکیل کے لیے بہت مفید آلہ ہے، تاکہ اس کدو کے ڈیٹا کا تجزیہ کریں اور اسے تیار کریں۔
### پہلے، گمشدہ تاریخوں کی جانچ کریں
آپ کو پہلے گمشدہ تاریخوں کی جانچ کرنے کے لیے اقدامات کرنے کی ضرورت ہوگی:
آپ کو سب سے پہلے گمشدہ تاریخوں کی جانچ کرنے کے اقدامات کرنے ہوں گے:
1. تاریخوں کو مہینے کی شکل میں تبدیل کریں (یہ امریکی تاریخیں ہیں، لہذا فارمیٹ `MM/DD/YYYY` ہے)۔
2. مہینے کو ایک نئے کالم میں نکالیں۔
1. تاریخوں کو مہینے کے فارمیٹ میں تبدیل کریں (یہ امریکی تاریخیں ہیں، لہٰذا فارمیٹ `MM/DD/YYYY` ہے)۔
2. مہینہ ایک نئے کالم میں نکالیں۔
_نوٹ بک.ipynb_ فائل کو ویژول اسٹوڈیو کوڈ میں کھولیں اور اسپریڈشیٹ کو ایک نئے پینڈاز ڈیٹا فریم میں درآمد کریں۔
Visual Studio Code میں _notebook.ipynb_ فائل کھولیں اور اسپریڈشیٹ کو Pandas کے نئے dataframe میں درآمد کریں۔
1. پہلے پانچ قطاروں کو دیکھنے کے لیے `head()` فنکشن استعمال کریں۔
1. `head()` فنکشن کا استعمال کرتے ہوئے پہلے پانچ قطاریں دیکھیں۔
```python
import pandas as pd
@ -64,30 +64,30 @@ _نوٹ بک.ipynb_ فائل کو ویژول اسٹوڈیو کوڈ میں کھو
pumpkins.head()
```
✅ آپ آخری پانچ قطاروں کو دیکھنے کے لیے کون سا فنکشن استعمال کریں گے؟
✅ آخری پانچ قطاریں دیکھنے کے لیے کونسا فنکشن استعمال کریں گے؟
1. موجودہ ڈیٹا فریم میں گمشدہ ڈیٹا کی جانچ کریں:
1. چیک کریں کہ موجودہ dataframe میں کوئی گمشدہ ڈیٹا ہے یا نہیں:
```python
pumpkins.isnull().sum()
```
گمشدہ ڈیٹا موجود ہے، لیکن شاید یہ موجودہ کام کے لیے اہم نہ ہو۔
کچھ ڈیٹا غائب ہے، لیکن شاید یہ کام کے لیے مسئلہ نہ بنے۔
1. اپنے ڈیٹا فریم کو کام کرنے میں آسان بنانے کے لیے، صرف وہی کالم منتخب کریں جن کی آپ کو ضرورت ہے، `loc` فنکشن کا استعمال کرتے ہوئے جو اصل ڈیٹا فریم سے قطاروں (پہلا پیرامیٹر) اور کالمز (دوسرا پیرامیٹر) کا ایک گروپ نکالتا ہے۔ نیچے دیے گئے کیس میں اظہار `:` کا مطلب ہے "تمام قطاریں"۔
1. اپنے dataframe کو آسان بنانے کے لیے، صرف وہ کالم منتخب کریں جن کی آپ کو ضرورت ہے، `loc` فنکشن استعمال کریں جو اصل dataframe سے مخصوص قطاریں (پہلا پیرا میٹر) اور کالمز (دوسرا پیرا میٹر) نکالتا ہے۔ نیچے والے اظہار `:` کا مطلب ہے "تمام قطاریں"۔
```python
columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']
pumpkins = pumpkins.loc[:, columns_to_select]
```
### دوسرا، کدو کی اوسط قیمت کا تعین کریں
### دوسرا، کدو کی اوسط قیمت معلوم کریں
سوچیں کہ کسی دیے گئے مہینے میں کدو کی اوسط قیمت کا تعین کیسے کریں۔ اس کام کے لیے آپ کون سے کالمز منتخب کریں گے؟ اشارہ: آپ کو 3 کالمز کی ضرورت ہوگی۔
سوچیں کہ کسی مہینے میں کدو کی اوسط قیمت کیسے معلوم کی جائے۔ اس کام کے لیے کون سے کالم منتخب کریں گے؟ اشارہ: آپ کو 3 کالم چاہئیں۔
حل: `Low Price` اور `High Price` کالمز کی اوسط لے کر نئے Price کالم کو بھرنا، اور Date کالم کو صرف مہینے دکھانے کے لیے تبدیل کرنا۔ خوش قسمتی سے، اوپر دی گئی جانچ کے مطابق، تاریخوں یا قیمتوں کے لیے کوئی گمشدہ ڈیٹا نہیں ہے۔
حل: `Low Price` اور `High Price` کالمز کی اوسط لے کر نئے `Price` کالم کو بھریں، اور `Date` کالم کو مہینے تک محدود کریں۔ خوش قسمتی سے، اوپر چیک کے مطابق تاریخوں یا قیمتوں کے لیے کوئی گمشدہ ڈیٹا نہیں ہے۔
1. اوسط کا حساب لگانے کے لیے، درج ذیل کوڈ شامل کریں:
1. اوسط نکالنے کے لیے، درج ذیل کوڈ شامل کریں:
```python
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2
@ -96,37 +96,37 @@ _نوٹ بک.ipynb_ فائل کو ویژول اسٹوڈیو کوڈ میں کھو
```
✅ آپ `print(month)` کا استعمال کرتے ہوئے کسی بھی ڈیٹا کو چیک کرنے کے لیے پرنٹ کر سکتے ہیں۔
✅ آپ چاہیں تو `print(month)` سے کسی بھی ڈیٹا کی پڑتال کر سکتے ہیں۔
2. اب، اپنے تبدیل شدہ ڈیٹا کو ایک نئے پینڈاز ڈیٹا فریم میں کاپی کریں:
2. اب اپنے تبدیل شدہ ڈیٹا کو ایک نئے Pandas dataframe میں کاپی کریں:
```python
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
```
اپنے ڈیٹا فریم کو پرنٹ کرنے سے آپ کو ایک صاف، ترتیب شدہ ڈیٹا سیٹ دکھائی دے گا جس پر آپ اپنا نیا ریگریشن ماڈل بنا سکتے ہیں۔
اپنے dataframe کو پرنٹ کرنے سے آپ ایک صاف اور منظم ڈیٹا سیٹ دیکھیں گے جس پر آپ اپنا نیا ریگریشن ماڈل بنا سکتے ہیں۔
### لیکن ٹھہریں! یہاں کچھ عجیب ہے
### لیکن رُکیں! یہاں کچھ عجیب ہے
اگر آپ `Package` کالم کو دیکھیں، تو کدو مختلف کنفیگریشنز میں فروخت ہوتے ہیں۔ کچھ '1 1/9 بسشل' پیمائش میں فروخت ہوتے ہیں، اور کچھ '1/2 بسشل' پیمائش میں، کچھ فی کدو، کچھ فی پاؤنڈ، اور کچھ بڑے بکسوں میں مختلف چوڑائیوں کے ساتھ۔
اگر آپ `Package` کالم دیکھیں تو کدو مختلف اقسام میں فروخت ہوتے ہیں۔ کچھ '1 1/9 بسہل' میں، کچھ '1/2 بسہل' میں، کچھ ہر کدو کے حساب سے، کچھ ہر پاؤنڈ کے حساب سے، اور کچھ مختلف چوڑائی والے بڑے ڈبے میں فروخت ہوتے ہیں۔
> کدو کو مستقل طور پر وزن کرنا بہت مشکل لگتا ہے
> کدو کو مسلسل وزن کرنا بہت مشکل لگتا ہے
اصل ڈیٹا میں کھودتے ہوئے، یہ دلچسپ ہے کہ کچھ بھی جس کا `Unit of Sale` 'EACH' یا 'PER BIN' کے برابر ہے، اس کے ساتھ `Package` قسم فی انچ، فی بن، یا 'each' بھی ہے۔ کدو کو مستقل طور پر وزن کرنا بہت مشکل لگتا ہے، لہذا آئیے انہیں فلٹر کرتے ہیں اور صرف وہ کدو منتخب کرتے ہیں جن کے `Package` کالم میں 'bushel' کا سٹرنگ موجود ہے۔
اصل ڈیٹا میں دیکھیں تو، کوئی بھی جس کی `Unit of Sale` 'EACH' یا 'PER BIN' ہے، اس کا `Package` قسم انچ کے مطابق، بن کے حساب سے یا 'each' ہے۔ کدو کو مسلسل وزن کرنا بہت دشوار ہے، اس لیے ہم صرف ان کدوں کو فلٹر کریں گے جن کے `Package` کالم میں 'bushel' کے الفاظ شامل ہوں۔
1. فائل کے اوپر، ابتدائی .csv درآمد کے تحت ایک فلٹر شامل کریں:
1. فائل کے اوپر، ابتدائی .csv درآمد کے نیچے فلٹر شامل کریں:
```python
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
```
اگر آپ اب ڈیٹا پرنٹ کریں، تو آپ دیکھ سکتے ہیں کہ آپ کو صرف وہ 415 یا اس سے زیادہ قطاریں مل رہی ہیں جن میں بسشل کے ذریعے کدو شامل ہیں۔
اگر اب آپ ڈیٹا پرنٹ کریں، تو آپ صرف تقریباً 415 قطاریں دیکھیں گے جو بسہل کے حساب سے کدوں کی ہیں۔
### لیکن ٹھہریں! کرنے کے لیے ایک اور چیز ہے
### لیکن رُکیں! ایک اور کام باقی ہے
کیا آپ نے نوٹ کیا کہ بسشل کی مقدار ہر قطار میں مختلف ہوتی ہے؟ آپ کو قیمتوں کو معمول پر لانے کی ضرورت ہے تاکہ آپ بسشل کے حساب سے قیمت دکھا سکیں، لہذا بسشل پیمائش کو معیاری بنانے کے لیے کچھ حساب کریں۔
کیا آپ نے محسوس کیا کہ ہر قطار میں بسہل کی مقدار مختلف ہے؟ آپ کو قیمتوں کو معیاری بنانے کی ضرورت ہے تاکہ قیمت فی بسہل ظاہر ہو، اس لیے کچھ ریاضی کریں۔
1. ان لائنز کو نئے_pumpkins ڈیٹا فریم بنانے والے بلاک کے بعد شامل کریں:
1. نئے `new_pumpkins` dataframe بنانے والے بلاک کے بعد یہ سطریں شامل کریں:
```python
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)
@ -134,38 +134,38 @@ _نوٹ بک.ipynb_ فائل کو ویژول اسٹوڈیو کوڈ میں کھو
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
```
✅ [دی سپروس ایٹس](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) کے مطابق، بسشل کا وزن پیداوار کی قسم پر منحصر ہوتا ہے، کیونکہ یہ حجم کی پیمائش ہے۔ "مثال کے طور پر، ٹماٹروں کا ایک بسشل 56 پاؤنڈ وزن کا ہونا چاہیے... پتوں اور سبزوں میں کم وزن کے ساتھ زیادہ جگہ لگتی ہے، لہذا پالک کا ایک بسشل صرف 20 پاؤنڈ ہے۔" یہ سب کافی پیچیدہ ہے! آئیے بسشل سے پاؤنڈ میں تبدیلی کرنے کی زحمت نہ کریں، اور اس کے بجائے بسشل کے حساب سے قیمت لگائیں۔ کدو کے بسشل کا مطالعہ کرنے سے، تاہم، یہ ظاہر ہوتا ہے کہ اپنے ڈیٹا کی نوعیت کو سمجھنا کتنا اہم ہے!
✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) کے مطابق، بسہل کا وزن فصل کی قسم پر منحصر ہے کیونکہ یہ حجم کی پیمائش ہے۔ "مثال کے طور پر ٹماٹر کا ایک بسہل 56 پاؤنڈ وزنی ہوتا ہے... پتے اور سبزیاں کم وزن کے ساتھ زیادہ جگہ لیتی ہیں، اس لیے پالک کا بسہل صرف 20 پاؤنڈ ہوتا ہے۔" یہ سب کافی پیچیدہ ہے! آئیے بسہل کو پاؤنڈ میں تبدیل کرنے کی فکر نہ کریں اور بسہل کی بنیاد پر قیمت لگائیں۔ کدوں کے بسہل کے اس مطالعے سے یہ ظاہر ہوتا ہے کہ اپنے ڈیٹا کی نوعیت کو سمجھنا کتنا ضروری ہے!
اب، آپ بسشل پیمائش کی بنیاد پر یونٹ کے حساب سے قیمتوں کا تجزیہ کر سکتے ہیں۔ اگر آپ ڈیٹا کو ایک بار پھر پرنٹ کریں، تو آپ دیکھ سکتے ہیں کہ یہ معیاری ہو گیا ہے۔
اب آپ بسہل کی پیمائش کی بنیاد پر قیمتوں کا تجزیہ کر سکتے ہیں۔ اگر آپ دوبارہ ڈیٹا پرنٹ کریں تو دیکھیں گے کہ یہ معیاری ہو چکا ہے۔
✅ کیا آپ نے نوٹ کیا کہ آدھے بسشل کے ذریعے فروخت ہونے والے کدو بہت مہنگے ہیں؟ کیا آپ اس کی وجہ معلوم کر سکتے ہیں؟ اشارہ: چھوٹے کدو بڑے کدو کے مقابلے میں بہت مہنگے ہیں، شاید اس لیے کہ بسشل میں ان کی تعداد بہت زیادہ ہوتی ہے، دیے گئے ایک بڑے کھوکھلے پائی کدو کے استعمال شدہ جگہ کے مقابلے۔
✅ کیا آپ نے محسوس کیا کہ آدھے بسہل کے حساب سے فروخت ہونے والے کدو بہت مہنگے ہیں؟ کیا آپ وجہ معلوم کر سکتے ہیں؟ اشارہ: چھوٹے کدو بڑے کدو کی نسبت بہت زیادہ مہنگے ہوتے ہیں، شاید اس لیے کہ ایک بسہل میں ان کی تعداد زیادہ ہوتی ہے، جبکہ بڑے گول کدو کے خالی حصے کی جگہ استعمال نہیں ہوتی۔
## بصری حکمت عملی
## بصری نمائندگی کی حکمت عملیاں
ڈیٹا سائنسدان کا کردار ڈیٹا کے معیار اور نوعیت کو ظاہر کرنا ہے جس کے ساتھ وہ کام کر رہے ہیں۔ ایسا کرنے کے لیے، وہ اکثر دلچسپ بصری تخلیق کرتے ہیں، جیسے پلاٹس، گرافز، اور چارٹس، جو ڈیٹا کے مختلف پہلوؤں کو ظاہر کرتے ہیں۔ اس طرح، وہ بصری طور پر تعلقات اور خلا کو ظاہر کر سکتے ہیں جو بصورت دیگر دریافت کرنا مشکل ہوتا ہے۔
ڈیٹا سائنسدان کا ایک حصہ ہوتا ہے کہ وہ کام کے ڈیٹا کی نوعیت اور معیار کو ظاہر کرے۔ اس کے لیے وہ اکثر دلچسپ بصری نمائندگیاں یا پلاٹس، گرافز، اور چارٹس بناتے ہیں جو مختلف پہلوؤں کو دکھاتے ہیں۔ اس طرح وہ بصری طور پر ایسے تعلقات اور خلا دکھا پاتے ہیں جو بصورت دیگر چھپے ہوتے ہیں۔
[![مشین لرننگ کے ابتدائی افراد کے لیے - میٹپلاٹ لائبریری کے ساتھ ڈیٹا کو بصری بنانا](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "مشین لرننگ کے ابتدائی افراد کے لیے - میٹپلاٹ لائبریری کے ساتھ ڈیٹا کو بصری بنانا")
[![بیگنرز کے لیے ML - Matplotlib کے ساتھ ڈیٹا کی بصری نمائندگی](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "بیگنرز کے لیے ML - Matplotlib کے ساتھ ڈیٹا کی بصری نمائندگی")
> 🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ اس سبق کے لیے ڈیٹا کو بصری بنانے پر ایک مختصر ویڈیو دیکھ سکیں۔
> 🎥 اس سبق کے لیے ڈیٹا کی بصری نمائندگی پر مختصر ویڈیو دیکھنے کے لیے اوپر دی گئی تصویر پر کلک کریں۔
بصری تخلیقات مشین لرننگ تکنیک کا تعین کرنے میں بھی مدد کر سکتی ہیں جو ڈیٹا کے لیے سب سے زیادہ مناسب ہو۔ مثال کے طور پر، ایک اسکیٹر پلاٹ جو ایک لائن کی پیروی کرتا ہوا نظر آتا ہے، یہ ظاہر کرتا ہے کہ ڈیٹا ایک لکیری ریگریشن مشق کے لیے اچھا امیدوار ہے۔
بصری نمائندگیاں اس بات کا تعین کرنے میں بھی مدد کرتی ہیں کہ ڈیٹا کے لیے سب سے مناسب مشین لرننگ تکنیک کونسی ہے۔ مثلاً اگر اسکیٹر پلاٹ ایک لائن کی پیروی کرتا نظر آئے، تو یہ ظاہر کرتا ہے کہ ڈیٹا لائنیر ریگریشن کے لیے ایک اچھا امیدوار ہے۔
ایک ڈیٹا بصری لائبریری جو جیوپیٹر نوٹ بکس میں اچھی طرح کام کرتی ہے وہ ہے [میٹپلاٹ](https://matplotlib.org/) (جسے آپ نے پچھلے سبق میں بھی دیکھا تھا)۔
Jupyter نوٹ بکس میں استعمال ہونے والی ایک ڈیٹا بصری نمائندگی کی لائبریری [Matplotlib](https://matplotlib.org/) ہے (جسے آپ نے پچھلے سبق میں بھی دیکھا تھا)۔
> ڈیٹا بصری کے ساتھ مزید تجربہ حاصل کریں [ان ٹیوٹوریلز](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) میں۔
> ان [ٹیوٹوریلز](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) میں ڈیٹا کی بصری نمائندگی کا مزید تجربہ حاصل کریں۔
## مشق - میٹپلاٹ کے ساتھ تجربہ کریں
## مشق - Matplotlib کے ساتھ تجربہ کریں
نئے ڈیٹا فریم کو ظاہر کرنے کے لیے کچھ بنیادی پلاٹس بنانے کی کوشش کریں جو آپ نے ابھی تخلیق کیا ہے۔ ایک بنیادی لائن پلاٹ کیا دکھائے گا؟
کوشش کریں کہ بنائے گئے نئے dataframe کو ظاہر کرنے کے لیے کچھ بنیادی پلاٹس بنائیں۔ ایک بنیادی لائن پلاٹ کیا دکھائے گا؟
1. فائل کے اوپر، پینڈاز درآمد کے تحت میٹپلاٹ درآمد کریں:
1. فائل کے اوپر، Pandas درآمد کے نیچے Matplotlib درآمد کریں:
```python
import matplotlib.pyplot as plt
```
1. پورے نوٹ بک کو دوبارہ چلائیں تاکہ تازہ کاری ہو۔
1. نوٹ بک کے نیچے ایک سیل شامل کریں تاکہ ڈیٹا کو ایک باکس کے طور پر پلاٹ کریں:
1. پورا نوٹ بک دوبارہ چلائیں تاکہ تازہ کاری ہو جائے۔
1. نوٹ بک کے آخر میں ایک سیل شامل کریں جو ڈیٹا کو باکس کے طور پر پلاٹ کرے:
```python
price = new_pumpkins.Price
@ -174,44 +174,121 @@ _نوٹ بک.ipynb_ فائل کو ویژول اسٹوڈیو کوڈ میں کھو
plt.show()
```
![ایک اسکیٹر پلاٹ جو قیمت اور مہینے کے تعلق کو ظاہر کرتا ہے](../../../../2-Regression/2-Data/images/scatterplot.png)
![مہینے کے لحاظ سے قیمت ظاہر کرنے والا اسکیٹر پلاٹ](../../../../translated_images/ur/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/ur/barchart.a833ea9194346d76.webp)
یہ زیادہ مفید ڈیٹا بصری نمائندگی ہے! ایسا لگتا ہے کہ کدو کی سب سے زیادہ قیمت ستمبر اور اکتوبر میں ہوتی ہے۔ کیا یہ آپ کی توقع کے مطابق ہے؟ کیوں یا کیوں نہیں؟
## مشق - Seaborn کے ساتھ تجربہ کریں
Matplotlib طاقتور ہے، لیکن ایک نرم اور مکمل چارٹ بنانے کے لیے اس میں اکثر زیادہ کوڈ لگتا ہے۔ [Seaborn](https://seaborn.pydata.org/) ایسی لائبریری ہے جو Matplotlib کے اوپر بنی ہے اور یہ شماریاتی ڈیٹا کی بصری نمائندگی کے لیے بنائی گئی ہے۔ یہ براہ راست Pandas dataframe کے ساتھ کام کرتی ہے، دلکش ڈیفالٹ اسٹائلز اپلائی کرتی ہے، اور کم کوڈ کے ذریعے معلوماتی پلاٹس بناتی ہے۔ چونکہ Seaborn Matplotlib آبجیکٹس واپس دیتا ہے، آپ پھر بھی Matplotlib کے تمام امکانات کو استعمال کر سکتے ہیں۔
> اگر آپ کے پاس Seaborn انسٹال نہیں ہے، تو اسے `pip install seaborn` سے انسٹال کریں۔
1. دوسری درآمدات کے نیچے، نوٹ بک کے اوپر Seaborn درآمد کریں۔ اسے عام طور پر `sns` کے نام سے درآمد کیا جاتا ہے:
```python
import seaborn as sns
```
### تعلقات دکھانے کے لیے اسکیٹر پلاٹس
ماڈل بنانے سے پہلے ڈیٹا کو جانچنے کا ایک بڑا حصہ یہ تلاش کرنا ہے کہ متغیرات کے درمیان کیا _تعلقات_ ہیں۔ [اسکیٹر پلاٹ](https://en.wikipedia.org/wiki/Scatter_plot) اس کا بہترین آلہ ہے: اگر نقاط ایک لائن کی پیروی کرتے ہیں تو دونوں متغیرات میں تعلق ہو سکتا ہے، جو کہ ایک اچھا اشارہ ہے کہ لائنیر ریگریشن ماڈل کام کر سکتا ہے۔
1. پہلے بنائے گئے مہینے کے حساب سے قیمت کے اسکیٹر پلاٹ کو دوبارہ بنائیں، لیکن اس بار Seaborn کے [`relplot()`](https://seaborn.pydata.org/generated/seaborn.relplot.html) (رشتہ دار پلاٹ) کا استعمال کریں، جو براہ راست آپ کے dataframe کے کالموں کے ساتھ کام کرتا ہے:
```python
sns.relplot(x="Price", y="Month", data=new_pumpkins)
```
![Seaborn اسکیٹر پلاٹ جو مہینے کے حساب سے قیمت دکھاتا ہے](../../../../translated_images/ur/relplot.a03837d8f0329cec.webp)
دیکھیں کہ آپ الم کے نام_ اور dataframe کو کیسے پاس کرتے ہیں، اور Seaborn آپ کے لیے محور کی لیبلز خود سنبھال لیتا ہے۔
2. آپ لائن پلاٹ پر بھی جا سکتے ہیں `kind="line"` پاس کر کے۔ Seaborn ایک سایہ دار بینڈ بھی بناتا ہے جو لائن کے ارد گرد اعتماد کا وقفہ دکھاتا ہے:
```python
sns.relplot(x="Price", y="Month", kind="line", data=new_pumpkins)
```
![Seaborn لائن پلاٹ جو مہینے کے حساب سے قیمت دکھاتا ہے](../../../../translated_images/ur/lineplot.f9034ba47b1e30ee.webp)
یہ مخصوص ڈیٹا کافی شور والا ہے، اس لیے لائن پلاٹ سب سے واضح انتخاب نہیں ہے — لیکن یہ دکھاتا ہے کہ Seaborn میں چارٹ کی اقسام کو کتنی آسانی سے تبدیل کیا جا سکتا ہے۔
### تقسیمات دکھانے والے بار چارٹس
آپ نے پہلے ہاتھ سے ڈیٹا کو گروپ کر کے Matplotlib کے ساتھ ایک بار چارٹ بنایا تھا۔ Seaborn کا [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html) (کٹیگوریکل پلاٹ) آپ کے لیے گروپنگ اور جمع کی جانب سے کام کر سکتا ہے۔ ڈیفالٹ کے طور پر `kind="bar"` ہر زمرے کی اوسط دکھاتا ہے اور ایک سیاہ لائن اعتماد کے وقفے کی نشاندہی کرتی ہے۔
1۔ ہر مہینے کی اوسط قیمت کا بار چارٹ بنائیں:
```python
sns.catplot(x="Month", y="Price", data=new_pumpkins, kind="bar")
```
![ہر مہینے کی قیمت کی تقسیم دکھانے والا سی بورن بار چارٹ](../../../../translated_images/ur/catplot.e73fc35fdf96242b.webp)
یہ اس بات کی تصدیق کرتا ہے جو آپ نے Matplotlib کے ساتھ دیکھا تھا — قیمتیں ستمبر اور اکتوبر کے آس پاس چوٹی پر ہوتی ہیں — لیکن Seaborn یہ بھی ظاہر کرتا ہے کہ ہر مہینے کے اندر قیمت کتنی _متغیر_ ہوتی ہے۔
### تعلقات دکھانے کے لیے ہیٹ میپس
اسکیٹر پلاٹس ایک وقت میں دو متغیرات کا موازنہ کرتے ہیں۔ جب آپ کے پاس کئی عددی کالم ہوں، تو ایک [heatmap](https://en.wikipedia.org/wiki/Heat_map) آپ کو ہر جوڑے کے کالمز کے درمیان تعلق کی طاقت کو ایک ساتھ دیکھنے کی اجازت دیتا ہے۔ یہ عام طریقہ ہے یہ دیکھنے کا کہ کن خصوصیات کا زیادہ تعلق ہے ماڈل میں فیڈ کرنے سے پہلے (اور اسی طرح کا چارٹ بعد میں کلاسفیکیشن میں کنفیوزن میٹرکس دکھانے کے لیے استعمال ہوتا ہے)۔
1۔ Pandas کے ساتھ ایک تعلقاتی میٹرکس بنائیں، پھر اسے Seaborn کے [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html) سے کھینچیں۔ `annot=True` آپشن ہر سیل پر تعلقاتی اقدار کو پرنٹ کرتا ہے:
```python
correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()
sns.heatmap(correlations, annot=True, cmap="coolwarm")
```
![عدد کالمز کے درمیان تعلقات دکھانے والا Seaborn ہیٹ میپ](../../../../translated_images/ur/heatmap.bd98dce43b404c57.webp)
`1` (یا `-1`) کے قریب اقدار ظاہر کرتی ہیں کہ کالمز مضبوطی سے _خطی طور پر_ مربوط ہیں۔ دیکھیے `Low Price` اور `High Price` تقریباً مکمل طور پر مربوط ہیں۔ دوسری طرف، `Month` قیمت کے ساتھ ایک کمزور خطی تعلق ظاہر کرتا ہے — حالانکہ اوپر کے بار چارٹ نے ستمبر اور اکتوبر میں واضح موسمی چوٹی کو دکھایا تھا۔ یہ ایک اہم سبق ہے: تعلقاتی کوایفیشینٹ صرف _براہ راست-خط_ تعلقات کو ناپتا ہے، لہٰذا یہ موسمی یا غیر خطی پیٹرنز کو نظر انداز کر سکتا ہے۔ ✅ یہ دیکھنا کیوں مفید ہے کہ ساتھ ہی ہیٹ میپ *اور* بار چارٹ جیسے چارٹس کو دیکھیں اس سے پہلے کہ یہ فیصلہ کریں کہ کون سے کالم استعمال کرنے ہیں؟
### Matplotlib یا Seaborn؟
دونوں لائبریریاں جاننا فائدہ مند ہیں:
- **Matplotlib** آپ کو چارٹ کے ہر عنصر پر باریک کنٹرول دیتا ہے اور تقریباً ہر دوسرے Python پلاٹنگ لائبریری کی بنیاد ہے۔
- **Seaborn** شماریاتی چارٹس کے لیے اعلی سطحی فنکشنز اور دلکش ڈیفالٹس فراہم کرتا ہے، ڈیٹافریمز کے ساتھ براہ راست کام کرتا ہے، اور عموماً تیز ہوتا ہے استقصائی ڈیٹا تجزیے کے لیے۔
یہ ایک زیادہ مفید ڈیٹا بصری ہے! ایسا لگتا ہے کہ کدو کی سب سے زیادہ قیمت ستمبر اور اکتوبر میں ہوتی ہے۔ کیا یہ آپ کی توقعات پر پورا اترتا ہے؟ کیوں یا کیوں نہیں؟
ایک عام ورک فلو یہ ہے کہ تیزی سے اپنے ڈیٹا کو جانچنے کے لیے Seaborn اٹھائیں، پھر جب تفصیلات کو تخصیص کرنا ہو تو Matplotlib کا استعمال کریں۔
---
## 🚀چیلنج
## 🚀 چیلنج
میٹپلاٹ کے مختلف قسم کے بصری تخلیقات کو دریافت کریں۔ کون سی قسمیں ریگریشن مسائل کے لیے سب سے زیادہ مناسب ہیں؟
Matplotlib اور Seaborn جو مختلف قسم کی بصریات پیش کرتے ہیں ان کو دریافت کریں۔ کون سی اقسام ریگریشن کے مسائل کے لیے سب سے زیادہ مناسب ہیں؟
## [لیکچر کے بعد کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
## جائزہ اور خود مطالعہ
ڈیٹا کو بصری بنانے کے مختلف طریقوں پر ایک نظر ڈالیں۔ دستیاب مختلف لائبریریوں کی فہرست بنائیں اور نوٹ کریں کہ کون سی مخصوص قسم کے کاموں کے لیے بہترین ہیں، مثال کے طور پر 2D بصری تخلیقات بمقابلہ 3D بصری تخلیقات۔ آپ کیا دریافت کرتے ہیں؟
ڈیٹا کو دیکھنے کے بے شمار طریقے دیکھیں۔ مختلف دستیاب لائبریریوں کی فہرست بنائیں اور نوٹ کریں کہ کون سی دی گئی اقسام کے کاموں کے لیے سب سے بہتر ہیں، مثلاً 2D بصریات بمقابلہ 3D بصریات۔ آپ کیا دریافت کرتے ہیں؟
## اسائنمنٹ
[بصری تخلیقات کی تلاش](assignment.md)
[بصریات کی دریافت](assignment.md)
---
**ڈسکلیمر**:
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**ڈس کلیمر**:
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -4,7 +4,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## کدو کے لیے لکیری رجعت - سبق 2\n"
"## کدو کے لیے لینیئر ریگریشن - سبق 2\n"
]
},
{
@ -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": [
"## سیبورن کے ساتھ بصری تاثر\n",
"\n",
"[Seaborn](https://seaborn.pydata.org/) میٹ پلوٹ لِب کے اوپر بنایا گیا ہے اور ڈیٹا فریمز کے ساتھ براہ راست کام کرتا ہے، جس سے بہت کم کوڈ کے ساتھ خوبصورت شماریاتی گراف بنانا آسان ہو جاتا ہے۔\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یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے پوری کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستگی ہو سکتی ہیں۔ اصل دستاویز، جو اس کی اصل زبان میں ہے، کو مستند ماخذ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے لیے ہم ذمہ دار نہیں ہیں۔\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**ڈس کلیمر**:\nیہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -426,13 +487,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "95726f0b8283628d5356a4f8eb8b4b76",
"translation_date": "2025-08-29T14:58:16+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "ur"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -1,47 +1,47 @@
# تعارف ری انفورسمنٹ لرننگ اور کیو لرننگ
# ری انفورسمنٹ لرننگ اور کیو-لرننگ کا تعارف
![مشین لرننگ میں ری انفورسمنٹ کا خلاصہ ایک خاکے میں](../../../../sketchnotes/ml-reinforcement.png)
> خاکہ: [Tomomi Imura](https://www.twitter.com/girlie_mac)
![مشین لرننگ میں ری انفورسمنٹ کا خلاصہ ایک اسکیچ نوٹ میں](../../../../translated_images/ur/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://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://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) ایک سیکھنے کی تکنیک ہے جو ہمیں کسی **ایجنٹ** کے کسی **ماحول** میں بہترین رویے کو سیکھنے کی اجازت دیتی ہے، بہت سے تجربات چلا کر۔ اس ماحول میں ایک ایجنٹ کا کچھ **مقصد** ہونا چاہیے، جو ایک **انعامی فنکشن** کے ذریعے متعین کیا جاتا ہے۔
**ری انفورسمنٹ لرننگ** (RL) ایک ایسی تکنیک ہے جو ہمیں بہت سے تجربات کرکے ایک **ایجنٹ** کا ایک بہترین رویہ سیکھنے دیتی ہے ایک خاص **ماحول** میں۔ اس ماحول میں ایجنٹ کا کچھ **مقصد** ہونا چاہئے، جو ایک **ریوارڈ فنکشن** کے ذریعے بیان کیا جاتا ہے۔
## ماحول
سادگی کے لیے، آئیے پیٹر کی دنیا کو `width` x `height` کے سائز کے ایک مربع بورڈ کے طور پر تصور کریں، جیسے یہ:
آسانی کے لیے، آئیے پیٹر کی دنیا کو ایک مربع بورڈ سمجھیں جس کا سائز `width` x `height` ہو، جیسا کہ یہ:
![پیٹر کا ماحول](../../../../8-Reinforcement/1-QLearning/images/environment.png)
![پیٹر کا ماحول](../../../../translated_images/ur/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 *
@ -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
```
انعامی فنکشنز کے بارے میں دلچسپ بات یہ ہے کہ زیادہ تر معاملات میں، *ہمیں صرف کھیل کے اختتام پر ایک اہم انعام دیا جاتا ہے*۔ اس کا مطلب یہ ہے کہ ہمارا الگورتھم کسی طرح ان "اچھی" حرکتوں کو یاد رکھے جو آخر میں مثبت انعام کی طرف لے جاتی ہیں، اور ان کی اہمیت کو بڑھائے۔ اسی طرح، وہ تمام حرکتیں جو برے نتائج کی طرف لے جاتی ہیں، ان کی حوصلہ شکنی کی جانی چاہیے۔
ریوارڈ فنکشنز کی ایک دلچسپ بات یہ ہے کہ زیادہ تر صورتوں میں، *ہمیں صرف گیم کے آخر میں اہم انعام دیا جاتا ہے*۔ اس کا مطلب ہے کہ ہمارا الگورتھم "اچھے" قدم یاد رکھے جو کہ آخر میں مثبت انعام کی طرف لے جاتے ہیں، اور ان کی اہمیت بڑھائے۔ اسی طرح، تمام حرکتیں جو منفی نتائج کی طرف لے جائیں، انہیں مایوس کرنا چاہیے۔
## کیو لرننگ
## کیو-لرننگ
ایک الگورتھم جس پر ہم یہاں بات کریں گے اسے **کیو لرننگ** کہا جاتا ہے۔ اس الگورتھم میں، پالیسی ایک فنکشن (یا ڈیٹا اسٹرکچر) کے ذریعے متعین کی جاتی ہے جسے **کیو ٹیبل** کہا جاتا ہے۔ یہ ہر حالت میں اعمال کی "اچھی" ہونے کی ریکارڈنگ کرتا ہے۔
جو الگورتھم ہم یہاں بحث کریں گے اسے **کیو-لرننگ** کہا جاتا ہے۔ اس الگورتھم میں، پالیسی ایک فنکشن (یا ڈیٹا ڈھانچہ) کے ذریعے بیان کی جاتی ہے جسے **Q-Table** کہتے ہیں۔ یہ کسی دی گئی حالت میں ہر ایکشن کی "اچھی خاصیت" کو ریکارڈ کرتا ہے۔
یہ کیو ٹیبل کہلاتا ہے کیونکہ اسے اکثر ایک ٹیبل یا کثیر جہتی صف کے طور پر پیش کرنا آسان ہوتا ہے۔ چونکہ ہمارے بورڈ کے ابعاد `width` x `height` ہیں، ہم کیو ٹیبل کو ایک numpy صف کے طور پر پیش کر سکتے ہیں جس کی شکل `width` x `height` x `len(actions)` ہے: (کوڈ بلاک 6)
اسے Q-Table اس لیے کہتے ہیں کیونکہ اسے عام طور پر ایک ٹیبل یا کثیر جہتی ارے کے طور پر ظاہر کرنا آسان ہوتا ہے۔ کیونکہ ہمارا بورڈ `width` x `height` کے ابعاد رکھتا ہے، ہم کیو ٹیبل کو numpy ارے کے ذریعے ظاہر کر سکتے ہیں جس کا سائز `width` x `height` x `len(actions)` ہو: (کوڈ بلاک 6)
```python
Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions)
```
نوٹ کریں کہ ہم کیو ٹیبل کی تمام قدروں کو برابر ویلیو سے شروع کرتے ہیں، ہمارے معاملے میں - 0.25۔ یہ "بے ترتیب چال" پالیسی کے مطابق ہے، کیونکہ ہر حالت میں تمام حرکتیں یکساں طور پر اچھی ہیں۔ ہم کیو ٹیبل کو بورڈ پر دیکھنے کے لیے `plot` فنکشن کو پاس کر سکتے ہیں: `m.plot(Q)`۔
نوٹ کریں کہ ہم کیو ٹیبل کی تمام قدریں ایک جیسی قیمت سے شروع کرتے ہیں، ہمارے معاملے میں 0.25۔ یہ "رینڈم واک" پالیسی کے مطابق ہے، کیونکہ ہر حالت میں تمام حرکتیں برابر اچھی ہیں۔ ہم Q-Table کو `plot` فنکشن میں دے سکتے ہیں تاکہ بورڈ پر ٹیبل کو بصری شکل میں دکھایا جا سکے: `m.plot(Q)`.
![پیٹر کا ماحول](../../../../8-Reinforcement/1-QLearning/images/env_init.png)
![پیٹر کا ماحول](../../../../translated_images/ur/env_init.04e8f26d2d60089e.webp)
ہر سیل کے مرکز میں ایک "تیر" ہے جو حرکت کی ترجیحی سمت کی نشاندہی کرتا ہے۔ چونکہ تمام سمتیں برابر ہیں، ایک نقطہ دکھایا گیا ہے۔
ہر سیل کے مرکز میں ایک "تیرأ" ہوتا ہے جو پسندیدہ سمت کی نشاندہی کرتا ہے۔ چونکہ تمام سمتیں برابر ہیں، ایک نقطہ دکھایا جاتا ہے۔
اب ہمیں سمیولیشن چلانے، اپنے ماحول کو دریافت کرنے، اور کیو ٹیبل کی قدروں کی ایک بہتر تقسیم سیکھنے کی ضرورت ہے، جو ہمیں سیب تک پہنچنے کے لیے زیادہ تیزی سے راستہ تلاش کرنے کی اجازت دے گی۔
اب ہمیں سمولیشن چلانی ہے، اپنے ماحول کو دریافت کرنا ہے، اور کیو ٹیبل کی قدروں کی بہتر تقسیم سیکھنی ہے، جو ہمیں سیب تک پہنچنے کے راستے کو بہت تیز تر ڈھونڈنے میں مدد دے گی۔
## کیو لرننگ کا نچوڑ: بیل مین مساوات
## کیو-لرننگ کا جوہر: بیل مین مساوات
ایک بار جب ہم حرکت شروع کرتے ہیں، تو ہر عمل کا ایک متعلقہ انعام ہوگا، یعنی ہم نظریاتی طور پر سب سے زیادہ فوری انعام کی بنیاد پر اگلا عمل منتخب کر سکتے ہیں۔ تاہم، زیادہ تر حالات میں، حرکت ہمارے مقصد کو حاصل نہیں کرے گی، اور اس طرح ہم فوری طور پر فیصلہ نہیں کر سکتے کہ کون سی سمت بہتر ہے۔
جب ہم حرکت شروع کرتے ہیں، ہر ایکشن کا ایک متعلقہ انعام ہوگا، یعنی ہم تھیوریٹیکل طور پر اگلے ایکشن کو فوری سب سے زیادہ انعام کی بنیاد پر منتخب کر سکتے ہیں۔ تاہم، زیادہ تر حالتوں میں، حرکت ہمارا سیب تک پہنچنے کا مقصد حاصل نہیں کرے گی، لہٰذا ہم فوراً فیصلہ نہیں کر سکتے کہ کون سی سمت بہتر ہے۔
> یاد رکھیں کہ فوری نتیجہ اہم نہیں ہے، بلکہ حتمی نتیجہ اہم ہے، جو ہمیں سمیولیشن کے اختتام پر حاصل ہوگا۔
> یاد رکھیں کہ فوری نتیجہ اہم نہیں، بلکہ حتمی نتیجہ ہے جو ہم سمولیشن کے آخر میں حاصل کریں گے۔
تاخیر شدہ انعام کو مدنظر رکھنے کے لیے، ہمیں **[ڈائنامک پروگرامنگ](https://en.wikipedia.org/wiki/Dynamic_programming)** کے اصولوں کا استعمال کرنے کی ضرورت ہے، جو ہمیں اپنے مسئلے کے بارے میں تجزیاتی طور پر سوچنے کی اجازت دیتے ہیں۔
اس مؤخر انعام کو حساب میں لانے کے لیے، ہمیں **[ڈائنامک پروگرامنگ](https://en.wikipedia.org/wiki/Dynamic_programming)** کے اصولوں کا استعمال کرنا ہوگا، جو ہمیں مسئلہ کو واپس لچکیلے طریقے سے سوچنے دیتے ہیں۔
فرض کریں کہ ہم اب حالت *s* پر ہیں، اور ہم اگلی حالت *s'* پر جانا چاہتے ہیں۔ ایسا کرنے سے، ہمیں فوری انعام *r(s,a)* ملے گا، جو انعامی فنکشن کے ذریعے متعین کیا گیا ہے، اور کچھ مستقبل کا انعام بھی۔ اگر ہم فرض کریں کہ ہماری کیو ٹیبل اعمال کی "دلکشی" کو درست طریقے سے ظاہر کرتی ہے، تو حالت *s'* پر ہم وہ عمل *a* منتخب کریں گے جو *Q(s',a')* کی زیادہ سے زیادہ قیمت کے مطابق ہوگا۔ اس طرح، حالت *s* پر ہمیں ممکنہ بہترین مستقبل کا انعام `max`
فرض کریں کہ ہم اب حالت *s* میں ہیں، اور اگلی حالت *s'* پر جانا چاہتے ہیں۔ ایسا کرنے پر، ہمیں فوری انعام *r(s,a)* ملے گا، جو ریوارڈ فنکشن سے متعین ہوتا ہے، نیز کچھ مستقبل کا انعام بھی۔ اگر ہم فرض کریں کہ ہمارا Q-Table ہر ایکشن کی "دلکشی" کو صحیح طریقے سے ظاہر کرتا ہے، تو حالت *s'* پر ہم ایکشن *a* منتخب کریں گے جو زیادہ سے زیادہ *Q(s',a')* کی قیمت دیتا ہے۔ یوں، حالت *s* پر ممکنہ بہترین مستقبل کا انعام `max`<sub>a'</sub>*Q(s',a')* ہوگا (یہاں زیادہ سے زیادہ تمام ممکنہ ایکشنز *a'* پر حساب کی جاتی ہے جو حالت *s'* میں ہوسکتے ہیں)۔
یہ Q-Table کی قیمت کو حالت *s* اور ایکشن *a* کے لیے حساب کرنے کا **بیل مین فارمولہ** دیتا ہے:
<img src="../../../../translated_images/ur/bellman-equation.7c0c4c722e5a6b7c.webp"/>
یہاں γ وہ **ڈسکاؤنٹ فیکٹر** ہے جو یہ طے کرتا ہے کہ آپ کو موجودہ انعام کو مستقبل کے انعام کے مقابلے میں کتنا اہمیت دینی چاہیے اور بالعکس۔
## لرننگ الگورتھم
مذکورہ مساوات کی بنیاد پر، ہم اب اپنے سیکھنے والے الگورتھم کے لیے جعلی کوڈ لکھ سکتے ہیں:
* Q-Table Q کو تمام حالتوں اور ایکشنز کے لیے برابر نمبروں سے شروع کریں
* لرننگ ریٹ α ← 1 مقرر کریں
* سمولیشن کو کئی بار دہرائیں
1. تصادفی مقام سے شروع کریں
1. دہرائیں
1. حالت *s* پر ایکشن *a* منتخب کریں
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* پر ایکشن کو Q-Table کی قدروں کی متناسب احتمال کے مطابق منتخب کیا جائے۔ شروع میں، جب Q-Table کی قدریں سب برابر ہوں گی، تو یہ ایک اتفاقی انتخاب ہوگا، لیکن جب ہم ماحول کے بارے میں زیادہ سیکھیں گے، تو ہم بہتر راستے پر زیادہ امکان رکھیں گے اور ایجنٹ کو کبھی کبھار تحقیق کا موقع دیں گے۔
## Python نفاذ
اب ہم لرننگ الگورتھم کو نافذ کرنے کے لیے تیار ہیں۔ اس سے پہلے، ہمیں ایک فنکشن کی ضرورت ہے جو Q-Table میں موجود عشوائی اعداد کو متعلقہ ایکشنز کے لیے احتمال کے ویکٹر میں تبدیل کرے۔
1۔ ایک فنکشن `probs()` بنائیں:
```python
def probs(v,eps=1e-4):
v = v-v.min()+eps
v = v/v.sum()
return v
```
ہم اصل ویکٹر میں کچھ `eps` شامل کرتے ہیں تاکہ شروع میں صفر سے تقسیم سے بچا جا سکے، جب ویکٹر کے تمام اجزاء یکساں ہوں۔
اس الگورتھم کو 5000 تجربات، جنہیں **ایپاکس** بھی کہتے ہیں، کے ذریعے چلائیں: (کوڈ بلاک 8)
```python
for epoch in range(5000):
# ابتدائی نقطہ منتخب کریں
m.random_start()
# سفر شروع کریں
n=0
cum_reward = 0
while True:
x,y = m.human
v = probs(Q[x,y])
a = random.choices(list(actions),weights=v)[0]
dpos = actions[a]
m.move(dpos,check_correctness=False) # ہم کھلاڑی کو بورڈ کے باہر جانے کی اجازت دیتے ہیں، جو قسط کو ختم کر دیتا ہے
r = reward(m)
cum_reward += r
if r==end_reward or cum_reward < -1000:
lpath.append(n)
break
alpha = np.exp(-n / 10e5)
gamma = 0.5
ai = action_idx[a]
Q[x,y,ai] = (1 - alpha) * Q[x,y,ai] + alpha * (r + gamma * Q[x+dpos[0], y+dpos[1]].max())
n+=1
```
اس الگورتھم کو چلانے کے بعد، Q-Table ایسی قدروں کے ساتھ اپ ڈیٹ ہو جائے گی جو ہر قدم پر مختلف ایکشنز کی دلکشی کو بیان کریں گی۔ ہم Q-Table کو اس طرح بصری شکل دے سکتے ہیں کہ ہر سیل میں حرکت کی مطلوبہ سمت کی نشاندہی کرنے والا ویکٹر کھینچا جائے۔ آسانی کے لئے، ہم تیر کی جگہ ایک چھوٹا دائرہ ڈالتے ہیں۔
<img src="../../../../translated_images/ur/learned.ed28bcd8484b5287.webp"/>
## پالیسی کی جانچ
چونکہ Q-Table ہر حالت میں ہر عمل کی "دلکشی" کو ظاہر کرتی ہے، اس کا استعمال کرتے ہوئے ہماری دنیا میں مؤثر نیویگیشن کو بیان کرنا کافی آسان ہے۔ سب سے سادہ صورت میں، ہم اس عمل کو منتخب کر سکتے ہیں جو Q-Table کی سب سے زیادہ قدر کے مطابق ہو: (کوڈ بلاک 9)
چونکہ Q-Table ہر حالت میں ہر ایکشن کی "دلکشی" کو ظاہر کرتی ہے، اسے اپنے دنیا میں مؤثر نیویگیشن کے لیے استعمال کرنا آسان ہے۔ سب سے سادہ صورت میں، ہم سب سے زیادہ Q-Table قیمت والے ایکشن کو منتخب کر سکتے ہیں: (کوڈ بلاک 9)
```python
def qpolicy_strict(m):
@ -198,17 +274,18 @@ def qpolicy_strict(m):
walk(m,qpolicy_strict)
```
> اگر آپ اوپر دیے گئے کوڈ کو کئی بار آزمائیں، تو آپ دیکھ سکتے ہیں کہ کبھی کبھار یہ "رک" جاتا ہے، اور آپ کو نوٹ بک میں STOP بٹن دبانے کی ضرورت ہوتی ہے تاکہ اسے روکا جا سکے۔ ایسا اس وقت ہوتا ہے جب دو حالتیں ایک دوسرے کی طرف "اشارہ" کرتی ہیں بہترین Q-Value کے لحاظ سے، جس صورت میں ایجنٹ ان حالتوں کے درمیان غیر معینہ مدت تک حرکت کرتا رہتا ہے۔
> اگر آپ اوپر دیا گیا کوڈ کئی بار آزمائیں تو آپ نوٹس کر سکتے ہیں کہ کبھی کبھار یہ "فریز" ہو جاتا ہے، اور آپ کو اسے روکنے کے لیے نوٹ بک میں STOP بٹن دبانا پڑتا ہے۔ ایسا اس لیے ہوتا ہے کیونکہ بعض اوقات دو ریاستیں آپس میں Q-Value کے اعتبار سے "ایک دوسرے کی طرف اشارہ" کر رہی ہوتی ہیں، جس صورت میں ایجنٹ ان ریاستوں کے درمیان لا محدود حرکت کرتا رہتا ہے۔
## 🚀چیلنج
> **ٹاسک 1:** `walk` فنکشن میں ترمیم کریں تاکہ راستے کی زیادہ سے زیادہ لمبائی کو ایک خاص تعداد کے قدموں (مثلاً 100) تک محدود کیا جا سکے، اور اوپر دیا گیا کوڈ وقتاً فوقتاً یہ قدر واپس کرے۔
> **ٹاسک 1:** `walk` فنکشن کو اس طرح تبدیل کریں کہ راستے کی زیادہ سے زیادہ لمبائی کو کسی مخصوص قدموں کی تعداد (مثلاً 100) تک محدود کرے، اور اوپر دیا گیا کوڈ وقتاً فوقتاً اس قدر کو واپس لوٹے۔
> **ٹاسک 2:** `walk` فنکشن میں ترمیم کریں تاکہ وہ ان جگہوں پر واپس نہ جائے جہاں وہ پہلے جا چکا ہو۔ یہ `walk` کو لوپنگ سے روک دے گا، تاہم، ایجنٹ پھر بھی ایسی جگہ پر "پھنس" سکتا ہے جہاں سے وہ باہر نکلنے کے قابل نہ ہو۔
> **ٹاسک 2:** `walk` فنکشن کو اس طرح تبدیل کریں کہ یہ اُن جگہوں پر واپس نہ جائے جہاں یہ پہلے ہی جا چکا ہو۔ اس سے `walk` کے لوپ میں پھنسنے سے بچاؤ ہوگا، تاہم، ایجنٹ پھر بھی کسی ایسی جگہ پھنس سکتا ہے جہاں سے نکلنا ممکن نہ ہو۔
## نیویگیشن
ایک بہتر نیویگیشن پالیسی وہ ہوگی جو ہم نے تربیت کے دوران استعمال کی تھی، جو استحصال اور دریافت کو یکجا کرتی ہے۔ اس پالیسی میں، ہم ہر عمل کو ایک خاص احتمال کے ساتھ منتخب کریں گے، جو Q-Table میں موجود قدروں کے تناسب سے ہوگا۔ یہ حکمت عملی ایجنٹ کو پہلے سے دریافت شدہ مقام پر واپس جانے کا نتیجہ دے سکتی ہے، لیکن جیسا کہ آپ نیچے دیے گئے کوڈ سے دیکھ سکتے ہیں، یہ مطلوبہ مقام تک بہت مختصر اوسط راستہ فراہم کرتی ہے (یاد رکھیں کہ `print_statistics` 100 بار سیمولیشن چلاتا ہے): (کوڈ بلاک 10)
ایک بہتر نیویگیشن پالیسی وہ ہوگی جو ہم نے تربیت کے دوران استعمال کی، جو exploitation اور exploration کو یکجا کرتی ہے۔ اس پالیسی میں، ہم ہر عمل کو مخصوص احتمال کے ساتھ منتخب کریں گے، جو Q-Table میں موجود قدروں کے متناسب ہو۔ اس حکمت عملی کے باوجود ایجنٹ اکثر اپنی پہلے کی دریافت کی ہوئی جگہوں پر واپس آ سکتا ہے، لیکن جیسا کہ نیچے کوڈ سے آپ دیکھ سکتے ہیں، یہ مطلوبہ مقام تک بہت کم اوسط راستہ فراہم کرتی ہے (یاد رہے کہ `print_statistics` 100 بار سمولیشن چلاتا ہے): (کوڈ بلاک 10)
```python
def qpolicy(m):
@ -220,28 +297,32 @@ def qpolicy(m):
print_statistics(qpolicy)
```
اس کوڈ کو چلانے کے بعد، آپ کو پہلے کے مقابلے میں بہت چھوٹا اوسط راستہ ملنا چاہیے، جو 3-6 کی حد میں ہوگا۔
اس کوڈ کو چلانے کے بعد، آپ کو پہلے کے مقابلے میں کہیں کم اوسط راستہ ملے گا، تقریباً 3-6 قدموں کے درمیان۔
## سیکھنے کے عمل کی تحقیقات
## سیکھنے کے عمل کی تحقیق
جیسا کہ ہم نے ذکر کیا ہے، سیکھنے کا عمل exploration اور حاصل کردہ معلومات کی exploitation کے درمیان توازن ہے۔ ہم نے دیکھا ہے کہ سیکھنے کے نتائج (ایجنٹ کو مقصد تک مختصر راستہ تلاش کرنے کی صلاحیت) میں بہتری آئی ہے، لیکن یہ دیکھنا بھی دلچسپ ہے کہ سیکھنے کے دوران اوسط راستے کی لمبائی کیسے برتاؤ کرتی ہے:
جیسا کہ ہم نے ذکر کیا، سیکھنے کا عمل دریافت اور مسئلے کی جگہ کے ڈھانچے کے بارے میں حاصل کردہ علم کے استحصال کے درمیان توازن ہے۔ ہم نے دیکھا کہ سیکھنے کے نتائج (ایجنٹ کو ہدف تک مختصر راستہ تلاش کرنے کی صلاحیت) بہتر ہوئے ہیں، لیکن یہ بھی دلچسپ ہے کہ سیکھنے کے عمل کے دوران اوسط راستے کی لمبائی کیسے تبدیل ہوتی ہے:
<img src="../../../../translated_images/ur/lpathlen1.0534784add58d4eb.webp"/>
## سیکھنے کے خلاصے
سیکھنے کو یوں سمری کیا جا سکتا ہے:
- **اوسط راستے کی لمبائی بڑھتی ہے**۔ شروع میں، اوسط راستے کی لمبائی بڑھتی ہے۔ اس کی وجہ یہ ہے کہ جب ہمیں ماحول کے بارے میں کچھ معلوم نہیں ہوتا، تو ہم ممکنہ طور پر خراب حالتوں، پانی یا بھیڑیے میں پھنس جاتے ہیں۔ جیسے جیسے ہم زیادہ سیکھتے ہیں اور اس علم کو استعمال کرتے ہیں، ہم ماحول کو زیادہ دیر تک دریافت کر سکتے ہیں، لیکن ہمیں ابھی بھی سیبوں کے مقام کا اچھی طرح علم نہیں ہوتا۔
- **اوسط راستے کی لمبائی بڑھتی ہے۔** یہاں ہم دیکھتے ہیں کہ ابتدا میں اوسط راستے کی لمبائی بڑھتی ہے۔ یہ اس لیے ہو سکتا ہے کیونکہ جب ہمیں ماحول کے بارے میں کچھ معلوم نہیں ہوتا، تو ہم اکثر خراب حالتوں، پانی یا بھیڑیا میں پھنس جاتے ہیں۔ جیسے جیسے ہم زیادہ سیکھتے ہیں اور اس معلومات کو استعمال کرنا شروع کرتے ہیں، ہم طویل وقت تک ماحول کی سیر کر سکتے ہیں، لیکن ہمیں اب بھی سیبوں کی جگہ کا مکمل علم نہیں ہوتا۔
- **راستے کی لمبائی کم ہوتی ہے، جیسے جیسے ہم زیادہ سیکھتے ہیں**۔ جب ہم کافی سیکھ لیتے ہیں، تو ایجنٹ کے لیے ہدف حاصل کرنا آسان ہو جاتا ہے، اور راستے کی لمبائی کم ہونے لگتی ہے۔ تاہم، ہم ابھی بھی دریافت کے لیے کھلے ہیں، اس لیے ہم اکثر بہترین راستے سے ہٹ جاتے ہیں اور نئے اختیارات دریافت کرتے ہیں، جس سے راستہ مثالی سے زیادہ لمبا ہو جاتا ہے۔
- **جیسے جیسے ہم زیادہ سیکھتے ہیں، راستے کی لمبائی کم ہوتی ہے۔** جب ہم کافی سیکھ لیتے ہیں، تو ایجنٹ کے لیے مقصد حاصل کرنا آسان ہو جاتا ہے، اور راستے کی لمبائی گھٹنا شروع ہو جاتی ہے۔ البتہ، ہم اب بھی exploration کے لیے کھلے ہیں، اس لیے ہم اکثر بہترین راستے سے ہٹ کر نئی راہیں دریافت کرتے ہیں، جس سے راستہ مثالی سے لمبا ہو جاتا ہے۔
- **لمبائی اچانک بڑھتی ہے**۔ ہم اس گراف پر یہ بھی دیکھتے ہیں کہ کسی وقت، لمبائی اچانک بڑھ گئی۔ یہ عمل کی غیر یقینی نوعیت کو ظاہر کرتا ہے، اور یہ کہ ہم کسی وقت Q-Table کے coefficients کو نئے قدروں سے اووررائٹ کر کے "خراب" کر سکتے ہیں۔ اس کو کم سے کم کرنے کے لیے، سیکھنے کی شرح کو کم کرنا ضروری ہے (مثال کے طور پر، تربیت کے آخر میں، ہم Q-Table کی قدروں کو صرف ایک چھوٹے قدر سے ایڈجسٹ کرتے ہیں)۔
- **لمبائی اچانک بڑھ جاتی ہے۔** اس گراف میں ہم یہ بھی دیکھتے ہیں کہ ایک موقع پر لمبائی اچانک بڑھ گئی۔ یہ عمل کی تصادفی نوعیت کو ظاہر کرتا ہے، اور یہ کہ ہم کسی وقت Q-Table کے کوایفیشینٹس کو نئے قدروں سے اووررائٹ کر کے "خراب" کر سکتے ہیں۔ یہ مثالی طور پر لرننگ ریٹ کو کم کر کے کم کیا جانا چاہیے (مثلاً، تربیت کے آخر میں ہم Q-Table کی قدروں کو صرف معمولی مقدار سے ایڈجسٹ کرتے ہیں)۔
مجموعی طور پر، یہ یاد رکھنا ضروری ہے کہ سیکھنے کے عمل کی کامیابی اور معیار کا انحصار پیرامیٹرز پر ہوتا ہے، جیسے سیکھنے کی شرح، سیکھنے کی شرح میں کمی، اور ڈسکاؤنٹ فیکٹر۔ ان کو اکثر **ہائپرپیرامیٹرز** کہا جاتا ہے، تاکہ انہیں **پیرامیٹرز** سے الگ کیا جا سکے، جنہیں ہم تربیت کے دوران بہتر بناتے ہیں (مثال کے طور پر، Q-Table coefficients)۔ بہترین ہائپرپیرامیٹر قدروں کو تلاش کرنے کے عمل کو **ہائپرپیرامیٹر آپٹیمائزیشن** کہا جاتا ہے، اور یہ ایک الگ موضوع کا مستحق ہے۔
مجموعی طور پر، یہ یاد رکھنا ضروری ہے کہ سیکھنے کے عمل کی کامیابی اور معیار کا انحصار خاص طور پر ایسے پیرامیٹرز پر ہوتا ہے، جیسے لرننگ ریٹ، لرننگ ریٹ کی کمی، اور ڈسکاؤنٹ فیکٹر۔ انہیں اکثر **ہائپرپیرامیٹرز** کہا جاتا ہے، تاکہ انہیں **پیرامیٹرز** سے الگ کیا جا سکے جنہیں ہم تربیت کے دوران بہتر بناتے ہیں (جیسے، Q-Table کے کوایفیشینٹس)۔ بہترین ہائپرپیرامیٹر ویلیوز تلاش کرنے کے عمل کو **ہائپرپیرامیٹر آپٹیمائزیشن** کہا جاتا ہے، اور یہ ایک الگ موضوع کا مستحق ہے۔
## [لیکچر کے بعد کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
## اسائنمنٹ
## اسائنمنٹ
[ایک زیادہ حقیقت پسندانہ دنیا](assignment.md)
---
**ڈسکلیمر**:
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**ڈس کلیمر**:
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,14 +1,34 @@
## ضروریات
# کارٹپول اسکیٹنگ
اس سبق میں، ہم ایک لائبریری **OpenAI Gym** استعمال کریں گے تاکہ مختلف **ماحول** کی تخلیق کی جا سکے۔ آپ اس سبق کا کوڈ مقامی طور پر (مثلاً Visual Studio Code سے) چلا سکتے ہیں، جس صورت میں سیمولیشن ایک نئی ونڈو میں کھلے گی۔ آن لائن کوڈ چلانے کی صورت میں، آپ کو کوڈ میں کچھ تبدیلیاں کرنی پڑ سکتی ہیں، جیسا کہ [یہاں](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) بیان کیا گیا ہے۔
پچھلے سبق میں جس مسئلے کو ہم حل کر رہے تھے، وہ شاید ایک کھلونا مسئلہ لگتا ہو، جو واقعی زندگی کے حقیقی منظرناموں کے لئے لاگو نہیں ہوتا۔ ایسا نہیں ہے، کیونکہ بہت سے حقیقی دنیا کے مسائل بھی اس منظرنامے کو شئیر کرتے ہیں - جن میں شطرنج یا گو کھیلنا شامل ہے۔ یہ اس لیے مماثل ہیں کیونکہ ہمارے پاس بھی ایک بورڈ ہوتا ہے جس کے قواعد دیے جاتے ہیں اور ایک **معین حالت** ہوتی ہے۔
## [پہلے سبق کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
## تعارف
اس سبق میں ہم Q-لرننگ کے وہی اصول ایک ایسے مسئلہ پر لاگو کریں گے جس کی حالت **مسلسل** ہو، یعنی ایسی حالت جو ایک یا زیادہ حقیقی اعداد سے ظاہر ہو۔ ہم درج ذیل مسئلہ کا سامنا کریں گے:
> **مسئلہ**: اگر پیٹر بھیڑیا سے بچنا چاہتا ہے، تو اسے تیز حرکت کرنے کے قابل ہونا چاہیے۔ ہم دیکھیں گے کہ پیٹر کس طرح اسکیٹ کرنا سیکھ سکتا ہے، خاص طور پر توازن برقرار رکھنے کا ہنر، Q-لرننگ استعمال کرتے ہوئے۔
![عظیم فرار!](../../../../translated_images/ur/escape.18862db9930337e3.webp)
> پیٹر اور اس کے دوست بھیڑیا سے بچنے کے لیے تخلیقی حل نکالتے ہیں! تصویر از [جین لوپر](https://twitter.com/jenlooper)
ہم توازن برقرار رکھنے کے ایک سادہ ماڈل کو استعمال کریں گے، جسے **کارٹپول** مسئلہ کہا جاتا ہے۔ کارٹپول دنیا میں، ہمارے پاس ایک افقی سلائیڈر ہوتا ہے جو بائیں یا دائیں حرکت کر سکتا ہے، اور مقصد یہ ہے کہ ایک عمودی کھمبے کو سلائیڈر کے اوپر متوازن رکھا جائے۔
<img alt="ایک کارٹپول" src="../../../../translated_images/ur/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/) نے بنایا ہے۔ اس جم کا استعمال کرتے ہوئے ہم مختلف **ماحول** بنا سکتے ہیں، جیسے کہ کارٹ پول سیمولیشن یا اٹاری گیمز۔
پچھلے سبق میں، کھیل کے قواعد اور حالت `Board` کلاس کے ذریعے دی گئی تھی جو ہم نے خود بنائی تھی۔ یہاں ہم ایک خاص **سمولیشن ماحول** استعمال کریں گے، جو کھمبے کے توازن کے پیچھے طبیعیات کی نقل کرے گا۔ تربیتی تقویتی سیکھنے کے الگورتھمز کے لیے ایک مقبول سمولیشن ماحول کو [Gym](https://gym.openai.com/) کہا جاتا ہے، جسے [OpenAI](https://openai.com/) سنبھالتا ہے۔ اس جیم کا استعمال کرتے ہوئے ہم کارٹپول سمولیشن سے لے کر اٹاری گیمز تک مختلف **ماحولیات** بنا سکتے ہیں۔
> **نوٹ**: آپ OpenAI Gym کے دیگر دستیاب ماحول [یہاں](https://gym.openai.com/envs/#classic_control) دیکھ سکتے ہیں۔
> **نوٹ**: آپ OpenAI Gym کی دیگر دستیاب ماحولیات [یہاں](https://gym.openai.com/envs/#classic_control) دیکھ سکتے ہیں۔
سب سے پہلے، جم انسٹال کریں اور مطلوبہ لائبریریاں درآمد کریں (کوڈ بلاک 1):
سب سے پہلے، آئیے جیم انسٹال کریں اور ضروری لائبریریز درآمد کریں (کوڈ بلاک 1):
```python
import sys
@ -20,15 +40,15 @@ import numpy as np
import random
```
## مشق - کارٹ پول ماحول کو انیشیئلائز کریں
## مشق - کارٹپول ماحول کا آغاز
کارٹ پول بیلنسنگ مسئلے پر کام کرنے کے لیے، ہمیں متعلقہ ماحول کو انیشیئلائز کرنا ہوگا۔ ہر ماحول کے ساتھ درج ذیل چیزیں منسلک ہوتی ہیں:
کارٹپول توازن کے مسئلہ پر کام کرنے کے لیے، ہمیں متعلقہ ماحول کی شروعات کرنا ہوگی۔ ہر ماحول کے ساتھ منسلک ہوتا ہے:
- **مشاہدہ کی جگہ** جو اس معلومات کی ساخت کو بیان کرتی ہے جو ہمیں ماحول سے ملتی ہے۔ کارٹ پول مسئلے کے لیے، ہمیں پول کی پوزیشن، رفتار اور کچھ دیگر اقدار ملتی ہیں۔
- **مشاہدہ کی جگہ** جو اس معلومات کی ساخت کو متعین کرتی ہے جو ہمیں ماحول سے ملتی ہے۔ کارٹپول کے مسئلہ میں، ہمیں کھمبے کی پوزیشن، رفتار اور کچھ دیگر مقداریں ملتی ہیں۔
- **عمل کی جگہ** جو ممکنہ اعمال کو بیان کرتی ہے۔ ہمارے معاملے میں عمل کی جگہ غیر مسلسل ہے، اور اس میں دو اعمال شامل ہیں - **بائیں** اور **دائیں**۔ (کوڈ بلاک 2)
- **عمل کی جگہ** جو ممکنہ کاروائیوں کی تعریف کرتی ہے۔ ہمارے کیس میں عمل کی جگہ محدود ہے، اور اس میں دو عمل شامل ہیں - **بائیں** اور **دائیں**۔ (کوڈ بلاک 2)
1. انیشیئلائز کرنے کے لیے، درج ذیل کوڈ لکھیں:
1. شروع کرنے کے لیے، درج ذیل کوڈ ٹائپ کریں:
```python
env = gym.make("CartPole-v1")
@ -37,11 +57,11 @@ import random
print(env.action_space.sample())
```
ماحول کو کام کرتے ہوئے دیکھنے کے لیے، آئیے 100 قدموں کے لیے ایک مختصر سیمولیشن چلائیں۔ ہر قدم پر، ہم ایک عمل فراہم کرتے ہیں جو لیا جائے گا - اس سیمولیشن میں ہم `action_space` سے ایک عمل کو تصادفی طور پر منتخب کرتے ہیں۔
ماحول کیسے کام کرتا ہے یہ دیکھنے کے لیے، ایک مختصر سمولیشن 100 مراحل کے لیے چلائیں۔ ہر مرحلے پر، ہم ایک عمل کا انتخاب کرتے ہیں جو انجام دیا جائے گا - اس سمولیشن میں ہم `action_space` سے تصادفی طور پر ایک عمل منتخب کرتے ہیں۔
1. نیچے دیے گئے کوڈ کو چلائیں اور دیکھیں کہ اس کا نتیجہ کیا نکلتا ہے۔
1. نیچے دیا گیا کوڈ چلائیں اور نتیجہ دیکھیں۔
✅ یاد رکھیں کہ یہ کوڈ مقامی Python انسٹالیشن پر چلانا بہتر ہے! (کوڈ بلاک 3)
✅ یاد رکھیں کہ اس کوڈ کو مقامی پائتھون انسٹالیشن پر چلانا ترجیح دی جاتی ہے! (کوڈ بلاک 3)
```python
env.reset()
@ -54,9 +74,9 @@ import random
آپ کو کچھ اس طرح کی تصویر نظر آنی چاہیے:
![غیر متوازن کارٹ پول](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif)
![بے توازن کارٹپول](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif)
1. سیمولیشن کے دوران، ہمیں مشاہدات حاصل کرنے کی ضرورت ہوتی ہے تاکہ فیصلہ کیا جا سکے کہ کیا کرنا ہے۔ درحقیقت، `step` فنکشن موجودہ مشاہدات، ایک انعامی فنکشن، اور `done` فلیگ واپس کرتا ہے جو یہ ظاہر کرتا ہے کہ آیا سیمولیشن جاری رکھنا مناسب ہے یا نہیں: (کوڈ بلاک 4)
1. سمولیشن کے دوران، ہمیں مشاہدات لینے کی ضرورت ہے تاکہ عمل کرنے کا فیصلہ کیا جا سکے۔ حقیقت میں، قدم کا فعل موجودہ مشاہدات، انعامی فعل، اور "ہو گیا" جھنڈا واپس کرتا ہے جو بتاتا ہے کہ آیا سمولیشن جاری رکھنا معنی رکھتا ہے یا نہیں: (کوڈ بلاک 4)
```python
env.reset()
@ -69,7 +89,7 @@ import random
env.close()
```
آپ کو نوٹ بک آؤٹ پٹ میں کچھ اس طرح نظر آئے گا:
آپ کو نوٹ بک آؤٹ پٹ میں کچھ اس طرح کا نتیجہ نظر آئے گا:
```text
[ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0
@ -82,43 +102,43 @@ import random
[ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0
```
سیمولیشن کے ہر قدم پر واپس آنے والا مشاہدہ ویکٹر درج ذیل اقدار پر مشتمل ہوتا ہے:
- کارٹ کی پوزیشن
- کارٹ کی رفتار
- پول کا زاویہ
- پول کی گردش کی شرح
ہر قدم پر واپس آنے والا مشاہداتی ویکٹر درج ذیل مقداریں رکھتا ہے:
- گاڑی کی پوزیشن
- گاڑی کی رفتار
- کھمبے کا زاویہ
- کھمبے کی گردش کی شرح
1. ان نمبروں کی کم سے کم اور زیادہ سے زیادہ قدر حاصل کریں: (کوڈ بلاک 5)
1. ان نمبروں کی کم از کم اور زیادہ سے زیادہ قیمت حاصل کریں: (کوڈ بلاک 5)
```python
print(env.observation_space.low)
print(env.observation_space.high)
```
آپ یہ بھی نوٹ کر سکتے ہیں کہ ہر سیمولیشن قدم پر انعام کی قدر ہمیشہ 1 ہوتی ہے۔ اس کی وجہ یہ ہے کہ ہمارا مقصد زیادہ سے زیادہ وقت تک زندہ رہنا ہے، یعنی پول کو ایک معقول عمودی پوزیشن میں زیادہ سے زیادہ وقت تک رکھنا۔
آپ یہ بھی نوٹ کریں گے کہ ہر سمولیشن قدم پر انعام کی مقدار ہمیشہ 1 ہوتی ہے۔ اس کی وجہ یہ ہے کہ ہمارا مقصد جتنا ممکن ہو زندہ رہنا ہے، یعنی کھمبے کو زیادہ سے زیادہ عمودی حالت میں رکھنا ہے۔
درحقیقت، کارٹ پول سیمولیشن کو حل شدہ سمجھا جاتا ہے اگر ہم 100 مسلسل آزمائشوں میں 195 کا اوسط انعام حاصل کرنے میں کامیاب ہو جائیں۔
اصل میں، اگر ہم 100 مسلسل کوششوں میں اوسط انعام 195 حاصل کر لیں تو کارٹپول سمولیشن کو حل شدہ تصور کیا جاتا ہے۔
## حالت کی تقسیم
Q-Learning میں، ہمیں Q-Table بنانا ہوتا ہے جو یہ بیان کرتا ہے کہ ہر حالت میں کیا کرنا ہے۔ ایسا کرنے کے لیے، ہمیں حالت کو **غیر مسلسل** بنانا ہوتا ہے، زیادہ درست طور پر، اس میں غیر مسلسل اقدار کی محدود تعداد ہونی چاہیے۔ لہذا، ہمیں کسی طرح اپنے مشاہدات کو **تقسیم** کرنا ہوگا، انہیں محدود حالتوں کے سیٹ میں نقشہ بنانا ہوگا۔
Q-لرننگ میں، ہمیں Q-Table بنانا ہوتا ہے جو بتاتی ہے کہ ہر حالت میں کیا کرنا ہے۔ ایسا کرنے کے لیے، ہمیں حالت کو **معین** ہونا چاہیے، یعنی اس میں محدود تعداد میں معین اقدار ہونی چاہئیں۔ لہٰذا، ہمیں کسی نہ کسی طرح اپنے مشاہدات کو **معین** بنانا ہوگا، تاکہ وہ ایک محدود سیٹ کی حالتوں میں نقش ہو جائیں۔
اس کے لیے چند طریقے ہیں:
- **حصوں میں تقسیم کریں**۔ اگر ہمیں کسی خاص قدر کے وقفے کا علم ہو، تو ہم اس وقفے کو کئی **حصوں** میں تقسیم کر سکتے ہیں، اور پھر قدر کو اس حصے کے نمبر سے بدل سکتے ہیں جس سے یہ تعلق رکھتی ہے۔ یہ numpy کے [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) طریقہ استعمال کرتے ہوئے کیا جا سکتا ہے۔ اس صورت میں، ہم حالت کے سائز کو بالکل جان لیں گے، کیونکہ یہ ڈیجیٹلائزیشن کے لیے منتخب کردہ حصوں کی تعداد پر منحصر ہوگا۔
- **بنز میں تقسیم کریں**۔ اگر ہمیں کسی خاص قدر کا وقفہ معلوم ہو، تو ہم اس وقفے کو چند **بنز** میں تقسیم کر سکتے ہیں، اور پھر قدر کو اس بن نمبر سے بدل سکتے ہیں جس میں وہ آتی ہے۔ یہ numpy کے [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) طریقے سے کیا جا سکتا ہے۔ اس صورت میں، ہم حالت کا سائز بخوبی جان لیں گے کیونکہ یہ بنز کی تعداد پر منحصر ہوگا جو ہم ڈیجیٹلائزیشن کے لئے منتخب کرتے ہیں۔
✅ ہم خطی انٹرپولیشن بھی استعمال کر سکتے ہیں تاکہ اقدار کو کسی محدود وقفے (مثلاً، -20 سے 20) میں لایا جا سکے، اور پھر اعداد کو گول کر کے integers میں تبدیل کریں۔ یہ حالت کے سائز پر کم کنٹرول دیتا ہے، خاص طور پر اگر ہمیں ان پٹ اقدار کی صحیح رینجز معلوم نہ ہوں۔ مثال کے طور پر، ہمارے کیس میں 4 میں سے 2 اقدار کی بالائی یا نچلی حدود مقرر نہیں ہیں، جس کی وجہ سے ممکنہ حالتیں لامحدود ہو سکتی ہیں۔
✅ ہم لکیری انٹرپولیشن استعمال کر سکتے ہیں تاکہ اقدار کو کسی محدود وقفے (مثلاً -20 سے 20 تک) میں لایا جا سکے، اور پھر نمبروں کو گول کر کے انٹیجرز میں تبدیل کر سکتے ہیں۔ اس سے حالت کے سائز پر تھوڑا کم کنٹرول ملتا ہے، خاص طور پر اگر ہمیں ان پٹ اقدار کی بالکل حد معلوم نہ ہو۔ مثال کے طور پر، ہمارے معاملے میں 4 میں سے 2 اقدار کی اوپر/نیچے کی حد نہیں ہے، جو حالتوں کی لامحدود تعداد کا نتیجہ دے سکتی ہے۔
ہمارے مثال میں، ہم دوسرا طریقہ منتخب کریں گے۔ جیسا کہ آپ بعد میں دیکھیں گے، باوجود نامعلوم بالائی/نچلی حدوں کے، وہ قیمتیں عام طور پر مخصوص محدود وقفوں سے باہر نہیں جاتیں، لہٰذا انتہائی قیمتوں والی حالتیں بہت کم ہوں گی۔
ہمارے مثال میں، ہم دوسرے طریقے کے ساتھ جائیں گے۔ جیسا کہ آپ بعد میں نوٹ کریں گے، غیر متعین اوپر/نیچے کی حدود کے باوجود، وہ اقدار شاذ و نادر ہی کچھ محدود وقفوں سے باہر جاتی ہیں، لہذا وہ حالتیں جن کی انتہائی اقدار ہوں گی بہت کم ہوں گی۔
1. یہاں وہ فنکشن ہے جو ہمارے ماڈل سے مشاہدہ لے گا اور 4 انٹیجر اقدار کے ایک جوڑے تیار کرے گا: (کوڈ بلاک 6)
1. یہاں وہ فعل ہے جو ہمارے ماڈل سے مشاہدات لے کر 4 عددی integer قیمتوں کا جوڑا بنائے گا: (کوڈ بلاک 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,39 +146,39 @@ Q-Learning میں، ہمیں Q-Table بنانا ہوتا ہے جو یہ بیان
print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10))
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter
nbins = [20,20,10,10] # number of bins for each parameter
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # ہر پیرامیٹر کے لئے اقدار کے وقفے
nbins = [20,20,10,10] # ہر پیرامیٹر کے لئے بنز کی تعداد
bins = [create_bins(ints[i],nbins[i]) for i in range(4)]
def discretize_bins(x):
return tuple(np.digitize(x[i],bins[i]) for i in range(4))
```
1. آئیے اب ایک مختصر سیمولیشن چلائیں اور ان غیر مسلسل ماحول کی اقدار کا مشاہدہ کریں۔ دونوں `discretize` اور `discretize_bins` کو آزمانے کے لیے آزاد محسوس کریں اور دیکھیں کہ کیا کوئی فرق ہے۔
1. اب ایک مختصر سمولیشن چلائیں اور ان معین ماحول کی قدر دیکھیں۔ دونوں `discretize` اور `discretize_bins` آزما سکتے ہیں اور فرق دیکھیں۔
`discretize_bins` حصے کا نمبر واپس کرتا ہے، جو 0 سے شروع ہوتا ہے۔ لہذا ان پٹ متغیر کی اقدار کے ارد گرد 0 کے لیے یہ وقفے کے درمیان سے نمبر واپس کرتا ہے (10)۔ `discretize` میں، ہم نے آؤٹ پٹ اقدار کی حد کے بارے میں پرواہ نہیں کی، انہیں منفی ہونے کی اجازت دی، لہذا حالت کی اقدار منتقل نہیں ہوئیں، اور 0 کا مطلب 0 ہے۔ (کوڈ بلاک 8)
discretize_bins بن نمبر واپس کرتا ہے، جو 0 کی بنیاد پر ہوتا ہے۔ لہٰذا متغیر کی وہ قدر جو تقریباً 0 کے آس پاس ہو، انٹر وال کے درمیان والے نمبر (10) کو لوٹاتی ہے۔ discretize میں، ہم نے آؤٹ پٹ کی حد کی پرواہ نہیں کی، جس سے مقداری اقدار منفی بھی ہو سکتی ہیں، لہٰذا حالت کی قیمتیں شفٹ نہیں ہوتیں، اور 0 بالکل 0 کو ظاہر کرتا ہے۔ (کوڈ بلاک 8)
```python
env.reset()
done = False
while not done:
#env.render()
#ای این وی ۔رینڈر()
obs, rew, done, info = env.step(env.action_space.sample())
#print(discretize_bins(obs))
#پرنٹ(ڈسکریٹائز_بنز(ابز))
print(discretize(obs))
env.close()
```
`env.render` سے شروع ہونے والی لائن کو ان کمنٹ کریں اگر آپ دیکھنا چاہتے ہیں کہ ماحول کیسے عمل کرتا ہے۔ بصورت دیگر آپ اسے پس منظر میں چلا سکتے ہیں، جو زیادہ تیز ہے۔ ہم اپنے Q-Learning عمل کے دوران اس "غیر مرئی" عمل کو استعمال کریں گے۔
اگر آپ ماحول کی عمل درآمد دیکھنا چاہتے ہیں تو `env.render` سے شروع ہونے والی لائن کو uncomment کریں۔ ورنہ آپ اسے پس منظر میں چلا سکتے ہیں، جو تیز تر ہے۔ ہم اپنے Q-لرننگ کے عمل کے دوران اس "غیر مرئی" عمل درآمد کو استعمال کریں گے۔
## Q-Table کی ساخت
پچھلے سبق میں، حالت ایک سادہ جوڑے پر مشتمل تھی جس میں 0 سے 8 تک کے نمبر تھے، اور اس لیے Q-Table کو numpy tensor کے ذریعے 8x8x2 کی شکل میں ظاہر کرنا آسان تھا۔ اگر ہم حصوں کی تقسیم استعمال کریں، تو ہمارے حالت ویکٹر کا سائز بھی معلوم ہے، لہذا ہم وہی طریقہ استعمال کر سکتے ہیں اور حالت کو 20x20x10x10x2 کی شکل کے ایک صف کے ذریعے ظاہر کر سکتے ہیں (یہاں 2 عمل کی جگہ کا طول و عرض ہے، اور پہلی طول و عرض مشاہدہ کی جگہ میں ہر پیرامیٹر کے لیے منتخب کردہ حصوں کی تعداد سے مطابقت رکھتی ہے)۔
پچھلے سبق میں، حالت 0 سے 8 تک کے آسان جوڑے کی صورت میں تھی، لہٰذا numpy ٹینسر کا استعمال کرتے ہوئے Q-Table کو 8x8x2 کی شکل میں ظاہر کرنا آسان تھا۔ اگر ہم بنز کے ذریعے تقسیم استعمال کریں تو ہمارے حالت ویکٹر کا سائز بھی معلوم ہوتا ہے، لہٰذا ہم اسی طریقہ کو استعمال کر کے حالت کو 20x20x10x10x2 کی شکل میں پیش کر سکتے ہیں (یہاں 2 عمل کی جگہ کی جہت ہے، اور پہلی جہتیں مشاہدہ کی جگہ کے ہر پیرامیٹر کے لیے منتخب کردہ بنز کی تعداد کو ظاہر کرتی ہیں)۔
تاہم، بعض اوقات مشاہدہ کی جگہ کے درست طول و عرض معلوم نہیں ہوتے۔ `discretize` فنکشن کے معاملے میں، ہم کبھی بھی یقین سے نہیں کہہ سکتے کہ ہماری حالت کچھ حدود کے اندر رہتی ہے، کیونکہ کچھ اصل اقدار محدود نہیں ہیں۔ لہذا، ہم تھوڑا مختلف طریقہ استعمال کریں گے اور Q-Table کو ایک ڈکشنری کے ذریعے ظاہر کریں گے۔
تاہم، کبھی کبھار مشاہدہ کی جگہ کی درست جہتیں معلوم نہیں ہوتیں۔ `discretize` فعل کی صورت میں، ہم کبھی یقین نہیں کر سکتے کہ ہمارا حالت مخصوص حدود میں رہے گا، کیونکہ کچھ اصل قدرین آزاد ہوتی ہیں۔ لہٰذا، ہم تھوڑا مختلف طریقہ استعمال کریں گے اور Q-Table کو ایک لغت (dictionary) سے ظاہر کریں گے۔
1. جوڑے *(state,action)* کو ڈکشنری کی کلید کے طور پر استعمال کریں، اور قدر Q-Table کے اندراج کی قدر سے مطابقت رکھے گی۔ (کوڈ بلاک 9)
1. جوڑا *(state, action)* لغت کی کنجی کے طور پر استعمال کریں، اور قیمت Q-Table کی اندراج کی قیمت ہوگی۔ (کوڈ بلاک 9)
```python
Q = {}
@ -168,38 +188,38 @@ Q-Learning میں، ہمیں Q-Table بنانا ہوتا ہے جو یہ بیان
return [Q.get((state,a),0) for a in actions]
```
یہاں ہم ایک فنکشن `qvalues()` بھی بیان کرتے ہیں، جو دی گئی حالت کے لیے Q-Table کی اقدار کی فہرست واپس کرتا ہے جو تمام ممکنہ اعمال سے مطابقت رکھتی ہے۔ اگر اندراج Q-Table میں موجود نہیں ہے، تو ہم ڈیفالٹ کے طور پر 0 واپس کریں گے۔
یہاں ہم `qvalues()` فعل بھی تعریف کرتے ہیں، جو دی گئی حالت کے لئے تمام ممکنہ عملوں کے لیے Q-Table کی ایک فہرست واپس کرتا ہے۔ اگر Q-Table میں اندراج موجود نہ ہو، تو ہم ڈیفالٹ طور پر 0 واپس کریں گے۔
## آئیے Q-Learning شروع کریں
## آئیے Q-لرننگ شروع کریں
اب ہم پیٹر کو بیلنس کرنا سکھانے کے لیے تیار ہیں!
اب ہم پیٹر کو توازن قائم رکھنا سکھانے کے لیے تیار ہیں!
1. سب سے پہلے، کچھ ہائپر پیرامیٹرز سیٹ کریں: (کوڈ بلاک 10)
1. سب سے پہلے، چند ہائپر پیرامیٹرز سیٹ کریں: (کوڈ بلاک 10)
```python
# hyperparameters
# ہائپر پیرا میٹرز
alpha = 0.3
gamma = 0.9
epsilon = 0.90
```
یہاں، `alpha` **لرننگ ریٹ** ہے جو یہ بیان کرتا ہے کہ ہمیں Q-Table کی موجودہ اقدار کو ہر قدم پر کس حد تک ایڈجسٹ کرنا چاہیے۔ پچھلے سبق میں ہم نے 1 سے شروع کیا، اور پھر تربیت کے دوران `alpha` کو کم اقدار پر لے گئے۔ اس مثال میں ہم اسے سادگی کے لیے مستقل رکھیں گے، اور آپ بعد میں `alpha` اقدار کو ایڈجسٹ کرنے کے ساتھ تجربہ کر سکتے ہیں۔
یہاں، `alpha` **سیکھنے کی شرح** ہے جو بتاتی ہے کہ ہر قدم پر Q-Table کی موجودہ قدروں کو کس حد تک ایڈجسٹ کرنا چاہیے۔ پچھلے سبق میں ہم نے 1 سے شروع کیا، پھر تربیت کے دوران `alpha` کو کم کیا۔ اس مثال میں ہم اسے آسانی کے لیے مستقل رکھیں گے، اور آپ بعد میں `alpha` کی قدروں کو ایڈجسٹ کرنے پر تجربہ کر سکتے ہیں۔
`gamma` **ڈسکاؤنٹ فیکٹر** ہے جو یہ ظاہر کرتا ہے کہ ہمیں موجودہ انعام کے مقابلے میں مستقبل کے انعام کو کس حد تک ترجیح دینی چاہیے۔
`gamma` **رعایتی عنصر** ہے جو دکھاتا ہے کہ ہمیں مستقبل کے انعام کو موجودہ انعام پر کس حد تک ترجیح دینی چاہیے۔
`epsilon` **ایکسپلوریشن/ایکسپلائیٹیشن فیکٹر** ہے جو یہ طے کرتا ہے کہ ہمیں ایکسپلوریشن کو ایکسپلائیٹیشن پر ترجیح دینی چاہیے یا اس کے برعکس۔ ہمارے الگورتھم میں، ہم `epsilon` فیصد معاملات میں اگلا عمل Q-Table کی اقدار کے مطابق منتخب کریں گے، اور باقی معاملات میں ہم ایک تصادفی عمل انجام دیں گے۔ یہ ہمیں تلاش کی جگہ کے ان علاقوں کو دریافت کرنے کی اجازت دے گا جنہیں ہم نے پہلے کبھی نہیں دیکھا۔
`epsilon` **تجربہ/استعمال کا عنصر** ہے جو تعین کرتا ہے کہ ہمیں تجربہ (انویسٹیگیشن) پر ترجیح دینی چاہیے یا استعمال (exploitation) پر۔ ہمارے الگورتھم میں، ہم `epsilon` فیصد مواقع پر Q-Table کی قدروں کے مطابق اگلا عمل منتخب کریں گے، اور باقی مواقع پر ایک اتفاقی عمل انجام دیں گے۔ یہ ہمیں تلاش کے اس جگہ کو دریافت کرنے کی اجازت دے گا جو پہلے کبھی نہیں دیکھا گیا۔
بیلنسنگ کے لحاظ سے - تصادفی عمل کا انتخاب (ایکسپلوریشن) غلط سمت میں ایک تصادفی دھکا کے طور پر کام کرے گا، اور پول کو ان "غلطیوں" سے بیلنس بحال کرنا سیکھنا ہوگا۔
توازن برقرار رکھنے کے لحاظ سے - اتفاقی عمل کا انتخاب (تجربہ) ایک غلط سمت میں اتفاقی دھکا کی طرح ہوگا، اور کھمبے کو ان "غلطیوں" سے توازن برقرار رکھنا سیکھنا پڑے گا۔
### الگورتھم کو بہتر بنائیں
ہم اپنے پچھلے سبق کے الگورتھم میں دو بہتریاں بھی کر سکتے ہیں:
- **اوسط مجموعی انعام کا حساب لگائیں**، کئی سیمولیشنز پر۔ ہم ہر 5000 تکرار پر پیش رفت پرنٹ کریں گے، اور ہم اس وقت کے دوران اپنے مجموعی انعام کو اوسط کریں گے۔ اس کا مطلب ہے کہ اگر ہمیں 195 سے زیادہ پوائنٹس ملتے ہیں - ہم مسئلے کو حل شدہ سمجھ سکتے ہیں، مطلوبہ معیار سے بھی زیادہ معیار کے ساتھ۔
- **زیادہ سے زیادہ اوسط مجموعی نتیجہ کا حساب لگائیں**، `Qmax`، اور ہم اس نتیجے سے مطابقت رکھنے والے Q-Table کو محفوظ کریں گے۔ جب آپ تربیت چلائیں گے تو آپ نوٹ کریں گے کہ کبھی کبھی اوسط مجموعی نتیجہ کم ہونا شروع ہو جاتا ہے، اور ہم تربیت کے دوران مشاہدہ کیے گئے بہترین ماڈل سے مطابقت رکھنے والے Q-Table کی اقدار کو محفوظ رکھنا چاہتے ہیں۔
- **اوسط مجموعی انعام** کا حساب لگائیں، کئی سمولیشنز پر۔ ہم ہر 5000 دورانیوں پر پیش رفت پرنٹ کریں گے، اور اس مدت کے دوران اپنے مجموعی انعام کا اوسط نکالیں گے۔ اس کا مطلب ہے کہ اگر ہمیں 195 پوائنٹس سے زیادہ مل جائیں تو ہم مسئلہ کو حل شدہ سمجھ سکتے ہیں، یہاں تک کہ مطلوبہ معیار سے بھی بہتر۔
- **زیادہ سے زیادہ اوسط مجموعی نتیجہ** `Qmax` کا حساب لگائیں، اور ہم اس نتیجہ سے متعلق Q-Table کو محفوظ کریں گے۔ جب آپ تربیت چلائیں گے، تو آپ دیکھیں گے کہ کچھ وقتوں میں اوسط مجموعی نتیجہ کم ہونا شروع ہو جاتا ہے، اور ہم Q-Table کی ایسی قدریں رکھنا چاہتے ہیں جو تربیت کے دوران بہترین ماڈل کے متعلق ہوں۔
1. ہر سیمولیشن پر تمام مجموعی انعامات کو `rewards` ویکٹر میں جمع کریں تاکہ بعد میں گراف بنایا جا سکے۔ (کوڈ بلاک 11)
1. ہر سمولیشن پر تمام مجموعی انعامات کو `rewards` ویکٹر میں جمع کریں تاکہ بعد میں گراف بنایا جا سکے۔ (کوڈ بلاک 11)
```python
def probs(v,eps=1e-4):
@ -214,15 +234,15 @@ Q-Learning میں، ہمیں Q-Table بنانا ہوتا ہے جو یہ بیان
obs = env.reset()
done = False
cum_reward=0
# == do the simulation ==
# == سمولیشن کریں ==
while not done:
s = discretize(obs)
if random.random()<epsilon:
# exploitation - chose the action according to Q-Table probabilities
# استحصال - عمل کو کیو-ٹیبل کے امکانات کے مطابق منتخب کریں
v = probs(np.array(qvalues(s)))
a = random.choices(actions,weights=v)[0]
else:
# exploration - randomly chose the action
# تلاش - عمل کو بے ترتیب منتخب کریں
a = np.random.randint(env.action_space.n)
obs, rew, done, info = env.step(a)
@ -231,7 +251,7 @@ Q-Learning میں، ہمیں Q-Table بنانا ہوتا ہے جو یہ بیان
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 @@ Q-Learning میں، ہمیں Q-Table بنانا ہوتا ہے جو یہ بیان
cum_rewards=[]
```
آپ ان نتائج سے کیا نوٹ کر سکتے ہیں:
آپ کو ان نتائج سے کیا ملتا ہے:
- **ہمارے مقصد کے قریب**۔ ہم 100+ مسلسل سیمولیشنز کے دوران 195 مجموعی انعامات حاصل کرنے کے مقصد کے بہت قریب ہیں، یا ہم نے درحقیقت اسے حاصل کر لیا ہے! یہاں تک کہ اگر ہمیں چھوٹے نمبر ملتے ہیں، ہم پھر بھی نہیں جانتے، کیونکہ ہم 5000 رنز پر اوسط کرتے ہیں، اور رسمی معیار میں صرف 100 رنز کی ضرورت ہے۔
- **ہمارے مقصد کے قریب**۔ ہم 100+ مسلسل سمولیشنز میں 195 مجموعی انعام حاصل کرنے کے مقصد کے بہت قریب ہیں، یا ہم نے حقیقت میں یہ حاصل کر لیا ہے! اگر ہمیں کم نمبر بھی ملیں، تو بھی ہمیں یقین نہیں ہو سکتا کیونکہ ہم 5000 کوششوں پر اوسط نکال رہے ہیں، جبکہ رسمی معیار میں صرف 100 کوششیں درکار ہیں۔
- **انعام کم ہونا شروع ہو جاتا ہے**۔ کبھی کبھار انعام کم ہونا شروع ہو جاتا ہے، جس کا مطلب ہے کہ ہم Q-Table میں پہلے سے سیکھے ہوئے اقدار کو ان قدروں سے "تباہ" کر سکتے ہیں جو صورت حال کو خراب کر دیں۔
- **انعام کم ہونا شروع ہوتا ہے**۔ کبھی کبھی انعام کم ہونا شروع ہو جاتا ہے، جس کا مطلب ہے کہ ہم Q-Table میں پہلے سے سیکھے گئے اقدار کو ان اقدار کے ساتھ "تباہ" کر سکتے ہیں جو صورتحال کو خراب کرتے ہیں۔
یہ مشاہدہ تربیتی پیش رفت کا گراف بنانا زیادہ واضح کر دیتا ہے۔
یہ مشاہدہ زیادہ واضح طور پر نظر آتا ہے اگر ہم تربیت کی پیش رفت کا گراف بنائیں۔
## تربیتی پیش رفت کا گراف
## تربیت کی پیش رفت کا گراف بنانا
تربیت کے دوران، ہم نے ہر تکرار پر مجموعی انعام کی قدر کو `rewards` ویکٹر میں جمع کیا۔ یہاں یہ گراف ہے جب ہم اسے تکرار نمبر کے خلاف بناتے ہیں:
تربیت کے دوران، ہم نے ہر چکر میں مجموعی انعام کی مقدار `rewards` ویکٹر میں جمع کی ہے۔ یہ گراف ہے جب ہم اسے چکر نمبر کے خلاف پیش کریں:
```python
plt.plot(rewards)
```
![خام پیش رفت](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png)
![خام پیش رفت](../../../../translated_images/ur/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/ur/train_progress_runav.c71694a8fa9ab359.webp)
## ہائپر پیرامیٹرز میں تبدیلی
تربیت کو زیادہ مستحکم بنانے کے لیے، تربیت کے دوران ہمارے کچھ ہائپر پیرامیٹرز کو ایڈجسٹ کرنا سمجھ میں آتا ہے۔ خاص طور پر:
سیکھنے کو زیادہ مستحکم بنانے کے لیے، تربیت کے دوران اپنے کچھ ہائپر پیرامیٹرز کو ایڈجسٹ کرنا منطقی ہے۔ خاص طور پر:
- **سیکھنے کی شرح** `alpha` کے لیے، ہم ممکنہ طور پر ابتدائی طور پر 1 کے قریب قابلِ قدر لے سکتے ہیں، اور پھر اس پیرامیٹر کو کم کرتے جائیں۔ وقت کے ساتھ، Q-Table میں ہمیں اچھے احتمال کی قدریں ملیں گی، اس لیے ہمیں انہیں تھوڑا سا ایڈجسٹ کرنا چاہیے، مکمل طور پر نئی قدروں سے تبدیل نہیں کرنا چاہیے۔
- **epsilon بڑھائیں**۔ ہم آہستہ آہستہ `epsilon` کو بڑھانا چاہیں گے تاکہ تحقیق کم اور استعمال زیادہ ہو۔ احتمال ہے کہ ہمیں `epsilon` کی کم قیمت سے شروع کر کے تقریباً 1 تک لے جانا چاہیے۔
> **ٹاسک 1**: ہائپر پیرامیٹرز کی قدروں کے ساتھ تجربہ کریں اور دیکھیں کیا آپ زیادہ مجموعی انعام حاصل کر سکتے ہیں۔ کیا آپ 195 سے اوپر جا پا رہے ہیں؟
- **لرننگ ریٹ کے لیے**، `alpha`، ہم 1 کے قریب اقدار سے شروع کر سکتے ہیں، اور پھر پیرامیٹر کو کم کرتے رہ سکتے ہیں۔ وقت کے ساتھ، ہمیں Q-Table میں اچھی احتمال کی اقدار ملیں گی، اور اس لیے ہمیں انہیں تھوڑا سا ایڈجسٹ کرنا چاہیے، اور نئی اقدار کے ساتھ مکمل طور پر اوور رائٹ نہیں کرنا چاہیے۔
- **epsilon بڑھائیں**۔ ہم `epsilon` کو آہستہ آہستہ بڑھانا چاہیں گے، تاکہ کم دریافت کریں اور زیادہ فائدہ اٹھائیں۔ شاید کم قدر کے ساتھ شروع کرنا اور اسے تقریباً 1 تک لے جانا سمجھ میں آتا ہے۔
> **ٹاسک 1**: ہائپر پیرامیٹرز کی قدروں کے ساتھ تجربہ کریں اور دیکھیں کہ کیا آپ زیادہ مجموعی انعام حاصل کر سکتے ہیں۔ کیا آپ 195 سے اوپر جا رہے ہیں؟
> **کام 2**: مسئلے کو باضابطہ طور پر حل کرنے کے لیے، آپ کو 100 مسلسل رنز کے دوران 195 اوسط انعام حاصل کرنا ہوگا۔ تربیت کے دوران اس کی پیمائش کریں اور یقینی بنائیں کہ آپ نے مسئلے کو باضابطہ طور پر حل کر لیا ہے!
> **کام 2**: مسئلہ کو باقاعدگی سے حل کرنے کے لیے، آپ کو 100 مسلسل رنز میں 195 اوسط انعام حاصل کرنا ہوگا۔ اسے تربیت کے دوران ماپیں اور یقینی بنائیں کہ آپ نے باضابطہ طور پر مسئلہ حل کر لیا ہے!
## نتیجہ عملی طور پر دیکھنا
## نتیجہ عمل میں دیکھنا
یہ دلچسپ ہوگا کہ تربیت یافتہ ماڈل کیسے کام کرتا ہے۔ آئیے سیمولیشن چلائیں اور تربیت کے دوران استعمال کی گئی ایکشن سلیکشن حکمت عملی کو اپنائیں، Q-Table میں موجود احتمال تقسیم کے مطابق نمونے لیں: (کوڈ بلاک 13)
یہ واقعی دلچسپ ہوگا کہ ہم دیکھیں کہ تربیت یافتہ ماڈل کیسے برتاؤ کرتا ہے۔ آئیں ہم سیمولیشن چلائیں اور آموزش کے دوران کی طرح ہی کارروائی کے انتخاب کی حکمت عملی اپنائیں، یعنی Q-Table میں احتمال کی تقسیم کے مطابق سیمپلنگ کریں: (کوڈ بلاک 13)
```python
obs = env.reset()
@ -295,30 +318,32 @@ while not done:
env.close()
```
آپ کو کچھ ایسا نظر آنا چاہیے:
آپ کو کچھ ایسا دیکھنا چاہیے:
![ایک بیلنسنگ کارٹپول](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif)
![ایک متوازن کارٹپول](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif)
---
## 🚀چیلنج
> **کام 3**: یہاں ہم Q-Table کی آخری کاپی استعمال کر رہے تھے، جو شاید بہترین نہ ہو۔ یاد رکھیں کہ ہم نے بہترین کارکردگی دکھانے والے Q-Table کو `Qbest` ویریبل میں محفوظ کیا ہے! اسی مثال کو بہترین Q-Table کے ساتھ آزمائیں، `Qbest` کو `Q` پر کاپی کریں اور دیکھیں کہ کیا فرق محسوس ہوتا ہے۔
> **کام 3**: یہاں ہم Q-Table کی آخری کاپی استعمال کر رہے تھے، جو شاید بہترین نہ ہو۔ یاد رکھیں کہ ہم نے بہترین کارکردگی دکھانے والی Q-Table کو `Qbest` متغیر میں محفوظ کیا ہے! اسی مثال کو بہترین کارکردگی دکھانے والی Q-Table کے ساتھ آزما کر دیکھیں، `Qbest` کو `Q` پر کاپی کریں اور فرق دیکھیں۔
> **کام 4**: یہاں ہم ہر قدم پر بہترین ایکشن منتخب نہیں کر رہے تھے، بلکہ متعلقہ احتمال تقسیم کے ساتھ نمونے لے رہے تھے۔ کیا یہ زیادہ مناسب ہوگا کہ ہمیشہ بہترین ایکشن منتخب کریں، جس کی Q-Table ویلیو سب سے زیادہ ہو؟ یہ `np.argmax` فنکشن استعمال کر کے کیا جا سکتا ہے تاکہ سب سے زیادہ Q-Table ویلیو کے مطابق ایکشن نمبر معلوم کیا جا سکے۔ اس حکمت عملی کو نافذ کریں اور دیکھیں کہ کیا بیلنسنگ میں بہتری آتی ہے۔
> **کام 4**: یہاں ہم ہر قدم پر بہترین عمل کا انتخاب نہیں کر رہے تھے، بلکہ احتمال کی تقسیم کے مطابق سیمپلنگ کر رہے تھے۔ کیا یہ زیادہ معنی خیز نہیں ہوگا کہ ہم ہمیشہ بہترین عمل منتخب کریں، جو Q-Table کی سب سے زیادہ قدر رکھتا ہو؟ یہ `np.argmax` فنکشن استعمال کر کے کیا جا سکتا ہے تاکہ وہ عمل نمبر معلوم ہو جو سب سے زیادہ Q-Table ویلیو کے مطابق ہو۔ اس حکمت عملی کو نافذ کریں اور دیکھیں کہ کیا اس سے توازن بہتر ہوتا ہے۔
## [لیکچر کے بعد کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
## اسائنمنٹ
[ایک ماؤنٹین کار کو تربیت دیں](assignment.md)
[Train a Mountain Car](assignment.md)
## نتیجہ
ہم نے اب سیکھ لیا ہے کہ ایجنٹس کو اچھے نتائج حاصل کرنے کے لیے کیسے تربیت دی جائے، صرف انعامی فنکشن فراہم کر کے جو کھیل کی مطلوبہ حالت کو بیان کرتا ہے، اور انہیں تلاش کے دائرے کو ذہانت سے دریافت کرنے کا موقع دے کر۔ ہم نے Q-Learning الگورتھم کو کامیابی سے لاگو کیا ہے، چاہے وہ ڈسکریٹ ماحول ہو یا مسلسل، لیکن ڈسکریٹ ایکشنز کے ساتھ۔
ہم نے اب سیکھ لیا ہے کہ ایجنٹس کو اچھے نتائج حاصل کرنے کے لیے کیسے تربیت دی جائے، صرف انہیں ایک انعامی فنکشن دے کر جو کھیل کی مطلوبہ حالت کی تعریف کرتا ہے، اور انہیں تلاش کی جگہ کو ذہانت سے دریافت کرنے کا موقع دے کر۔ ہم نے کامیابی سے Q-Learning الگورتھم کو متقطع اور مسلسل ماحول دونوں میں لاگو کیا ہے، لیکن متقطع اعمال کے ساتھ۔
یہ بھی ضروری ہے کہ ان حالات کا مطالعہ کریں جہاں ایکشن اسٹیٹ بھی مسلسل ہو، اور جب مشاہداتی جگہ زیادہ پیچیدہ ہو، جیسے کہ اٹاری گیم اسکرین کی تصویر۔ ان مسائل میں ہمیں اکثر زیادہ طاقتور مشین لرننگ تکنیکوں، جیسے نیورل نیٹ ورکس، کی ضرورت ہوتی ہے تاکہ اچھے نتائج حاصل کیے جا سکیں۔ یہ مزید جدید موضوعات ہمارے آنے والے اعلی درجے کے AI کورس کا حصہ ہوں گے۔
یہ بھی ضروری ہے کہ ایسی صورتوں کا مطالعہ کیا جائے جہاں عمل کی حالت بھی مسلسل ہو، اور مشاہداتی جگہ بہت زیادہ پیچیدہ ہو، جیسے کہ اٹاری گیم کی سکرین کی تصویر۔ ایسے مسائل میں ہمیں عموماً بہتر نتائج حاصل کرنے کے لیے زیادہ طاقتور مشین لرننگ تکنیکوں، جیسے نیورل نیٹ ورکس، کا استعمال کرنا پڑتا ہے۔ یہ مزید ترقی یافتہ موضوعات ہماری آئندہ مزید ترقی یافتہ AI کورس کے موضوعات ہیں۔
---
**ڈسکلیمر**:
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**ڈس کلیمر**:
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -24,8 +24,8 @@
"language_code": "zh-CN"
},
"1-Introduction/3-fairness/README.md": {
"original_hash": "9a6b702d1437c0467e3c5c28d763dac2",
"translation_date": "2025-09-05T09:04:06+00:00",
"original_hash": "0f00d72169a0d37eecfd16d71e01700a",
"translation_date": "2026-07-14T03:40:24+00:00",
"source_file": "1-Introduction/3-fairness/README.md",
"language_code": "zh-CN"
},
@ -54,8 +54,8 @@
"language_code": "zh-CN"
},
"2-Regression/1-Tools/README.md": {
"original_hash": "fa81d226c71d5af7a2cade31c1c92b88",
"translation_date": "2025-09-05T08:58:09+00:00",
"original_hash": "0b8635427b582d03ea4ab7089b93e505",
"translation_date": "2026-07-14T03:37:00+00:00",
"source_file": "2-Regression/1-Tools/README.md",
"language_code": "zh-CN"
},
@ -72,8 +72,8 @@
"language_code": "zh-CN"
},
"2-Regression/2-Data/README.md": {
"original_hash": "7c077988328ebfe33b24d07945f16eca",
"translation_date": "2025-09-05T08:58:47+00:00",
"original_hash": "a58b2c4d16c6b122643391745ac15af6",
"translation_date": "2026-07-14T03:38:52+00:00",
"source_file": "2-Regression/2-Data/README.md",
"language_code": "zh-CN"
},
@ -89,6 +89,12 @@
"source_file": "2-Regression/2-Data/solution/Julia/README.md",
"language_code": "zh-CN"
},
"2-Regression/2-Data/solution/notebook.ipynb": {
"original_hash": "96b95f8cf473481f2f371de8156f1571",
"translation_date": "2026-07-14T03:19:58+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "zh-CN"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T19:52:07+00:00",
@ -115,7 +121,7 @@
},
"2-Regression/4-Logistic/README.md": {
"original_hash": "abf86d845c84330bce205a46b382ec88",
"translation_date": "2025-09-05T08:57:14+00:00",
"translation_date": "2026-07-14T03:37:54+00:00",
"source_file": "2-Regression/4-Logistic/README.md",
"language_code": "zh-CN"
},
@ -457,7 +463,7 @@
},
"8-Reinforcement/1-QLearning/README.md": {
"original_hash": "911efd5e595089000cb3c16fce1beab8",
"translation_date": "2025-09-05T09:09:02+00:00",
"translation_date": "2026-07-14T03:39:43+00:00",
"source_file": "8-Reinforcement/1-QLearning/README.md",
"language_code": "zh-CN"
},
@ -581,6 +587,19 @@
"source_file": "TROUBLESHOOTING.md",
"language_code": "zh-CN"
},
"__translation_failures__": {
"sketchnotes/LICENSE.md": {
"original_hash": "fba3b94d88bfb9b81369b869a1e9a20f",
"source_file": "sketchnotes/LICENSE.md",
"language_code": "zh-CN",
"failure_date": "2026-07-14T03:36:21+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-03T17:21:14+00:00",

@ -1,161 +1,167 @@
# 构建负责任的人工智能的机器学习解决方案
![机器学习中负责任人工智能的概要图](../../../../sketchnotes/ml-fairness.png)
> 由 [Tomomi Imura](https://www.twitter.com/girlie_mac) 绘制的概要图
# 使用负责任的 AI 构建机器学习解决方案
![机器学习中负责任的 AI 摘要的手绘笔记](../../../../translated_images/zh-CN/ml-fairness.ef296ebec6afc98a.webp)
> 手绘笔记作者:[Tomomi Imura](https://www.twitter.com/girlie_mac)
## [课前测验](https://ff-quizzes.netlify.app/en/ml/)
## 介绍
## 简介
在本课程中,您将开始了解机器学习如何以及正在影响我们的日常生活。即使是现在,系统和模型已经参与了日常决策任务,例如医疗诊断、贷款审批或欺诈检测。因此,确保这些模型能够提供值得信赖的结果非常重要。与任何软件应用程序一样,人工智能系统可能会未达到预期或产生不理想的结果。这就是为什么理解和解释人工智能模型的行为至关重要。
在本课程中你将开始了解机器学习如何以及正在影响我们的日常生活。即使在现在系统和模型也参与日常决策任务比如医疗诊断、贷款审批或欺诈检测。因此这些模型能够良好运行并提供可信结果是非常重要的。就像任何软件应用一样AI 系统也可能未达到预期或产生不良后果。这就是为什么理解和解释 AI 模型行为至关重要。
想象一下,当您用于构建这些模型的数据缺乏某些人口统计信息(例如种族、性别、政治观点、宗教)或过度代表某些人口统计信息时会发生什么?如果模型的输出被解释为偏向某些人口统计信息,又会有什么后果?此外,当模型产生不良结果并对人们造成伤害时会发生什么?谁应该对人工智能系统的行为负责?这些是我们将在本课程中探讨的一些问题。
想象一下当你用来构建这些模型的数据缺少某些人口统计信息,如种族、性别、政治观点、宗教,或不成比例地代表这些人口群体时会发生什么?如果模型输出被解释为偏向某些人口群体会怎样?应用会有什么后果?此外,当模型出现负面结果并对人们造成伤害时,又会怎样?谁对 AI 系统的行为负责?这些是我们将在本课程中探讨的一些问题。
在本课中,将:
在本课中,将:
- 提高对机器学习公平性及相关危害重要性的认识。
- 熟悉探索异常值和特殊场景以确保可靠性和安全性的实践
- 提高对机器学习公平性及相关危害重要性的认识。
- 熟悉探索异常值和不寻常情况的实践,以确保可靠性和安全性
- 了解设计包容性系统以赋能所有人的必要性。
- 探讨保护数据和个人隐私与安全的重要性。
- 认识到采用透明化方法解释人工智能模型行为的重要性。
- 意识到责任感对于建立人工智能系统信任的重要性
- 探究保护数据和人们隐私安全的重要性。
- 认识到采用“玻璃盒”方法解释 AI 模型行为的重要性。
- 关注问责制如何对建立 AI 系统的信任至关重要
## 前提条件
## 先决条件
作为前提条件,请完成“负责任人工智能原则”学习路径并观看以下视频:
作为先决条件,请完成“负责任的 AI 原则”学习路径并观看下面的视频:
通过以下 [学习路径](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)了解更多负责任的 AI
[![微软的负责任人工智能方法](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "微软的负责任人工智能方法")
[![微软的负责任 AI 方法](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "微软的负责任 AI 方法")
> 🎥 点击上方图片观看视频:微软的负责任人工智能方法
> 🎥 点击上图观看视频:微软的负责任 AI 方法
## 公平性
人工智能系统应公平对待每个人,避免对类似群体产生不同影响。例如,当人工智能系统提供医疗建议、贷款申请或就业指导时,它们应对具有类似症状、财务状况或专业资格的人做出相同的推荐。我们每个人作为人类,都携带着影响我们决策和行为的固有偏见。这些偏见可能会体现在我们用于训练人工智能系统的数据中。这种操控有时可能是无意的。通常很难有意识地知道何时在数据中引入了偏见
AI 系统应公平对待每个人,并避免对相似群体的人采取不同的影响。例如,当 AI 系统为医疗治疗、贷款申请或就业提供指导时,应对具有类似症状、财务状况或职业资格的每个人做出相同的推荐。作为人类,我们都带有影响我们决策和行为的固有偏见。这些偏见可能在我们用来训练 AI 系统的数据中显现出来。这种操控有时是无意的。要有意识地知道何时在数据中引入偏见通常是困难的
**“不公平”** 包括对某些群体(例如按种族、性别、年龄或残疾状态定义的群体)造成的负面影响或“危害”。主要与公平性相关的危害可以分类为:
**“不公平”** 包括对某个人群产生的负面影响或“伤害”,例如按种族、性别、年龄或残疾状况定义的人群。主要的公平相关危害可以分类为:
- **分配**:例如,如果某个性别或种族被优待于另一个
- **服务质量**:如果您仅为一个特定场景训练数据,而现实情况更复杂,这会导致服务表现不佳。例如,一个无法识别深色皮肤的洗手液分配器。[参考](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **贬低**:不公平地批评或标记某事或某人。例如,一个图像标记技术曾错误地将深色皮肤人群的照片标记为猩猩。
- **过度或不足代表**:某些群体在某些职业中未被看到,而任何继续推广这种现象的服务或功能都在助长危害。
- **刻板印象**:将某个群体与预先分配的属性联系起来。例如,英语和土耳其语之间的语言翻译系统可能因与性别相关的刻板印象而出现不准确。
- <strong>分配</strong>,比如性别或种族被偏爱
- <strong>服务质量</strong>。如果你训练数据仅针对某一特定情景,但现实更复杂,可能导致服务表现不佳。例如,一个自动洗手液分配器检测不到深色皮肤的人。[参考资料](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- <strong>诋毁</strong>。不公平地批评并给某物或某人贴标签。例如,某图像标签技术臭名昭著地将深色皮肤的人错误标注为猩猩。
- <strong>过度或不足代表</strong>。某一群体在某职业中不被看到,而任何持续促进这种状况的服务或功能都会造成伤害。
- <strong>刻板印象</strong>。将某一群体与预设属性关联。例如,英土语言翻译系统因词语存在性别刻板联想而产生不准确。
![翻译成土耳其语](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png)
![翻译成土耳其语](../../../../translated_images/zh-CN/gender-bias-translate-en-tr.f185fd8822c2d437.webp)
> 翻译成土耳其语
![翻译回英语](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png)
> 翻译回英语
![再翻译回英语](../../../../translated_images/zh-CN/gender-bias-translate-tr-en.4eee7e3cecb8c70e.webp)
> 翻译回英语
在设计和测试人工智能系统时,我们需要确保人工智能是公平的,并且不会被编程为做出偏见或歧视性的决策,这些决策也是人类被禁止做出的。确保人工智能和机器学习的公平性仍然是一个复杂的社会技术挑战。
在设计和测试 AI 系统时,我们需要确保 AI 公平且不被编程为做出偏见或歧视性决策,这些行为对人类也是被禁止的。保证 AI 和机器学习中的公平性仍然是复杂的社会技术挑战。
### 可靠性与安全性
了建立信任,人工智能系统需要在正常和意外情况下保持可靠、安全和一致。了解人工智能系统在各种情况下的行为尤其重要,特别是当它们处于异常值时。在构建人工智能解决方案时,需要重点关注如何处理人工智能解决方案可能遇到的各种情况。例如,一辆自动驾驶汽车需要将人的安全作为首要任务。因此,驱动汽车的人工智能需要考虑汽车可能遇到的所有可能场景,例如夜晚、雷暴或暴风雪、孩子跑过街道、宠物、道路施工等。人工智能系统在各种条件下可靠安全地处理问题的能力反映了数据科学家或人工智能开发人员在设计或测试系统时的预见水平
建立信任AI 系统需要在正常和异常情况下可靠、安全且一致。重要的是了解 AI 系统在各种情况下,尤其是异常情况下的表现。当构建 AI 解决方案时,必须重点关注如何处理 AI 解决方案可能遇到的各种情况。例如,自动驾驶汽车必须将人们的安全作为首要任务。因此,驱动汽车的 AI 需要考虑汽车可能遇到的所有场景比如夜晚、雷暴或暴风雪、街上奔跑的孩子、宠物、道路施工等。AI 系统在各种条件下能多好地可靠安全地运行,反映了数据科学家或 AI 开发人员在设计或测试系统时的预见程度
> [🎥 点击此处观看视频:](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
> [🎥 点击这里观看视频:](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
### 包容性
人工智能系统应设计为能够吸引和赋能所有人。在设计和实施人工智能系统时数据科学家和人工智能开发人员需要识别并解决系统中可能无意间排除某些人的潜在障碍。例如全球有10亿残疾人。随着人工智能的进步他们可以更轻松地获取广泛的信息和机会。通过解决这些障碍可以创造创新机会开发具有更好体验的人工智能产品从而惠及所有人。
AI 系统应设计为能够吸引并赋能所有人。在设计和实施 AI 系统时,数据科学家和 AI 开发人员会识别并解决系统中可能无意间排斥特定人群的障碍。例如,全球有 10 亿残疾人。随着 AI 进步,他们可以更容易地在日常生活中访问各种信息和机会。通过解决这些障碍,创造机会创新并开发出更好体验的 AI 产品,造福所有人。
> [🎥 点击此处观看视频:人工智能中的包容性](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
> [🎥 点击这里观看视频AI 中的包容性](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
### 安全与隐私
人工智能系统应安全并尊重个人隐私。人们对那些可能危及隐私、信息或生命的系统信任度较低。在训练机器学习模型时,我们依赖数据以获得最佳结果。在此过程中,必须考虑数据的来源和完整性。例如,数据是用户提交的还是公开可用的?接下来,在处理数据时,开发人工智能系统时必须能够保护机密信息并抵御攻击。随着人工智能的普及,保护隐私和确保重要的个人和商业信息的安全变得越来越重要和复杂。隐私和数据安全问题需要特别关注人工智能,因为数据访问对于人工智能系统做出准确和知情的预测以及关于人的决策至关重要。
> [🎥 点击此处观看视频:人工智能中的安全性](https://www.microsoft.com/videoplayer/embed/RE4voJF)
AI 系统应安全可靠并尊重人们的隐私。人们对可能危及其隐私、信息或生命安全的系统信任较低。在训练机器学习模型时,我们依赖数据以获取最佳结果。在此过程中,必须考虑数据的来源和完整性。例如,数据是用户提交的还是公开可用的?其次,在处理数据时,开发 AI 系统保护机密信息、抵御攻击至关重要。随着 AI 更加普及,保护隐私和重要个人及商业信息的安全变得越发关键且复杂。隐私和数据安全问题对 AI 尤为重要,因为 AI 需要访问数据才能对人们做出准确且有信息支持的预测和决策。
- 在行业中我们在隐私和安全方面取得了显著进展这在很大程度上得益于像GDPR通用数据保护条例这样的法规。
- 然而,对于人工智能系统,我们必须承认需要更多个人数据以使系统更个性化和有效——与隐私之间的紧张关系。
- 就像互联网连接的计算机诞生一样,我们也看到了与人工智能相关的安全问题数量的巨大增长。
- 同时,我们也看到人工智能被用于改善安全性。例如,大多数现代杀毒扫描器今天都由人工智能启发式驱动。
- 我们需要确保我们的数据科学流程与最新的隐私和安全实践和谐融合。
> [🎥 点击这里观看视频AI 中的安全](https://www.microsoft.com/videoplayer/embed/RE4voJF)
### 透明性
- 作为行业,我们在隐私与安全上取得了重大进展,这在很大程度上得益于诸如 GDPR通用数据保护条例等法规。
- 然而在 AI 系统中,我们必须承认使系统更个性化、更有效所需的更多个人数据与隐私保护之间存在紧张关系。
- 就像互联网诞生时连接计算机的兴起,我们也看到与 AI 相关的安全问题数量大幅增加。
- 同时,我们看到 AI 被用于提升安全性。例如,大多数现代杀毒扫描器如今都依赖 AI 启发式技术。
- 我们需要确保数据科学流程与最新的隐私及安全实践和谐融合。
人工智能系统应易于理解。透明性的一个关键部分是解释人工智能系统及其组件的行为。提高对人工智能系统的理解需要利益相关者能够理解它们的功能和原因,以便识别潜在的性能问题、安全和隐私问题、偏见、排他性实践或意外结果。我们还认为,使用人工智能系统的人应该诚实并坦率地说明何时、为何以及如何选择部署它们,以及所使用系统的局限性。例如,如果一家银行使用人工智能系统来支持其消费者贷款决策,那么审查结果并了解哪些数据影响系统的推荐是很重要的。政府开始对各行业的人工智能进行监管,因此数据科学家和组织必须解释人工智能系统是否符合监管要求,特别是在出现不理想结果时。
> [🎥 点击此处观看视频:人工智能中的透明性](https://www.microsoft.com/videoplayer/embed/RE4voJF)
### 透明度
AI 系统应当易于理解。透明度的关键部分是解释 AI 系统及其组件的行为。提升对 AI 系统的理解要求利益相关者明白它们如何以及为何工作,这样能识别潜在的性能问题、安全与隐私担忧、偏见、排他性做法或意外结果。我们还认为,使用 AI 系统的人应坦诚公开何时、为何及如何选择部署它们,以及所用系统的局限性。例如,银行若使用 AI 系统支持其消费贷款决策,重要的是审查结果并了解哪些数据影响系统建议。政府正开始对行业中的 AI 进行监管,因此数据科学家和组织必须解释 AI 系统是否符合监管要求,尤其当出现不良结果时。
- 由于人工智能系统非常复杂,很难理解它们的工作原理并解释结果。
- 这种理解的缺乏影响了这些系统的管理、操作化和文档化方式。
- 更重要的是,这种理解的缺乏影响了使用这些系统产生的结果所做出的决策。
> [🎥 点击这里观看视频AI 中的透明度](https://www.microsoft.com/videoplayer/embed/RE4voJF)
### 责任感
- 由于 AI 系统十分复杂,难以理解其工作原理并解释结果。
- 这种理解缺失影响系统的管理、运营和文档化。
- 更重要的是,这种缺失影响基于系统结果所做的决策。
设计和部署人工智能系统的人必须对其系统的运行负责。责任感对于敏感技术的使用尤其重要,例如面部识别技术。最近,面部识别技术的需求不断增长,尤其是执法机构,他们看到了该技术在寻找失踪儿童等用途上的潜力。然而,这些技术可能会被政府用于威胁公民的基本自由,例如对特定个人进行持续监控。因此,数据科学家和组织需要对其人工智能系统对个人或社会的影响负责。
### 问责制
设计和部署 AI 系统的人必须对其系统的运行负责。对于诸如面部识别这样的敏感技术,问责制尤为重要。最近,对面部识别技术的需求增长,特别是在执法机构中,他们看到这项技术在寻找失踪儿童等用途的潜力。然而,政府可能利用这些技术威胁公民的基本自由,如启用对特定个人的持续监控。因此,数据科学家和组织需要对其 AI 系统对个人或社会的影响负责。
[![领先的人工智能研究人员警告面部识别可能导致大规模监控](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "微软的负责任人工智能方法")
[![领先的 AI 研究者警告通过面部识别进行大规模监控](../../../../translated_images/zh-CN/accountability.41d8c0f4b85b6231.webp)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "微软的负责任 AI 方法")
> 🎥 点击上方图片观看视频:面部识别可能导致大规模监控的警告
> 🎥 点击上图观看视频:通过面部识别进行大规模监控的警告
最终,对于我们这一代人来说,作为将人工智能引入社会的第一代人,最大的一个问题是如何确保计算机始终对人类负责,以及如何确保设计计算机的人对其他人负责。
归根结底,对我们这一代(作为推动 AI 进入社会的第一代人)来说,最大的一个问题是如何确保计算机对人类负责,以及如何保证设计计算机的人们对其他所有人负责。
## 影响评估
在训练机器学习模型之前,进行影响评估以了解人工智能系统的目的、预期用途、部署地点以及与系统交互的人非常重要。这些评估有助于评审者或测试人员在识别潜在风险和预期后果时知道需要考虑哪些因素。
在训练机器学习模型之前,进行影响评估很重要,以了解 AI 系统的目的;预期用途;部署地点;以及系统将与谁交互。对于评审员或测试人员评估系统时,了解这些有助于确定识别潜在风险和预期后果时应考虑的因素。
以下是进行影响评估时的重点领域:
进行影响评估时关注的领域包括
* **对个人的不利影响**:意识到任何限制或要求、不支持的用途或任何已知限制影响系统性能至关重要,以确保系统不会以可能对个人造成伤害的方式使用。
* **数据要求**了解系统如何以及在哪里使用数据使评审者能够探索需要注意的任何数据要求例如GDPR或HIPPA数据法规。此外检查数据的来源或数量是否足够用于训练
* **影响摘要**:收集使用系统可能产生的潜在危害列表。在机器学习生命周期中,审查是否解决或处理了识别的问题
* **六项核心原则的适用目标**:评估每项原则的目标是否达成,以及是否存在任何差距
* <strong>对个体的负面影响</strong>。意识到任何限制或要求、不支持的用途或已知限制影响系统性能,确保系统不会以可能对个体造成伤害的方式使用。
* <strong>数据需求</strong>。了解系统如何以及从哪里使用数据,帮助评审员探讨应注意的数据要求(例如 GDPR 或 HIPAA。此外检视数据来源或数量是否足够训练使用
* <strong>影响总结</strong>。收集使用系统可能引发的潜在伤害列表。在机器学习生命周期中,检查已识别的问题是否得到缓解或解决
* <strong>适用目标</strong>。评估六大核心原则中每项的目标是否达成,以及是否存在缺口
## 使用负责任人工智能进行调试
与调试软件应用程序类似,调试人工智能系统是识别和解决系统问题的必要过程。许多因素会影响模型未按预期或负责任地运行。大多数传统模型性能指标是模型性能的定量汇总,这不足以分析模型如何违反负责任人工智能原则。此外,机器学习模型是一个黑箱,难以理解其结果的驱动因素或在出现错误时提供解释。在本课程后续部分,我们将学习如何使用负责任人工智能仪表板来帮助调试人工智能系统。该仪表板为数据科学家和人工智能开发人员提供了一个全面的工具,用于执行以下操作:
## 用负责任的 AI 进行调试
* **错误分析**:识别模型的错误分布,这可能影响系统的公平性或可靠性。
* **模型概览**:发现模型在不同数据群体中的性能差异。
* **数据分析**:了解数据分布并识别数据中可能导致公平性、包容性和可靠性问题的潜在偏见。
* **模型可解释性**:了解影响或驱动模型预测的因素。这有助于解释模型的行为,这对透明性和责任感至关重要。
类似于调试软件应用,调试 AI 系统是识别和解决系统中问题的必要过程。许多因素可能导致模型未按预期或负责任地运行。大多数传统模型性能指标是模型表现的定量汇总,但不足以分析模型如何违反负责任 AI 原则。另外,机器学习模型是黑盒子,难以理解其输出背后的驱动因素,也难以在出现错误时解释。后续课程中,我们将学习如何使用负责任 AI 仪表盘帮助调试 AI 系统。该仪表盘为数据科学家和 AI 开发人员提供全面的工具来执行:
* <strong>错误分析</strong>。识别模型错误分布,这些错误可能影响系统的公平性或可靠性。
* <strong>模型概览</strong>。发现在数据子群中模型性能存在的差异。
* <strong>数据分析</strong>。理解数据分布,识别可能导致公平性、包容性和可靠性问题的潜在偏见。
* <strong>模型可解释性</strong>。理解影响或驱动模型预测的因素。帮助解释模型行为,这对透明度和问责制很重要。
## 🚀 挑战
为了防止危害的引入,我们应该:
## 🚀 挑战
为了从一开始防止伤害,我们应该:
- 确保参与系统开发的人员具有多样化的背景和观点
- 吸纳拥有多样背景和观点的人参与系统开发
- 投资于反映社会多样性的数据集
- 在整个机器学习生命周期中开发更好的方法,以检测和纠正负责任人工智能问题
- 在整个机器学习生命周期中开发更好的检测和纠正负责任 AI 问题的方法
思考现实生活中模型在构建和使用过程中显现不可信的场景。我们还应该考虑什么?
思考一下在模型构建和使用中模型不可信的真实场景。我们还应考虑什么?
## [课后测验](https://ff-quizzes.netlify.app/en/ml/)
## 复习与自学
在本课中,您已经学习了机器学习中公平性和不公平性概念的一些基础知识。
观看此研讨会,深入了解相关主题:
在本课中,您已经学习了一些关于机器学习中公平与不公平概念的基础知识。
观看本次研讨会,深入了解这些主题:
- 追求负责任的人工智能:将原则付诸实践,由 Besmira Nushi、Mehrnoosh Sameki 和 Amit Sharma
- 追求负责任的人工智能:由 Besmira Nushi、Mehrnoosh Sameki 和 Amit Sharma 讲解如何将原则付诸实践
[![负责任的人工智能工具箱:构建负责任人工智能的开源框架](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: 构建负责任人工智能的开源框架,由 Besmira Nushi、Mehrnoosh Sameki 和 Amit Sharma
> 🎥 点击上方图片观看视频:由 Besmira Nushi、Mehrnoosh Sameki 和 Amit Sharma 讲解的 RAI Toolbox用于构建负责任人工智能的开源框架
此外,阅读以下内容:
另请阅读:
- 微软的负责任人工智能资源中心:[负责任人工智能资源 Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- 微软的 RAI 资源中心:[Responsible AI Resources Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- 微软的 FATE 研究团队:[FATE: 公平性、问责性、透明性和人工智能伦理 - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
- 微软的 FATE 研究组:[FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
RAI 工具箱:
RAI 工具箱:
- [负责任人工智能工具箱 GitHub 仓库](https://github.com/microsoft/responsible-ai-toolbox)
- [Responsible AI Toolbox GitHub 仓库](https://github.com/microsoft/responsible-ai-toolbox)
了解 Azure 机器学习工具如何确保公平性
阅读有关 Azure 机器学习确保公平性的工具
- [Azure 机器学习](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 工具箱](assignment.md)
[探索 RAI Toolbox](assignment.md)
---
**免责声明**
本文档使用AI翻译服务[Co-op Translator](https://github.com/Azure/co-op-translator)进行翻译。虽然我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于重要信息,建议使用专业人工翻译。我们不对因使用此翻译而产生的任何误解或误读承担责任。
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免责声明**
本文件由 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻译完成。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。原始语言版文件应视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,120 +1,121 @@
# 使用 Python 和 Scikit-learn 构建回归模型
# 使用 Python 和 Scikit-learn 入门回归模型
![回归模型的简要概述](../../../../sketchnotes/ml-regression.png)
![回归的草图总结](../../../../translated_images/zh-CN/ml-regression.4e4f70e3b3ed446e.webp)
> 由 [Tomomi Imura](https://www.twitter.com/girlie_mac) 绘制的手绘笔记
> 草图作者:[Tomomi Imura](https://www.twitter.com/girlie_mac)
## [课前测验](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。
- 通过动手练习探索线性回归。
- 使用 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. **安装 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/)的说明完成基本安装。本课程将使用 Visual Studio Code 运行 Python因此你可能想了解如何[配置 Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott)以进行 Python 开发。
> 通过学习这组 [模块](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)熟悉 Python。
> 通过本集合中的[学习模块](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)熟悉 Python。
>
> [![使用 Visual Studio Code 设置 Python](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "使用 Visual Studio Code 设置 Python")
> [![在 Visual Studio Code 中设置 Python](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "在 Visual Studio Code 中设置 Python")
>
> 🎥 点击上方图片观看视频:在 VS Code 中使用 Python。
> 🎥 点击上方图片观看视频:如何在 VS Code 中使用 Python。
3. **安装 Scikit-learn**按照 [这些说明](https://scikit-learn.org/stable/install.html) 进行安装。由于需要确保使用 Python 3建议您使用虚拟环境。如果您在 M1 Mac 上安装此库,请参考上述页面中的特殊说明
3. **安装 Scikit-learn**请按照[这些说明](https://scikit-learn.org/stable/install.html)操作。需要确保使用 Python 3建议在虚拟环境中安装。如果你在 M1 Mac 上安装,有特殊说明请参见上述链接页面
4. **安装 Jupyter Notebook**。您需要 [安装 Jupyter 包](https://pypi.org/project/jupyter/)。
1. **安装 Jupyter Notebook**。你需要[安装 Jupyter 包](https://pypi.org/project/jupyter/)。
## 您的机器学习开发环境
## 你的机器学习创作环境
您将使用 **笔记本** 来开发 Python 代码并创建机器学习模型。这种文件类型是数据科学家常用的工具,其文件后缀为 `.ipynb`
你将使用 <strong>笔记本</strong> 来编写 Python 代码和创建机器学习模型。这类文件是数据科学家的常用工具,文件后缀是 `.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 笔记本开始构建回归模型")
> 🎥 点击上方图片观看短视频,了解如何完成此练习
> 🎥 点击上方图片观看本练习的短视频。
### 练习 - 使用笔记本
在此文件夹中,会找到文件 _notebook.ipynb_
在此文件夹中,会找到文件 _notebook.ipynb_
1. 在 Visual Studio Code 中打开 _notebook.ipynb_
一个 Jupyter 服务器将启动,并使用 Python 3+。您会发现笔记本中可以运行的代码块。您可以通过选择播放按钮图标运行代码块。
一个 Jupyter 服务器会启动,运行 Python 3+。你会看到笔记本中可以 `run` 的代码块。点击看起来像播放按钮的图标即可运行代码块。
2. 选择 `md` 图标并添加一些 markdown输入以下文本 **# 欢迎来到您的笔记本**。
1. 选择 `md` 图标,添加一些 markdown 内容,写入以下文本 **# 欢迎使用你的笔记本**。
下来,添加一些 Python 代码。
,添加一些 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/zh-CN/notebook.4a3ee31f396b8832.webp)
您可以在代码中插入注释,以便自我记录笔记本内容
你可以在代码中夹杂注释,自我文档化你的笔记本
思考一下,网页开发者的工作环境与数据科学家的工作环境有何不同。
想一想,网页开发者和数据科学家的工作环境有多大不同。
## 使用 Scikit-learn 入门
## 使用 Scikit-learn 起步
现在Python 已在您的本地环境中设置完毕,并且您已经熟悉了 Jupyter 笔记本,接下来让我们熟悉一下 Scikit-learn发音为 `sci`,像 `science`。Scikit-learn 提供了一个 [广泛的 API](https://scikit-learn.org/stable/modules/classes.html#api-ref),帮助您完成机器学习任务。
现在你已经在本地环境配置好 Python并熟悉了 Jupyter 笔记本,我们来熟悉一下 Scikit-learn发音为“sci”如英文单词“science”。Scikit-learn 提供了一个[丰富的 API](https://scikit-learn.org/stable/modules/classes.html#api-ref),帮助你完成机器学习任务。
根据其 [官网](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 和其他工具构建机器学习模型,执行我们称为“传统机器学习”的任务。我们故意避开了神经网络和深度学习,因为它们将在即将推出的“面向初学者的 AI”课程中详细讲解
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)。
[![机器学习入门 - 您的第一个 Python 线性回归项目](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "机器学习入门 - 您的第一个 Python 线性回归项目")
> 🎥 点击上方图片观看短视频,了解如何完成此练习。
[![面向初学者的机器学习 - 你的第一个 Python 线性回归项目](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "面向初学者的机器学习 - 你的第一个 Python 线性回归项目")
在与本课相关的 _notebook.ipynb_ 文件中,按下“垃圾桶”图标清空所有单元格
> 🎥 点击上方图片观看本练习的短视频
在本节中,您将使用 Scikit-learn 中内置的一个关于糖尿病的小型数据集进行学习。假设您想测试一种针对糖尿病患者的治疗方法。机器学习模型可能会帮助您根据变量的组合确定哪些患者对治疗的反应更好。即使是一个非常基础的回归模型,当可视化时,也可能显示有关变量的信息,帮助您组织理论临床试验
在本课对应的 _notebook.ipynb_ 文件中,通过点击“垃圾桶”图标清空所有单元格
✅ 回归方法有很多种,选择哪一种取决于您想要回答的问题。如果您想预测某个年龄段的人的可能身高,您可以使用线性回归,因为您在寻找一个 **数值**。如果您想确定某种菜肴是否应该被归类为素食,您在寻找一个 **类别分配**,因此您可以使用逻辑回归。稍后您将学习更多关于逻辑回归的内容。思考一下,您可以向数据提出哪些问题,以及哪种方法更适合回答这些问题
在本节中,你将使用一个关于糖尿病的内置小型数据集,它为学习而设计。假设你想测试糖尿病患者的某种治疗方案。机器学习模型可以帮助你根据变量组合预测哪些患者能更好地响应治疗。即使是非常基础的回归模型,经过可视化,也可能揭示有助于设计理论临床试验的变量信息
让我们开始这个任务。
✅ 回归方法有多种,选用哪一种取决于你想回答的问题。如果你想预测某年龄段的人的可能身高,你会用线性回归,因为你在寻找一个<strong>数值</strong>。如果你想判断某种菜肴是否为素食,你在做<strong>类别归属</strong>的判断,会用逻辑回归。稍后你会学到更多逻辑回归知识。想想你可以向数据询问哪些问题,以及哪种方法更合适。
让我们开始这个任务吧。
### 导入库
在此任务中,我们将导入一些库:
本任务我们将导入一些库:
- **matplotlib**。这是一个有用的 [绘图工具](https://matplotlib.org/),我们将用它来创建折线图。
- **numpy** [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) 是一个处理 Python 数值数据的有用库。
- **matplotlib**。这是一个实用的[绘图库](https://matplotlib.org/),我们用它来绘制折线图。
- **numpy**。[numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) 是处理 Python 数值数据的实用库。
- **sklearn**。这是 [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) 库。
导入一些库以助完成任务。
导入一些库以助完成任务。
1. 通过输入以下代码添加导入:
1. 输入以下代码导入:
```python
import matplotlib.pyplot as plt
@ -122,26 +123,26 @@ Scikit-learn 使构建模型并评估其使用变得简单。它主要专注于
from sklearn import datasets, linear_model, model_selection
```
述代码导入了 `matplotlib``numpy`,并从 `sklearn`导入了 `datasets`、`linear_model` 和 `model_selection`。`model_selection` 用于将数据分割训练集和测试集。
面代码导入了 `matplotlib`、`numpy`,以及从 `sklearn` 导入了 `datasets`、`linear_model` 和 `model_selection`。`model_selection` 用于将数据分割训练集和测试集。
### 糖尿病数据集
内置的 [糖尿病数据集](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) 包括 442 个关于糖尿病的数据样本,包含 10 个特征变量,其中一些包括:
内置的[糖尿病数据集](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)包含 442 条糖尿病相关样本数据,有 10 个特征变量,部分包括:
- age年龄以年为单位
- bmi身体质指数
- age年龄
- bmi身体质指数
- bp平均血压
- s1 tcT 细胞(白细胞的一种
- s1 tcT细胞一种白细胞)
此数据集包含“性别”这一特征变量,这在糖尿病研究中很重要。许多医学数据集都包含这种二元分类。思考一下,这种分类可能会如何将某些群体排除在治疗之外。
该数据集中的“性别”作为研究糖尿病的重要特征变量。许多医疗数据集都包含这种二分类特征。思考下这样的分类方式如何可能将某些人口群体排除在治疗之外。
现在,加载 X 和 y 数据。
> 🎓 记住,这是监督学习,我们需要一个名为“y”的目标变量。
> 🎓 记住,这是监督学习,我们需要一个名为 y 的目标变量。
在新代码单元中,通过调用 `load_diabetes()` 加载糖尿病数据集。输入参数 `return_X_y=True` 表示 `X` 是数据矩阵,`y` 是回归目标。
在新代码单元中,通过调用 `load_diabetes()` 加载糖尿病数据集。参数 `return_X_y=True` 表示 `X` 是数据矩阵,`y` 是回归目标。
1. 添加一些打印命令显示数据矩阵的形状及其第一个元素:
1. 添加一些打印命令显示数据矩阵的形状及其第一个元素:
```python
X, y = datasets.load_diabetes(return_X_y=True)
@ -149,9 +150,9 @@ Scikit-learn 使构建模型并评估其使用变得简单。它主要专注于
print(X[0])
```
您得到的响应是一个元组。您将元组的前两个值分别赋给 `X``y`。了解更多 [关于元组](https://wikipedia.org/wiki/Tuple)。
你获得的响应是一个元组。你将元组的前两个值分别赋给 `X``y`。了解更多[元组](https://wikipedia.org/wiki/Tuple)。
您可以看到这些数据有 442 个项目,每个项目是包含 10 个元素的数组:
可见数据有 442 条,形状是包含 10 个元素的数组:
```text
(442, 10)
@ -159,39 +160,39 @@ Scikit-learn 使构建模型并评估其使用变得简单。它主要专注于
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
✅ 思考一下数据与回归目标之间的关系。线性回归预测特征 X 和目标变量 y 之间的关系。您能在文档中找到糖尿病数据集的 [目标](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) 吗?这个数据集展示了什么?
✅ 思考一下数据与回归目标之间的关系。线性回归预测特征 X 与目标变量 y 之间的关系。你能在文档中找到糖尿病数据集的[目标](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)吗?考虑该目标,数据集展示了什么?
2. 接下来,通过选择数据集的第 3 列来绘制部分数据。您可以使用 `:` 操作符选择所有行然后使用索引2选择第 3 列。您还可以使用 `reshape(n_rows, n_columns)` 将数据重塑为二维数组(绘图所需)。如果其中一个参数为 -1则对应的维度会自动计算
2. 接下来,选取数据集的一个部分绘图,选择第 3 列数据。你可以使用冒号操作符选取所有行然后用索引2选取第 3 列。你也可以使用 `reshape(n_rows, n_columns)` 重塑为二维数组,以满足绘图需求。如果某个维度设为 -1则自动计算该维度大小
```python
X = X[:, 2]
X = X.reshape((-1,1))
```
✅ 随时打印数据检查其形状。
✅ 随时打印数据检查其形状。
3. 现在您已经准备好绘制数据可以看看机器是否能帮助确定数据集中的逻辑分割。为此您需要将数据X和目标y分割为测试集和训练集。Scikit-learn 提供了一种简单的方法,您可以在给定点分割测试数据
3. 现在数据准备好绘图了可以看看机器是否能帮忙找到这些数据的合理分割点。为此你需要将数据X和目标y都拆分成训练集和测试集。Scikit-learn 提供了简单方法,可在指定位置进行数据拆分
```python
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
```
4. 现在您可以训练模型了!加载线性回归模型,并使用 `model.fit()` 用 X 和 y 训练集训练模型
4. 现在你可以训练模型了!加载线性回归模型,用你的 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 @@ Scikit-learn 使构建模型并评估其使用变得简单。它主要专注于
plt.show()
```
![显示糖尿病数据点的散点图](../../../../2-Regression/1-Tools/images/scatterplot.png)
✅ 想一想这里发生了什么。一条直线穿过许多小数据点,但它究竟在做什么?你能看出如何利用这条线来预测一个新的、未见过的数据点在图表的 y 轴上的位置吗?试着用语言描述这个模型的实际用途。
![展示糖尿病数据点的散点图](../../../../translated_images/zh-CN/scatterplot.ad8b356bcbb33be6.webp)
恭喜你!你已经构建了第一个线性回归模型,用它进行了预测,并将结果显示在图表中!
✅ 想一想这里到底发生了什么。一条直线穿过了许多小数据点,但它到底在做什么?你能看出怎样利用这条直线来预测一个未见新数据点应该如何相对于图的 y 轴进行定位吗?试着用语言表达一下这个模型的实际用途。
恭喜你,构建了你的第一个线性回归模型,用它做出了预测,并在图中展示了出来!
---
## 🚀挑战
绘制该数据集中不同变量的图表。提示:编辑这行代码:`X = X[:,2]`。根据该数据集的目标,你能发现关于糖尿病作为一种疾病的进展的什么信息?
## [课后测验](https://ff-quizzes.netlify.app/en/ml/)
绘制这个数据集中不同的变量。提示:编辑这一行:`X = X[:,2]`。结合这个数据集的目标,你能发现糖尿病作为一种疾病在发展的过程中有哪些变化吗?
## [课后小测](https://ff-quizzes.netlify.app/en/ml/)
## 复习与自学
在本教程中,你使用了简单线性回归,而不是单变量或多变量线性回归。阅读一些关于这些方法之间差异的内容,或者观看[这个视频](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)。
本教程中,你使用的是简单线性回归,而非单变量或多元线性回归。了解一下这些方法之间的差异,或者看看[这个视频](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)。
阅读更多关于回归的概念,并思考这种技术可以回答哪些类型的问题。通过[这个教程](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott)来加深你的理解。
多读一些关于回归概念的内容,思考这种技术可以回答哪些类型的问题。做做这个[教程](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott)来加深理解。
## 作业
@ -226,5 +228,7 @@ Scikit-learn 使构建模型并评估其使用变得简单。它主要专注于
---
**免责声明**
本文档使用AI翻译服务[Co-op Translator](https://github.com/Azure/co-op-translator)进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而导致的任何误解或误读,我们概不负责。
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免责声明**
本文件由 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻译完成。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。原始语言版文件应视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,60 +1,60 @@
# 使用 Scikit-learn 构建回归模型:准备和可视化数据
![数据可视化信息图](../../../../2-Regression/2-Data/images/data-visualization.png)
![数据可视化信息图](../../../../translated_images/zh-CN/data-visualization.54e56dded7c1a804.webp)
信息图作者:[Dasani Madipalli](https://twitter.com/dasani_decoded)
信息图由 [Dasani Madipalli](https://twitter.com/dasani_decoded) 制作
## [课前测验](https://ff-quizzes.netlify.app/en/ml/)
> ### [本课程也提供 R 版本!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
> ### [本课程也提供 R 语言版本!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
## 简介
现在你已经准备好使用 Scikit-learn 开始构建机器学习模型,可以开始向数据提出问题了。在处理数据并应用机器学习解决方案时,了解如何提出正确的问题以充分挖掘数据的潜力非常重要。
现在你已经准备好使用 Scikit-learn 进行机器学习模型构建的工具,能够开始对数据提出问题了。在处理数据并应用机器学习解决方案时,理解如何提出正确的问题以充分发挥数据集潜力非常重要。
本课中,你将学习:
本课你将学习:
- 如何为模型构建准备数据。
- 如何使用 Matplotlib 进行数据可视化。
- 如何使用 Seaborn 进行更具表现力的数据可视化。
## 向数据提出正确的问题
你需要回答的问题将决定你使用哪种类型的机器学习算法。而你得到答案的质量很大程度上取决于数据的性质。
你需要回答的问题将决定你用哪种类型的机器学习算法。而你得到答案的质量很大程度上取决于数据的性质。
看看本课提供的[数据](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv)。你可以在 VS Code 中打开这个 .csv 文件。快速浏览会发现其中有空白值还有字符串和数值数据的混合。此外还有一个名为“Package”的奇怪列其中的数据是“sacks”、“bins”和其他值的混合。事实上这些数据有点混乱。
看看本课提供的[数据](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv)。你可以在 VS Code 中打开这个 .csv 文件。快速浏览发现有空白项和字符串与数字混杂的数据。还有一个奇怪的名为“Package”的列它的数据混杂着“sacks”、“bins”和其它值。实际上这些数据有点乱。
[![机器学习入门 - 如何分析和清理数据集](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "机器学习入门 - 如何分析和清理数据集")
[![初学者机器学习 - 如何分析和清洗数据集](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "初学者机器学习 - 如何分析和清洗数据集")
> 🎥 点击上观看准备本课数据的简短视频。
> 🎥 点击上图观看本课数据准备过程的简短视频。
事实上,很少会直接获得一个完全准备好用于创建机器学习模型的数据集。在本课中,你将学习如何使用标准 Python 库准备原始数据集。你还将学习各种数据可视化技术。
实际上,开箱即用且完全准备好的数据集进行机器学习建模并不常见。在本课中,你将学习如何使用标准 Python 库来准备原始数据集,也会学习多种数据可视化技术。
## 案例研究:“南瓜市场”
在本文件夹中,你会发现根目录 `data` 文件夹中有一个名为 [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) 的 .csv 文件,其中包含关于南瓜市场的 1757 行数据,这些数据按城市分组。这是从美国农业部发布的[特种作物终端市场标准报告](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice)中提取的原始数据。
在本文件夹的根目录 `data` 目录下,有一个名为 [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) 的 .csv 文件,包含了关于南瓜市场的 1757 行数据,按城市分组排序。这是从美国农业部发布的[特色农产品终端市场标准报告](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 数据分析”)这款对数据整形非常有用的工具,来分析并准备这份南瓜数据。
### 首先,检查缺失日期
你首先需要采取步骤检查是否有缺失日期:
你首先需要做的步骤是检查是否有缺失日期:
1. 将日期转换为月份格式(这是美国日期,格式为 `MM/DD/YYYY`)。
2. 提取月份一个新列。
1. 将日期转换为月份格式(这是美国日期格式,格式为 `MM/DD/YYYY`)。
2. 将月份提取到新列。
在 Visual Studio Code 中打开 _notebook.ipynb_ 文件,并将电子表格导入到一个新的 Pandas 数据框中
在 Visual Studio Code 中打开 _notebook.ipynb_ 文件,并导入电子表格到新的 Pandas 数据框
1. 使用 `head()` 函数查看前五行。
@ -64,7 +64,7 @@
pumpkins.head()
```
✅ 你会使用什么函数查看最后五行?
✅ 你会用什么函数查看最后五行?
1. 检查当前数据框中是否有缺失数据:
@ -72,9 +72,9 @@
pumpkins.isnull().sum()
```
存在缺失数据,但可能对当前任务没有影响
有缺失数据,但可能对当前任务影响不大
1. 为了让数据框更易于操作,使用 `loc` 函数选择你需要的列。`loc` 函数从原始数据框中提取一组行(作为第一个参数传递)和列(作为第二个参数传递)。下面表达式 `:` 表示“所有行”。
1. 为简化操作,只选取需要的列,使用 `loc` 函数从原始数据框中提取一组行(作为第一个参数)和列(作为第二个参数)。下面表达式中的 `:` 表示“所有行”。
```python
columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']
@ -83,11 +83,11 @@
### 其次,确定南瓜的平均价格
思考如何确定某个月份南瓜的平均价格。你会选择哪些列来完成这个任务?提示:你需要 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,7 +96,7 @@
```
随时使用 `print(month)` 打印任何数据以进行检查。
你可以随意用 `print(month)` 打印数据检查。
2. 现在,将转换后的数据复制到一个新的 Pandas 数据框中:
@ -104,29 +104,29 @@
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 斗”计量有的以“1/2 斗”计量,有的是按个,有的按磅,还有的装在大小不一的箱子中
> 南瓜似乎很难一致地称重
> 南瓜似乎很难做到统一称重
深入研究原始数据,发现 `Unit of Sale` 等于 'EACH' 或 'PER BIN' 的数据,其 `Package` 类型也为每英寸、每箱或“每个”。南瓜似乎很难一致地称重,因此我们通过选择 `Package` 列中包含字符串 'bushel' 的南瓜来进行过滤
深入分析原始数据发现,所有 `Unit of Sale` 为 'EACH' 或 'PER BIN' 的数据,其 `Package` 类型为每英寸、每箱或“每个”。南瓜的标准称重相当复杂,因此我们通过筛选,仅选择 `Package` 列中包含 'bushel' 字符串的南瓜
1. 在文件顶部的初始 .csv 导入下添加过滤器
1. 在文件顶部原始 .csv 导入后添加筛选
```python
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
```
如果现在打印数据,你会发现只剩下约 415 行按 bushel 销售的南瓜数据
如果现在打印数据,就只看到大约 415 行以“bushel”计量的南瓜数据了
### 等等!还有一件事要做
### 还有一件事要做
是否注意到每行的 bushel 数量不同?你需要对价格进行标准化,以显示每 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,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)bushel 的重量取决于农产品的类型,因为它是一个体积测量单位。“例如,一 bushel 的番茄应该重 56 磅……叶子和绿叶占据更多空间但重量较轻,因此一 bushel 的菠菜只有 20 磅。”这非常复杂!我们不必进行 bushel 到磅的转换,而是按 bushel 定价。然而,所有这些关于南瓜 bushel 的研究表明,了解数据的性质是多么重要!
✅ 根据 [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308)“bushel”的重量取决于农产品种类因为它是体积单位。“例如一斗西红柿大约重 56 磅……叶菜占据的空间多但重量轻,所以一斗菠菜只有 20 磅。”这都相当复杂我们不必将“bushel”转换为磅而是按“bushel”计价。对南瓜以“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 notebook 中表现良好的数据可视化库是 [Matplotlib](https://matplotlib.org/)(你在上一课也见过)。
> [这些教程](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott)中获得更多数据可视化经验
> 想获得更多数据可视化经验,请参阅[这些教程](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott)。
## 练习 - 试验 Matplotlib
## 练习 —— 试验 Matplotlib
尝试创建一些基本图表来显示你刚刚创建的新数据框。基本折线图会显示什么?
尝试创建一些基本图表以展示你刚创建的数据框。基本线图会展示什么?
1. 在文件顶部的 Pandas 导入下导入 Matplotlib
1. 在文件顶部的 Pandas 导入下导入 Matplotlib
```python
import matplotlib.pyplot as plt
```
1. 重新运行整个笔记本以刷新。
1. 在笔记本底部添加一个单元格,将数据绘制为一个框图
1. 重新运行整个 notebook 以刷新。
1. 在 notebook 底部添加一个单元格,以箱线图形式绘制数据
```python
price = new_pumpkins.Price
@ -174,44 +174,121 @@
plt.show()
```
![一个显示价格与月份关系的散点图](../../../../2-Regression/2-Data/images/scatterplot.png)
![展示价格与月份关系的散点图](../../../../translated_images/zh-CN/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/zh-CN/barchart.a833ea9194346d76.webp)
这是更有用的数据可视化看似表明南瓜最高价出现在9月和10月。你认同吗为什么
## 练习 —— 试验 Seaborn
Matplotlib 功能强大,但绘制精美图表往往需要较多代码。 [Seaborn](https://seaborn.pydata.org/) 是建立在 Matplotlib 之上的库,专为统计数据可视化设计。它直接支持 Pandas 数据框,应用美观默认样式,让你用更少代码创建信息丰富的图表。由于 Seaborn 返回的是 Matplotlib 对象,你仍可运用已有的 Matplotlib 知识精细调整结果。
> 如果还没安装 Seaborn使用 `pip install seaborn` 安装。
1. 在 notebook 顶部其他导入语句下面导入 Seaborn惯例用 `sns` 作为别名:
```python
import seaborn as sns
```
### 散点图展示关系
构建模型前重要部分是寻找变量间的_关系_。[散点图](https://en.wikipedia.org/wiki/Scatter_plot) 是很好工具:如果点呈线性排列,两变量可能相关,这是线性回归模型有效的好迹象。
1. 重新绘制之前的价格与月份散点图,改用 Seaborn 的 [`relplot()`](https://seaborn.pydata.org/generated/seaborn.relplot.html)(关系图),它直接使用数据框的列:
```python
sns.relplot(x="Price", y="Month", data=new_pumpkins)
```
![Seaborn 散点图展示价格与月份关系](../../../../translated_images/zh-CN/relplot.a03837d8f0329cec.webp)
注意这里你传入的是_列名_和数据框由 Seaborn 自动处理轴标签。
2. 通过传入 `kind="line"` 可切换为折线图。Seaborn 甚至会绘制带有置信区间的阴影带:
```python
sns.relplot(x="Price", y="Month", kind="line", data=new_pumpkins)
```
![Seaborn 折线图展示价格与月份关系](../../../../translated_images/zh-CN/lineplot.f9034ba47b1e30ee.webp)
这组数据较为嘈杂,所以折线图不是最清晰的选择——但展示了如何轻松切换 Seaborn 图类型。
### 柱状图展示分布
之前你用手动分组数据来创建了一个 Matplotlib 条形图。Seaborn 的 [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html)(类别图)可以帮你完成分组和聚合。默认情况下,`kind="bar"` 会显示每个类别的平均值,并用一条黑线表示置信区间。
1. 创建一个按月平均价格的条形图:
```python
sns.catplot(x="Month", y="Price", data=new_pumpkins, kind="bar")
```
![A Seaborn bar chart showing the price distribution per month](../../../../translated_images/zh-CN/catplot.e73fc35fdf96242b.webp)
这验证了你用 Matplotlib 看到的结果——价格在九月和十月达到峰值——但 Seaborn 还可视化了每个月价格的 _变化_ 情况。
### 显示相关性的热力图
散点图一次比较两个变量。当你有多个数值列时,[热力图](https://en.wikipedia.org/wiki/Heat_map)可以一次显示_每对_列之间的关系强度。这是选择输入模型的特征之前常见的发现哪些特征最相关的方法同样类型的图表后来也用于显示分类中的混淆矩阵
1. 用 Pandas 构建相关矩阵,然后用 Seaborn 的 [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html) 绘制它。`annot=True` 选项会在每个单元格上打印相关系数数值:
```python
correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()
sns.heatmap(correlations, annot=True, cmap="coolwarm")
```
![A Seaborn heatmap showing correlations between the numeric columns](../../../../translated_images/zh-CN/heatmap.bd98dce43b404c57.webp)
接近 `1`(或 `-1`)的值意味着列的 _线性_ 相关性很强。注意 `Low Price``High Price` 几乎完美相关。另一方面,`Month` 与价格只有较弱的线性相关性——尽管上面的条形图显示了九月和十月明显的季节峰值。这是个重要的教训:相关系数只测量 _直线_ 关系,所以它可能忽略季节性或其他非线性模式。✅ 为什么在决定使用哪些列之前,同时查看热力图<em></em>条形图这类图表很有用?
### Matplotlib 还是 Seaborn
两个库都值得了解:
- **Matplotlib** 让你可以细致控制图表的每个元素,是几乎所有其他 Python 绘图库的基础。
- **Seaborn** 提供更高级的函数和漂亮的默认统计图表样式,直接支持 DataFrame通常更适合快速进行探索性数据分析。
这是一个更有用的数据可视化!它似乎表明南瓜的最高价格出现在九月和十月。这符合你的预期吗?为什么?
一个常见的工作流是先用 Seaborn 快速探索数据,之后需要定制细节时切回 Matplotlib。
---
## 🚀挑战
探索 Matplotlib 提供的不同类型的可视化。哪些类型最适合回归问题?
探索 Matplotlib 和 Seaborn 提供的不同类型可视化。哪些类型更适合回归问题?
## [课后测验](https://ff-quizzes.netlify.app/en/ml/)
## 复习与自学
看看可视化数据的各种方法。列出可用的各种库,并记录哪些库最适合特定类型的任务,例如 2D 可视化与 3D 可视化。你发现了什么?
看看各种不同的数据可视化方法。列出各种可用的库,并注明哪些库适合处理特定类型的任务,例如二维可视化 vs. 三维可视化。你的发现是什么?
## 作业
## 任务
[探索可视化](assignment.md)
---
**免责声明**
本文档使用AI翻译服务[Co-op Translator](https://github.com/Azure/co-op-translator)进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而导致的任何误解或误读,我们概不负责。
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免责声明**
本文件由 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻译完成。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。原始语言版文件应视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。
<!-- 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本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。我们不对因使用此翻译而产生的任何误解或误读承担责任。\n"
"### 热力图显示相关性\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()\n",
"sns.heatmap(correlations, annot=True, cmap=\"coolwarm\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**免责声明**\n本文件由 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻译完成。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。原始语言版文件应视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -424,13 +487,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "95726f0b8283628d5356a4f8eb8b4b76",
"translation_date": "2025-09-03T19:45:01+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "zh"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -1,77 +1,77 @@
# 使用逻辑回归预测类别
# 逻辑回归用于预测类别
![逻辑回归与线性回归信息图](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png)
![逻辑回归与线性回归信息图](../../../../translated_images/zh-CN/linear-vs-logistic.ba180bf95e7ee667.webp)
## [课前测验](https://ff-quizzes.netlify.app/en/ml/)
> ### [本课也提供 R 版本!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html)
> ### [本课也提供 R 语言版本!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html)
## 简介
在本课程中,我们将学习逻辑回归,这是经典机器学习技术之一。你可以使用这种技术发现模式以预测二元类别。例如,这颗糖果是巧克力还是不是巧克力?这种疾病是否具有传染性?这个顾客会选择这个产品还是不会
在本回归课的最后一个单元中我们将学习逻辑回归Logistic Regression这是基础且经典的机器学习技术之一。您可以使用此技术发现模式以预测二元类别。这个糖果是巧克力吗这种疾病会传染吗这个客户会选择这个产品吗
在本课程中,你将学习
本课您将学到
- 一个新的数据可视化
- 逻辑回归的技术
- 一个用于数据可视化的新
- 逻辑回归的相关技术
✅ 在这个 [学习模块](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) 中深入了解如何使用这种回归方法。
✅ 在 [学习模块](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) 中加深您对这类回归工作的理解
## 前置知识
## 先决条件
通过之前的南瓜数据集练习,我们已经足够熟悉它,并意识到其中有一个可以处理的二元类别:`Color`
在使用过南瓜数据后,我们已经足够熟悉数据,以发现其中有一个二元类别可以使用:`Color`(颜色)
让我们构建一个逻辑回归模型来预测给定一些变量时_某个南瓜可能的颜色_橙色 🎃 或白色 👻)。
让我们建立一个逻辑回归模型来预测基于某些变量_一个给定南瓜可能是什么颜色_橘色🎃或白色👻)。
> 为什么在回归课程中讨论二元分类?仅仅是为了语言上的方便,因为逻辑回归实际上是[一种分类方法](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression)尽管它是基于线性的。在下一组课程中,你将学习其他分类数据的方法。
> 为什么在关于回归的一组课程里讨论二元分类?只是语言上的方便,逻辑回归其实是[一种分类方法](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression)只是基于线性模型。下一组课程将介绍其他分类数据的方法。
## 定问题
## 定问题
对于我们的目的,我们将问题表达为一个二元类别:“白色”或“非白色”。数据集中还有一个“条纹”类别,但实例较少,因此我们不会使用它。实际上,在移除数据集中的空值后,它也会消失。
本次我们将把它表示为二元:“白色”或“非白色”。数据里还有“条纹”类别,但数量很少,我们不会使用它。且删除缺失值后它会消失。
> 🎃 有趣的事实:我们有时称白色南瓜为“幽灵”南瓜。它们不太容易雕刻,因此不像橙色南瓜那么受欢迎,但它们看起来很酷!所以我们也可以将问题重新表述为:“幽灵”或“非幽灵”。👻
> 🎃 有趣的事实:我们有时称白南瓜为“鬼南瓜”。它们不易雕刻,所以没有橘色南瓜那么受欢迎,但外形很酷!因此,我们的提问也可以改成“鬼”或“非鬼”。👻
## 关于逻辑回归
逻辑回归与之前学习的线性回归有几个重要的不同点
逻辑回归与之前讲过的线性回归在几个重要方面不同
[![机器学习初学者 - 理解逻辑回归用于分类](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "机器学习初学者 - 理解逻辑回归用于分类")
[![初学者机器学习 - 理解用于分类的逻辑回归](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "初学者机器学习 - 理解用于分类的逻辑回归")
> 🎥 点击上观看关于逻辑回归简短视频概述。
> 🎥 点击上图观看逻辑回归简短视频概述。
### 二元分类
逻辑回归与线性回归的功能不同。前者预测二元类别例如“白色或非白色”而后者能够预测连续值例如根据南瓜的产地和收获时间_价格将上涨多少_。
逻辑回归不具备线性回归的所有特性。前者针对二元类别“白色或非白色”进行预测而后者能够预测连续数值例如给出南瓜产地和收获时间预测_价格会上涨多少_。
![南瓜分类模型](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png)
> 信息图由 [Dasani Madipalli](https://twitter.com/dasani_decoded) 提供
![南瓜分类模型](../../../../translated_images/zh-CN/pumpkin-classifier.562771f104ad5436.webp)
> 信息图由 [Dasani Madipalli](https://twitter.com/dasani_decoded) 制作
### 其他分类
逻辑回归还有其他类型,包括多项式和有序分类
逻辑回归还有其他类型,包含多项式回归和有序回归
- **多项式分类**:涉及多个类别,例如“橙色、白色和条纹”。
- **有序分类**:涉及有序类别,适用于逻辑排序的结果,例如按有限大小排序的南瓜(迷你、小、中、大、特大、超大)
- <strong>多项式回归</strong>,存在多个类别——“橙色、白色和条纹”。
- <strong>有序回归</strong>,类别有顺序,适用于如我们按尺寸(迷你、小、中、大、加大、加加大)排序的南瓜
![多项式分类与有序分类](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png)
![多项式与有序回归](../../../../translated_images/zh-CN/multinomial-vs-ordinal.36701b4850e37d86.webp)
### 变量不需要相关
### 变量不相关
还记得线性回归在变量相关性较高时效果更好吗?逻辑回归正好相反——变量不需要相关性。这适用于数据中相关性较弱的情况
记得线性回归变量越相关表现越好吗?逻辑回归正好相反——变量不必对齐。这适合本数据,相关性较弱
### 需要大量干净数据
### 需要大量干净数据
逻辑回归在使用更多数据时会给出更准确的结果;我们的数据集较小,因此并不理想
逻辑回归使用越多数据结果越准确;我们的数据集较小,不是最优,需注意
[![机器学习初学者 - 数据分析与准备用于逻辑回归](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "机器学习初学者 - 数据分析与准备用于逻辑回归")
[![初学者机器学习 - 逻辑回归数据分析与准备](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "初学者机器学习 - 逻辑回归数据分析与准备")
> 🎥 点击上方图片观看关于准备线性回归数据的简短视频概述。
> 🎥 点击上图观看线性回归数据准备简短视频概述
✅ 思考哪些类型的数据适合逻辑回归
✅ 思考哪些数据适合逻辑回归
## 练习 - 整理数据
首先,清理数据,删除空值并选择部分列:
先稍作清理,删除缺失值,选取部分列:
1. 添加以下代码:
@ -83,19 +83,19 @@
pumpkins.dropna(inplace=True)
```
你可以随时查看新数据框:
随时可以查看你的新数据框:
```python
pumpkins.info
```
### 可视化 - 类图
### 可视化 - 类
现在你已经加载了[起始笔记本](../../../../2-Regression/4-Logistic/notebook.ipynb),其中包含南瓜数据,并清理了数据以保留一些变量,包括 `Color`。让我们使用一个不同的库 [Seaborn](https://seaborn.pydata.org/index.html) 在笔记本中可视化数据框。Seaborn 是基于我们之前使用的 Matplotlib 构建的。
现在你已经再次加载了 [starter notebook](./notebook.ipynb) 的南瓜数据,并清理了数据以保留一些变量,包括`Color`。让我们用另一个基于 Matplotlib 的库 [Seaborn](https://seaborn.pydata.org/index.html) 在笔记本中可视化数据框。
Seaborn 提供了一些很棒的方式来可视化数据。例如,你可以在分类图中比较 `Variety``Color` 数据的分布。
Seaborn 提供了非常棒的数据可视化方式。例如,使用类别绘图比较每个`Variety`和`Color`的分布。
1. 使用 `catplot` 函数创建这样的图,使用南瓜数据 `pumpkins`,并为每个南瓜类别(橙色或白色)指定颜色映射:
1. 使用`catplot`函数创建该图,使用我们的南瓜数据`pumpkins`,并为每个南瓜类别(橘色或白色)指定颜色映射:
```python
import seaborn as sns
@ -111,19 +111,18 @@ Seaborn 提供了一些很棒的方式来可视化数据。例如,你可以在
)
```
![数据可视化网格](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png)
![可视化数据网格](../../../../translated_images/zh-CN/pumpkins_catplot_1.c55c409b71fea2ec.webp)
通过观察数据,你可以看到 `Color` 数据与 `Variety` 的关系
观察该数据,你可以看到颜色数据与品种的关联
✅ 根据这个分类图,你能想到哪些有趣的探索?
✅ 根据此类别绘图,你能想象出哪些有趣的探索?
### 数据预处理:特征和标签编码
我们的南瓜数据中所有列都是字符串。人能直观理解分类数据,但机器理解较难。机器学习算法对数字处理更有效。编码是在数据预处理阶段非常重要步骤,它帮我们将分类数据转换成数字,且不丢失信息。良好编码有助构建优良模型。
我们的南瓜数据集的所有列都包含字符串值。处理分类数据对人类来说很直观,但对机器来说却不然。机器学习算法更适合处理数字数据。这就是为什么编码是数据预处理阶段非常重要的一步,它使我们能够将分类数据转换为数值数据,而不会丢失任何信息。良好的编码有助于构建良好的模型。
特征编码主要有两类编码器:
对于特征编码,主要有两种编码器:
1. **有序编码器**:适用于有序变量,即数据具有逻辑顺序的分类变量,例如数据集中的 `Item Size` 列。它创建一个映射,使每个类别由一个数字表示,该数字是列中类别的顺序。
1. 有序编码器:适用于有顺序的分类变量,如我们数据集的`Item Size`列。它创建映射,将每个类别用数字表示,即该类别在列中的顺序。
```python
from sklearn.preprocessing import OrdinalEncoder
@ -133,7 +132,7 @@ Seaborn 提供了一些很棒的方式来可视化数据。例如,你可以在
ordinal_encoder = OrdinalEncoder(categories=item_size_categories)
```
2. **分类编码器**:适用于无序变量,即数据没有逻辑顺序的分类变量,例如数据集中除 `Item Size` 之外的所有特征。它是一种独热编码,这意味着每个类别由一个二进制列表示:如果南瓜属于该类别,则编码变量为 1否则为 0。
2. 类别编码器:适用于无序分类变量,如我们数据集中除`Item Size`外的特征。它是独热编码即每个类别用一个二元列表示如果某南瓜属于该品种编码变量为1否则为0。
```python
from sklearn.preprocessing import OneHotEncoder
@ -141,8 +140,7 @@ Seaborn 提供了一些很棒的方式来可视化数据。例如,你可以在
categorical_features = ['City Name', 'Package', 'Variety', 'Origin']
categorical_encoder = OneHotEncoder(sparse_output=False)
```
然后,使用 `ColumnTransformer` 将多个编码器合并为一个步骤,并将其应用于适当的列。
然后,用`ColumnTransformer`将多个编码器合并为一步并应用于相应列。
```python
from sklearn.compose import ColumnTransformer
@ -155,8 +153,7 @@ Seaborn 提供了一些很棒的方式来可视化数据。例如,你可以在
ct.set_output(transform='pandas')
encoded_features = ct.fit_transform(pumpkins)
```
另一方面,为了编码标签,我们使用 scikit-learn 的 `LabelEncoder` 类,这是一个实用类,用于将标签标准化,使其仅包含 0 到 n_classes-1这里是 0 和 1之间的值。
另一方面,对标签编码,我们用 Scikit-learn 的`LabelEncoder`类工具把标签规范化为只包含0和1之间值这里是0和1
```python
from sklearn.preprocessing import LabelEncoder
@ -164,20 +161,17 @@ Seaborn 提供了一些很棒的方式来可视化数据。例如,你可以在
label_encoder = LabelEncoder()
encoded_label = label_encoder.fit_transform(pumpkins['Color'])
```
完成特征和标签编码后,我们可以将它们合并为一个新的数据框 `encoded_pumpkins`
编码特征和标签完成后,可合并成新数据框`encoded_pumpkins`。
```python
encoded_pumpkins = encoded_features.assign(Color=encoded_label)
```
✅ 使用有序编码器处理 `Item Size` 列有哪些优势?
✅ 使用有序编码器对`Item Size`列有什么优势?
### 分析变量之间的关系
现在我们已经对数据进行了预处理,可以分析特征和标签之间的关系,以了解模型在给定特征的情况下预测标签的能力。
分析这种关系的最佳方式是绘制数据。我们将再次使用 Seaborn 的 `catplot` 函数,以分类图的形式可视化 `Item Size`、`Variety` 和 `Color` 之间的关系。为了更好地绘制数据,我们将使用编码后的 `Item Size` 列和未编码的 `Variety` 列。
预处理完数据后,我们可以分析特征和标签之间的关系,初步判断模型预测标签的能力。
最佳做法是绘图。我们将再次用 Seaborn 的 `catplot` 函数,在类别图中展示 `Item Size`、`Variety` 和 `Color` 间的关系。为了更好地绘图,我们使用编码后的 `Item Size` 列和未编码的 `Variety` 列。
```python
palette = {
@ -196,16 +190,15 @@ Seaborn 提供了一些很棒的方式来可视化数据。例如,你可以在
g.set(xlabel="Item Size", ylabel="").set(xlim=(0,6))
g.set_titles(row_template="{row_name}")
```
![可视化数据的类别图](../../../../translated_images/zh-CN/pumpkins_catplot_2.87a354447880b388.webp)
![数据分类图](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png)
### 使用 swarm plot
### 使用蜂群图
因为颜色是二元类别(白或非白),它需要“[特殊方法](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) 可视化”。还有其他方式展示该分类与变量的关系。
由于 `Color` 是一个二元类别(白色或非白色),它需要“[一种专门的方法](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar)来可视化”。还有其他方法可以可视化此类别与其他变量的关系
你可以用 Seaborn 的图表并排可视化变量
你可以使用 Seaborn 图表并排可视化变量。
1. 尝试使用“蜂群图”来显示值的分布:
1. 试试“swarm”图显示数值分布
```python
palette = {
@ -215,27 +208,28 @@ Seaborn 提供了一些很棒的方式来可视化数据。例如,你可以在
sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette)
```
![数据蜂群图](../../../../2-Regression/4-Logistic/images/swarm_2.png)
![数据分布的群聚图](../../../../translated_images/zh-CN/swarm_2.efeacfca536c2b57.webp)
<strong>注意</strong>:上述代码可能产生警告,因为 seaborn 无法很好地将大量数据点放入 swarm 图。解决方案是用“size”参数减小标记尺寸但这会影响图的可读性。
**注意**:上述代码可能会生成警告,因为 Seaborn 无法在蜂群图中表示如此多的数据点。一个可能的解决方案是通过使用 `size` 参数减小标记的大小。然而,请注意,这会影响图表的可读性。
> **🧮 数学原理**
> **🧮 给我数学原理**
>
> 逻辑回归依赖于“最大似然”概念,使用[Sigmoid 函数](https://wikipedia.org/wiki/Sigmoid_function)。在图表上Sigmoid 函数看起来像一个“S”形。它将一个值映射到 0 和 1 之间的某个位置。它的曲线也被称为“逻辑曲线”。其公式如下:
> 逻辑回归基于“最大似然”概念,使用[Sigmoid函数](https://wikipedia.org/wiki/Sigmoid_function)。Sigmoid函数的图形像S形。它把一个值映射到0到1之间。其曲线又叫“逻辑曲线”。公式如下:
>
> ![逻辑函数](../../../../2-Regression/4-Logistic/images/sigmoid.png)
> ![逻辑函数](../../../../translated_images/zh-CN/sigmoid.8b7ba9d095c789cf.webp)
>
> 其中Sigmoid 的中点位于 x 的 0 点L 是曲线的最大值k 是曲线的陡度。如果函数的结果大于 0.5则该标签将被归类为二元选择中的“1”。否则将被归类为“0”。
> 其中 Sigmoid 中点在 x=0 处L 是曲线最大值k 是曲线陡峭程度。若函数值大于0.5则该二元分类标签为概率的“1”否则归为“0”。
## 构建模型
在 Scikit-learn 中构建一个用于二元分类的模型非常简单
在 Scikit-learn 中构建此类二元分类模型异常简便
[![机器学习初学者 - 逻辑回归进行数据分类](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "机器学习初学者 - 逻辑回归进行数据分类")
[![初学者机器学习 - 逻辑回归分类](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "初学者机器学习 - 逻辑回归分类")
> 🎥 点击上观看关于构建线性回归模型简短视频概述。
> 🎥 点击上图观看构建线性回归模型简短视频
1. 选择你想在分类模型中使用的变量,并调用 `train_test_split()` 分割训练集和测试集:
1. 选择要用在分类模型中的变量,并使用`train_test_split()`拆分训练集和测试集:
```python
from sklearn.model_selection import train_test_split
@ -247,7 +241,7 @@ Seaborn 提供了一些很棒的方式来可视化数据。例如,你可以在
```
2. 现在你可以通过调用 `fit()` 使用训练数据训练模型,并打印结果:
2. 通过调用`fit()`训练模型,然后打印结果:
```python
from sklearn.metrics import f1_score, classification_report
@ -262,7 +256,7 @@ Seaborn 提供了一些很棒的方式来可视化数据。例如,你可以在
print('F1-score: ', f1_score(y_test, predictions))
```
查看模型的评分。考虑到数据只有大约 1000 行,结果还不错:
查看模型得分情况考虑到只有约1000行数据这表现不错:
```output
precision recall f1-score support
@ -283,13 +277,13 @@ Seaborn 提供了一些很棒的方式来可视化数据。例如,你可以在
F1-score: 0.7457627118644068
```
## 使用混淆矩阵更好地理解模型
## 通过混淆矩阵更好理解
虽然你可以通过打印上述项获得评分报告[术语](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report),但使用[混淆矩阵](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix)可能更容易理解模型的表现。
你可以打印出[报告](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report)来获得分数,但用[混淆矩阵](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix)更直观理解模型表现。
> 🎓 “[混淆矩阵](https://wikipedia.org/wiki/Confusion_matrix)”(或“误差矩阵”)是一个表格,用于表达模型的真实与预测的正负情况,从而评估预测的准确性
> 🎓 “[混淆矩阵](https://wikipedia.org/wiki/Confusion_matrix)”(或“错误矩阵”)是表格,表达模型真阳性与假阳性、真阴性与假阴性的统计,评估预测准确度
1. 使用混淆矩阵,调用 `confusion_matrix()`
1. 使用混淆矩阵,调用 `confusion_matrix()`
```python
from sklearn.metrics import confusion_matrix
@ -303,62 +297,56 @@ Seaborn 提供了一些很棒的方式来可视化数据。例如,你可以在
[ 11, 22]])
```
在 Scikit-learn 中,混淆矩阵的行(轴 0是实际标签 1是预测标签。
在 Scikit-learn 中混淆矩阵的行轴0是实际标签轴1是预测标签。
| | 0 | 1 |
| :---: | :---: | :---: |
| 0 | TN | FP |
| 1 | FN | TP |
这里发生了什么?假设我们的模型被要求在两个二元类别之间对南瓜进行分类,“白色”和“非白色”。
这里发生了什么?假设模型要在两个类别中分类南瓜,“白色”和“非白色”。
- 如果模型预测为非白色,且实际上确实是非白色,我们称其为真阴性,即左上数字。
- 如果模型预测为白色,但实际上是非白色,我们称其为假阳性,即左下数字。
- 如果模型预测为非白色,但实际上是白色,我们称其为假阴性,即右上数字。
- 如果模型预测为白色,且实际上是白色,我们称其为真阳性,即右下数字。
- 如果模型预测南瓜为非白色而实际上属于“非白色”类别我们称之为真负True Negative显示在左上角。
- 如果模型预测南瓜为白色而实际上属于“非白色”类别我们称之为假负False Negative显示在左下角。
- 如果模型预测南瓜为非白色而实际上属于“白色”类别我们称之为假正False Positive显示在右上角。
- 如果模型预测南瓜为白色而实际上属于“白色”类别我们称之为真正True Positive显示在右下角。
正如你可能猜到的,较多的真正和真负以及较少的假正和假负表明模型表现更好。
混淆矩阵如何与精确率和召回率相关联?请记住,上面打印的分类报告显示精确率为 0.85,召回率为 0.67。
如你所料,拥有较多的真正例和真负例以及较少的假正例和假负例是更理想的,这意味着模型表现更好。
混淆矩阵是如何与精确率和召回率相关联的请记住上面打印的分类报告显示了精确率0.85和召回率0.67)。
精确率 = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461
召回率 = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666
✅ 问:根据混淆矩阵,模型表现如何?
答:还不错;有相当多的真正例,但也有一些假负例。
✅ 问题:根据混淆矩阵,模型表现如何?答:还不错;真负例数量较多,但也存在一些假负例。
让我们通过混淆矩阵中 TP/TN 和 FP/FN 的映射,重新回顾之前提到的术语
让我们回顾一下之前看到的术语,借助混淆矩阵中 TP/TN 和 FP/FN 的映射关系
🎓 精确率PrecisionTP/(TP + FP)
检索到的实例中,相关实例的比例(例如,哪些标签被正确标记)。
🎓 精确率TP/(TP + FP) 在检索的实例中相关实例的比例(例如哪些标签被准确标注)
🎓 召回率RecallTP/(TP + FN)
相关实例中被检索到的比例,无论是否被正确标记。
🎓 召回率TP/(TP + FN) 检索到的相关实例的比例,无论是否标注正确
🎓 F1 分数f1-score(2 * precision * recall)/(precision + recall)
精确率和召回率的加权平均值,最佳值为 1最差值为 0。
🎓 f1-score: (2 * 精确率 * 召回率)/(精确率 + 召回率) 精确率和召回率的加权平均最佳值为1最差为0
🎓 支持度Support
每个标签被检索到的次数。
🎓 支持度:检索到的每个标签的出现次数
🎓 准确率Accuracy(TP + TN)/(TP + TN + FP + FN)
样本中标签被正确预测的百分比。
🎓 准确率:(TP + TN)/(TP + TN + FP + FN) 对样本的标签预测准确的百分比。
🎓 宏平均Macro Avg
对每个标签的指标进行无权重平均的计算,不考虑标签的不平衡。
🎓 宏平均:为每个标签计算未加权的平均指标,不考虑标签不平衡。
🎓 加权平均Weighted Avg
对每个标签的指标进行加权平均的计算,权重由支持度(每个标签的真实实例数)决定。
🎓 加权平均:为每个标签计算的平均指标,通过其支持度(每个标签的真实实例数量)加权,考虑标签不平衡。
你能想到如果想减少假负例的数量,应该关注哪个指标吗
如果你想让模型减少假负例的数量,你会关注哪个指标
## 可视化该模型的 ROC 曲线
[![机器学习入门 - 使用 ROC 曲线分析逻辑回归性能](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "机器学习入门 - 使用 ROC 曲线分析逻辑回归性能")
[![ML 入门 - 使用 ROC 曲线分析逻辑回归性能](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML 入门 - 使用 ROC 曲线分析逻辑回归性能")
> 🎥 点击上方图片观看关于 ROC 曲线的简短视频概述
> 🎥 点击上方图片观看关于 ROC 曲线的简短视频介绍
我们再做一个可视化看看所谓的“ROC”曲线
我们再做一个可视化,看看所谓的“ROC”曲线
```python
from sklearn.metrics import roc_curve, roc_auc_score
@ -378,37 +366,38 @@ plt.title('ROC Curve')
plt.show()
```
使用 Matplotlib 绘制模型的 [接收者操作特性曲线ROC](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc)。ROC 曲线通常用于查看分类器输出的真阳性与假阳性之间的关系。“ROC 曲线通常以真阳性率为 Y 轴,假阳性率为 X 轴。”因此,曲线的陡峭程度以及曲线与中线之间的空间很重要:你希望曲线迅速向上并越过中线。在我们的例子中,起初有一些假阳性,然后曲线正确地向上并越过中线:
使用 Matplotlib 绘制模型的[接收者操作特征](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc)或ROC曲线。ROC曲线常用于观察分类器输出的真阳性与假阳性的关系。“ROC 曲线通常在 Y 轴表示真正例率,在 X 轴表示假正例率。”因此,曲线的陡峭程度以及中间线与曲线之间的空间很重要:你想要一条快速上升并越过这条线的曲线。在我们的例子中,起始处存在假正例,然后曲线正常上升并且越过了那条线:
![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.png)
![ROC](../../../../translated_images/zh-CN/ROC_2.777f20cdfc4988ca.webp)
最后,使用 Scikit-learn 的 [`roc_auc_score` API](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) 计算实际的“曲线下面积”AUC
最后,使用 Scikit-learn 的 [`roc_auc_score` API](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score)计算实际的“曲线下面积”AUC
```python
auc = roc_auc_score(y_test,y_scores[:,1])
print(auc)
```
结果是 `0.9749908725812341`。由于 AUC 的范围是 0 到 1你希望分数越大越好因为一个 100% 正确预测的模型的 AUC 为 1在这种情况下该模型表现“相当不错”
```
结果为 `0.9749908725812341`。鉴于 AUC 范围是 0 到 1分数越大越好因为预测完全正确的模型的 AUC 是 1在这种情况下该模型 _相当不错_
在未来的分类课程中,你将学习如何迭代以提高模型分数。但现在,恭喜你!你已经完成了这些回归课程!
在未来的分类课程中,你将学习如何迭代以提高模型分数。但现在,恭喜你!你已经完成了这些回归课程!
---
## 🚀挑战
关于逻辑回归还有很多内容可以深入探讨!但最好的学习方式是动手实践。找到一个适合这种分析的数据集,并用它构建一个模型。你学到了什么?提示:试试 [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) 上的一些有趣数据集。
逻辑回归还有很多内容值得深入!但最好的学习方式是实验。找到适合这类分析的数据集并用它建立一个模型。你学到了什么?提示:尝试 [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) 寻找有趣的数据集。
## [课后测验](https://ff-quizzes.netlify.app/en/ml/)
## 复习与自学
阅读 [斯坦福大学的这篇论文](https://web.stanford.edu/~jurafsky/slp3/5.pdf) 的前几页,了解逻辑回归的一些实际应用。思考哪些任务更适合我们到目前为止学习的回归类型。哪种方法效果更好?
阅读 [斯坦福大学的这篇论文](https://web.stanford.edu/~jurafsky/slp3/5.pdf) 的前几页,了解逻辑回归的一些实用应用。思考我们到目前为止学习的各种回归任务中,哪些任务更适合哪种回归类型。哪种方法效果最好?
## 作业
## 作业
[重试这个回归任务](assignment.md)
[重试这个回归](assignment.md)
---
**免责声明**
本文档使用AI翻译服务[Co-op Translator](https://github.com/Azure/co-op-translator)进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用本翻译而引起的任何误解或误读,我们概不负责。
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免责声明**
本文件由 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻译完成。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。原始语言版文件应视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,47 +1,47 @@
# 强化学习与Q学习简介
# 强化学习与 Q 学习简介
![机器学习中强化学习的总结图](../../../../sketchnotes/ml-reinforcement.png)
> Sketchnote by [Tomomi Imura](https://www.twitter.com/girlie_mac)
![机器学习中强化学习的概要手绘笔记](../../../../translated_images/zh-CN/ml-reinforcement.94024374d63348db.webp)
> 手绘笔记作者:[Tomomi Imura](https://www.twitter.com/girlie_mac)
强化学习涉及三个重要概念:代理、状态和每个状态的一组动作。通过在指定状态下执行一个动作,代理会获得奖励。想象一下电脑游戏《超级马里奥》。你是马里奥,处于一个游戏关卡中,站在悬崖边上。你的上方有一个金币。你作为马里奥,处于游戏关卡中的特定位置……这就是你的状态。向右移动一步(一个动作)会让你掉下悬崖,这会给你一个较低的数值分数。然而,按下跳跃按钮会让你得分并保持存活。这是一个积极的结果,应该奖励你一个正数分数
强化学习包含三个重要概念:智能体(agent)、一些状态(states)以及每个状态下的一组动作(actions)。通过在指定状态下执行动作,智能体会获得一个奖励。再想象一下电脑游戏超级马里奥。你是马里奥,处在游戏关卡中,站在悬崖边上。你的上方有一枚金币。你作为马里奥,在游戏关卡中的一个具体位置……这就是你的状态。向右迈一步(动作)会让你跌落悬崖,这会给你较低的分数。然而,按跳跃键会让你得分并保持存活。这是一个积极的结果,应当奖励你一个正分
通过使用强化学习和模拟器(游戏),你可以学习如何玩游戏以最大化奖励,即保持存活并尽可能多地得分。
通过使用强化学习和模拟器(游戏),你学习如何玩游戏以最大化奖励,即保持存活并尽可能多地得分。
[![强化学习简介](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo)
> 🎥 点击上方图片观看 Dmitry 讨论强化学习
> 🎥 点击上方图片,听 Dmitry 讲述强化学习
## [课前测验](https://ff-quizzes.netlify.app/en/ml/)
## 前提条件与设置
## 前置条件与环境搭建
在本课中,我们将用 Python 实验一些代码。你应该能够在你的电脑或云端运行本课的 Jupyter Notebook 代码
在本课中,我们将用 Python 进行一些代码实验。你需要能够运行本课的 Jupyter Notebook 代码,无论是在你的电脑还是云端
你可以打开[课笔记本](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb),并按照课程内容进行学习
你可以打开[课笔记本](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb)并跟随课程内容进行构建
> **注意:** 如果你从云端打开代码,还需要获取 [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) 文件,该文件在笔记本代码中使用。将其添加到与笔记本相同的目录中
> **注意:** 如果你在云端打开此代码,你还需要获取笔记本代码中用到的 [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) 文件,并将它放在与笔记本相同的目录
##
## 介
在本课中,我们将探索**《彼得与狼》**的世界,这个故事灵感来源于俄罗斯作曲家[谢尔盖·普罗科菲耶夫](https://en.wikipedia.org/wiki/Sergei_Prokofiev)创作的音乐童话。我们将使用**强化学习**让彼得探索他的环境,收集美味的苹果并避免遇到狼。
本课中,我们将探索<strong>[彼得和狼](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)</strong>的世界,灵感来源于俄罗斯作曲家[谢尔盖·普罗科菲耶夫](https://en.wikipedia.org/wiki/Sergei_Prokofiev)的音乐童话。我们将用<strong>强化学习</strong>来让彼得探索他的环境,收集美味的苹果并避免遇见狼。
**强化学习**RL是一种学习技术它通过运行许多实验让我们学习代理在某个**环境**中的最佳行为。代理在这个环境中应该有某种**目标**,由**奖励函数**定义。
<strong>强化学习</strong>RL是一种学习技巧通过多次实验让我们能学习智能体在某个环境下的最优行为。智能体在该环境中应有某个<strong>目标</strong>,由<strong>奖励函数</strong>定义。
## 环境
为了简化,我们将彼得的世界设定为一个大小为 `width` x `height` 的方形棋盘,如下所示
简化起见,我们将彼得的世界视为一个 `宽度` x `高度` 的方形棋盘,如下
![彼得的环境](../../../../8-Reinforcement/1-QLearning/images/environment.png)
![彼得的环境](../../../../translated_images/zh-CN/environment.40ba3cb66256c93f.webp)
棋盘中的每个单元格可以是:
棋盘中的每个格子可能是:
* **地面**,彼得和其他生物可以在上面行走。
* **水域**,显然无法在上面行走。
* **树**或**草地**,可以休息的地方。
* **苹果**,彼得很高兴找到的食物
* **狼**,危险的生物,应避免接触
* <strong>地面</strong>,彼得和其他生物可以在其上行走。
* <strong>水域</strong>,显然无法行走。
* <strong>树木</strong><strong>草地</strong>,可以休息的地方。
* <strong>苹果</strong>,代表彼得高兴找到用以喂养自己的东西
* <strong></strong>,危险且应躲避
有一个单独的 Python 模块 [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py),包含了与这个环境交互的代码。由于这些代码对理解我们的概念并不重要,我们将导入模块并使用它创建示例棋盘(代码块 1
有一个单独的 Python 模块 [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py),包含与该环境互动的代码。由于这些代码对理解概念不重要,我们将导入该模块并用它创建示例棋盘(代码块1
```python
from rlboard import *
@ -52,63 +52,63 @@ m.randomize(seed=13)
m.plot()
```
这段代码应该打印出类似上图的环境
这段代码应打印出与上图类似的环境画面
## 动作与策略
在我们的示例中,彼得的目标是找到苹果,同时避免狼和其他障碍物。为此,他可以在棋盘上四处走动,直到找到苹果。
在我们的示例中,彼得的目标是找到一个苹果,同时避开狼和其他障碍物。为此,他可以四处走动直到找到苹果。
因此,在任何位置,他可以选择以下动作之一:向上、向下、向左和向右。
因此,在任何位置,他可以选择以下动作之一:上、下、左、右。
我们将这些动作定义为一个字典,并将它们映射到对应的坐标变化。例如,向右移动(`R`)对应于坐标对 `(1,0)`。(代码块 2
我们将把这些动作定义为字典,并映射到对应的坐标变化对。例如向右移动 (`R`) 对应坐标变化对 `(1,0)`。(代码块2
```python
actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) }
action_idx = { a : i for i,a in enumerate(actions.keys()) }
```
总结一下,这个场景的策略和目标如下:
总结来说,此场景的策略和目标如下:
- **策略**:我们的代理(彼得)的策略由所谓的**策略函数**定义。策略函数在任何给定状态下返回动作。在我们的例子中,问题的状态由棋盘表示,包括玩家的当前位置。
- <strong>策略</strong>,由所谓的<strong>策略函数</strong>policy定义。策略是一个函数给定任意状态返回采取的动作。在本例中状态由棋盘表示含玩家当前位置。
- **目标**:强化学习的目标是最终学习一个好的策略,使我们能够高效地解决问题。然而,作为基线,我们可以考虑最简单的策略,称为**随机游走**
- <strong>目标</strong>,强化学习的目的是最终学习一个良好策略,能高效解决问题。但作为基线,先考虑最简单的策略——<strong>随机游走</strong>
## 随机游走
首先,我们通过实现随机游走策略来解决问题。在随机游走中,我们会随机选择允许的动作,直到到达苹果(代码块 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)
## 奖励函数
为了让我们的策略更智能,我们需要了解哪些动作比其他动作“更好”。为此,我们需要定义目标。
为了让策略更加智能,我们需要理解哪些移动比其他的“更好”。为此,我们需要定义目标。
目标可以通过**奖励函数**定义,该函数为每个状态返回一些分数值。分数越高,奖励函数越好。(代码块 5
目标可以通过<strong>奖励函数</strong>定义,该函数为每个状态返回分值。分数越高奖励函数越好。代码块5
```python
move_reward = -0.1
@ -154,39 +154,115 @@ def reward(m,pos=None):
return move_reward
```
奖励函数的一个有趣之处在于,大多数情况下,*我们只有在游戏结束时才会获得实质性奖励*。这意味着我们的算法应该以某种方式记住导致最终正奖励的“好”步骤,并增加它们的重要性。同样,所有导致不良结果的动作应该被抑制。
一个有趣的事实是,在大多数情况下,<em>我们只在游戏结束时得到实质性的奖励</em>。这意味着算法应记住通往最终正向奖励的“好”步骤,并提高它们的重要性。同理,导致糟糕结果的所有动作应被抑制。
## Q学习
## Q 学习
我们将讨论的算法称为**Q学习**。在这个算法中,策略由一个称为**Q表**的函数(或数据结构)定义。它记录了在给定状态下每个动作的“好坏程度”。
本文将讨论一种算法称为<strong>Q 学习</strong>。在此算法中,策略由称为<strong>Q 表</strong>的函数(或数据结构)定义。它记录给定状态下各动作的“价值”。
之所以称为 Q表是因为将其表示为表格或多维数组通常很方便。由于我们的棋盘维度为 `width` x `height`,我们可以使用形状为 `width` x `height` x `len(actions)` 的 numpy 数组来表示 Q表代码块 6
因为方便起见,它通常被表示为表格或多维数组。由于棋盘尺寸为 `宽度` x `高度`,我们可以用形状为 `宽度` x `高度` x `动作数` 的 numpy 数组表示 Q 表:(代码块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/zh-CN/env_init.04e8f26d2d60089e.webp)
每个单元格的中心有一个“箭头”,指示移动的优选方向。由于所有方向都相等,显示的是一个点。
每个格子中心有个“箭头”指示优选移动方向。所有方向等值时显示为点。
现在我们需要运行模拟,探索环境,并学习 Q表值的更好分布这将使我们更快找到苹果的路径。
现在我们需要运行模拟,探索环境,学习更好的 Q 表数值分布,从而更快找到通往苹果的路径。
## Q学习的核心:贝尔曼方程
## Q 学习的本质:贝尔曼方程
一旦我们开始移动,每个动作都会有相应的奖励,即我们理论上可以根据最高的即时奖励选择下一个动作。然而,在大多数状态下,动作不会立即实现我们到达苹果的目标,因此我们无法立即决定哪个方向更好
开始移动时,每个动作会对应一个奖励,即理论上我们可根据即时奖励最高选择下一步动作。然而,大多数状态下,动作不会立即达成目标(吃到苹果),因此无法马上决定哪个方向更优
> 记住,重要的不是即时结果,而是最终结果,即我们将在模拟结束时获得的结果。
> 记住,重要的不是即时结果,而是最终结果,即模拟结束时获得的结果。
为了考虑这种延迟奖励,我们需要使用**[动态规划](https://en.wikipedia.org/wiki/Dynamic_programming)**的原理,这使我们能够递归地思考问题。
为了考虑这种延后奖励,我们需要利用<strong>[动态规划](https://en.wikipedia.org/wiki/Dynamic_programming)</strong>原理,递归思考问题。
假设我们现在处于状态 *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')*(最大值在状态 *s'* 的所有动作 *a'* 中计算)。
这给出了状态 *s* 下动作 *a* 的 Q 表计算的<strong>贝尔曼公式</strong>
<img src="../../../../translated_images/zh-CN/bellman-equation.7c0c4c722e5a6b7c.webp"/>
其中 γ 是所谓的<strong>折扣因子</strong>,决定你应该多大程度上倾向当前奖励而非未来奖励,反之亦然。
## 学习算法
根据上面公式,我们现在可以写出我们的学习算法的伪代码:
* 用相等数字初始化 Q 表 Q覆盖所有状态和动作
* 设定学习率 α ← 1
* 多次重复模拟
1. 随机选择起始位置
1. 重复
1. 在状态 *s* 选择动作 *a*
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 的动作。如果随机选择动作,我们会随机<strong>探索</strong>环境,可能频繁死亡且进入通常不会去的区域。另一种方法是<strong>利用</strong>已知 Q 表值选择最佳动作Q 值高的动作)在状态 *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
```
为避免初始向量所有分量相同时除以 0向原始向量添加少量 `eps`
运行学习算法共5000次实验也称为<strong>epochs</strong>代码块8
```python
for epoch in range(5000):
# 选择初始点
m.random_start()
# 开始移动
n=0
cum_reward = 0
while True:
x,y = m.human
v = probs(Q[x,y])
a = random.choices(list(actions),weights=v)[0]
dpos = actions[a]
m.move(dpos,check_correctness=False) # 我们允许玩家移动到棋盘外,这将终止回合
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/zh-CN/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 值方面“指向”彼此的情况,这样代理就会在这些状态之间无限移动。
> 如果你多次尝试上面的代码你可能会注意到有时它会“卡住”你需要按笔记本中的停止按钮来中断它。之所以会发生这种情况是因为可能存在两个状态在最优Q值方面“互相指向”在这种情况下智能体最终会在这些状态之间无限循环。
## 🚀挑战
> **任务 1** 修改 `walk` 函数以限制路径的最大长度为一定步数(例如 100并观察上面的代码是否会不时返回该值。
> **任务1** 修改 `walk` 函数将路径的最大长度限制为一定步数比如100并观察上述代码时不时返回这个值。
> **任务 2** 修改 `walk` 函数,使其不返回到之前已经到过的地方。这将防止 `walk` 进入循环,但代理仍可能最终被“困”在无法逃脱的位置。
> **任务2** 修改 `walk` 函数,使其不返回之前已经去过的地方。这将防止 `walk` 出现循环,但智能体仍可能被困在无法逃脱的位置。
## 导航
更好的导航策略是我们在训练期间使用的策略,它结合了利用和探索。在此策略中,我们将以一定的概率选择每个动作,该概率与 Q-Table 中的值成比例。此策略可能仍会导致代理返回到已经探索过的位置,但正如你从下面的代码中看到的,它会导致到达目标位置的平均路径非常短(记住 `print_statistics` 会运行 100 次模拟):(代码块 10
更好的导航策略是我们训练时使用的策略它结合了利用和探索。在此策略中我们将以某种概率选择每个动作该概率与Q表中的值成比例。这个策略仍可能导致智能体返回已探索的位置但正如下面代码所示它能使到目标位置的平均路径非常短记住 `print_statistics` 运行了100次仿真(代码块 10)
```python
def qpolicy(m):
@ -220,28 +297,32 @@ def qpolicy(m):
print_statistics(qpolicy)
```
运行此代码后,你应该会得到比之前小得多的平均路径长度,范围在 3-6 之间。
运行此代码后你应得到比之前更小的平均路径长度约在3到6之间。
## 探索学习过程
## 调查学习过程
如前所述,学习过程是在探索和利用已获得关于问题空间结构知识之间的平衡。我们看到学习结果(帮助智能体找到短路径的能力)有所改善,同时观察平均路径长度在学习过程中如何变化也很有趣:
正如我们提到的,学习过程是在探索和利用已获得的关于问题空间结构的知识之间的平衡。我们已经看到学习的结果(帮助代理找到到达目标的短路径的能力)有所改善,但观察平均路径长度在学习过程中的变化也很有趣:
<img src="../../../../translated_images/zh-CN/lpathlen1.0534784add58d4eb.webp"/>
学习总结如下:
学习要点总结如下:
- **平均路径长度增加**。我们看到的是,起初平均路径长度增加。这可能是因为当我们对环境一无所知时,很容易陷入糟糕的状态,比如水或狼。随着我们学习更多并开始使用这些知识,我们可以更长时间地探索环境,但仍清楚苹果位置。
- <strong>平均路径长度增加</strong>。这里看到的是,开始时平均路径长度增加。这很可能是因为当我们对环境一无所知时,很可能陷入糟糕的状态,比如水域或狼附近。随着学习深入并开始利用这些知识,我们可以更长时间地探索环境,但仍不清楚苹果位置。
- **路径长度随着学习增加而减少**。一旦我们学到足够多,代理更容易实现目标,路径长度开始减少。然而,我们仍然开放探索,因此经常偏离最佳路径,探索新的选项,使路径比最优路径更长。
- <strong>路径长度随学习增多而减少</strong>。当我们学到足够多的知识后,智能体更容易达到目标,路径长度开始减少。然而,我们仍保持探索,因此经常会偏离最佳路径,探索新的选项,使路径比最优路径更长。
- **长度突然增加**。我们在图表上还观察到某些时候长度突然增加。这表明过程的随机性,并且我们可能会在某些时候通过用新值覆盖 Q-Table 系数来“破坏”它们。这应该通过降低学习率来尽量减少(例如,在训练结束时,我们仅通过小值调整 Q-Table 值)
- <strong>路径长度突然增加</strong>。图中还显示在某些时刻路径长度突然增加。这反映了过程的随机性也表明Q表系数可能会被新值覆盖而“破坏”。理想情况下应通过降低学习率例如训练后期只对Q表值进行小幅调整来最小化这种情况
总体而言,重要的是要记住,学习过程的成功和质量在很大程度上取决于参数,例如学习率、学习率衰减和折扣因子。这些通常被称为 **超参数**,以区别于 **参数**,后者是在训练期间优化的(例如 Q-Table 系数)。寻找最佳超参数值的过程称为 **超参数优化**,它值得单独讨论
总体而言,重要的是要记住,学习过程的成功与质量很大程度上依赖于学习率、学习率衰减和折扣因子等参数。这些通常被称为<strong>超参数</strong>,以区别于我们在训练过程中优化的<strong>参数</strong>例如Q表系数。寻找最优超参数的过程称为<strong>超参数优化</strong>,这是一个独立的话题
## [课后测验](https://ff-quizzes.netlify.app/en/ml/)
## 作业
[一个更实的世界](assignment.md)
## 作业
[一个更实的世界](assignment.md)
---
**免责声明**
本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于重要信息,建议使用专业人工翻译。我们不对因使用此翻译而产生的任何误解或误读承担责任。
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免责声明**
本文件由 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻译完成。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。原始语言版文件应视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
Loading…
Cancel
Save