## [آزمون پیش از درس](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://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)
- **نقد ناعادلانه**. به ناحق چیزی یا کسی را نقد و برچسب زدن. به عنوان مثال، تکنولوژی برچسبگذاری تصاویر بدنام، تصاویر افراد با پوست تیره را به اشتباه به عنوان گوریل برچسب زد.
- **نمایندگی بیش از حد یا کمتر از حد**. ایده این است که گروه خاصی در حرفهای دیده نمیشود و هر خدمتی یا عملکردی که این وضعیت را تداوم میبخشد، به آسیب کمک میکند.
- **کلیشهسازی**. نسبت دادن ویژگیهای پیشفرض به یک گروه مشخص. به عنوان مثال، سیستم ترجمه زبانی بین انگلیسی و ترکی ممکن است به دلیل کلمات با ارتباطات کلیشهای جنسیتی دچار اشتباه شود.


> ترجمه به ترکی

> ترجمه به انگلیسی

> ترجمه بازگشت به انگلیسی
هنگام طراحی و آزمایش سیستمهای هوش مصنوعی، باید اطمینان حاصل کنیم که هوش مصنوعی عادلانه است و به گونهای برنامهریزی نشده است که تصمیمات متعصبانه یا تبعیضآمیز بگیرد، تصمیماتی که انسانها نیز از گرفتن آنها منع شدهاند. تضمین عدالت در هوش مصنوعی و یادگیری ماشین همچنان یک چالش پیچیده اجتماعی-فنی است.
هنگام طراحی و آزمایش سیستمهای هوش مصنوعی، باید اطمینان حاصل کنیم که هوش مصنوعی عادلانه است و برنامهای برای اتخاذ تصمیمات مغرضانه یا تبعیضآمیز ندارد، که انسانها نیز از انجام آن منع شدهاند. تضمین عدالت در هوش مصنوعی و یادگیری ماشین همچنان یک چالش پیچیده اجتماعی-فنی است.
### قابلیت اطمینان و ایمنی
برای ایجاد اعتماد، سیستمهای هوش مصنوعی باید قابل اعتماد، ایمن و سازگار در شرایط عادی و غیرمنتظره باشند. مهم است بدانیم که سیستمهای هوش مصنوعی در انواع مختلف شرایط چگونه رفتار خواهند کرد، به ویژه زمانی که موارد استثنایی هستند. هنگام ساخت راهحلهای هوش مصنوعی، باید تمرکز قابل توجهی بر نحوه مدیریت انواع مختلف شرایطی که راهحلهای هوش مصنوعی با آنها مواجه میشوند، وجود داشته باشد. برای مثال، یک ماشین خودران باید ایمنی افراد را به عنوان اولویت اصلی قرار دهد. در نتیجه، هوش مصنوعی که ماشین را قدرت میبخشد باید تمام سناریوهای ممکن را که ماشین ممکن است با آنها روبرو شود، مانند شب، طوفانهای رعد و برق یا کولاک، کودکان در حال دویدن در خیابان، حیوانات خانگی، ساختوسازهای جادهای و غیره در نظر بگیرد. اینکه یک سیستم هوش مصنوعی چقدر میتواند طیف گستردهای از شرایط را به طور قابل اعتماد و ایمن مدیریت کند، سطح پیشبینیپذیری را که دانشمند داده یا توسعهدهنده هوش مصنوعی در طراحی یا آزمایش سیستم در نظر گرفته است، منعکس میکند.
برای ایجاد اعتماد، سیستمهای هوش مصنوعی باید قابل اطمینان، ایمن و ثابت در شرایط عادی و غیرمنتظره باشند. مهم است بدانیم سیستمهای هوش مصنوعی چگونه در شرایط مختلف، به ویژه موارد پرت، رفتار خواهند کرد. هنگام ساخت راهحلهای هوش مصنوعی باید تمرکز زیادی بر نحوه برخورد با شرایط متنوعی که سیستم ممکن است با آن روبرو شود، گذاشته شود. برای مثال، یک خودرو خودران باید ایمنی مردم را در اولویت قرار دهد. در نتیجه، هوش مصنوعی که خودرو را هدایت میکند باید همه سناریوهای ممکن مانند شب، رعد و برق یا بوران، کودکانی که از خیابان عبور میکنند، حیوانات خانگی، ساختوسازهای جادهای و غیره را مدنظر داشته باشد. اینکه یک سیستم هوش مصنوعی چگونه میتواند طیف وسیعی از شرایط را بهطور قابل اعتماد و ایمن مدیریت کند، بازتابی از میزان پیشبینی دانشمند داده یا توسعهدهنده هوش مصنوعی در طراحی یا آزمایش سیستم است.
> [🎥 روی اینجا کلیک کنید برای ویدئو: ](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)
- از آنجا که سیستمهای هوش مصنوعی بسیار پیچیده هستند، درک نحوه عملکرد آنها و تفسیر نتایج دشوار است.
- این عدم درک بر نحوه مدیریت، عملیاتی شدن و مستندسازی این سیستمها تأثیر میگذارد.
- این عدم درک مهمتر از همه بر تصمیماتی که با استفاده از نتایج تولید شده توسط این سیستمها گرفته میشود، تأثیر میگذارد.
- به دلیل پیچیدگی سیستمهای هوش مصنوعی، درک چگونگی کار آنها و تفسیر نتایج دشوار است.
- این کمبود درک بر نحوه مدیریت، عملیاتی شدن و مستندسازی این سیستمها تأثیر میگذارد.
- این کمبود درک بخصوص روی تصمیماتی که بر اساس نتایج این سیستمها گرفته میشود، تأثیرگذار است.
### مسئولیتپذیری
افرادی که سیستمهای هوش مصنوعی را طراحی و پیادهسازی میکنند باید مسئول چگونگی عملکرد سیستمهایشان باشند. نیاز به مسئولیتپذیری به ویژه برای فناوریهای حساس مانند تشخیص چهره حیاتی است. اخیراً تقاضا برای فناوری تشخیص چهره رو به افزایش است، به خصوص از طرف سازمانهای اجرای قانون که پتانسیل این فناوری را در مواردی مانند یافتن کودکان گمشده میبینند. با این حال، این فناوریها میتوانند توسط دولتها برای تهدید آزادیهای اساسی شهروندان استفاده شوند، به عنوان مثال با نظارت مداوم بر افراد خاص. بنابراین، دانشمندان داده و سازمانها باید مسئول باشند که سیستم هوش مصنوعیشان چگونه بر افراد یا جامعه تأثیر میگذارد.
افرادی که سیستمهای هوش مصنوعی را طراحی و اجرا میکنند باید مسئول نحوه عملکرد سیستمهای خود باشند. نیاز به مسئولیتپذیری به ویژه در فناوریهای حساس مانند تشخیص چهره بسیار مهم است. اخیراً، تقاضا برای فناوری تشخیص چهره افزایش یافته است، به ویژه از سوی سازمانهای اجرای قانون که پتانسیل این فناوری را در استفادههایی مانند یافتن کودکان گمشده میبینند. با این حال، این فناوریها میتوانند به طور بالقوه توسط یک دولت برای به خطر انداختن آزادیهای اساسی شهروندان خود استفاده شوند، به عنوان مثال، با امکان نظارت مداوم بر افراد خاص. بنابراین، دانشمندان داده و سازمانها باید مسئول تأثیر سیستم هوش مصنوعی خود بر افراد یا جامعه باشند.
[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "رویکرد مایکروسافت به هوش مصنوعی مسئولانه")
[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "رویکرد مایکروسافت به هوش مصنوعی مسئولانه")
> 🎥 برای ویدیو: هشدارهای نظارت گسترده از طریق تشخیص چهره، روی تصویر بالا کلیک کنید
> 🎥 روی تصویر بالا کلیک کنید برای ویدئو: هشدار درباره نظارت گسترده از طریق تشخیص چهره
در نهایت یکی از بزرگترین سوالات نسل ما، به عنوان نسل اولی که هوش مصنوعی را به جامعه وارد میکند، این است که چگونه اطمینان حاصل کنیم که کامپیوترها همچنان نسبت به مردم پاسخگو باقی بمانند و چگونه اطمینان حاصل کنیم کسانی که کامپیوترها را طراحی میکنند نسبت به همه باقی مردم پاسخگو باشند.
در نهایت یکی از بزرگترین سوالات برای نسل ما، به عنوان اولین نسلی که هوش مصنوعی را به جامعه میآورد، این است که چگونه میتوان اطمینان حاصل کرد که کامپیوترها همچنان مسئولیتپذیر باقی میمانند و چگونه میتوان اطمینان حاصل کرد که افرادی که کامپیوترها را طراحی میکنند مسئولیتپذیر باقی میمانند.
## ارزیابی تاثیر
## ارزیابی تأثیر
قبل از آموزش یک مدل یادگیری ماشین، مهم است که ارزیابی تأثیر انجام شود تا هدف از سیستم هوش مصنوعی، نحوه استفاده مورد نظر، محل استقرار و افرادی که با سیستم تعامل دارند، درک شود. این موارد برای ارزیابان یا تستکنندگان سیستم مفید است تا عوامل مورد توجه هنگام شناسایی خطرات احتمالی و پیامدهای پیشبینی شده را بدانند.
قبل از آموزش یک مدل یادگیری ماشین، مهم است که یک ارزیابی تأثیر انجام شود تا هدف سیستم هوش مصنوعی، استفاده مورد نظر، محل اجرا و افرادی که با سیستم تعامل خواهند داشت، درک شود. این موارد برای بازبینها یا آزمایشکنندگان سیستم مفید هستند تا بدانند چه عواملی را باید هنگام شناسایی خطرات بالقوه و پیامدهای مورد انتظار در نظر بگیرند.
حوزههای اصلی هنگام انجام ارزیابی تأثیر عبارتند از:
موارد زیر حوزههای تمرکز هنگام انجام ارزیابی تأثیر هستند:
* **تأثیر منفی بر افراد**. آگاهی از هرگونه محدودیت یا نیازمندی، استفاده غیرمجاز یا هر محدودیت شناخته شده که کارایی سیستم را مختل کند، برای اطمینان از عدم استفاده سیستم به روش مضر برای افراد حیاتی است.
* **نیازهای دادهای**. درک این که سیستم چگونه و کجا از داده استفاده میکند، به ارزیابان این امکان را میدهد که هر نیاز دادهای که باید رعایت شود (مانند مقررات GDPR یا HIPAA) را بررسی کنند. علاوه بر این، منبع یا مقدار داده برای آموزش کافی بودن را ارزیابی کنند.
* **خلاصه تأثیر**. فهرستی از آسیبهای احتمالی ناشی از استفاده از سیستم جمعآوری کنید. در طول چرخه عمر یادگیری ماشین، بررسی کنید که آیا مسائل شناسایی شده کاهش یافته یا برطرف شدهاند.
* **اهداف قابل اعمال** برای هر یک از شش اصل اصلی. ارزیابی کنید که آیا اهداف هر اصل برآورده شدهاند و آیا شکافهایی وجود دارد یا خیر.
* **تأثیر نامطلوب بر افراد**. آگاهی از هرگونه محدودیت یا الزامات، استفاده غیرپشتیبانی شده یا هر محدودیت شناخته شدهای که عملکرد سیستم را مختل میکند، برای اطمینان از اینکه سیستم به گونهای استفاده نمیشود که به افراد آسیب برساند، حیاتی است.
* **نیازهای داده**. درک نحوه و محل استفاده سیستم از دادهها به بازبینها امکان میدهد تا هرگونه نیاز دادهای را که باید به آن توجه شود (مانند مقررات داده GDPR یا HIPPA) بررسی کنند. علاوه بر این، بررسی کنید که آیا منبع یا مقدار داده برای آموزش کافی است.
* **خلاصه تأثیر**. فهرستی از آسیبهای بالقوهای که ممکن است از استفاده از سیستم ایجاد شود، جمعآوری کنید. در طول چرخه عمر یادگیری ماشین، بررسی کنید که آیا مسائل شناسایی شده کاهش یافته یا برطرف شدهاند.
* **اهداف قابل اجرا** برای هر یک از شش اصل اصلی. ارزیابی کنید که آیا اهداف هر یک از اصول برآورده شدهاند و آیا شکافهایی وجود دارد.
## اشکالزدایی با هوش مصنوعی مسئولانه
مشابه اشکالزدایی یک برنامه نرمافزاری، اشکالزدایی یک سیستم هوش مصنوعی فرآیند ضروری شناسایی و حل مشکلات در سیستم است. عوامل زیادی وجود دارند که میتوانند باعث شوند یک مدل به طور مورد انتظار یا مسئولانه عمل نکند. اکثر معیارهای عملکرد مدلهای سنتی، تجمعات کمی از عملکرد مدل هستند که برای تحلیل نحوه نقض اصول هوش مصنوعی مسئولانه کافی نیستند. علاوه بر این، یک مدل یادگیری ماشین یک جعبه سیاه است که درک آنچه باعث نتیجه آن میشود یا ارائه توضیح زمانی که اشتباه میکند، دشوار است. در ادامه این دوره، یاد خواهیم گرفت که چگونه از داشبورد هوش مصنوعی مسئولانه برای کمک به اشکالزدایی سیستمهای هوش مصنوعی استفاده کنیم. این داشبورد ابزار جامعی برای دانشمندان داده و توسعهدهندگان هوش مصنوعی فراهم میکند تا انجام دهند:
مشابه اشکالزدایی برنامه نرمافزاری، اشکالزدایی سیستم هوش مصنوعی فرآیندی ضروری برای شناسایی و حل مشکلات در سیستم است. عوامل زیادی میتوانند باعث شوند مدل مطابق انتظار یا به صورت مسئولانه عمل نکند. اکثر معیارهای عملکرد مدل سنتی، مقادیر عددی کلی عملکرد مدل هستند که برای تحلیل نقض اصول هوش مصنوعی مسئولانه کافی نیستند. علاوه بر این، مدل یادگیری ماشین جعبه سیاهی است که درک محرکهای خروجی آن یا ارائه توضیح در هنگام خطا را دشوار میکند. در ادامه این دوره، یاد میگیریم چگونه از داشبورد هوش مصنوعی مسئولانه برای کمک به اشکالزدایی سیستمهای هوش مصنوعی استفاده کنیم. این داشبورد ابزار جامع برای دانشمندان داده و توسعهدهندگان هوش مصنوعی فراهم میکند تا:
* **تحلیل خطا**. شناسایی توزیع خطاهای مدل که میتواند بر عدالت یا قابلیت اطمینان سیستم تأثیر بگذارد.
* **نمای کلی مدل**. کشف نقاط اختلاف عملکرد مدل در دادههای گروههای مختلف.
* **تحلیل داده**. فهم توزیع دادهها و شناسایی هر گونه تعصب احتمالی که ممکن است به مشکلات عدالت، جامعیت یا قابلیت اطمینان منجر شود.
* **تفسیری بودن مدل**. درک عوامل مؤثر بر پیشبینیهای مدل که به توضیح رفتار مدل، مهم برای شفافیت و مسئولیتپذیری کمک میکند.
* **تحلیل خطا**. برای شناسایی توزیع خطاهای مدل که میتواند بر عدالت یا قابلیت اطمینان سیستم تأثیر بگذارد.
* **نمای کلی مدل**. برای کشف اینکه کجا در عملکرد مدل در میان گروههای داده تفاوت وجود دارد.
* **تحلیل دادهها**. برای درک توزیع دادهها و شناسایی هرگونه تعصب بالقوه در دادهها که میتواند منجر به مسائل عدالت، فراگیری و قابلیت اطمینان شود.
* **قابلیت تفسیر مدل**. برای درک اینکه چه چیزی بر پیشبینیهای مدل تأثیر میگذارد یا آنها را تحت تأثیر قرار میدهد. این امر به توضیح رفتار مدل کمک میکند که برای شفافیت و مسئولیتپذیری مهم است.
## 🚀 چالش
برای جلوگیری از وارد شدن آسیبها از ابتدا، باید:
- تنوعی از پیشزمینهها و دیدگاهها را در میان افرادی که روی سیستمها کار میکنند داشته باشیم.
- در مجموعه دادههایی سرمایهگذاری کنیم که تنوع جامعه ما را منعکس کنند.
- روشهای بهتری در طول چرخه عمر یادگیری ماشین برای شناسایی و اصلاح هوش مصنوعی مسئولانه هنگام وقوع آن توسعه دهیم.
درباره سناریوهای واقعی فکر کنید که در آن عدم اطمینان مدل در ساخت و استفاده از مدل مشخص است. چه موارد دیگری باید در نظر بگیریم؟
## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/)
برای جلوگیری از معرفی آسیبها در وهله اول، باید:
## مرور و خودآموزی
- تنوع در پیشینهها و دیدگاهها در میان افرادی که روی سیستمها کار میکنند داشته باشیم.
- در مجموعه دادههایی که تنوع جامعه ما را منعکس میکنند سرمایهگذاری کنیم.
- روشهای بهتری در طول چرخه
تماشای این کارگاه برای بررسی عمیقتر موضوعات:
در این درس، شما برخی اصول اولیه مفاهیم عدالت و بیعدالتی در یادگیری ماشین را یاد گرفتهاید.
برای بررسی عمیقتر موضوعات، این کارگاه را تماشا کنید:
- در جستجوی هوش مصنوعی مسئولانه: تبدیل اصول به عمل توسط بسیمرا نوشی، مهرنوش سامکی و آمیت شارما
- در جستجوی هوش مصنوعی مسئولانه: بهکارگیری اصول در عمل توسط بِسمیرا نوشی، مهرنوش سامکی و آمیـت شارما
[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: یک چارچوب متنباز برای ساخت هوش مصنوعی مسئولانه")
[](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/)
[جعبهابزار هوش مصنوعی مسئولانه را بررسی کنید](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) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. سند اصلی به زبان مادری خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما در قبال هرگونه سوء تفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه مسئولیتی نداریم.
# شروع کار با پایتون و Scikit-learn برای مدلهای رگرسیون


> اسکچنوت توسط [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://youtu.be/-DfeD2k2Kj0 "یادگیری ماشین برای مبتدیان - تنظیم ابزارها برای ساخت مدلهای یادگیری ماشین")
[](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)، با پایتون راحت شوید.
>
> [](https://youtu.be/yyQM70vi7V8 "تنظیم پایتون با Visual Studio Code")
> [](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` شناسایی میشود.
نوتبوکها یک محیط تعاملی هستند که به توسعهدهنده اجازه میدهند هم کدنویسی کنند و هم یادداشتها و مستندات پیرامون کد بنویسند، که برای پروژههای آزمایشی یا تحقیقاتی بسیار مفید است.
دفترچهها محیطی تعاملی هستند که به توسعهدهنده اجازه میدهد هم کد بنویسد و هم یادداشتها و مستندات پیرامون کد را اضافه کند که برای پروژههای تجربی یا پژوهشی بسیار مفید است.
[](https://youtu.be/7E-jC8FLA2E "یادگیری ماشین برای مبتدیان - تنظیم Jupyter Notebooks برای شروع ساخت مدلهای رگرسیون")
[](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
```


شما میتوانید کد خود را با نظرات ترکیب کنید تا نوتبوک را خود-مستند کنید.
میتوانید کد خود را با کامنتهایی برای خودتان همراه کنید تا دفترچه مستند شود.
✅ برای یک دقیقه فکر کنید که محیط کاری یک توسعهدهنده وب چقدر با محیط کاری یک دانشمند داده متفاوت است.
✅ کمی فکر کنید که محیط کاری یک توسعهدهنده وب چقدر با محیط کاری یک دانشمند داده متفاوت است.
## شروع کار با 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://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()
```

✅ کمی فکر کنید که اینجا چه اتفاقی میافتد. یک خط مستقیم از میان نقاط کوچک زیادی از داده عبور میکند، اما دقیقاً چه کاری انجام میدهد؟ آیا میتوانید ببینید که چگونه باید بتوانید از این خط برای پیشبینی محل قرارگیری یک نقطه داده جدید و دیدهنشده نسبت به محور y نمودار استفاده کنید؟ سعی کنید کاربرد عملی این مدل را به زبان بیاورید.

تبریک میگویم، شما اولین مدل رگرسیون خطی خود را ساختید، با آن یک پیشبینی انجام دادید و آن را در یک نمودار نمایش دادید!
✅ کمی فکر کنید دربارهی آنچه اینجا اتفاق میافتد. یک خط مستقیم از میان بسیاری نقاط کوچک داده عبور میکند، اما دقیقاً چه کاری انجام میدهد؟ آیا میتوانید ببینید چگونه باید بتوانید از این خط استفاده کنید تا پیشبینی کنید یک نقطه داده جدید و دیده نشده باید نسبت به محور y نمودار کجا قرار گیرد؟ سعی کنید کاربرد عملی این مدل را به زبان بیاورید.
تبریک میگویم، شما اولین مدل رگرسیون خطی خود را ساختید، با آن پیشبینی انجام دادید و آن را در یک نمودار نمایش دادید!
---
## 🚀چالش
یک متغیر دیگر از این مجموعه داده را رسم کنید. نکته: این خط را ویرایش کنید: `X = X[:,2]`. با توجه به هدف این مجموعه داده، چه چیزی میتوانید درباره پیشرفت بیماری دیابت کشف کنید؟
یک متغیر متفاوت از این مجموعه داده رسم کنید. راهنمایی: این خط را ویرایش کنید: `X = X[:,2]`. با توجه به هدف این مجموعه داده، چه چیزهایی میتوانید درباره پیشرفت بیماری دیابت کشف کنید؟
## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/)
## مرور و مطالعه شخصی
## مرور و خودآموزی
در این آموزش، شما با رگرسیون خطی ساده کار کردید، نه رگرسیون تکمتغیره یا چندمتغیره. کمی درباره تفاوتهای این روشها بخوانید یا به [این ویدیو](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) نگاهی بیندازید.
در این آموزش، شما با رگرسیون خطی ساده کار کردید، نه رگرسیون خطی تکمتغیره یا چندگانه. کمی درباره تفاوتهای این روشها بخوانید، یا به [این ویدیو](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) نگاهی بیندازید.
بیشتر درباره مفهوم رگرسیون بخوانید و فکر کنید که چه نوع سوالاتی میتوانند با این تکنیک پاسخ داده شوند. این [آموزش](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) را بگیرید تا درک خود را عمیقتر کنید.
بیشتر درباره مفهوم رگرسیون بخوانید و فکر کنید که چه نوع سوالاتی را میتوان با این تکنیک پاسخ داد. این [آموزش](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) را برای تعمیق درک خود بگذرانید.
## تکلیف
## تمرین
[یک مجموعه داده متفاوت](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) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. سند اصلی به زبان مادری خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما در قبال هرگونه سوء تفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه مسئولیتی نداریم.
> ### [این درس به زبان 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://youtu.be/5qGjczWTrDQ "یادگیری ماشین برای مبتدیان - چگونه یک مجموعه داده را تحلیل و پاکسازی کنیم")
[](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 اصلی گروهی از ردیفها (پارامتر اول) و ستونها (پارامتر دوم) را استخراج میکند. عبارت `:` در اینجا به معنی "همه ردیفها" است.
فکر کنید چگونه میتوانید میانگین قیمت کدو تنبل را در یک ماه خاص تعیین کنید. برای این وظیفه چه ستونهایی را انتخاب میکنید؟ نکته: شما به 3 ستون نیاز دارید.
به این فکر کنید که چگونه میتوان قیمت متوسط یک کدو تنبل در یک ماه مشخص را تعیین کرد. برای این کار از چه ستونهایی باید استفاده کنید؟ نکته: شما به 3 ستون نیاز خواهید داشت.
راهحل: میانگین ستونهای `Low Price` و `High Price` را محاسبه کنید تا ستون جدید Price را پر کنید، و ستون Date را به گونهای تبدیل کنید که فقط ماه را نشان دهد. خوشبختانه، طبق بررسی بالا، هیچ داده گمشدهای برای تاریخها یا قیمتها وجود ندارد.
راه حل: میانگین ستونهای `Low Price` و `High 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 اضافه کنید:
اگر اکنون دادهها را چاپ کنید، میتوانید ببینید که فقط حدود 415 ردیف داده شامل کدو تنبلها به ازای هر بوشل را دریافت میکنید.
اگر دادهها را اکنون چاپ کنید، خواهید دید که فقط حدود 415 ردیف داده که شامل کدو تنبل به صورت بوشل هستند را دریافت میکنید.
### اما صبر کنید! یک کار دیگر باید انجام شود
### اما صبر کنید! یک چیز دیگر هم هست که باید انجام دهید
آیا متوجه شدید که مقدار بوشل در هر ردیف متفاوت است؟ شما باید قیمتگذاری را نرمالسازی کنید تا قیمت به ازای هر بوشل را نشان دهید، بنابراین کمی محاسبه انجام دهید تا آن را استاندارد کنید.
آیا متوجه شدهاید که مقدار بوشل در هر ردیف متفاوت است؟ شما باید قیمتها را نرمال کنید تا قیمتها بر اساس هر بوشل نمایش داده شوند، پس محاسباتی برای استانداردسازی انجام دهید.
1. این خطوط را بعد از بلوک ایجاد دیتافریم new_pumpkins اضافه کنید:
1. این خطوط را بعد از بلاک ایجاد dataframe جدید _new_pumpkins_ اضافه کنید:
✅ طبق [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308)، وزن یک بوشل به نوع محصول بستگی دارد، زیرا این یک اندازهگیری حجمی است. "یک بوشل گوجهفرنگی، به عنوان مثال، باید 56 پوند وزن داشته باشد... برگها و سبزیجات فضای بیشتری با وزن کمتر اشغال میکنند، بنابراین یک بوشل اسفناج فقط 20 پوند است." این همه بسیار پیچیده است! بیایید به تبدیل بوشل به پوند نپردازیم و به جای آن قیمتگذاری به ازای بوشل را انجام دهیم. تمام این مطالعه درباره بوشلهای کدو تنبل، با این حال، نشان میدهد که چقدر مهم است که ماهیت دادههای خود را درک کنید!
✅ بر اساس بررسی [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308)، وزن یک بوشل به نوع محصول بستگی دارد چون این یک اندازهگیری حجمی است. "یک بوشل گوجهفرنگی، مثلاً، قرار است 56 پوند وزن داشته باشد... برگها و سبزیجات فضای بیشتری اشغال میکنند ولی وزن کمتری دارند، بنابراین یک بوشل اسفناج فقط 20 پوند است." همه اینها کمی پیچیده است! بیا تبدیل بوشل به پوند را کنار بگذاریم و قیمت را بر اساس بوشل در نظر بگیریم. با این حال، این مطالعه در مورد بوشلهای کدو تنبل نشان میدهد چقدر مهم است که ماهیت دادهها را درک کنیم!
حالا میتوانید قیمتگذاری به ازای واحد را بر اساس اندازهگیری بوشل تحلیل کنید. اگر دادهها را یک بار دیگر چاپ کنید، میتوانید ببینید که چگونه استاندارد شدهاند.
اکنون میتوانید قیمتگذاری بر اساس واحد بر اساس اندازهگیری بوشل آنها را تحلیل کنید. اگر یک بار دیگر دادهها را چاپ کنید، خواهید دید که چگونه استاندارد شده است.
✅ آیا متوجه شدید که کدو تنبلهایی که به ازای نیمبوشل فروخته میشوند بسیار گران هستند؟ آیا میتوانید دلیل آن را پیدا کنید؟ نکته: کدو تنبلهای کوچک بسیار گرانتر از کدو تنبلهای بزرگ هستند، احتمالاً به این دلیل که تعداد بیشتری از آنها در هر بوشل وجود دارد، با توجه به فضای خالی که توسط یک کدو تنبل بزرگ توخالی اشغال میشود.
✅ متوجه شدهاید کدو تنبلهایی که نصف بوشل فروخته میشوند بسیار گرانترند؟ میتوانید دلیل آن را حدس بزنید؟ نکته: کدو تنبلهای کوچک احتمالاً خیلی گرانترند چون تعدادشان در هر بوشل خیلی بیشتر است، به دلیل فضای بلااستفادهای که یک کدو تنبل بزرگ توخالی اشغال میکند.
## استراتژیهای مصورسازی
## استراتژیهای تجسم دادهها
بخشی از نقش دانشمند داده این است که کیفیت و ماهیت دادههایی که با آنها کار میکند را نشان دهد. برای این کار، آنها اغلب مصورسازیهای جالبی، مانند نمودارها، گرافها و چارتها، ایجاد میکنند که جنبههای مختلف دادهها را نشان میدهند. به این ترتیب، آنها میتوانند روابط و شکافهایی را که در غیر این صورت سخت است کشف شوند، به صورت بصری نشان دهند.
بخشی از نقش دانشمند داده این است که کیفیت و ماهیت دادههایی را که با آنها کار میکند نشان دهد. برای این منظور، اغلب تجسمهای جالب، یا نمودارها، گرافها و چارتهای مختلفی ایجاد میکنند که جنبههای متفاوت داده را نمایش میدهد. به این ترتیب، آنها میتوانند روابط و شکافهایی که سخت قابل کشف هستند را بهصورت بصری نشان دهند.
[](https://youtu.be/SbUkxH6IJo0 "یادگیری ماشین برای مبتدیان - چگونه دادهها را با Matplotlib مصورسازی کنیم")
[](https://youtu.be/SbUkxH6IJo0 "ML برای مبتدیان - چگونه با Matplotlib دادهها را تجسم کنیم")
> 🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره مصورسازی دادهها برای این درس مشاهده کنید.
> 🎥 برای مشاهده ویدیوی کوتاه درباره تجسم دادهها برای این درس، روی تصویر بالا کلیک کنید.
مصورسازیها همچنین میتوانند به تعیین تکنیک یادگیری ماشین مناسب برای دادهها کمک کنند. یک نمودار پراکندگی که به نظر میرسد یک خط را دنبال میکند، به عنوان مثال، نشان میدهد که دادهها کاندیدای خوبی برای یک تمرین رگرسیون خطی هستند.
تجسمها همچنین میتوانند در تعیین مناسبترین تکنیک ماشین لرنینگ برای دادهها کمک کنند. مثلاً یک نمودار پراکندگی که به نظر میرسد یک خط را دنبال میکند، نشان میدهد که دادهها گزینه خوبی برای تمرین رگرسیون خطی هستند.
یکی از کتابخانههای مصورسازی داده که در نوتبوکهای Jupyter خوب کار میکند، [Matplotlib](https://matplotlib.org/) است (که در درس قبلی نیز آن را دیدید).
یکی از کتابخانههای تجسم داده که در نوتبوکهای Jupyter خوب کار میکند، [Matplotlib](https://matplotlib.org/) است (که قبلاً هم در درس قبل آن را دیدهاید).
> تجربه بیشتری در مصورسازی دادهها در [این آموزشها](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) کسب کنید.
> تجربه بیشتر با تجسم دادهها در [این آموزشها](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) کسب کنید.
## تمرین - آزمایش با Matplotlib
سعی کنید برخی نمودارهای پایه برای نمایش دیتافریم جدیدی که ایجاد کردهاید، بسازید. یک نمودار خطی پایه چه چیزی را نشان میدهد؟
سعی کنید چند نمودار پایه برای نمایش 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()
```


آیا این نمودار مفید است؟ آیا چیزی در مورد آن شما را شگفتزده میکند؟
آیا این نمودار مفید است؟ آیا چیزی درباره آن شما را متعجب میکند؟
این نمودار چندان مفید نیست زیرا فقط دادههای شما را به صورت پراکندگی نقاط در یک ماه خاص نمایش میدهد.
این نمودار چندان مفید نیست چون فقط دادههای شما را به صورت پراکندگی نقاط در ماه نمایش میدهد.
### آن را مفید کنید
برای اینکه نمودارها دادههای مفید را نمایش دهند، معمولاً باید دادهها را به نوعی گروهبندی کنید. بیایید سعی کنیم نموداری ایجاد کنیم که محور y ماهها را نشان دهد و دادهها توزیع دادهها را نشان دهند.
برای اینکه نمودارها دادههای مفید نشان دهند، معمولاً باید دادهها را به نوعی گروهبندی کنید. بیایید امتحان کنیم نموداری بسازیم که محور y ماهها را نشان دهد و داده توزیع دادهها را نمایش دهد.
1. یک سلول برای ایجاد نمودار میلهای گروهبندیشده اضافه کنید:
1. یک سلول اضافه کنید تا نمودار میلهای گروهبندی شده بسازد:


این تجسم داده مفیدتری است! به نظر میرسد بالاترین قیمت کدو تنبل در سپتامبر و اکتبر رخ میدهد. آیا این با انتظار شما مطابقت دارد؟ چرا یا چرا نه؟
## تمرین - آزمایش با 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 شما کار میکند:

این داده خاص نویزی است پس نمودار خطی بهترین انتخاب نیست — اما نشان میدهد چقدر راحت میتوانید نوع نمودار را در Seaborn تغییر دهید.
### نمودارهای میلهای برای نمایش توزیعها
پیشتر دادهها را به صورت دستی گروهبندی کردید تا نمودار میلهای با Matplotlib بسازید. تابع [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html) در Seaborn (نمودار دستهای) میتواند گروهبندی و تجمیع را برای شما انجام دهد. بهطور پیشفرض `kind="bar"` میانگین هر دسته را به همراه یک خط سیاه که بازه اطمینان را نشان میدهد نمایش میدهد.
1. یک نمودار میلهای از میانگین قیمت در هر ماه بسازید:

این تایید میکند آنچه با Matplotlib دیدید — قیمتها در حوالی ماههای سپتامبر و اکتبر به اوج میرسد — اما Seaborn همچنین نشان میدهد که قیمت در هر ماه چقدر _متغیر_ است.
### نقشههای حرارتی برای نمایش همبستگیها
نمودارهای پراکندگی دو متغیر را با هم مقایسه میکنند. وقتی چندین ستون عددی دارید، [نقشه حرارتی](https://en.wikipedia.org/wiki/Heat_map) به شما اجازه میدهد قویبودن رابطه بین _هر_ جفت ستون را به صورت همزمان ببینید. این روش رایجی است برای تشخیص ویژگیهایی که بیشترین همبستگی را دارند قبل از انتخاب دادهها برای مدل (و همین نوع نمودار بعدها برای نمایش ماتریسهای خطا در طبقهبندی استفاده میشود).
1. با Pandas یک ماتریس همبستگی بسازید، سپس با تابع [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html) از Seaborn آن را رسم کنید. گزینه `annot=True` مقادیر همبستگی را در هر سلول نشان میدهد:

مقادیری نزدیک به `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) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. سند اصلی به زبان مادری خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما در قبال هرگونه سوء تفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه مسئولیتی نداریم.
"[Seaborn](https://seaborn.pydata.org/) بر پایه Matplotlib ساخته شده است و مستقیماً با دیتافریمها کار میکند، که ایجاد نمودارهای آماری جذاب را با کد بسیار کم سریع میکند.\n"
"\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"

> اسکچنوت توسط [Tomomi Imura](https://www.twitter.com/girlie_mac)

> اسکچنوت توسط [تامومی ایمورا](https://www.twitter.com/girlie_mac)
یادگیری تقویتی شامل سه مفهوم مهم است: عامل، حالتها، و مجموعهای از اقدامات برای هر حالت. با انجام یک اقدام در یک حالت مشخص، عامل یک پاداش دریافت میکند. دوباره بازی کامپیوتری سوپر ماریو را تصور کنید. شما ماریو هستید، در یک مرحله بازی، کنار لبه یک پرتگاه ایستادهاید. بالای شما یک سکه قرار دارد. شما که ماریو هستید، در یک مرحله بازی، در یک موقعیت خاص... این حالت شماست. حرکت یک قدم به سمت راست (یک اقدام) شما را به پایین پرتگاه میبرد و این به شما امتیاز عددی پایینی میدهد. اما فشار دادن دکمه پرش به شما اجازه میدهد امتیاز کسب کنید و زنده بمانید. این یک نتیجه مثبت است و باید به شما امتیاز عددی مثبت بدهد.
یادگیری تقویتی شامل سه مفهوم مهم است: عامل، چند حالت و مجموعهای از اقدامات برای هر حالت. با اجرای یک اقدام در حالت مشخص، به عامل پاداش داده میشود. دوباره بازی کامپیوتری سوپر ماریو را تصور کنید. شما ماریو هستید، در یک سطح بازی، کنار لبه پرتگاه ایستادهاید. بالای شما یک سکه است. شما بهعنوان ماریو، در یک سطح بازی، در موقعیت خاص ... این حالت شماست. رفتن یک قدم به سمت راست (یک اقدام) شما را از لبه پرتگاه میاندازد و این نمره عددی کمی به شما خواهد داد. اما فشردن دکمه پرش به شما امکان میدهد یک امتیاز کسب کنید و زنده بمانید. این یک نتیجه مثبت است و باید به شما نمره عددی مثبت بدهد.
با استفاده از یادگیری تقویتی و یک شبیهساز (بازی)، میتوانید یاد بگیرید چگونه بازی کنید تا پاداش را به حداکثر برسانید، که شامل زنده ماندن و کسب بیشترین امتیاز ممکن است.
با استفاده از یادگیری تقویتی و شبیهساز (بازی)، میتوانید یاد بگیرید چگونه بازی کنید تا پاداش را که زنده ماندن و کسب بیشترین امتیاز است، به حداکثر برسانید.
[](https://www.youtube.com/watch?v=lDq_en8RNOo)
## [آزمون قبل از درس](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` در نظر بگیریم، مانند این:
هر سلول در این تخته میتواند یکی از موارد زیر باشد:
هر خانه در این صفحه میتواند یکی از موارد زیر باشد:
* **زمین**، که پیتر و موجودات دیگر میتوانند روی آن راه بروند.
* **آب**، که به وضوح نمیتوانید روی آن راه بروید.
* یک **درخت** یا **چمن**، جایی که میتوانید استراحت کنید.
* یک **سیب**، که چیزی است که پیتر خوشحال میشود پیدا کند تا خودش را تغذیه کند.
* یک **گرگ**، که خطرناک است و باید از آن اجتناب کرد.
* **زمین**، که پیتر و دیگر موجودات میتوانند روی آن راه بروند.
* **آب**، که البته نمیتوانید روی آن راه بروید.
* یک **درخت** یا **چمن**، مکانی برای استراحت.
* یک **سیب**، که نمایانگر چیزی است که پیتر خوشحال میشود آن را پیدا کند و خودش را تغذیه کند.
* یک **گرگ**، که خطرناک است و باید از آن اجتناب شود.
یک ماژول جداگانه پایتون، [`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):
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 قدم است.
توجه داشته باشید که طول متوسط مسیر حدود ۳۰ تا ۴۰ قدم است که نسبتاً زیاد است، با توجه به اینکه فاصله متوسط تا نزدیکترین سیب حدود ۵ تا ۶ قدم است.
همچنین میتوانید ببینید حرکت پیتر در طول قدم زدن تصادفی چگونه به نظر میرسد:
همچنین میتوانید ببینید حرکت پیتر در طی گام تصادفی چگونه است:
برای هوشمندتر کردن سیاست خود، باید بفهمیم کدام حرکتها "بهتر" از دیگران هستند. برای این کار، باید هدف خود را تعریف کنیم.
برای هوشمندتر کردن سیاست ما، باید بفهمیم کدام حرکات «بهتر» از بقیه هستند. برای این کار، باید هدف خود را تعریف کنیم.
هدف میتواند به صورت یک **تابع پاداش** تعریف شود، که برای هر حالت یک مقدار امتیاز بازمیگرداند. هرچه عدد بالاتر باشد، تابع پاداش بهتر است. (بلوک کد 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)
توجه داشته باشید که ما تمام مقادیر جدول Q را با یک مقدار برابر مقداردهی اولیه میکنیم، در مورد ما - 0.25. این مربوط به سیاست "قدم زدن تصادفی" است، زیرا همه حرکتها در هر حالت به طور مساوی خوب هستند. ما میتوانیم جدول Q را به تابع `plot` منتقل کنیم تا جدول را روی تخته تجسم کنیم: `m.plot(Q)`.
توجه کنید که تمام مقادیر جدول Q را با یک مقدار مساوی، در مورد ما ۰.۲۵، مقداردهی اولیه میکنیم. این متناظر با سیاست «گام تصادفی» است، زیرا همه حرکات در هر حالت به یک اندازه خوب هستند. ما میتوانیم جدول Q را به تابع `plot` بدهیم تا جدول را روی صفحه ترسیم کنیم: `m.plot(Q)`.
در مرکز هر سلول یک "فلش" وجود دارد که جهت ترجیحی حرکت را نشان میدهد. از آنجا که همه جهتها برابر هستند، یک نقطه نمایش داده میشود.
در مرکز هر خانه یک «فلش» وجود دارد که جهت اولویت حرکت را نشان میدهد. از آنجایی که همه جهتها برابر هستند، یک نقطه نمایش داده میشود.
اکنون باید شبیهسازی را اجرا کنیم، محیط خود را کشف کنیم، و یک توزیع بهتر از مقادیر جدول 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* است:
در اینجا γ همان **ضریب تخفیف** است که تعیین میکند چقدر باید پاداش کنونی را به پاداش آینده ترجیح دهیم و بالعکس.
## الگوریتم یادگیری
با توجه به معادله فوق، میتوان الآن شبهکدی برای الگوریتم یادگیری خود نوشت:
* مقداردهی اولیه جدول 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) # ما به بازیکن اجازه میدهیم خارج از صفحه حرکت کند، که باعث پایان اپیزود میشود
پس از اجرای این الگوریتم، جدول Q باید با مقادیری بهروزرسانی شده باشد که جذابیت اقدامات مختلف را در هر گام تعریف میکنند. میتوانیم جدول Q را با رسم برداری در هر خانه که به سمت جهت مطلوب حرکت اشاره میکند، دیداری کنیم. برای سادگی به جای سر پیکان، یک دایره کوچک رسم میکنیم.
از آنجا که جدول 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.
پس از اجرای این کد، باید طول متوسط مسیر بسیار کوتاهتری نسبت به قبل، در محدوده ۳-۶ به دست آورید.
## بررسی روند یادگیری
## بررسی فرآیند یادگیری
همانطور که اشاره کردیم، روند یادگیری تعادلی است بین اکتشاف و بهرهبرداری از دانش بهدست آمده درباره ساختار فضای مسئله. دیدیم که نتایج یادگیری (توانایی کمک به عامل برای پیدا کردن مسیر کوتاه به هدف) بهبود یافته است، اما مشاهده رفتار طول متوسط مسیر در طی فرآیند یادگیری نیز جالب است:
همانطور که اشاره کردیم، فرآیند یادگیری تعادلی بین اکتشاف و بهرهبرداری از دانش کسبشده درباره ساختار فضای مسئله است. مشاهده کردیم که نتایج یادگیری (توانایی کمک به عامل برای یافتن مسیر کوتاه به هدف) بهبود یافته است، اما همچنین جالب است که ببینیم طول مسیر متوسط در طول فرآیند یادگیری چگونه رفتار میکند:
- **طول مسیر متوسط افزایش مییابد**. آنچه در اینجا مشاهده میکنیم این است که در ابتدا طول مسیر متوسط افزایش مییابد. این احتمالاً به این دلیل است که وقتی هیچ اطلاعاتی درباره محیط نداریم، احتمالاً در حالتهای بد، آب یا گرگ گیر میکنیم. با یادگیری بیشتر و استفاده از این دانش، میتوانیم محیط را بیشتر بررسی کنیم، اما هنوز نمیدانیم سیبها دقیقاً کجا هستند.
- **طول متوسط مسیر افزایش مییابد**. آنچه اینجا میبینیم این است که ابتدا، طول متوسط مسیر افزایش مییابد. این احتمالاً به این دلیل است که وقتی هیچ اطلاعاتی درباره محیط نداریم، احتمال گرفتار شدن در حالتهای نامطلوب مانند آب یا گرگ زیاد است. وقتی بیشتر یاد میگیریم و شروع به استفاده از این دانش میکنیم، میتوانیم مدت زمان بیشتری محیط را کاوش کنیم، اما هنوز به خوبی نمیدانیم سیبها دقیقاً کجا هستند.
- **طول مسیر کاهش مییابد، با یادگیری بیشتر**. وقتی به اندازه کافی یاد میگیریم، رسیدن به هدف برای عامل آسانتر میشود و طول مسیر شروع به کاهش میکند. با این حال، همچنان به اکتشاف باز هستیم، بنابراین اغلب از مسیر بهینه منحرف میشویم و گزینههای جدیدی را بررسی میکنیم که باعث طولانیتر شدن مسیر از حد مطلوب میشود.
- **طول مسیر با یادگیری کمتر میشود**. وقتی به اندازه کافی یاد میگیریم، رسیدن به هدف برای عامل آسانتر میشود و طول مسیر شروع به کاهش میکند. با این حال، هنوز هم آماده اکتشاف هستیم، پس اغلب از بهترین مسیر منحرف شده و گزینههای جدیدی را کاوش میکنیم که مسیر را از حالت بهینه طولانیتر میکند.
- **طول مسیر به طور ناگهانی افزایش مییابد**. آنچه در این نمودار نیز مشاهده میکنیم این است که در برخی مواقع طول مسیر به طور ناگهانی افزایش مییابد. این نشاندهنده ماهیت تصادفی فرآیند است و اینکه ممکن است در برخی مواقع ضرایب جدول 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) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. سند اصلی به زبان مادری خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما در قبال هرگونه سوء تفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه مسئولیتی نداریم.
در این درس، از کتابخانهای به نام **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.
> پیتر و دوستانش برای فرار از گرگ خلاقیت به خرج میدهند! تصویر از [Jen Looper](https://twitter.com/jenlooper)
ما از نسخه سادهشدهای از تعادل استفاده خواهیم کرد که به عنوان مسئله **CartPole** شناخته میشود. در دنیای CartPole، ما یک لغزنده افقی داریم که میتواند به چپ یا راست حرکت کند و هدف این است که یک قطب عمودی را روی لغزنده تعادل دهیم.
در این درس از کتابخانهای به نام **OpenAI Gym** برای شبیهسازی **محیطهای** مختلف استفاده خواهیم کرد. میتوانید کد این درس را به صورت محلی (مثلاً در Visual Studio Code) اجرا کنید که در این صورت شبیهسازی در پنجرهای جدید باز میشود. هنگام اجرای کد به صورت آنلاین، ممکن است به تنظیماتی در کد نیاز داشته باشید، همانطور که [اینجا](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) توضیح داده شده است.
## OpenAI Gym
در درس قبلی قوانین بازی و حالت توسط کلاس `Board` که خودمان تعریف کردیم ارائه شد. اینجا از یک **محیط شبیهسازی خاص** استفاده خواهیم کرد که فیزیک پشت قطب تعادلی را شبیهسازی میکند. یکی از محبوبترین محیطهای شبیهسازی برای آموزش الگوریتمهای تقویت یادگیری، [Gym](https://gym.openai.com/) است که توسط [OpenAI](https://openai.com/) نگهداری میشود. با استفاده از این Gym میتوانیم محیطهای مختلفی از شبیهسازی 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()
```
باید چیزی مشابه این تصویر مشاهده کنید:
شما باید چیزی شبیه به این تصویر ببینید:


1. در طول شبیهسازی، باید مشاهداتی دریافت کنیم تا تصمیم بگیریم چگونه عمل کنیم. در واقع، تابع step مشاهدات فعلی، یک تابع پاداش و یک پرچم done را که نشان میدهد آیا ادامه شبیهسازی منطقی است یا خیر، بازمیگرداند: (کد بلاک 4)
1. در طول شبیهسازی باید مشاهدات را دریافت کنیم تا تصمیم بگیریم چگونه عمل کنیم. در واقع تابع step مشاهدات فعلی، تابع پاداش و فَلَگ done را برمیگرداند که نشان میدهد آیا ادامه شبیهسازی منطقی است یا خیر: (کد بلاک 4)
```python
env.reset()
@ -69,7 +89,7 @@ import random
env.close()
```
در خروجی نوتبوک باید چیزی شبیه به این مشاهده کنید:
بردار مشاهدهای که در هر مرحله از شبیهسازی بازگردانده میشود شامل مقادیر زیر است:
- موقعیت چرخ دستی
- سرعت چرخ دستی
- زاویه میله
- نرخ چرخش میله
بردار مشاهدهای که در هر گام برمیگردد شامل مقادیر زیر است:
- موقعیت واگن
- سرعت واگن
- زاویه قطب
- نرخ چرخش قطب
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)
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
- **نزدیک به هدف ما**. ما بسیار نزدیک به دستیابی به هدف کسب 195 پاداش تجمعی در بیش از 100 اجرای متوالی شبیهسازی هستیم، یا ممکن است واقعاً به آن دست یافته باشیم! حتی اگر اعداد کوچکتری کسب کنیم، هنوز نمیدانیم، زیرا میانگین را در طول 5000 اجرا محاسبه میکنیم و فقط 100 اجرا در معیار رسمی مورد نیاز است.
- **نزدیک به هدف ما**. ما خیلی نزدیک به رسیدن به هدف 195 پاداش تجمعی در بیش از 100 اجرای متوالی شبیهسازی هستیم، یا ممکن است حتی به هدف رسیده باشیم! حتی اگر عددهای کوچکتر بگیریم، هنوز مطمئن نیستیم چون میانگین را روی 5000 اجرا گرفتهایم و فقط 100 اجرا در معیار رسمی لازم است.
- **پاداش شروع به افت میکند**. گاهی پاداش شروع به افت میکند، یعنی ممکن است مقادیر یادگرفته شده در جدول Q را با مقادیری جایگزین کنیم که وضعیت را بدتر میکنند.
- **پاداش شروع به کاهش میکند**. گاهی پاداش شروع به کاهش میکند، که به این معناست که ممکن است مقادیر یاد گرفته شده در Q-Table را با مقادیری که وضعیت را بدتر میکنند "خراب" کنیم.
این مشاهده واضحتر است اگر پیشرفت آموزش را رسم کنیم.
این مشاهده در صورتی که پیشرفت آموزش را رسم کنیم واضحتر است.
## رسم پیشرفت آموزش
## رسم پیشرفت آموزش
در طول آموزش، مقدار پاداش تجمعی را در هر یک از تکرارها در بردار `rewards` جمعآوری کردهایم. اینجا نحوه نمایش آن در برابر شماره تکرار آمده است:
در طول آموزش مقدار پاداش تجمعی هر تکرار را در بردار `rewards` جمعآوری کردیم. اینجا وقتی آن را نسبت به شماره تکرار رسم کنیم اینطور دیده میشود:
از این نمودار نمیتوان چیزی گفت، زیرا به دلیل ماهیت فرآیند آموزش تصادفی، طول جلسات آموزشی بسیار متفاوت است. برای درک بهتر این نمودار، میتوان میانگین متحرک را در طول یک سری آزمایشها، مثلاً 100، محاسبه کرد. این کار را میتوان به راحتی با استفاده از `np.convolve` انجام داد: (کد بلاک 12)
از این نمودار نمیتوان هیچ چیز خاصی فهمید چون به دلیل طبیعت تصادفی فرآیند آموزش طول جلسات آموزش بسیار متفاوت است. برای درک بهتر میتوان میانگین متحرک (running average) در فاصلهای مثلاً 100 آزمایش حساب کرد. این کار راحت با `np.convolve` انجام میشود: (کد بلاک 12)
برای پایدارتر کردن یادگیری، منطقی است که برخی از ابرپارامترها را در طول آموزش تنظیم کنیم. به خصوص:
- **برای نرخ یادگیری**، `alpha`، میتوانیم با مقادیر نزدیک به 1 شروع کنیم و سپس این پارامتر را کم کم کاهش دهیم. با گذشت زمان مقادیر احتمال خوبی در جدول Q خواهیم داشت پس باید آنها را کمی تنظیم کنیم و به طور کامل بازنویسی نکنیم.
## تغییر هایپرپارامترها
- **افزایش epsilon**. ممکن است بخواهیم `epsilon` را به آرامی افزایش دهیم تا کمتر اکتشاف کنیم و بیشتر بهرهبرداری کنیم. احتمالاً منطقی است با مقدار کم `epsilon` شروع کنیم و به سمت مقدار نزدیک به 1 پیش برویم.
برای پایدارتر کردن یادگیری، منطقی است که برخی از هایپرپارامترهای خود را در طول آموزش تنظیم کنیم. به طور خاص:
> **وظیفه 1**: با مقادیر ابرپارامتر بازی کنید و ببینید میتوانید پاداش تجمعی بالاتری به دست آورید. آیا امتیاز بالای 195 میگیرید؟
- **برای نرخ یادگیری**، `alpha`، میتوانیم با مقادیر نزدیک به 1 شروع کنیم و سپس این پارامتر را کاهش دهیم. با گذشت زمان، احتمالهای خوبی در Q-Table خواهیم داشت و بنابراین باید آنها را کمی تنظیم کنیم و نه اینکه کاملاً با مقادیر جدید بازنویسی کنیم.
- **افزایش epsilon**. ممکن است بخواهیم `epsilon` را به آرامی افزایش دهیم تا کمتر اکتشاف کنیم و بیشتر بهرهبرداری کنیم. احتمالاً منطقی است که با مقدار پایینتر `epsilon` شروع کنیم و به تدریج به تقریباً 1 برسیم.
> **وظیفه ۱**: با مقادیر هایپرپارامترها بازی کنید و ببینید آیا میتوانید پاداش تجمعی بیشتری کسب کنید. آیا به بالای ۱۹۵ میرسید؟
> **وظیفه ۲**: برای حل رسمی مسئله، باید میانگین پاداش ۱۹۵ را در طول ۱۰۰ اجرای متوالی به دست آورید. این مقدار را در طول آموزش اندازهگیری کنید و مطمئن شوید که مسئله را به طور رسمی حل کردهاید!
> **وظیفه ۲**: برای حل رسمی مسئله، باید میانگین پاداش ۱۹۵ را در طول ۱۰۰ اجرای متوالی به دست آورید. این را در طول آموزش اندازهگیری کنید و مطمئن شوید که مسئله به صورت رسمی حل شده است!
## مشاهده نتیجه در عمل
## دیدن نتیجه در عمل
جالب است که ببینیم مدل آموزشدیده چگونه رفتار میکند. بیایید شبیهسازی را اجرا کنیم و همان استراتژی انتخاب عمل را که در طول آموزش استفاده کردیم دنبال کنیم، یعنی نمونهگیری بر اساس توزیع احتمالی در Q-Table: (بلوک کد ۱۳)
جالب خواهد بود که ببینیم مدل آموزشدیده چگونه رفتار میکند. بیایید شبیهسازی را اجرا کنیم و همان استراتژی انتخاب عمل در زمان آموزش را دنبال کنیم، نمونهبرداری مطابق با توزیع احتمال در Q-Table: (بلاک کد ۱۳)

---
## 🚀چالش
> **وظیفه ۳**: در اینجا، ما از نسخه نهایی 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) ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. سند اصلی به زبان مادری خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما در قبال هرگونه سوء تفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه مسئولیتی نداریم.
## [لیکچر سے پہلے کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
# ذمہ دار AI کے ساتھ مشین لرننگ حل تیار کرنا

> سکیچنوٹ از [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [لیچرز سے پہلے کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
## تعارف
اس نصاب میں، آپ یہ دریافت کرنا شروع کریں گے کہ مشین لرننگ کس طرح اور کس حد تک ہماری روزمرہ کی زندگیوں پر اثر ڈال رہی ہے۔ آج بھی، سسٹمز اور ماڈلز روزمرہ کے فیصلوں میں شامل ہیں، جیسے صحت کی تشخیص، قرض کی منظوری، یا دھوکہ دہی کا پتہ لگانا۔ اس لیے یہ ضروری ہے کہ یہ ماڈلز ایسے نتائج فراہم کریں جو قابل اعتماد ہوں۔ جیسے کسی بھی سافٹ ویئر ایپلیکیشن میں، AI سسٹمز بھی توقعات پر پورا نہ اتر سکتے ہیں یا ناپسندیدہ نتائج دے سکتے ہیں۔ اسی لیے یہ سمجھنا اور وضاحت کرنا ضروری ہے کہ AI ماڈل کس طرح کام کرتا ہے۔
اس نصاب میں، آپ یہ دریافت کرنا شروع کریں گے کہ کس طرح مشین لرننگ ہماری روزمرہ زندگی پر اثر انداز ہو رہی ہے اور ہو چکی ہے۔ یہاں تک کہ اب بھی، نظام اور ماڈلز روزمرہ کی فیصلہ سازی کے کاموں میں شامل ہیں، جیسے صحت کی تشخیص، قرض کی منظوری یا دھوکہ دہی کی شناخت۔ اس لیے یہ ضروری ہے کہ یہ ماڈل اچھے طریقے سے کام کریں تاکہ قابل اعتماد نتائج فراہم کریں۔ جیسے کسی بھی سافٹ ویئر اپلیکیشن کی طرح، AI سسٹمز توقعات پر پورا نہیں اترتے یا غیر مطلوبہ نتیجہ دے سکتے ہیں۔ اسی وجہ سے AI ماڈل کے رویے کو سمجھنا اور بیان کرنا ضروری ہے۔
سوچیں کہ کیا ہو سکتا ہے جب آپ کے ماڈلز بنانے کے لیے استعمال ہونے والے ڈیٹا میں کچھ مخصوص گروہوں کی نمائندگی نہ ہو، جیسے نسل، جنس، سیاسی نظریہ، مذہب، یا ان کی غیر متناسب نمائندگی ہو۔ اگر ماڈل کے نتائج کسی خاص گروہ کو ترجیح دیتے ہیں تو اس کا اطلاق پر کیا اثر ہوگا؟ مزید یہ کہ، اگر ماڈل کے نتائج نقصان دہ ہوں تو اس کے اثرات کیا ہوں گے؟ AI سسٹمز کے رویے کے لیے کون ذمہ دار ہوگا؟ یہ وہ سوالات ہیں جنہیں ہم اس نصاب میں تلاش کریں گے۔
تصور کریں کہ کیا ہو سکتا ہے جب آپ جو ڈیٹا استعمال کر رہے ہیں ان ماڈلز کو بنانے کے لیے ان میں کچھ مخصوص آبادیاتی تفصیلات، جیسے نسل، جنس، سیاسی نظریہ، مذہب، یا غیر متناسب طور پر ایسی آبادیاتی تفصیلات ہوں۔ جب ماڈل کے نتائج کو کسی مخصوص آبادی کو فائدہ پہنچانے کے لیے تشریح کیا جائے تو کیا ہوگا؟ اس کا درخواست پر کیا اثر ہوگا؟ مزید برآں، جب ماڈل کا نتیجہ منفی ہو اور لوگوں کے لیے نقصان دہ ہو تو کیا ہوگا؟ AI سسٹم کے رویے کی ذمہ داری کس پر ہے؟ یہ چند سوالات ہیں جن کا ہم اس نصاب میں جائزہ لیں گے۔
اس سبق میں، آپ:
- مشین لرننگ میں انصاف پسندی اور اس سے جڑے نقصانات کی اہمیت کو سمجھیں گے۔
- غیر معمولی حالات کا جائزہ لینے کی مشق سے واقف ہوں گے تاکہ سسٹمز کی قابل اعتمادیت اور حفاظت کو یقینی بنایا جا سکے۔
- سب کے لیے شمولیتی نظام ڈیزائن کرنے کی ضرورت کو سمجھیں گے۔
- ڈیٹا اور لوگوں کی پرائیویسی اور سیکیورٹی کے تحفظ کی اہمیت کو دریافت کریں گے۔
- AI ماڈلز کے رویے کو سمجھنے کے لیے شفافیت کی اہمیت کو دیکھیں گے۔
- اس بات کا شعور حاصل کریں گے کہ AI سسٹمز میں اعتماد پیدا کرنے کے لیے جوابدہی کتنی ضروری ہے۔
- مشین لرننگ میں انصاف کی اہمیت اور انصاف سے متعلق نقصانات کے بارے میں اپنی آگاہی بڑھائیں گے۔
- انوکھے معاملات اور غیر معمولی حالات کو دریافت کرنے کی مشق سے واقف ہوں گے تاکہ بھروسے اور سلامتی کو یقینی بنایا جا سکے۔
- شامل نظام بنانے کی ضرورت کو سمجھیں گے تاکہ ہر فرد کو بااختیار بنایا جا سکے۔
- ڈیٹا اور لوگوں کی رازداری اور سیکورٹی کے تحفظ کی اہمیت کو دریافت کریں گے۔
- AI ماڈلز کے رویے کی وضاحت کے لیے شیشے کے ڈبے کے طریقہ کار کی اہمیت دیکھیں گے۔
- AI سسٹمز میں اعتماد قائم کرنے کے لیے احتساب کی اہمیت کا خیال رکھیں گے۔
## پیشگی شرط
## سابقہ علم
پیشگی شرط کے طور پر، براہ کرم "ذمہ دارانہ AI اصول" کا لرن پاتھ مکمل کریں اور نیچے دی گئی ویڈیو دیکھیں:
سابقہ علم کے طور پر، براہ کرم "ذمہ دار 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) کی پیروی کریں۔
[](https://youtu.be/dnC8-uUZXSc "Microsoft کا ذمہ دارانہ AI کے لیے نقطہ نظر")
[](https://youtu.be/dnC8-uUZXSc "Microsoft کا ذمہ دار AI کیلئے طریقہ")
> 🎥 اوپر دی گئی تصویر پر کلک کریں: Microsoft کا ذمہ دارانہ AI کے لیے نقطہ نظر
> 🎥 ویڈیو کے لیے اوپر تصاویر پر کلک کریں: Microsoft کا ذمہ دار AI کیلئے طریقہ
## انصاف پسندی
## انصاف
AI سسٹمز کو سب کے ساتھ منصفانہ سلوک کرنا چاہیے اور مختلف گروہوں پر مختلف اثرات ڈالنے سے گریز کرنا چاہیے۔ مثال کے طور پر، جب AI سسٹمز طبی علاج، قرض کی درخواستوں، یا ملازمت کے بارے میں رہنمائی فراہم کرتے ہیں، تو انہیں ایک جیسے حالات والے تمام افراد کو یکساں سفارشات دینی چاہئیں۔ ہم سب انسانوں میں وراثتی تعصبات ہوتے ہیں جو ہمارے فیصلوں اور اعمال کو متاثر کرتے ہیں۔ یہ تعصبات اس ڈیٹا میں ظاہر ہو سکتے ہیں جو ہم AI سسٹمز کو تربیت دینے کے لیے استعمال کرتے ہیں۔ یہ تعصب بعض اوقات غیر ارادی طور پر بھی ہو سکتا ہے۔
AI سسٹمز کو سب کے ساتھ انصاف کرنا چاہیے اور ایک ہی طرح کے لوگوں کے گروہوں پر مختلف طریقے سے اثر انداز ہونے سے بچنا چاہیے۔ مثال کے طور پر، جب AI سسٹمز طبی علاج، قرض کی درخواستوں یا ملازمت پر رہنمائی فراہم کرتے ہیں تو انہیں ایک جیسے علامات، مالی حالات، یا پیشہ ورانہ قابلیت رکھنے والے ہر فرد کے لیے ایک جیسی سفارشات کرنی چاہئیں۔ ہم سب انسانوں کی حیثیت سے موروثی تعصبات رکھتے ہیں جو ہمارے فیصلوں اور اعمال کو متاثر کرتے ہیں۔ یہ تعصبات اس ڈیٹا میں نمایاں ہو سکتے ہیں جسے ہم AI سسٹمز کو تربیت دینے کے لیے استعمال کرتے ہیں۔ یہ تبدیلی بعض اوقات غیر جانبداری سے ہو سکتی ہے۔ شعوری طور پر یہ جاننا مشکل ہوتا ہے کہ آپ کب ڈیٹا میں تعصب شامل کر رہے ہیں۔
**"ناانصافی"** ان منفی اثرات یا "نقصانات" کو ظاہر کرتی ہے جو کسی گروہ پر پڑ سکتے ہیں، جیسے نسل، جنس، عمر، یا معذوری کی حیثیت کے لحاظ سے۔ انصاف پسندی سے متعلق نقصانات کو درج ذیل اقسام میں تقسیم کیا جا سکتا ہے:
**"ناانصافی"** منفی اثرات یا "نقصانات" شامل ہیں، جو ایک گروپ کے لیے ہوتے ہیں، جیسے نسل، جنس، عمر، یا معذوری کی حیثیت کی بنیاد پر۔ اہم انصاف سے متعلق نقصانات کو درج ذیل طور پر درجہ بند کیا جا سکتا ہے:
- **تقسیم**: اگر کسی جنس یا نسل کو دوسرے پر ترجیح دی جائے۔
- **سروس کا معیار**: اگر آپ نے ڈیٹا کو کسی خاص منظرنامے کے لیے تربیت دی ہو لیکن حقیقت زیادہ پیچیدہ ہو، تو یہ ناقص کارکردگی کا باعث بن سکتا ہے۔ مثال کے طور پر، ایک صابن ڈسپنسر جو گہرے رنگ کی جلد والے لوگوں کو پہچاننے میں ناکام رہا۔ [حوالہ](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **تنقید**: کسی چیز یا شخص پر غیر منصفانہ تنقید کرنا۔ مثال کے طور پر، ایک امیج لیبلنگ ٹیکنالوجی نے گہرے رنگ کی جلد والے لوگوں کی تصاویر کو غلط طور پر گوریلا کے طور پر لیبل کیا۔
- **زیادہ یا کم نمائندگی**: یہ تصور کہ کسی خاص گروہ کو کسی پیشے میں نہیں دیکھا جاتا، اور کوئی بھی سروس یا فنکشن جو اس کو فروغ دیتا ہے، نقصان کا باعث بنتا ہے۔
- **اسٹیریو ٹائپنگ**: کسی گروہ کو پہلے سے طے شدہ خصوصیات کے ساتھ جوڑنا۔ مثال کے طور پر، انگریزی اور ترکی کے درمیان زبان کے ترجمے کا نظام جنس سے متعلق دقیانوسی الفاظ کی وجہ سے غلطیاں کر سکتا ہے۔
- **تقسیم**، اگر جنس یا نسل کو دوسرے پر ترجیح دی جائے۔
- **سروس کا معیار**۔ اگر آپ مخصوص منظرنامے کے لیے ڈیٹا تربیت دیں لیکن حقیقت کہیں زیادہ پیچیدہ ہو تو اس کا نتیجہ ناقص کارکردگی والی سروس بنتا ہے۔ مثال کے طور پر، ایک ہاتھ دھونے والا صابن کا ڈسپنسر جو گہرے جلد والے لوگوں کو محسوس نہیں کر پاتا۔ [حوالہ](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **توہین آمیز رویہ**۔ کسی چیز یا کسی شخص پر ناجائز تنقید کرنا اور اسے غلط لیبل کرنا۔ مثال کے طور پر، ایک امیج لیبلنگ ٹیکنالوجی نے بدنامی سے گہرے جلد والے لوگوں کی تصاویر کو گوریل کے طور پر لیبل کیا تھا۔
- **زیادہ یا کم نمائندگی**۔ تصور یہ ہے کہ کسی مخصوص گروپ کو کسی مخصوص پیشے میں نہیں دیکھا جاتا، اور کوئی بھی سروس یا فنکشن جو اس کی ترویج کرتا ہے وہ نقصان میں حصہ ڈال رہا ہوتا ہے۔
- **سٹیریو ٹائپنگ**۔ کسی گروپ کو پہلے سے طے شدہ خصوصیات سے منسوب کرنا۔ مثال کے طور پر، انگریزی اور ترکی زبان کے ترجمے کے نظام میں جنس سے متعلق سٹیریو ٹائپیکل الفاظ کی وجہ سے غلطیاں ہو سکتی ہیں۔

> ترکی زبان میں ترجمہ

> ترکی میں ترجمہ


> انگریزی میں واپس ترجمہ
AI سسٹمز کو ڈیزائن اور ٹیسٹ کرتے وقت، ہمیں یہ یقینی بنانا ہوگا کہ AI منصفانہ ہو اور تعصبی یا امتیازی فیصلے کرنے کے لیے پروگرام نہ کیا گیا ہو، جو انسانوں کے لیے بھی ممنوع ہیں۔ AI اور مشین لرننگ میں انصاف کو یقینی بنانا ایک پیچیدہ سماجی-تکنیکی چیلنج ہے۔
AI سسٹمز کو منصفانہ بنایا جانا چاہیے اور انہیں جانبدار یا امتیازی فیصلے کرنے کے لیے پروگرام نہیں کیا جانا چاہیے، جو انسانوں کو بھی منع ہے۔ AI اور مشین لرننگ میں انصاف کو یقینی بنانا ایک پیچیدہ سماجیتکنیکی چیلنج ہے۔
### قابل اعتمادیت اور حفاظت
### بھروسہ مندی اور سلامتی
اعتماد پیدا کرنے کے لیے، AI سسٹمز کو قابل اعتماد، محفوظ، اور عام اور غیر متوقع حالات میں مستقل ہونا چاہیے۔ یہ جاننا ضروری ہے کہ AI سسٹمز مختلف حالات میں کیسے کام کریں گے، خاص طور پر جب وہ غیر معمولی ہوں۔ AI حل بناتے وقت، ان تمام حالات پر توجہ مرکوز کرنا ضروری ہے جن کا سامنا AI حل کو ہو سکتا ہے۔ مثال کے طور پر، ایک خودکار گاڑی کو لوگوں کی حفاظت کو اولین ترجیح دینی چاہیے۔ اس کے نتیجے میں، گاڑی کو چلانے والے AI کو ان تمام ممکنہ منظرناموں پر غور کرنا ہوگا جن کا سامنا گاڑی کو ہو سکتا ہے، جیسے رات، طوفان، برفباری، سڑک پر دوڑتے بچے، پالتو جانور، سڑک کی تعمیرات وغیرہ۔
اعتماد قائم کرنے کے لیے، AI سسٹمز کو معمول اور غیر متوقع حالات میں قابل اعتماد، محفوظ، اور مستقل ہونا چاہیے۔ یہ جاننا ضروری ہے کہ AI سسٹمز مختلف حالات میں، خاص طور پر غیر معمولی حالات میں، کس طرح ردعمل دیں گے۔ AI حل بنانے کے دوران، مختلف حالات کو سنبھالنے پر خاص توجہ دینی چاہیے جو 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 سسٹمز افراد یا معاشرے پر کیا اثر ڈال رہے ہیں۔
[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft کا ذمہ دار AI کیلئے طریقہ")
[](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 کی تلاش میں: اصولوں کو عملی جامہ پہنانا از بسمیرا نوشی، مهرنوش سامیکی اور امت شرما
[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: ذمہ دار AI بنانے کے لیے ایک اوپن سورس فریم ورک")
[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: An open-source framework for building responsible AI")
> 🎥 اوپر دی گئی تصویر پر کلک کریں ویڈیو کے لیے: RAI Toolbox: ذمہ دار AI بنانے کے لیے ایک اوپن سورس فریم ورک، پیشکش از بسمیرا نوشی، مہرنوش سمیقی اور امت شرما
> 🎥 ویڈیو کے لیے اوپر تصویر پر کلک کریں: 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 کے آلات کے بارے میں پڑھیں:
یہ دستاویز 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) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔
> ### [یہ سبق 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://youtu.be/-DfeD2k2Kj0 "مشین لرننگ کے لیے ابتدائی - مشین لرننگ ماڈلز بنانے کے لیے اپنے ٹولز تیار کریں")
[](https://youtu.be/-DfeD2k2Kj0 "نئے آنے والوں کے لیے ML - اپنے اوزار تیار کریں تاکہ مشین لرننگ ماڈلز بنائیں")
> 🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ اپنے کمپیوٹر کو مشین لرننگ کے لیے ترتیب دینے کے عمل کو دیکھ سکیں۔
> 🎥 اپنے کمپیوٹر کو ML کے لیے ترتیب دینے کے عمل سے گزرتے ہوئے ایک مختصر ویڈیو کے لیے اوپر والی تصویر پر کلک کریں۔
1. **Python انسٹال کریں**۔یہ یقینی بنائیں کہ [Python](https://www.python.org/downloads/) آپ کے کمپیوٹر پر انسٹال ہے۔ آپ ڈیٹا سائنس اور مشین لرننگ کے بہت سے کاموں کے لیے Python استعمال کریں گے۔ زیادہ تر کمپیوٹر سسٹمز میں پہلے سے ہی Python انسٹال ہوتا ہے۔ کچھ صارفین کے لیے سیٹ اپ کو آسان بنانے کے لیے [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) بھی دستیاب ہیں۔
1. **Python انسٹال کریں**۔اس بات کو یقینی بنائیں کہ آپ کے کمپیوٹر پر [Python](https://www.python.org/downloads/) انسٹال ہے۔ آپ بہت سے ڈیٹا سائنس اور مشین لرننگ کاموں کے لیے Python استعمال کریں گے۔ زیادہ تر کمپیوٹر سسٹمز میں پہلے سے Python انسٹال ہوتا ہے۔ کچھ صارفین کے لیے آسانی کے لیے مفید [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) سے گزر کر کام کریں۔
>
> [](https://youtu.be/yyQM70vi7V8 "Visual Studio Code کے ساتھ Python ترتیب دیں")
> [](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` سے پہچانا جا سکتا ہے۔
نوٹ بکس ایک انٹرایکٹو ماحول فراہم کرتی ہیں جو ڈیولپر کو کوڈ لکھنے اور اس کے ارد گرد نوٹس اور دستاویزات شامل کرنے کی اجازت دیتی ہیں، جو تجرباتی یا تحقیقی منصوبوں کے لیے کافی مددگار ثابت ہوتی ہیں۔
نوٹ بکس ایک تعاملی ماحول ہیں جو ڈویلپر کو نہ صرف کوڈ لکھنے بلکہ اس کے گرد نوٹس اور دستاویزات شامل کرنے کی اجازت دیتے ہیں، جو تحقیقی یا تجرباتی منصوبوں کے لیے مفید ہے۔
[](https://youtu.be/7E-jC8FLA2E "مشین لرننگ کے لیے ابتدائی - Jupyter نوٹ بکس ترتیب دیں تاکہ ریگریشن ماڈلز بنانا شروع کریں")
[](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
```


آپ اپنے کوڈ کے ساتھ تبصرے شامل کر سکتے ہیں تاکہ نوٹ بک کو خود دستاویز کریں۔
آپ اپنے کوڈ کے ساتھ تبصرے شامل کر کے نوٹ بک خود دستاویزی بنا سکتے ہیں۔
✅ ایک لمحے کے لیے سوچیں کہ ویب ڈیولپر کے کام کرنے کے ماحول اور ڈیٹا سائنسدان کے کام کرنے کے ماحول میں کتنا فرق ہے۔
✅ ایک لمحہ سوچیں کہ ویب ڈویلپر کا کام کرنے کا ماحول ڈیٹا سائنسدان کے ماحول سے کتنا مختلف ہوتا ہے۔
## 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) سے متاثر ہو کر بنایا گیا ہے۔
[](https://youtu.be/2xkXL5EUpS0 "مشین لرننگ کے لیے ابتدائی - Python میں آپ کا پہلا لینیئر ریگریشن پروجیکٹ")
> 🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ اس مشق کے عمل کو دیکھ سکیں۔
[](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()
```

✅ سوچیں کہ یہاں کیا ہو رہا ہے۔ ایک سیدھی لکیر کئی چھوٹے ڈیٹا پوائنٹس کے درمیان سے گزر رہی ہے، لیکن یہ اصل میں کیا کر رہی ہے؟ کیا آپ دیکھ سکتے ہیں کہ آپ اس لکیر کو کیسے استعمال کر سکتے ہیں تاکہ اندازہ لگا سکیں کہ ایک نیا، غیر دیکھے گئے ڈیٹا پوائنٹ کو پلاٹ کے y محور کے ساتھ کس تعلق میں ہونا چاہیے؟ اس ماڈل کے عملی استعمال کو الفاظ میں بیان کرنے کی کوشش کریں۔

مبارک ہو، آپ نے اپنا پہلا لینیئر ریگریشن ماڈل بنایا، اس کے ساتھ ایک پیش گوئی کی، اور اسے ایک پلاٹ میں دکھایا!
✅ یہاں جو کچھ ہو رہا ہے اس کے بارے میں تھوڑی سوچیں۔ ایک سیدھی لائن بہت سے چھوٹے ڈیٹا پوائنٹس کے ایک راستے سے گزر رہی ہے، لیکن یہ بالکل کیا کر رہی ہے؟ کیا آپ دیکھ سکتے ہیں کہ آپ کو اس لائن کو کیسے استعمال کرنا چاہیے تاکہ پیش گوئی کی جا سکے کہ ایک نیا، نا دیکھا ہوا ڈیٹا پوائنٹ پلاٹ کی y محور کے لحاظ سے کہاں فٹ ہوگا؟ اس ماڈل کے عملی استعمال کو الفاظ میں بیان کرنے کی کوشش کریں۔
مبارک ہو، آپ نے اپنا پہلا لینیئر ریگریشن ماڈل تیار کیا، اس کے ساتھ پیش گوئی کی، اور اسے ایک پلاٹ میں دکھایا!
---
## 🚀چیلنج
اس ڈیٹا سیٹ سے ایک مختلف متغیر کو پلاٹ کریں۔ اشارہ: اس لائن کو ایڈٹ کریں: `X = X[:,2]`۔ اس ڈیٹا سیٹ کے ہدف کو دیکھتے ہوئے، آپ ذیابیطس کی بیماری کے ارتقاء کے بارے میں کیا دریافت کر سکتے ہیں؟
## [لیکچر کے بعد کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
اس ڈیٹا سیٹ سے کوئی مختلف متغیر پلاٹ کریں۔ اشارہ: اس لائن کو ترمیم کریں: `X = X[:,2]`۔ اس ڈیٹا سیٹ کے ہدف کے پیش نظر، آپ ذیابیطس کو ایک بیماری کے طور پر کس طرح ترقی پذیر دیکھ سکتے ہیں؟
## [لیکچر کے بعد کوئز](https://ff-quizzes.netlify.app/en/ml/)
## جائزہ اور خود مطالعہ
اس ٹیوٹوریل میں، آپ نے سادہ لینیئر ریگریشن کے ساتھ کام کیا، نہ کہ یونیویریٹ یا ملٹیپل لینیئر ریگریشن کے ساتھ۔ ان طریقوں کے درمیان فرق کے بارے میں تھوڑا پڑھیں، یا [اس ویڈیو](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) کو دیکھیں۔
اس ٹیوٹوریل میں، آپ نے سادہ لینیئر ریگریشن کے ساتھ کام کیا، نہ کہ یونیوریٹ یا ملٹیپل لینیئر ریگریشن کے ساتھ۔ ان طریقوں کے درمیان فرق کے بارے میں تھوڑا پڑھیں، یا [اس ویڈیو](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) کو دیکھیں۔
ریگریشن کے تصور کے بارے میں مزید پڑھیں اور سوچیں کہ اس تکنیک کے ذریعے کس قسم کے سوالات کے جواب دیے جا سکتے ہیں۔ اپنی سمجھ کو گہرا کرنے کے لیے یہ [ٹیوٹوریل](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) لیں۔
ریگریشن کے تصور کے بارے میں مزید پڑھیں اور سوچیں کہ اس تکنیک سے کس قسم کے سوالات کے جوابات دیے جا سکتے ہیں۔ اپنی سمجھ کو گہرا کرنے کے لیے [یہ ٹیوٹوریل](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) کریں۔
## اسائنمنٹ
@ -226,5 +228,7 @@ _نوٹ بک.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) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔
> ### [یہ سبق 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://youtu.be/5qGjczWTrDQ "مشین لرننگ کے ابتدائی افراد کے لیے - ڈیٹا سیٹ کا تجزیہ اور صفائی کیسے کریں")
[](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 سے مخصوص قطاریں (پہلا پیرا میٹر) اور کالمز (دوسرا پیرا میٹر) نکالتا ہے۔ نیچے والے اظہار `:` کا مطلب ہے "تمام قطاریں"۔
سوچیں کہ کسی دیے گئے مہینے میں کدو کی اوسط قیمت کا تعین کیسے کریں۔ اس کام کے لیے آپ کون سے کالمز منتخب کریں گے؟ اشارہ: آپ کو 3 کالمز کی ضرورت ہوگی۔
سوچیں کہ کسی مہینے میں کدو کی اوسط قیمت کیسے معلوم کی جائے۔ اس کام کے لیے کون سے کالم منتخب کریں گے؟ اشارہ: آپ کو 3 کالم چاہئیں۔
حل: `Low Price` اور `High Price` کالمز کی اوسط لے کر نئے Price کالم کو بھرنا، اور Date کالم کو صرف مہینے دکھانے کے لیے تبدیل کرنا۔ خوش قسمتی سے، اوپر دی گئی جانچ کے مطابق، تاریخوں یا قیمتوں کے لیے کوئی گمشدہ ڈیٹا نہیں ہے۔
حل: `Low Price` اور `High Price` کالمز کی اوسط لے کر نئے `Price` کالم کو بھریں، اور `Date` کالم کو مہینے تک محدود کریں۔ خوش قسمتی سے، اوپر چیک کے مطابق تاریخوں یا قیمتوں کے لیے کوئی گمشدہ ڈیٹا نہیں ہے۔
1. اوسط کا حساب لگانے کے لیے، درج ذیل کوڈ شامل کریں:
اپنے ڈیٹا فریم کو پرنٹ کرنے سے آپ کو ایک صاف، ترتیب شدہ ڈیٹا سیٹ دکھائی دے گا جس پر آپ اپنا نیا ریگریشن ماڈل بنا سکتے ہیں۔
اپنے 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 درآمد کے نیچے فلٹر شامل کریں:
اگر آپ اب ڈیٹا پرنٹ کریں، تو آپ دیکھ سکتے ہیں کہ آپ کو صرف وہ 415 یا اس سے زیادہ قطاریں مل رہی ہیں جن میں بسشل کے ذریعے کدو شامل ہیں۔
اگر اب آپ ڈیٹا پرنٹ کریں، تو آپ صرف تقریباً 415 قطاریں دیکھیں گے جو بسہل کے حساب سے کدوں کی ہیں۔
### لیکن ٹھہریں! کرنے کے لیے ایک اور چیز ہے
### لیکن رُکیں! ایک اور کام باقی ہے
کیا آپ نے نوٹ کیا کہ بسشل کی مقدار ہر قطار میں مختلف ہوتی ہے؟ آپ کو قیمتوں کو معمول پر لانے کی ضرورت ہے تاکہ آپ بسشل کے حساب سے قیمت دکھا سکیں، لہذا بسشل پیمائش کو معیاری بنانے کے لیے کچھ حساب کریں۔
کیا آپ نے محسوس کیا کہ ہر قطار میں بسہل کی مقدار مختلف ہے؟ آپ کو قیمتوں کو معیاری بنانے کی ضرورت ہے تاکہ قیمت فی بسہل ظاہر ہو، اس لیے کچھ ریاضی کریں۔
1. ان لائنز کو نئے_pumpkins ڈیٹا فریم بنانے والے بلاک کے بعد شامل کریں:
1. نئے `new_pumpkins` dataframe بنانے والے بلاک کے بعد یہ سطریں شامل کریں:
✅ [دی سپروس ایٹس](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) کے مطابق، بسشل کا وزن پیداوار کی قسم پر منحصر ہوتا ہے، کیونکہ یہ حجم کی پیمائش ہے۔ "مثال کے طور پر، ٹماٹروں کا ایک بسشل 56 پاؤنڈ وزن کا ہونا چاہیے... پتوں اور سبزوں میں کم وزن کے ساتھ زیادہ جگہ لگتی ہے، لہذا پالک کا ایک بسشل صرف 20 پاؤنڈ ہے۔" یہ سب کافی پیچیدہ ہے! آئیے بسشل سے پاؤنڈ میں تبدیلی کرنے کی زحمت نہ کریں، اور اس کے بجائے بسشل کے حساب سے قیمت لگائیں۔ کدو کے بسشل کا مطالعہ کرنے سے، تاہم، یہ ظاہر ہوتا ہے کہ اپنے ڈیٹا کی نوعیت کو سمجھنا کتنا اہم ہے!
✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) کے مطابق، بسہل کا وزن فصل کی قسم پر منحصر ہے کیونکہ یہ حجم کی پیمائش ہے۔ "مثال کے طور پر ٹماٹر کا ایک بسہل 56 پاؤنڈ وزنی ہوتا ہے... پتے اور سبزیاں کم وزن کے ساتھ زیادہ جگہ لیتی ہیں، اس لیے پالک کا بسہل صرف 20 پاؤنڈ ہوتا ہے۔" یہ سب کافی پیچیدہ ہے! آئیے بسہل کو پاؤنڈ میں تبدیل کرنے کی فکر نہ کریں اور بسہل کی بنیاد پر قیمت لگائیں۔ کدوں کے بسہل کے اس مطالعے سے یہ ظاہر ہوتا ہے کہ اپنے ڈیٹا کی نوعیت کو سمجھنا کتنا ضروری ہے!
اب، آپ بسشل پیمائش کی بنیاد پر یونٹ کے حساب سے قیمتوں کا تجزیہ کر سکتے ہیں۔ اگر آپ ڈیٹا کو ایک بار پھر پرنٹ کریں، تو آپ دیکھ سکتے ہیں کہ یہ معیاری ہو گیا ہے۔
اب آپ بسہل کی پیمائش کی بنیاد پر قیمتوں کا تجزیہ کر سکتے ہیں۔ اگر آپ دوبارہ ڈیٹا پرنٹ کریں تو دیکھیں گے کہ یہ معیاری ہو چکا ہے۔
✅ کیا آپ نے نوٹ کیا کہ آدھے بسشل کے ذریعے فروخت ہونے والے کدو بہت مہنگے ہیں؟ کیا آپ اس کی وجہ معلوم کر سکتے ہیں؟ اشارہ: چھوٹے کدو بڑے کدو کے مقابلے میں بہت مہنگے ہیں، شاید اس لیے کہ بسشل میں ان کی تعداد بہت زیادہ ہوتی ہے، دیے گئے ایک بڑے کھوکھلے پائی کدو کے استعمال شدہ جگہ کے مقابلے۔
✅ کیا آپ نے محسوس کیا کہ آدھے بسہل کے حساب سے فروخت ہونے والے کدو بہت مہنگے ہیں؟ کیا آپ وجہ معلوم کر سکتے ہیں؟ اشارہ: چھوٹے کدو بڑے کدو کی نسبت بہت زیادہ مہنگے ہوتے ہیں، شاید اس لیے کہ ایک بسہل میں ان کی تعداد زیادہ ہوتی ہے، جبکہ بڑے گول کدو کے خالی حصے کی جگہ استعمال نہیں ہوتی۔
## بصری حکمت عملی
## بصری نمائندگی کی حکمت عملیاں
ڈیٹا سائنسدان کا کردار ڈیٹا کے معیار اور نوعیت کو ظاہر کرنا ہے جس کے ساتھ وہ کام کر رہے ہیں۔ ایسا کرنے کے لیے، وہ اکثر دلچسپ بصری تخلیق کرتے ہیں، جیسے پلاٹس، گرافز، اور چارٹس، جو ڈیٹا کے مختلف پہلوؤں کو ظاہر کرتے ہیں۔ اس طرح، وہ بصری طور پر تعلقات اور خلا کو ظاہر کر سکتے ہیں جو بصورت دیگر دریافت کرنا مشکل ہوتا ہے۔
ڈیٹا سائنسدان کا ایک حصہ ہوتا ہے کہ وہ کام کے ڈیٹا کی نوعیت اور معیار کو ظاہر کرے۔ اس کے لیے وہ اکثر دلچسپ بصری نمائندگیاں یا پلاٹس، گرافز، اور چارٹس بناتے ہیں جو مختلف پہلوؤں کو دکھاتے ہیں۔ اس طرح وہ بصری طور پر ایسے تعلقات اور خلا دکھا پاتے ہیں جو بصورت دیگر چھپے ہوتے ہیں۔
[](https://youtu.be/SbUkxH6IJo0 "مشین لرننگ کے ابتدائی افراد کے لیے - میٹپلاٹ لائبریری کے ساتھ ڈیٹا کو بصری بنانا")
[](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 درآمد کریں:
1. نوٹ بک کے آخر میں ایک سیل شامل کریں جو ڈیٹا کو باکس کے طور پر پلاٹ کرے:
```python
price = new_pumpkins.Price
@ -174,44 +174,121 @@ _نوٹ بک.ipynb_ فائل کو ویژول اسٹوڈیو کوڈ میں کھو
plt.show()
```


کیا یہ ایک مفید پلاٹ ہے؟ کیا اس کے بارے میں کچھ آپ کو حیران کرتا ہے؟
کیا یہ مفید پلاٹ ہے؟ کیا اس میں کوئی خاص بات آپ کو حیران کرتی ہے؟
یہ خاص طور پر مفید نہیں ہے کیونکہ یہ صرف آپ کے ڈیٹا کو ایک دیے گئے مہینے میں پوائنٹس کے پھیلاؤ کے طور پر ظاہر کرتا ہے۔
یہ خاص طور پر مفید نہیں ہے کیونکہ یہ صرف آپ کے ڈیٹا کو مہینے میں پھیلے ہوئے نقاط کے طور پر دکھاتا ہے۔
### اسے مفید بنائیں
چارٹس کو مفید ڈیٹا ظاہر کرنے کے لیے، آپ کو عام طور پر کسی نہ کسی طرح ڈیٹا کو گروپ کرنے کی ضرورت ہوتی ہے۔ آئیے ایک پلاٹ بنانے کی کوشش کرتے ہیں جہاں y محور مہینے دکھاتا ہے اور ڈیٹا ڈیٹا کی تقسیم کو ظاہر کرتا ہے۔
مفید ڈیٹا دکھانے کے لیے، عام طور پر آپ کو ڈیٹا کو گروپ کرنا ہوتا ہے۔ آئیے ایک ایسا پلاٹ بناتے ہیں جہاں y محور مہینے دکھائے اور ڈیٹا تقسیم کو ظاہر کرے۔
1. ایک گروپڈ بار چارٹ بنانے کے لیے ایک سیل شامل کریں:


یہ زیادہ مفید ڈیٹا بصری نمائندگی ہے! ایسا لگتا ہے کہ کدو کی سب سے زیادہ قیمت ستمبر اور اکتوبر میں ہوتی ہے۔ کیا یہ آپ کی توقع کے مطابق ہے؟ کیوں یا کیوں نہیں؟
## مشق - 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 کے کالموں کے ساتھ کام کرتا ہے:

یہ مخصوص ڈیٹا کافی شور والا ہے، اس لیے لائن پلاٹ سب سے واضح انتخاب نہیں ہے — لیکن یہ دکھاتا ہے کہ Seaborn میں چارٹ کی اقسام کو کتنی آسانی سے تبدیل کیا جا سکتا ہے۔
### تقسیمات دکھانے والے بار چارٹس
آپ نے پہلے ہاتھ سے ڈیٹا کو گروپ کر کے Matplotlib کے ساتھ ایک بار چارٹ بنایا تھا۔ Seaborn کا [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html) (کٹیگوریکل پلاٹ) آپ کے لیے گروپنگ اور جمع کی جانب سے کام کر سکتا ہے۔ ڈیفالٹ کے طور پر `kind="bar"` ہر زمرے کی اوسط دکھاتا ہے اور ایک سیاہ لائن اعتماد کے وقفے کی نشاندہی کرتی ہے۔

یہ اس بات کی تصدیق کرتا ہے جو آپ نے Matplotlib کے ساتھ دیکھا تھا — قیمتیں ستمبر اور اکتوبر کے آس پاس چوٹی پر ہوتی ہیں — لیکن Seaborn یہ بھی ظاہر کرتا ہے کہ ہر مہینے کے اندر قیمت کتنی _متغیر_ ہوتی ہے۔
### تعلقات دکھانے کے لیے ہیٹ میپس
اسکیٹر پلاٹس ایک وقت میں دو متغیرات کا موازنہ کرتے ہیں۔ جب آپ کے پاس کئی عددی کالم ہوں، تو ایک [heatmap](https://en.wikipedia.org/wiki/Heat_map) آپ کو ہر جوڑے کے کالمز کے درمیان تعلق کی طاقت کو ایک ساتھ دیکھنے کی اجازت دیتا ہے۔ یہ عام طریقہ ہے یہ دیکھنے کا کہ کن خصوصیات کا زیادہ تعلق ہے ماڈل میں فیڈ کرنے سے پہلے (اور اسی طرح کا چارٹ بعد میں کلاسفیکیشن میں کنفیوزن میٹرکس دکھانے کے لیے استعمال ہوتا ہے)۔
1۔ Pandas کے ساتھ ایک تعلقاتی میٹرکس بنائیں، پھر اسے Seaborn کے [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html) سے کھینچیں۔ `annot=True` آپشن ہر سیل پر تعلقاتی اقدار کو پرنٹ کرتا ہے:

`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) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔
"[Seaborn](https://seaborn.pydata.org/) میٹ پلوٹ لِب کے اوپر بنایا گیا ہے اور ڈیٹا فریمز کے ساتھ براہ راست کام کرتا ہے، جس سے بہت کم کوڈ کے ساتھ خوبصورت شماریاتی گراف بنانا آسان ہو جاتا ہے۔\n"
"\n---\n\n**ڈسکلیمر**: \nیہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے پوری کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستگی ہو سکتی ہیں۔ اصل دستاویز، جو اس کی اصل زبان میں ہے، کو مستند ماخذ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے لیے ہم ذمہ دار نہیں ہیں۔\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**ڈس کلیمر**:\nیہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
ری انفورسمنٹ لرننگ تین اہم تصورات پر مشتمل ہے: ایجنٹ، کچھ حالتیں، اور ہر حالت کے لیے اعمال کا ایک مجموعہ۔ کسی مخصوص حالت میں عمل انجام دے کر، ایجنٹ کو انعام دیا جاتا ہے۔ ایک بار پھر کمپیوٹر گیم سپر ماریو کا تصور کریں۔ آپ ماریو ہیں، آپ ایک گیم لیول میں ہیں، اور ایک کھائی کے کنارے پر کھڑے ہیں۔ آپ کے اوپر ایک سکہ ہے۔ آپ، ماریو، ایک گیم لیول میں، ایک خاص مقام پر ... یہ آپ کی حالت ہے۔ دائیں طرف ایک قدم بڑھانا (ایک عمل) آپ کو کھائی میں لے جائے گا، اور یہ آپ کو کم عددی اسکور دے گا۔ تاہم، جمپ بٹن دبانے سے آپ کو ایک پوائنٹ ملے گا اور آپ زندہ رہیں گے۔ یہ ایک مثبت نتیجہ ہے اور اس کے لیے آپ کو ایک مثبت عددی اسکور ملنا چاہیے۔
ری انفورسمنٹ لرننگ میں تین اہم تصورات شامل ہیں: ایجنٹ، کچھ اسٹیٹس، اور ہر اسٹیٹ کے لئے ایکشنز کا ایک مجموعہ۔ کسی مخصوص اسٹیٹ میں کسی ایکشن کو انجام دے کر، ایجنٹ کو انعام دیا جاتا ہے۔ دوبارہ کمپیوٹر گیم سپر ماریو کا تصور کریں۔ آپ ماریو ہیں، آپ ایک گیم لیول میں ہیں، ایک چٹان کے کنارے کھڑے ہیں۔ آپ کے اوپر ایک سکے ہیں۔ آپ، ماریو ہونے کے ناطے، گیم لیول میں، ایک مخصوص مقام پر ... یہ آپ کی حالت ہے۔ دائیں ایک قدم چلنا (ایکشن) آپ کو کنارے سے نیچے لے جائے گا، اور یہ آپ کو کم عددی سکور دے گا۔ لیکن اگر آپ جمپ بٹن دبائیں تو آپ ایک پوائنٹ حاصل کریں گے اور زندہ رہیں گے۔ یہ ایک مثبت نتیجہ ہے اور اس کو مثبت عددی سکور ملنا چاہئے۔
ری انفورسمنٹ لرننگ اور ایک سمیولیٹر (گیم) کا استعمال کرتے ہوئے، آپ یہ سیکھ سکتے ہیں کہ گیم کو کیسے کھیلا جائے تاکہ انعام کو زیادہ سے زیادہ کیا جا سکے، جو کہ زندہ رہنا اور زیادہ سے زیادہ پوائنٹس حاصل کرنا ہے۔
ری انفورسمنٹ لرننگ اور ایک سمولیٹر (گیم) استعمال کرکے، آپ سیکھ سکتے ہیں کہ گیم کیسے کھیلنا ہے تاکہ زیادہ سے زیادہ انعام حاصل کیا جا سکے جو زندہ رہنا اور زیادہ سے زیادہ پوائنٹس حاصل کرنا ہے۔
[](https://www.youtube.com/watch?v=lDq_en8RNOo)
> 🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ دمتری کی ری انفورسمنٹ لرننگ پر گفتگو سن سکیں۔
> 🎥 اوپر تصویر پر کلک کریں تاکہ دمتری کو ری انفورسمنٹ لرننگ کے بارے میں بات کرتے سنا جا سکے
## [لیکچر سے پہلے کا کوئز](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` ہو، جیسا کہ یہ:


اس بورڈ میں ہر سیل یا تو:
اس بورڈ میں ہر خانہ درج ذیل ہو سکتا ہے:
* **زمین**، جس پر پیٹر اور دیگر مخلوقات چل سکتی ہیں۔
* **پانی**، جس پر آپ ظاہر ہے نہیں چل سکتے۔
* ایک **درخت** یا **گھاس**، ایک جگہ جہاں آپ آرام کر سکتے ہیں۔
* ایک **سیب**، جو پیٹر کے لیے خوشی کا باعث ہوگا۔
* ایک **بھیڑیا**، جو خطرناک ہے اور اس سے بچنا چاہیے۔
* **زمین**، جس پر پیٹر اور دوسری مخلوق چل سکتے ہیں۔
* **پانی**، جس پر آپ واضح طور پر نہیں چل سکتے۔
* ایک **درخت** یا **گھاس**، جہاں آپ آرام کر سکتے ہیں۔
* ایک **سیب**، جو کچھ ایسا ہے جسے پیٹر خوشی خوشی تلاش کرے گا تاکہ خود کو کھلا سکے۔
* ایک **بھیڑیا**، جو خطرناک ہے اور اجتناب کرنا چاہئے۔
ایک علیحدہ 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):
action_idx = { a : i for i,a in enumerate(actions.keys()) }
```
خلاصہ کرنے کے لیے، اس منظر نامے کی حکمت عملی اور مقصد درج ذیل ہیں:
خلاصہ کے طور پر، اس منظرنامے کی حکمت عملی اور مقصد درج ذیل ہیں:
- **حکمت عملی**، ہمارے ایجنٹ (پیٹر) کی، ایک **پالیسی** کے ذریعے متعین کی جاتی ہے۔ پالیسی ایک فنکشن ہے جو کسی بھی دی گئی حالت میں عمل واپس کرتی ہے۔ ہمارے معاملے میں، مسئلے کی حالت بورڈ کے ذریعے نمائندگی کی جاتی ہے، بشمول کھلاڑی کی موجودہ پوزیشن۔
- **حکمت عملی**, ہمارے ایجنٹ (پیٹر) کی وہ ہے جسے ایک **پالیسی** کہتے ہیں۔ پالیسی ایک فنکشن ہے جو کسی بھی حالت پر ایکشن واپس دیتی ہے۔ ہمارے معاملے میں، مسئلہ کی حالت بورڈ کی نمائندگی کرتی ہے، جس میں کھلاڑی کی موجودہ جگہ بھی شامل ہے۔
- **مقصد**، ری انفورسمنٹ لرننگ کا، بالآخر ایک اچھی پالیسی سیکھنا ہے جو ہمیں مسئلے کو مؤثر طریقے سے حل کرنے کی اجازت دے۔
- **مقصد**, ری انفورسمنٹ لرننگ کا آخرکار ایک اچھی پالیسی سیکھنا ہے جو مسئلہ کو مؤثر طریقے سے حل کرے۔ تاہم، ابتدائی طور پر، ہم سب سے سادہ پالیسی یعنی **رینڈم واک** کو مد نظر رکھیں گے۔
## بے ترتیب چال
## رینڈم واک
آئیے پہلے بے ترتیب چال کی حکمت عملی کو نافذ کرکے اپنے مسئلے کو حل کریں۔ بے ترتیب چال کے ساتھ، ہم اجازت شدہ اعمال میں سے اگلا عمل بے ترتیب طور پر منتخب کریں گے، جب تک کہ ہم سیب تک نہ پہنچ جائیں (کوڈ بلاک 3)۔
آئیے پہلے ہمارا مسئلہ رینڈم واک حکمت عملی سے حل کریں۔ رینڈم واک میں، ہم اجازت شدہ ایکشنز میں سے اگلا ایکشن اتفاقی طور پر منتخب کریں گے، یہاں تک کہ ہمیں سیب مل جائے (کوڈ بلاک 3)۔
1. نیچے دیے گئے کوڈ کے ساتھ بے ترتیب چال کو نافذ کریں:
1۔ ذیل میں کوڈ کے ساتھ رینڈم واک نافذ کریں:
```python
def random_policy(m):
return random.choice(list(actions))
def walk(m,policy,start_position=None):
n = 0 # number of steps
# set initial position
n = 0 # قدموں کی تعداد
# ابتدائی مقام مقرر کریں
if start_position:
m.human = start_position
else:
m.random_start()
while True:
if m.at() == Board.Cell.apple:
return n # success!
return n # کامیابی!
if m.at() in [Board.Cell.wolf, Board.Cell.water]:
return -1 # eaten by wolf or drowned
return -1 # بھیڑیا نے کھا لیا یا ڈوب گئے
while True:
a = actions[policy(m)]
new_pos = m.move_pos(m.human,a)
if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water:
m.move(a) # do the actual move
m.move(a) # اصل حرکت کریں
break
n+=1
walk(m,random_policy)
```
`walk` کو کال کرنے سے متعلقہ راستے کی لمبائی واپس آنا چاہیے، جو ایک رن سے دوسرے رن تک مختلف ہو سکتی ہے۔
`walk` کال کو اس مربوط راستے کی لمبائی واپس دینی چاہیے، جو ایک دوڑ سے دوسری دوڑ میں مختلف ہو سکتی ہے۔
1. چال کے تجربے کو کئی بار چلائیں (کہیں، 100 بار)، اور نتیجے کے اعدادوشمار پرنٹ کریں (کوڈ بلاک 4):
1۔ واک تجربہ کئی بار (مثلاً 100 بار) چلائیں اور نتیجہ کے اعداد و شمار پرنٹ کریں (کوڈ بلاک 4):
```python
def print_statistics(policy):
@ -125,17 +125,17 @@ action_idx = { a : i for i,a in enumerate(actions.keys()) }
print_statistics(random_policy)
```
نوٹ کریں کہ راستے کی اوسط لمبائی تقریباً 30-40 قدم ہے، جو کہ کافی زیادہ ہے، اس حقیقت کو مدنظر رکھتے ہوئے کہ قریب ترین سیب تک اوسط فاصلہ تقریباً 5-6 قدم ہے۔
نوٹ کریں کہ وسطی راستے کی لمبائی تقریباً 30-40 قدم ہے، جو کہ کافی زیادہ ہے، جبکہ قریب ترین سیب کی اوسط دوری تقریباً 5-6 قدم ہے۔
آپ یہ بھی دیکھ سکتے ہیں کہ بے ترتیب چال کے دوران پیٹر کی حرکت کیسی لگتی ہے:
آپ پیٹر کی حرکت بھی دیکھ سکتے ہیں رینڈم واک کے دوران:


## انعامی فنکشن
## ریوارڈ فنکشن
ہماری پالیسی کو زیادہ ذہین بنانے کے لیے، ہمیں یہ سمجھنے کی ضرورت ہے کہ کون سی حرکتیں دوسروں سے "بہتر" ہیں۔ ایسا کرنے کے لیے، ہمیں اپنے مقصد کی وضاحت کرنے کی ضرورت ہے۔
اپنی پالیسی کو زیادہ ذہین بنانے کے لیے، ہمیں یہ سمجھنا ہوگا کہ کون سی حرکت "بہتر" ہے۔ اس کے لیے ہمیں اپنا مقصد تعریف کرنا ہوگا۔
مقصد کو ایک **انعامی فنکشن** کے لحاظ سے بیان کیا جا سکتا ہے، جو ہر حالت کے لیے کچھ اسکور ویلیو واپس کرے گا۔ جتنا زیادہ نمبر ہوگا، انعامی فنکشن اتنا ہی بہتر ہوگا۔ (کوڈ بلاک 5)
مقصد کو ایک **ریوارڈ فنکشن** کی صورت میں بیان کیا جا سکتا ہے، جو ہر حالت کے لیے کچھ اسکور کی قیمت واپس کرے گا۔ جتنا نمبر زیادہ ہوگا، ریوارڈ فنکشن اتنا ہی بہتر ہوگا۔ (کوڈ بلاک 5)
```python
move_reward = -0.1
@ -154,39 +154,115 @@ def reward(m,pos=None):
return move_reward
```
انعامی فنکشنز کے بارے میں دلچسپ بات یہ ہے کہ زیادہ تر معاملات میں، *ہمیں صرف کھیل کے اختتام پر ایک اہم انعام دیا جاتا ہے*۔ اس کا مطلب یہ ہے کہ ہمارا الگورتھم کسی طرح ان "اچھی" حرکتوں کو یاد رکھے جو آخر میں مثبت انعام کی طرف لے جاتی ہیں، اور ان کی اہمیت کو بڑھائے۔ اسی طرح، وہ تمام حرکتیں جو برے نتائج کی طرف لے جاتی ہیں، ان کی حوصلہ شکنی کی جانی چاہیے۔
ریوارڈ فنکشنز کی ایک دلچسپ بات یہ ہے کہ زیادہ تر صورتوں میں، *ہمیں صرف گیم کے آخر میں اہم انعام دیا جاتا ہے*۔ اس کا مطلب ہے کہ ہمارا الگورتھم "اچھے" قدم یاد رکھے جو کہ آخر میں مثبت انعام کی طرف لے جاتے ہیں، اور ان کی اہمیت بڑھائے۔ اسی طرح، تمام حرکتیں جو منفی نتائج کی طرف لے جائیں، انہیں مایوس کرنا چاہیے۔
## کیولرننگ
## کیو-لرننگ
ایک الگورتھم جس پر ہم یہاں بات کریں گے اسے **کیو لرننگ** کہا جاتا ہے۔ اس الگورتھم میں، پالیسی ایک فنکشن (یا ڈیٹا اسٹرکچر) کے ذریعے متعین کی جاتی ہے جسے **کیو ٹیبل** کہا جاتا ہے۔ یہ ہر حالت میں اعمال کی "اچھی" ہونے کی ریکارڈنگ کرتا ہے۔
جو الگورتھم ہم یہاں بحث کریں گے اسے **کیو-لرننگ** کہا جاتا ہے۔ اس الگورتھم میں، پالیسی ایک فنکشن (یا ڈیٹا ڈھانچہ) کے ذریعے بیان کی جاتی ہے جسے **Q-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)
نوٹ کریں کہ ہم کیو ٹیبل کی تمام قدروں کو برابر ویلیو سے شروع کرتے ہیں، ہمارے معاملے میں - 0.25۔ یہ "بے ترتیب چال" پالیسی کے مطابق ہے، کیونکہ ہر حالت میں تمام حرکتیں یکساں طور پر اچھی ہیں۔ ہم کیو ٹیبل کو بورڈ پر دیکھنے کے لیے `plot` فنکشن کو پاس کر سکتے ہیں: `m.plot(Q)`۔
نوٹ کریں کہ ہم کیو ٹیبل کی تمام قدریں ایک جیسی قیمت سے شروع کرتے ہیں، ہمارے معاملے میں 0.25۔ یہ "رینڈم واک" پالیسی کے مطابق ہے، کیونکہ ہر حالت میں تمام حرکتیں برابر اچھی ہیں۔ ہم Q-Table کو `plot` فنکشن میں دے سکتے ہیں تاکہ بورڈ پر ٹیبل کو بصری شکل میں دکھایا جا سکے: `m.plot(Q)`.


ہر سیل کے مرکز میں ایک "تیر" ہے جو حرکت کی ترجیحی سمت کی نشاندہی کرتا ہے۔ چونکہ تمام سمتیں برابر ہیں، ایک نقطہ دکھایا گیا ہے۔
ہر سیل کے مرکز میں ایک "تیرأ" ہوتا ہے جو پسندیدہ سمت کی نشاندہی کرتا ہے۔ چونکہ تمام سمتیں برابر ہیں، ایک نقطہ دکھایا جاتا ہے۔
اب ہمیں سمیولیشن چلانے، اپنے ماحول کو دریافت کرنے، اور کیو ٹیبل کی قدروں کی ایک بہتر تقسیم سیکھنے کی ضرورت ہے، جو ہمیں سیب تک پہنچنے کے لیے زیادہ تیزی سے راستہ تلاش کرنے کی اجازت دے گی۔
اب ہمیں سمولیشن چلانی ہے، اپنے ماحول کو دریافت کرناہے، اور کیو ٹیبل کی قدروں کی بہتر تقسیم سیکھنی ہے، جو ہمیں سیب تک پہنچنے کے راستے کو بہت تیز تر ڈھونڈنے میں مدد دے گی۔
## کیو لرننگ کا نچوڑ: بیل مین مساوات
## کیو-لرننگ کا جوہر: بیل مین مساوات
ایک بار جب ہم حرکت شروع کرتے ہیں، تو ہر عمل کا ایک متعلقہ انعام ہوگا، یعنی ہم نظریاتی طور پر سب سے زیادہ فوری انعام کی بنیاد پر اگلا عمل منتخب کر سکتے ہیں۔ تاہم، زیادہ تر حالات میں، حرکت ہمارے مقصد کو حاصل نہیں کرے گی، اور اس طرح ہم فوری طور پر فیصلہ نہیں کر سکتے کہ کون سی سمت بہتر ہے۔
جب ہم حرکت شروع کرتے ہیں، ہر ایکشن کا ایک متعلقہ انعام ہوگا، یعنی ہم تھیوریٹیکل طور پر اگلے ایکشن کو فوری سب سے زیادہ انعام کی بنیاد پر منتخب کر سکتے ہیں۔ تاہم، زیادہ تر حالتوں میں، حرکت ہمارا سیب تک پہنچنے کا مقصد حاصل نہیں کرے گی، لہٰذا ہم فوراً فیصلہ نہیں کر سکتے کہ کون سی سمت بہتر ہے۔
> یاد رکھیں کہ فوری نتیجہ اہم نہیں ہے، بلکہ حتمی نتیجہ اہم ہے، جو ہمیں سمیولیشن کے اختتام پر حاصل ہوگا۔
> یاد رکھیں کہ فوری نتیجہ اہم نہیں، بلکہ حتمی نتیجہ ہے جو ہم سمولیشن کے آخر میں حاصل کریں گے۔
تاخیر شدہ انعام کو مدنظر رکھنے کے لیے، ہمیں **[ڈائنامک پروگرامنگ](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* کے لیے حساب کرنے کا **بیل مین فارمولہ** دیتا ہے:
یہاں γ وہ **ڈسکاؤنٹ فیکٹر** ہے جو یہ طے کرتا ہے کہ آپ کو موجودہ انعام کو مستقبل کے انعام کے مقابلے میں کتنا اہمیت دینی چاہیے اور بالعکس۔
## لرننگ الگورتھم
مذکورہ مساوات کی بنیاد پر، ہم اب اپنے سیکھنے والے الگورتھم کے لیے جعلی کوڈ لکھ سکتے ہیں:
* 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) # ہم کھلاڑی کو بورڈ کے باہر جانے کی اجازت دیتے ہیں، جو قسط کو ختم کر دیتا ہے
اس الگورتھم کو چلانے کے بعد، Q-Table ایسی قدروں کے ساتھ اپ ڈیٹ ہو جائے گی جو ہر قدم پر مختلف ایکشنز کی دلکشی کو بیان کریں گی۔ ہم Q-Table کو اس طرح بصری شکل دے سکتے ہیں کہ ہر سیل میں حرکت کی مطلوبہ سمت کی نشاندہی کرنے والا ویکٹر کھینچا جائے۔ آسانی کے لئے، ہم تیر کی جگہ ایک چھوٹا دائرہ ڈالتے ہیں۔
چونکہ 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 کے درمیان توازن ہے۔ ہم نے دیکھا ہے کہ سیکھنے کے نتائج (ایجنٹ کو مقصد تک مختصر راستہ تلاش کرنے کی صلاحیت) میں بہتری آئی ہے، لیکن یہ دیکھنا بھی دلچسپ ہے کہ سیکھنے کے دوران اوسط راستے کی لمبائی کیسے برتاؤ کرتی ہے:
جیسا کہ ہم نے ذکر کیا، سیکھنے کا عمل دریافت اور مسئلے کی جگہ کے ڈھانچے کے بارے میں حاصل کردہ علم کے استحصال کے درمیان توازن ہے۔ ہم نے دیکھا کہ سیکھنے کے نتائج (ایجنٹ کو ہدف تک مختصر راستہ تلاش کرنے کی صلاحیت) بہتر ہوئے ہیں، لیکن یہ بھی دلچسپ ہے کہ سیکھنے کے عمل کے دوران اوسط راستے کی لمبائی کیسے تبدیل ہوتی ہے:
- **اوسط راستے کی لمبائی بڑھتی ہے**۔ شروع میں، اوسط راستے کی لمبائی بڑھتی ہے۔ اس کی وجہ یہ ہے کہ جب ہمیں ماحول کے بارے میں کچھ معلوم نہیں ہوتا، تو ہم ممکنہ طور پر خراب حالتوں، پانی یا بھیڑیے میں پھنس جاتے ہیں۔ جیسے جیسے ہم زیادہ سیکھتے ہیں اور اس علم کو استعمال کرتے ہیں، ہم ماحول کو زیادہ دیر تک دریافت کر سکتے ہیں، لیکن ہمیں ابھی بھی سیبوں کے مقام کا اچھی طرح علم نہیں ہوتا۔
- **اوسط راستے کی لمبائی بڑھتی ہے۔** یہاں ہم دیکھتے ہیں کہ ابتدا میں اوسط راستے کی لمبائی بڑھتی ہے۔ یہ اس لیے ہو سکتا ہے کیونکہ جب ہمیں ماحول کے بارے میں کچھ معلوم نہیں ہوتا، تو ہم اکثر خراب حالتوں، پانی یا بھیڑیا میں پھنس جاتے ہیں۔ جیسے جیسے ہم زیادہ سیکھتے ہیں اور اس معلومات کو استعمال کرنا شروع کرتے ہیں، ہم طویل وقت تک ماحول کی سیر کر سکتے ہیں، لیکن ہمیں اب بھی سیبوں کی جگہ کا مکمل علم نہیں ہوتا۔
- **راستے کی لمبائی کم ہوتی ہے، جیسے جیسے ہم زیادہ سیکھتے ہیں**۔ جب ہم کافی سیکھ لیتے ہیں، تو ایجنٹ کے لیے ہدف حاصل کرنا آسان ہو جاتا ہے، اور راستے کی لمبائی کم ہونے لگتی ہے۔ تاہم، ہم ابھی بھی دریافت کے لیے کھلے ہیں، اس لیے ہم اکثر بہترین راستے سے ہٹ جاتے ہیں اور نئے اختیارات دریافت کرتے ہیں، جس سے راستہ مثالی سے زیادہ لمبا ہو جاتا ہے۔
- **جیسے جیسے ہم زیادہ سیکھتے ہیں، راستے کی لمبائی کم ہوتی ہے۔** جب ہم کافی سیکھ لیتے ہیں، تو ایجنٹ کے لیے مقصد حاصل کرنا آسان ہو جاتا ہے، اور راستے کی لمبائی گھٹنا شروع ہو جاتی ہے۔ البتہ، ہم اب بھی 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) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔
اس سبق میں، ہم ایک لائبریری **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-لرننگ استعمال کرتے ہوئے۔
> پیٹر اور اس کے دوست بھیڑیا سے بچنے کے لیے تخلیقی حل نکالتے ہیں! تصویر از [جین لوپر](https://twitter.com/jenlooper)
ہم توازن برقرار رکھنے کے ایک سادہ ماڈل کو استعمال کریں گے، جسے **کارٹپول** مسئلہ کہا جاتا ہے۔ کارٹپول دنیا میں، ہمارے پاس ایک افقی سلائیڈر ہوتا ہے جو بائیں یا دائیں حرکت کر سکتا ہے، اور مقصد یہ ہے کہ ایک عمودی کھمبے کو سلائیڈر کے اوپر متوازن رکھا جائے۔
اس سبق میں، ہم ایک لائبریری **OpenAI Gym** استعمال کریں گے تاکہ مختلف **ماحولیات** کی نقل (سمولیشن) کی جا سکے۔ آپ اس سبق کا کوڈ مقامی طور پر چلا سکتے ہیں (مثلاً Visual Studio Code سے)، اس صورت میں سمولیشن ایک نئی ونڈو میں کھلے گا۔ جب آن لائن کوڈ چلائیں گے، تو کوڈ میں کچھ ترامیم کی ضرورت ہو سکتی ہے، جیسا کہ [یہاں](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) بیان کیا گیا ہے۔
## OpenAI Gym
پچھلے سبق میں، کھیل کے قواعد اور حالت `Board` کلاس کے ذریعے دی گئی تھی، جسے ہم نے خود بنایا تھا۔ یہاں ہم ایک خاص **سیمولیشن ماحول** استعمال کریں گے، جو بیلنسنگ پول کے پیچھے فزکس کو سیمولیٹ کرے گا۔ ریئنفورسمنٹ لرننگ الگورتھمز کی تربیت کے لیے سب سے مشہور سیمولیشن ماحول کو [Gym](https://gym.openai.com/) کہا جاتا ہے، جسے [OpenAI](https://openai.com/) نے بنایا ہے۔ اس جم کا استعمال کرتے ہوئے ہم مختلف **ماحول** بنا سکتے ہیں، جیسے کہ کارٹ پول سیمولیشن یا اٹاری گیمز۔
پچھلے سبق میں، کھیل کے قواعد اور حالت `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)
1. سیمولیشن کے دوران، ہمیں مشاہدات حاصل کرنے کی ضرورت ہوتی ہے تاکہ فیصلہ کیا جا سکے کہ کیا کرنا ہے۔ درحقیقت، `step` فنکشن موجودہ مشاہدات، ایک انعامی فنکشن، اور `done` فلیگ واپس کرتا ہے جو یہ ظاہر کرتا ہے کہ آیا سیمولیشن جاری رکھنا مناسب ہے یا نہیں: (کوڈ بلاک 4)
1. سمولیشن کے دوران، ہمیں مشاہدات لینے کی ضرورت ہے تاکہ عمل کرنے کا فیصلہ کیا جا سکے۔ حقیقت میں، قدم کا فعل موجودہ مشاہدات، انعامی فعل، اور "ہو گیا" جھنڈا واپس کرتا ہے جو بتاتا ہے کہ آیا سمولیشن جاری رکھنا معنی رکھتا ہے یا نہیں: (کوڈ بلاک 4)
```python
env.reset()
@ -69,7 +89,7 @@ import random
env.close()
```
آپ کو نوٹ بک آؤٹ پٹ میں کچھ اس طرح نظر آئے گا:
آپ کو نوٹ بک آؤٹ پٹ میں کچھ اس طرح کا نتیجہ نظر آئے گا:
سیمولیشن کے ہر قدم پر واپس آنے والا مشاہدہ ویکٹر درج ذیل اقدار پر مشتمل ہوتا ہے:
- کارٹ کی پوزیشن
- کارٹ کی رفتار
- پول کا زاویہ
- پول کی گردش کی شرح
ہر قدم پر واپس آنے والا مشاہداتی ویکٹر درج ذیل مقداریں رکھتا ہے:
- گاڑی کی پوزیشن
- گاڑی کی رفتار
- کھمبے کا زاویہ
- کھمبے کی گردش کی شرح
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)
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 بنانا ہوتا ہے جو یہ بیان
@ -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)
```


اس گراف سے کچھ بھی کہنا ممکن نہیں ہے، کیونکہ اسٹاکاسٹک تربیتی عمل کی نوعیت کی وجہ سے تربیتی سیشنز کی لمبائی بہت مختلف ہوتی ہے۔ اس گراف کو زیادہ معنی دینے کے لیے، ہم تجربات کی ایک سیریز پر **چلتی اوسط** کا حساب لگا سکتے ہیں، مثلاً 100۔ یہ `np.convolve` کا استعمال کرتے ہوئے آسانی سے کیا جا سکتا ہے: (کوڈ بلاک 12)
اس گراف سے کوئی نتیجہ اخذ کرنا مشکل ہے، کیونکہ سٹوکاسٹک تربیتی عمل کی نوعیت کی وجہ سے تربیتی سیشنز کی لمبائی بہت مختلف ہوتی ہے۔ اس گراف کو بہتر سمجھنے کے لیے، ہم تجربات کی ایک سلسلے پر **چلتی اوسط** نکال سکتے ہیں، کہاں کہ 100 تک۔ یہ `np.convolve` سے آسانی سے کیا جا سکتا ہے: (کوڈ بلاک 12)


## ہائپر پیرامیٹرز میں تبدیلی
تربیت کو زیادہ مستحکم بنانے کے لیے، تربیت کے دوران ہمارے کچھ ہائپر پیرامیٹرز کو ایڈجسٹ کرنا سمجھ میں آتا ہے۔ خاص طور پر:
سیکھنے کو زیادہ مستحکم بنانے کے لیے، تربیت کے دوران اپنے کچھ ہائپر پیرامیٹرز کو ایڈجسٹ کرنا منطقی ہے۔ خاص طور پر:
- **سیکھنے کی شرح** `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)
> **کام 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) کے ذریعے ترجمہ کی گئی ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم اس بات سے آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستیاں ہو سکتی ہیں۔ اصل دستاویز اپنے مادری زبان میں مستند ماخذ سمجھی جائے گی۔ حساس معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کی ذمہ داری ہم قبول نہیں کرتے۔
在本课程中,你将开始了解机器学习如何以及正在影响我们的日常生活。即使在现在,系统和模型也参与日常决策任务,比如医疗诊断、贷款审批或欺诈检测。因此,这些模型能够良好运行并提供可信结果是非常重要的。就像任何软件应用一样,AI 系统也可能未达到预期或产生不良后果。这就是为什么理解和解释 AI 模型行为至关重要。
想象一下当你用来构建这些模型的数据缺少某些人口统计信息,如种族、性别、政治观点、宗教,或不成比例地代表这些人口群体时会发生什么?如果模型输出被解释为偏向某些人口群体会怎样?应用会有什么后果?此外,当模型出现负面结果并对人们造成伤害时,又会怎样?谁对 AI 系统的行为负责?这些是我们将在本课程中探讨的一些问题。
AI 系统应公平对待每个人,并避免对相似群体的人采取不同的影响。例如,当 AI 系统为医疗治疗、贷款申请或就业提供指导时,应对具有类似症状、财务状况或职业资格的每个人做出相同的推荐。作为人类,我们都带有影响我们决策和行为的固有偏见。这些偏见可能在我们用来训练 AI 系统的数据中显现出来。这种操控有时是无意的。要有意识地知道何时在数据中引入偏见通常是困难的。
为建立信任,AI 系统需要在正常和异常情况下可靠、安全且一致。重要的是了解 AI 系统在各种情况下,尤其是异常情况下的表现。当构建 AI 解决方案时,必须重点关注如何处理 AI 解决方案可能遇到的各种情况。例如,自动驾驶汽车必须将人们的安全作为首要任务。因此,驱动汽车的 AI 需要考虑汽车可能遇到的所有场景,比如夜晚、雷暴或暴风雪、街上奔跑的孩子、宠物、道路施工等。AI 系统在各种条件下能多好地可靠安全地运行,反映了数据科学家或 AI 开发人员在设计或测试系统时的预见程度。
AI 系统应设计为能够吸引并赋能所有人。在设计和实施 AI 系统时,数据科学家和 AI 开发人员会识别并解决系统中可能无意间排斥特定人群的障碍。例如,全球有 10 亿残疾人。随着 AI 进步,他们可以更容易地在日常生活中访问各种信息和机会。通过解决这些障碍,创造机会创新并开发出更好体验的 AI 产品,造福所有人。
AI 系统应安全可靠并尊重人们的隐私。人们对可能危及其隐私、信息或生命安全的系统信任较低。在训练机器学习模型时,我们依赖数据以获取最佳结果。在此过程中,必须考虑数据的来源和完整性。例如,数据是用户提交的还是公开可用的?其次,在处理数据时,开发 AI 系统保护机密信息、抵御攻击至关重要。随着 AI 更加普及,保护隐私和重要个人及商业信息的安全变得越发关键且复杂。隐私和数据安全问题对 AI 尤为重要,因为 AI 需要访问数据才能对人们做出准确且有信息支持的预测和决策。
AI 系统应当易于理解。透明度的关键部分是解释 AI 系统及其组件的行为。提升对 AI 系统的理解要求利益相关者明白它们如何以及为何工作,这样能识别潜在的性能问题、安全与隐私担忧、偏见、排他性做法或意外结果。我们还认为,使用 AI 系统的人应坦诚公开何时、为何及如何选择部署它们,以及所用系统的局限性。例如,银行若使用 AI 系统支持其消费贷款决策,重要的是审查结果并了解哪些数据影响系统建议。政府正开始对行业中的 AI 进行监管,因此数据科学家和组织必须解释 AI 系统是否符合监管要求,尤其当出现不良结果时。
设计和部署 AI 系统的人必须对其系统的运行负责。对于诸如面部识别这样的敏感技术,问责制尤为重要。最近,对面部识别技术的需求增长,特别是在执法机构中,他们看到这项技术在寻找失踪儿童等用途的潜力。然而,政府可能利用这些技术威胁公民的基本自由,如启用对特定个人的持续监控。因此,数据科学家和组织需要对其 AI 系统对个人或社会的影响负责。
[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "微软的负责任 AI 方法")
类似于调试软件应用,调试 AI 系统是识别和解决系统中问题的必要过程。许多因素可能导致模型未按预期或负责任地运行。大多数传统模型性能指标是模型表现的定量汇总,但不足以分析模型如何违反负责任 AI 原则。另外,机器学习模型是黑盒子,难以理解其输出背后的驱动因素,也难以在出现错误时解释。后续课程中,我们将学习如何使用负责任 AI 仪表盘帮助调试 AI 系统。该仪表盘为数据科学家和 AI 开发人员提供全面的工具来执行:
[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: An open-source framework for building responsible AI")
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 开发。
✅ 思考一下数据与回归目标之间的关系。线性回归预测特征 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)吗?考虑该目标,数据集展示了什么?
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 轴表示假正例率。”因此,曲线的陡峭程度以及中间线与曲线之间的空间很重要:你想要一条快速上升并越过这条线的曲线。在我们的例子中,起始处存在假正例,然后曲线正常上升并且越过了那条线: